소스 검색

分销新增功能页面、返回按钮封装全局暴露 -zzx

学习?学个屁 6 달 전
부모
커밋
39c706e5be

+ 2 - 2
config/dev.env.js

@@ -4,6 +4,6 @@ const prodEnv = require('./prod.env')
 
 module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
-  // BASE_API: '"http://192.168.110.241:9120/zs/channel/admin"'
-  BASE_API: '"http://192.168.2.13:9120/zs/channel/admin"'
+  BASE_API: '"http://192.168.110.241:9120/zs/channel/admin"'
+  // BASE_API: '"http://192.168.2.13:9120/zs/channel/admin"'
 })

+ 1 - 0
config/prod.env.js

@@ -2,4 +2,5 @@
 module.exports = {
   NODE_ENV: '"production"',
   BASE_API: '"http://channel.admin.dev.zonelife.cn/zs/channel/admin"'
+  // BASE_API: '"https://channel-api.zonelife.cn/zs/channel/admin"'
 }

BIN
src/assets/images/canvasTest.jpg


BIN
src/assets/images/qrCode_bg.jpg


+ 13 - 0
src/components/backButton/index.vue

@@ -0,0 +1,13 @@
+<template>
+    <el-button size="small" type="primary" plain icon="el-icon-back" @click="comeBack">返回</el-button>
+</template>
+<script>
+export default {
+  name: 'backButton',
+  methods: {
+    comeBack() {
+      this.$router.back();
+    }
+  }
+};
+</script>

+ 2 - 0
src/main.js

@@ -6,6 +6,7 @@ import ElementUI from 'element-ui'
 import 'element-ui/lib/theme-chalk/index.css'
 import locale from 'element-ui/lib/locale/lang/zh-CN' // lang i18n
 import VCharts from 'v-charts'
+import backButton from './components/BackButton/index.vue';
 
 import '@/styles/index.scss' // global css
 
@@ -18,6 +19,7 @@ import '@/permission' // permission control
 
 Vue.use(ElementUI, { locale })
 Vue.use(VCharts)
+Vue.component('backButton', backButton);
 
 Vue.config.productionTip = false
 

+ 21 - 0
src/router/index.js

@@ -94,6 +94,27 @@ export const asyncRouterMap = [
       meta: {title: '下级查看', icon: 'peopleChannel'},
       hidden: true
     },
+    {
+      path: 'setCommission',
+      name: 'setCommission',
+      component: () => import('@/views/distribution/peopleManage/setCommission'),
+      meta: {title: '分销佣金设置', icon: 'peopleChannel'},
+      hidden: true
+    },
+    {
+      path: 'settingsPrice',
+      name: 'settingsPrice',
+      component: () => import('@/views/distribution/peopleManage/settingsPrice'),
+      meta: {title: '代理价设置', icon: 'peopleChannel'},
+      hidden: true
+    },
+    {
+      path: 'firstSetPrice',
+      name: 'firstSetPrice',
+      component: () => import('@/views/distribution/peopleManage/firstSetPrice'),
+      meta: {title: '代理价设置', icon: 'peopleChannel'},
+      hidden: true
+    },
     {
       path: 'statistics',
       name: 'statistics',

+ 3 - 1
src/store/index.js

@@ -3,6 +3,7 @@ import Vuex from 'vuex'
 import app from './modules/app'
 import user from './modules/user'
 import permission from './modules/permission'
+import cacheModule from './modules/cache';
 import getters from './getters'
 
 Vue.use(Vuex)
@@ -11,7 +12,8 @@ const store = new Vuex.Store({
   modules: {
     app,
     user,
-    permission
+    permission,
+    cache: cacheModule
   },
   getters
 })

+ 36 - 0
src/store/modules/cache.js

@@ -0,0 +1,36 @@
+// 引入localStorage
+const state = {
+  cachedData: JSON.parse(localStorage.getItem("cachedData")) || {},
+  isAdmin: parseInt(localStorage.getItem("isAdmin")) || null,
+};
+
+const mutations = {
+  setCachedData(state, data) {
+    state.cachedData = data;
+    localStorage.setItem("cachedData", JSON.stringify(data));
+  },
+  setIsAdmin(state, isAdmin) {
+    if (isAdmin === null) {
+        state.isAdmin = null;
+        localStorage.removeItem('isAdmin');
+    } else {
+        state.isAdmin = parseInt(isAdmin);
+        localStorage.setItem('isAdmin', isAdmin.toString());
+    }
+},
+
+};
+
+// 取
+const getters = {
+  getIsAdmin: (state) => {
+    return state.isAdmin;
+}
+};
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  getters,
+};

+ 63 - 55
src/store/modules/user.js

@@ -1,89 +1,97 @@
-import { login, logout, getInfo } from '@/api/login'
-import { getToken, setToken, removeToken } from '@/utils/auth'
-
+import { login, logout, getInfo } from "@/api/login";
+import { getToken, setToken, removeToken } from "@/utils/auth";
+import { mapMutations } from "vuex";
 const user = {
   state: {
     token: getToken(),
-    name: '',
-    avatar: '',
-    roles: []
+    name: "",
+    avatar: "",
+    roles: [],
   },
 
   mutations: {
     SET_TOKEN: (state, token) => {
-      state.token = token
+      state.token = token;
     },
     SET_NAME: (state, name) => {
-      state.name = name
+      state.name = name;
     },
     SET_AVATAR: (state, avatar) => {
-      state.avatar = avatar
+      state.avatar = avatar;
     },
     SET_ROLES: (state, roles) => {
-      state.roles = roles
-    }
+      state.roles = roles;
+    },
   },
 
   actions: {
     // 登录
     Login({ commit }, userInfo) {
-      const username = userInfo.username.trim()
+      const username = userInfo.username.trim();
       return new Promise((resolve, reject) => {
-        login(username, userInfo.password).then(response => {
-          const data = response.data
-          const tokenStr = data.tokenHead+data.token
-          setToken(tokenStr)
-          commit('SET_TOKEN', tokenStr)
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        login(username, userInfo.password)
+          .then((response) => {
+            const data = response.data;
+            const tokenStr = data.tokenHead + data.token;
+            setToken(tokenStr);
+            commit("SET_TOKEN", tokenStr);
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
 
     // 获取用户信息
     GetInfo({ commit, state }) {
       return new Promise((resolve, reject) => {
-        getInfo().then(response => {
-          const data = response.data
-          localStorage.setItem("isAdmin",data.type);
-          if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
-            commit('SET_ROLES', data.roles)
-          } else {
-            reject('getInfo: roles must be a non-null array !')
-          }
-          commit('SET_NAME', data.username)
-          commit('SET_AVATAR', data.icon)
-          resolve(response)
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        getInfo()
+          .then((response) => {
+            const data = response.data;
+            commit('cache/setIsAdmin', data.type);
+            if (data.roles && data.roles.length > 0) {
+              // 验证返回的roles是否是一个非空数组
+              commit("SET_ROLES", data.roles);
+            } else {
+              reject("getInfo: roles must be a non-null array !");
+            }
+            commit("SET_NAME", data.username);
+            commit("SET_AVATAR", data.icon);
+            resolve(response);
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
 
     // 登出
     LogOut({ commit, state }) {
       return new Promise((resolve, reject) => {
-        logout(state.token).then(() => {
-          commit('SET_TOKEN', '')
-          commit('SET_ROLES', [])
-          removeToken()
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        logout(state.token)
+          .then(() => {
+            commit("SET_TOKEN", "");
+            commit("SET_ROLES", []);
+            commit('cache/setIsAdmin', null);
+            removeToken();
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
 
     // 前端 登出
     FedLogOut({ commit }) {
-      return new Promise(resolve => {
-        commit('SET_TOKEN', '')
-        removeToken()
-        resolve()
-      })
-    }
-  }
-}
+      return new Promise((resolve) => {
+        commit("SET_TOKEN", "");
+        removeToken();
+        resolve();
+      });
+    },
+  },
+};
 
-export default user
+export default user;

+ 1 - 1
src/views/channel/info/index.vue

@@ -25,7 +25,7 @@
             <el-input v-model="listQuery.ecName" class="input-width" placeholder="请输入渠道名称" clearable></el-input>
           </el-form-item>
           <el-form-item label="创建时间:">
-            <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd" class="item-width-350 ml10"
+            <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd HH:mm:ss" class="item-width-350 ml10"
               type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
             </el-date-picker>
           </el-form-item>

+ 4 - 3
src/views/channel/upCheck/index.vue

@@ -26,7 +26,7 @@
                             clearable></el-input>
                     </el-form-item>
                     <el-form-item label="操作时间:">
-                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
@@ -44,7 +44,8 @@
                 <el-table-column label="渠道名称" align="center" prop="ecName"></el-table-column>
                 <el-table-column label="渠道上账金额/元" align="center">
                     <template slot-scope="scope">
-                        {{ scope.row.money||"--" }}
+                        <span v-if="scope.row.type==1">{{ scope.row.money||"--" }}</span>
+                        <span v-if="scope.row.type==2">{{ '-'+scope.row.money||"--" }}</span>
                     </template>
                 </el-table-column>
                 <!-- <el-table-column label="凭证" align="center" prop="updateBy">
@@ -53,7 +54,7 @@
                     </template>
                 </el-table-column> -->
                 <el-table-column label="操作人" align="center" prop="updateBy"></el-table-column>
-                <el-table-column label="操作时间" width="160" align="center" prop="updateTime"></el-table-column>
+                <el-table-column label="操作时间" width="160" align="center" prop="createTime"></el-table-column>
             </el-table>
         </div>
         <div class="pagination-container">

+ 41 - 29
src/views/channel/useCondition/index.vue

@@ -170,7 +170,8 @@ export default {
             allRoleList: [],
             allocAdminId: null,
             rules: {
-                money: [{ required: true, message: "请输入金额", trigger: "blur" }],
+                money: [{ required: true, message: "请输入金额", trigger: "blur" },
+                { validator: this.handleInput, trigger: 'blur' }],
             },
         };
     },
@@ -188,6 +189,13 @@ export default {
         },
     },
     methods: {
+        handleInput(rule, value, callback) {
+            if (value < 0) {
+                callback(new Error('请输入正数'));
+            } else {
+                callback();
+            }
+        },
         //函数
         getUrl(getUrl) {
             this.upImg = getUrl;
@@ -260,35 +268,39 @@ export default {
         },
 
         handleDialogConfirm() {
-            this.$confirm("是否要确认?", "提示", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning",
-            }).then(() => {
-                let updateData = {
-                    money: this.admin.money,
-                    thirdPartyInfoId: this.admin.thirdPartyId,
-                    type: this.isEdit == true ? 1 : 2,
-                    voucherPic: this.upImg,
-                };
-                upTheAccount({ ...updateData }).then((response) => {
-                    if (response.code == 200) {
-                        this.$message({
-                            message: this.isEdit == true ? "上账成功!" : "结算成功!",
-                            type: "success",
-                        });
-                        this.fileList = [];
-                        this.$refs["adminForm"].resetFields();
-                        this.dialogVisible = false;
-                        this.getList();
-                    } else {
-                        this.$message({
-                            message: response.msg,
-                            type: "error",
+            this.$refs.admin.validate(valid => {
+                if (valid) {
+                    this.$confirm("是否要确认?", "提示", {
+                        confirmButtonText: "确定",
+                        cancelButtonText: "取消",
+                        type: "warning",
+                    }).then(() => {
+                        let updateData = {
+                            money: this.admin.money,
+                            thirdPartyInfoId: this.admin.thirdPartyId,
+                            type: this.isEdit == true ? 1 : 2,
+                            voucherPic: this.upImg,
+                        };
+                        upTheAccount({ ...updateData }).then((response) => {
+                            if (response.code == 200) {
+                                this.$message({
+                                    message: this.isEdit == true ? "上账成功!" : "结算成功!",
+                                    type: "success",
+                                });
+                                this.fileList = [];
+                                this.$refs["adminForm"].resetFields();
+                                this.dialogVisible = false;
+                                this.getList();
+                            } else {
+                                this.$message({
+                                    message: response.msg,
+                                    type: "error",
+                                });
+                            }
                         });
-                    }
-                });
-            });
+                    });
+                }
+            })
         },
         getList() {
             this.listLoading = true;

+ 3 - 8
src/views/distribution/changePwd/index.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="app-container">
         <el-card class="filter-container" shadow="hover">
-            <el-button size="small" type="info" icon="el-icon-back" @click="comeBack">返回</el-button>
+            <back-button></back-button>
         </el-card>
         <el-card class="filter-container" style="margin-top: 20px;" shadow="hover">
             <el-form :model="admin" ref="admin" label-width="150px" :rules="rules" size="small">
@@ -16,11 +16,11 @@
                         style="width: 250px"></el-input>
                 </el-form-item>
                 <el-form-item label="新密码:" prop="pwd">
-                    <el-input v-model="admin.pwd" clearable placeholder="请输入新密码" type="number" number
+                    <el-input v-model="admin.pwd" clearable placeholder="请输入新密码" type="" number
                         style="width: 250px"></el-input>
                 </el-form-item>
                 <el-form-item label="确认密码:" prop="newPassword">
-                    <el-input v-model="admin.newPassword" clearable placeholder="请确认密码" type="number" number
+                    <el-input v-model="admin.newPassword" clearable placeholder="请确认密码" type="" number
                         style="width: 250px"></el-input>
                 </el-form-item>
             </el-form>
@@ -66,11 +66,6 @@ export default {
     computed: {
     },
     methods: {
-        // 返回上一级
-        comeBack() {
-            this.$router.back()
-        },
-
         submitForm() {
             let data = {
                 oldPassword: this.admin.oldPassword,

+ 7 - 5
src/views/distribution/distributionSet/index.vue

@@ -7,8 +7,8 @@
  * @LastEditTime: 2024-11-20 16:32:51
 -->
 <template>
-    <div class="app-container">
-        <el-card class="filter-container" shadow="hover">
+    <div>
+        <el-card class="form-container" shadow="hover">
             <el-form :model="admin" ref="admin" label-width="150px" :rules="rules" size="small">
                 <div class="blSet">
                     <h4>返佣比例设置</h4>
@@ -81,7 +81,9 @@ export default {
                 firstLevel: [{ required: true, message: '请输入一级返佣比例', trigger: 'blur' },
                 { pattern: /^\d+(\.\d{0,2})?$/, message: '最多保留两位小数', trigger: 'blur' },
                 {validator:this.handleInput, trigger: 'blur'}],
-                secondLevel: [{ required: true, message: '请输入二级返佣比例', trigger: 'blur' }, { pattern: /^\d+(\.\d{0,2})?$/, message: '最多保留两位小数', trigger: 'blur' }],
+                secondLevel: [{ required: true, message: '请输入二级返佣比例', trigger: 'blur' },
+                { pattern: /^\d+(\.\d{0,2})?$/, message: '最多保留两位小数', trigger: 'blur' },
+                {validator:this.handleInput, trigger: 'blur'}],
                 maxUserCount: [{ required: true, message: '请输入人数限制', trigger: 'blur' }],
             },
         }
@@ -93,8 +95,8 @@ export default {
     },
     methods: {
         handleInput(rule, value, callback) {
-            if (value<=0) {
-                callback(new Error('一级返佣比例必须大于0'));
+            if (value<=0||value>100) {
+                callback(new Error('比例必须在0-100之间'));
             }else{
                 callback();
             }

+ 29 - 6
src/views/distribution/finance/index.vue

@@ -29,13 +29,13 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item label="提现时间:">
-                        <el-date-picker v-model="txDate" size="mini" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="txDate" size="mini" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
                     </el-form-item>
                     <el-form-item label="结算时间:">
-                        <el-date-picker v-model="colseDate" size="mini" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="colseDate" size="mini" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
@@ -50,16 +50,26 @@
                     <span>数据列表</span>
                 </div>
                 <div>
-                    <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer"
+                    <el-button class="ml10" type="info" size="small" :disabled="exportDisabled" :loading="downloadLoading" icon="el-icon-printer"
                         @click="exportAllExcel">导出</el-button>
                 </div>
             </div>
         </el-card>
         <div class="table-container">
             <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="listLoading" border>
+                <el-table-column label="分销员" align="center">
+                    <template slot-scope="scope">
+                    <span>{{ scope.row.userName || '--' }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="分销员手机号" align="center">
+                    <template slot-scope="scope">
+                    <span>{{ scope.row.phone || '--' }}</span>
+                    </template>
+                </el-table-column>
                 <el-table-column label="结算金额(直属用户)/元" align="center">
                     <template slot-scope="scope">
-                    <span>{{ scope.row.firstMoney || '--' }}</span>
+                    <span  class="pushRecords" @click="pushRecords(scope.row)">{{ scope.row.firstMoney || '--' }}</span>
                     </template>
                 </el-table-column>
                 <el-table-column label="结算金额(下级分销)/元" align="center">
@@ -69,7 +79,7 @@
                 </el-table-column>
                 <el-table-column label="结算金额(总额)/元" align="center">
                     <template slot-scope="scope">
-                    <span class="pushRecords" @click="pushRecords(scope.row)">{{ scope.row.money || '--' }}</span>
+                    <span>{{ scope.row.money || '--' }}</span>
                     </template>
                 </el-table-column>
                 <el-table-column label="结算状态" align="center">
@@ -110,6 +120,7 @@ export default {
         return {
             colseDate: '',
             txDate: '',
+            exportDisabled: false,
             downloadLoading: false,
             listQuery: Object.assign({}, defaultListQuery),
             list: null,
@@ -194,7 +205,14 @@ export default {
         exportExcel(r) {
             const data = r.map((item) => {
                 return {
-                    "结算金额/元": item.money,
+                    "姓名": item.userName||'--',
+                    "手机号": item.phone||'--',
+                    "结算金额(直属用户)/元": item.firstMoney||'--',
+                    "结算金额(下级分销)/元": item.secondMoney||'--',
+                    "身份证号": item.card||'--',
+                    "银行卡号":item.bankCard||'--',
+                    "开户行": item.depositBank||'--',
+                    "结算金额/元": item.money||'--',
                     "结算状态": item.status == 2 ? "已结算" : "待结算",
                     "提现时间": item.withdrawTime,
                     "结算时间": item.settleTime,
@@ -231,6 +249,11 @@ export default {
                 this.listLoading = false;
                 this.list = response.data.list;
                 this.total = response.data.total;
+                if(this.list.length<=0){
+                    this.exportDisabled = true
+                }else{
+                    this.exportDisabled = false
+                }
             });
         },
     },

+ 114 - 0
src/views/distribution/peopleManage/firstSetPrice.vue

@@ -0,0 +1,114 @@
+<!--
+ * @Descripttion: 设置代理价
+ * @version: 1.0
+ * @Author: zzx
+ * @Date: 2024-11-27 16:08:16
+ * @LastEditors: zzx tigerzouzx@foxmail.com
+ * @LastEditTime: 2024-11-28 18:00
+-->
+<template>
+    <div class="app-container">
+        <el-card class="operate-container" shadow="hover">
+            <div style="
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+        ">
+                <div style="display: flex; align-items: center">
+                    <div>
+                        <i class="el-icon-tickets"></i>
+                        <span>数据列表</span>
+                    </div>
+                    <div style="margin-left: 20px">
+                        <el-descriptions class="margin-top" :column="3" size="medium" border>
+                            <el-descriptions-item>
+                                <template slot="label"> 电站 </template>
+                                花果园立交南广场停车场
+                            </el-descriptions-item>
+                        </el-descriptions>
+                    </div>
+                </div>
+                <div>
+                    <back-button></back-button>
+                </div>
+            </div>
+        </el-card>
+        <div class="table-container">
+            <el-table ref="adminTable" :data="dialogList" style="width: 100%" v-loading="dialogListLoading" border>
+                <el-table-column label="时间段" align="center"></el-table-column>
+                <el-table-column label="销售合计价(元)" align="center"></el-table-column>
+                <el-table-column label="一级代理价(元)" align="center" v-if="isAdmin!=3"></el-table-column>
+                <el-table-column label="二级代理价(元)" align="center"></el-table-column>
+                <el-table-column label="操作" width="350" align="center" v-if="isAdmin!=3">
+                    <template slot-scope="scope">
+                        <el-button size="mini" type="primary" plain
+                            @click="settingsPrice(scope.row)">设置代理价(元)</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <el-dialog title="代理价设置" :visible.sync="forbiddenDialogVisible" width="30%">
+            <el-form :model="forbiddenForm" label-width="120px">
+                <el-form-item label="二级代理价(元)">
+                    <el-input v-model="forbiddenForm.name" size="small" placeholder="请输入二级代理价"></el-input>
+                </el-form-item>
+            </el-form>
+
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="forbiddenDialogVisible = false">取 消</el-button>
+                <el-button type="primary" @click="confirmForbidden">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import { userList, settingType } from "@/api/distribution";
+const defaultListQuery = {
+    pageNum: 1,
+    pageSize: 10,
+    userId: null,
+    nickName: null,
+    phone: null,
+};
+export default {
+    name: "firstSetPrice",
+    data() {
+        return {
+            isAdmin:null,
+            listQuery: Object.assign({}, defaultListQuery),
+            forbiddenForm:{},
+            dialogList: [
+                {
+                    name: "电费",
+                },
+            ],
+            dialogListLoading: false,
+            total: null,
+            forbiddenDialogVisible: false,
+        };
+    },
+    watch: {},
+    created() {
+        this.isAdmin= localStorage.getItem("isAdmin");
+        this.getList();
+    },
+    methods: {
+        // 设置分销
+        settingsPrice(idnex, row) {
+            this.forbiddenDialogVisible = true;
+        },
+        confirmForbidden(){
+
+        },
+        getList() {
+            this.dialogListLoading = true;
+            userList(this.dialogListQuery).then((response) => {
+                this.dialogListLoading = false;
+                this.dialogList = response.data.list;
+                this.dialogTotal = response.data.total;
+            });
+        },
+    },
+};
+</script>
+<style scoped></style>

+ 88 - 45
src/views/distribution/peopleManage/index.vue

@@ -37,9 +37,9 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item label="更新时间:">
-                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd"
-                            class="item-width-350 ml10" type="datetimerange" range-separator="至"
-                            start-placeholder="开始日期" end-placeholder="结束日期">
+                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd HH:mm:ss"
+                            class="item-width-350 ml10" type="datetimerange" range-separator="至" start-placeholder="开始日期"
+                            end-placeholder="结束日期">
                         </el-date-picker>
                     </el-form-item>
                 </el-form>
@@ -52,7 +52,11 @@
         <div class="table-container">
             <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="listLoading" border>
                 <el-table-column label="分销员编号" width="100" align="center" prop="number"></el-table-column>
-                <el-table-column label="分销员姓名" align="center" prop="userName"></el-table-column>
+                <el-table-column label="分销员姓名" align="center">
+                    <template slot-scope="scope">
+                        {{ scope.row.userName }}
+                    </template>
+                </el-table-column>
                 <el-table-column label="分销员层级" align="center">
                     <template slot-scope="scope">
                         <el-tag v-if="scope.row.type == 1 || scope.row.type == null" type="info">普通用户</el-tag>
@@ -64,17 +68,20 @@
                 <el-table-column label="身份证号码" align="center" prop="card"></el-table-column>
                 <el-table-column label="银行卡号" align="center" prop="bankCard"></el-table-column>
                 <el-table-column label="开户行" align="center" prop="depositBank"></el-table-column>
-                <el-table-column label="佣金比例%" align="center" prop="level"></el-table-column>
+                <!-- <el-table-column label="佣金比例%" align="center" prop="level"></el-table-column> -->
                 <el-table-column label="更新人" align="center" prop="updateBy"></el-table-column>
                 <el-table-column label="更新时间" align="center" prop="updateTime"></el-table-column>
-                <el-table-column label="操作" width="300" align="center">
+                <el-table-column label="操作" width="400" align="center">
                     <template slot-scope="scope">
                         <el-button size="mini" type="primary" plain @click="checkQrCode(scope.row)">
                             查看二维码</el-button>
                         <el-button size="mini" type="success" plain
                             @click="checkJunior(scope.$index, scope.row)">查看下级</el-button>
-                        <el-button size="mini" v-if="scope.row.isSelf == 1" type="info" plain
+                        <el-button :disabled="scope.row.isWithdraw==0?isWithdraw=false:isWithdraw=true" size="mini" v-if="scope.row.isSelf == 1" type="info" plain
                             @click="userEdit(scope.row)">编辑</el-button>
+                            <el-button size="mini" v-if="isAdmin!=3" type="warning" plain @click="settingsCommission(scope.row)">
+                                {{ isAdmin!=3?'设置分销佣金':'查看分销佣金' }}
+                            </el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -85,12 +92,13 @@
                 :page-size="listQuery.pageSize" :page-sizes="[10, 15, 20]" :total="total">
             </el-pagination>
         </div>
-        <el-dialog title="编辑分销员" :visible.sync="forbiddenDialogVisible" width="30%">
-            <el-form :model="admin" ref="adminForm" label-width="150px" size="small">
+        <el-dialog title="编辑分销员" :visible.sync="forbiddenDialogVisible" width="40%" :before-close="handleClose">
+            <div class="tips" style="margin-bottom: 20px;margin-left: 52px;">请仔细核对个人信息,提现一次后,则不能进行修改,信息不对,会造成打款失败</div>
+            <el-form :model="admin" ref="adminForm" :rules="rules" label-width="150px" size="small">
                 <el-form-item label="分销员编号:">
                     <el-input disabled v-model="admin.number" style="width: 250px"></el-input>
                 </el-form-item>
-                <el-form-item label="分销员姓名:">
+                <el-form-item label="分销员姓名:" prop="userName">
                     <el-input v-model="admin.userName" style="width: 250px"></el-input>
                 </el-form-item>
                 <el-form-item label="分销员层级:">
@@ -104,13 +112,13 @@
                 <el-form-item label="手机号:">
                     <el-input v-model="admin.phone" disabled type="number" style="width: 250px"></el-input>
                 </el-form-item>
-                <el-form-item label="身份证号码:">
+                <el-form-item label="身份证号码:" prop="card">
                     <el-input v-model="admin.card" type="text" :rows="5" style="width: 250px"></el-input>
                 </el-form-item>
-                <el-form-item label="银行卡号:">
+                <el-form-item label="银行卡号:" prop="bankCard">
                     <el-input v-model="admin.bankCard" type="text" :rows="5" style="width: 250px"></el-input>
                 </el-form-item>
-                <el-form-item label="开户行:">
+                <el-form-item label="开户行:" prop="depositBank">
                     <el-input v-model="admin.depositBank" type="text" :rows="5" style="width: 250px"></el-input>
                 </el-form-item>
                 <el-form-item label="佣金比例:">
@@ -118,7 +126,7 @@
                 </el-form-item>
             </el-form>
             <span slot="footer" class="dialog-footer">
-                <el-button @click="forbiddenDialogVisible = false" size="small">取 消</el-button>
+                <el-button @click="cancelEdit" size="small">取 消</el-button>
                 <el-button type="primary" @click="confirmEdit" size="small">确 定</el-button>
             </span>
         </el-dialog>
@@ -134,7 +142,7 @@
                 </div>
             </div>
             <div style="text-align: center;margin-top: 20px;">
-                <el-button type="success" @click="downloadQrCode" lazy size="mini">下载二维码</el-button>
+                <el-button type="success" @click="downloadQrCode" :loading="downloadingQrCode" lazy size="mini">下载二维码</el-button>
             </div>
         </el-dialog>
     </div>
@@ -143,7 +151,7 @@
 import { peopleList, getQrcode, peopleEdit } from "@/api/distribution";
 import { formatDate } from "@/utils/date";
 import html2canvas from 'html2canvas';
-import qrCode_bg from '@/assets/images/canvasTest.jpg'
+import qrCode_bg from '@/assets/images/qrCode_bg.jpg'
 
 const defaultListQuery = {
     pageNum: 1,
@@ -167,6 +175,8 @@ export default {
     name: "peopleManage",
     data() {
         return {
+            isAdmin: null,
+            isWithdraw: false,
             date: "",
             qrCodeImg: "",
             listQuery: Object.assign({}, defaultListQuery),
@@ -184,6 +194,13 @@ export default {
                 label: '二级'
             }],
             qrCode_bg,
+            downloadingQrCode: false,
+            rules: {
+                userName: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
+                card: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
+                bankCard: [{ required: true, message: '请输入银行卡号', trigger: 'blur' }],
+                depositBank: [{ required: true, message: '请输入开户行', trigger: 'blur' }],
+            }
         };
     },
     watch: {
@@ -198,6 +215,7 @@ export default {
         },
     },
     created() {
+        this.isAdmin = localStorage.getItem("isAdmin");
         this.getList();
     },
     filters: {
@@ -215,24 +233,37 @@ export default {
             this.forbiddenDialogVisible = true;
             this.admin = row;
         },
+        cancelEdit() {
+            this.$refs["adminForm"].resetFields();
+            this.forbiddenDialogVisible = false;
+        },
+        handleClose(){
+            this.$refs["adminForm"].resetFields();
+            this.forbiddenDialogVisible = false;
+        },
         confirmEdit() {
-            let data = {
-                userName: this.admin.userName,
-                adminUserId: this.admin.adminUserId,
-                bankCard: this.admin.bankCard,
-                card: this.admin.card,
-                depositBank: this.admin.depositBank,
-            }
-            peopleEdit({ ...data }).then(res => {
-                if (res.code == 200) {
-                    this.$message({
-                        message: '修改成功',
-                        type: 'success'
-                    });
-                    this.forbiddenDialogVisible = false;
-                    this.getList();
+            this.$refs.adminForm.validate(valid => {
+                if (valid) {
+                    let data = {
+                        userName: this.admin.userName,
+                        adminUserId: this.admin.adminUserId,
+                        bankCard: this.admin.bankCard,
+                        card: this.admin.card,
+                        depositBank: this.admin.depositBank,
+                    }
+                    peopleEdit({ ...data }).then(res => {
+                        if (res.code == 200) {
+                            this.$message({
+                                message: '修改成功',
+                                type: 'success'
+                            });
+                            this.forbiddenDialogVisible = false;
+                            this.getList();
+                        }
+                    })
                 }
             })
+
         },
 
         // 查看二维码
@@ -247,15 +278,19 @@ export default {
 
         // 下载
         downloadQrCode() {
+            this.downloadingQrCode = true;
             const posterContainer = this.$refs.posterContainer;
-            html2canvas(posterContainer).then(canvas => {
+            html2canvas(posterContainer, {
+                scale: 4 // 设置下载图片的分辨率
+            }).then(canvas => {
+                this.downloadingQrCode = false;
                 const dataURL = canvas.toDataURL('image/png');
-                // const a = document.createElement('a');
-                // a.href = dataURL;
-                // a.download = '二维码.jpg'; // 下载后的文件名
-                // document.body.appendChild(a);
-                // a.click();
-                // document.body.removeChild(a);
+                const a = document.createElement('a');
+                a.href = dataURL;
+                a.download = '二维码海报.jpg';
+                document.body.appendChild(a);
+                a.click();
+                document.body.removeChild(a);
             });
         },
 
@@ -268,6 +303,14 @@ export default {
                 },
             });
         },
+        settingsCommission(row){
+            this.$router.push({
+                name: "setCommission",
+                query: {
+                    adminUserId: row.adminUserId,
+                }
+            })
+        },
         handleResetSearch() {
             this.date = ''
             this.listQuery = Object.assign({}, defaultListQuery);
@@ -311,20 +354,20 @@ export default {
 
 .bigImgBox {
     position: relative;
-    width: 200px;
+    width: 260px;
 }
 
 .qrCodeBg {
-    width: 200px;
+    width: 260px;
     height: auto;
+    /* border-radius: 6px; */
 }
 
 .qrCode {
-    width: 140px;
-    height: 140px;
-    border-radius: 6px;
+    width: 100px;
+    height:100px;
     position: absolute;
-    top: 43%;
-    left: 15%;
+    top:233px;
+    left: 80px;
 }
 </style>

+ 10 - 6
src/views/distribution/peopleManage/junior.vue

@@ -9,7 +9,7 @@
 <template>
     <div class="app-container">
         <el-card class="filter-container" shadow="hover">
-            <el-button size="small" type="info" icon="el-icon-back" @click="comeBack">返回</el-button>
+            <back-button></back-button>
         </el-card>
         <div class="table-container">
             <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="juniorListLoading" border>
@@ -34,9 +34,9 @@
                     </template>
                 </el-table-column>
                 <el-table-column label="开户行" align="center" prop="depositBank"></el-table-column>
-                <el-table-column label="佣金比例%" align="center" prop="level">
+                <el-table-column label="操作" align="center" prop="level">
                     <template slot-scope="scope">
-                        {{ scope.row.level ||'--' }}
+                        <el-button size="mini" type="warning" plain @click="settingsCommission(scope.row)">设置分销佣金</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -71,9 +71,13 @@ export default {
         this.getList();
     },
     methods: {
-        // 返回上一级
-        comeBack() {
-            this.$router.back()
+        settingsCommission(row){
+            this.$router.push({
+                name: "setCommission",
+                query: {
+                    adminUserId: row.adminUserId,
+                }
+            })
         },
         juniorhandleSizeChange(val) {
             this.juniorQuery.pageNum = 1;

+ 205 - 0
src/views/distribution/peopleManage/setCommission.vue

@@ -0,0 +1,205 @@
+<!--
+ * @Descripttion: 设置分销佣金
+ * @version: 1.0
+ * @Author: zzx
+ * @Date: 2024-11-27 16:08:16
+ * @LastEditors: zzx tigerzouzx@foxmail.com
+ * @LastEditTime: 2024-11-28 18:00
+-->
+<template>
+    <div class="app-container">
+        <el-card class="filter-container" shadow="hover">
+            <div>
+                <i class="el-icon-search"></i>
+                <span>筛选搜索</span>
+                <el-button style="float: right" type="primary" @click="handleSearchList()" size="small">
+                    查询搜索
+                </el-button>
+                <el-button style="float: right; margin-right: 15px" @click="handleResetSearch()" size="small">
+                    重置
+                </el-button>
+            </div>
+            <div style="margin-top: 15px">
+                <el-form :inline="true" :model="listQuery" size="small" label-width="140px">
+                    <el-form-item label="状态:">
+                        <el-select v-model="listQuery.level" clearable placeholder="请选择">
+                            <el-option v-for="item in options" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="充电站ID:">
+                        <el-input v-model="listQuery.phone" class="input-width" placeholder="请输入充电站ID"
+                            clearable></el-input>
+                    </el-form-item>
+                    <el-form-item label="充电站名称:">
+                        <el-input v-model="listQuery.phone" class="input-width" placeholder="请输入充电站名称"
+                            clearable></el-input>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </el-card>
+        <el-card class="operate-container" shadow="hover">
+            <div style="display: flex;align-items: center;justify-content: space-between;">
+                <div style="display: flex;align-items: center;">
+                    <div>
+                        <i class="el-icon-tickets"></i>
+                        <span>数据列表</span>
+                    </div>
+                    <div style="margin-left:20px;">
+                        <el-descriptions class="margin-top" :column="3" size="medium" border>
+                            <el-descriptions-item>
+                                <template slot="label">
+                                    可设置电站总数
+                                </template>
+                                16
+                            </el-descriptions-item>
+                            <el-descriptions-item>
+                                <template slot="label">
+                                    已设置
+                                </template>
+                                5
+                            </el-descriptions-item>
+                            <el-descriptions-item>
+                                <template slot="label">
+                                    未设置
+                                </template>
+                                11
+                            </el-descriptions-item>
+                        </el-descriptions>
+                    </div>
+                </div>
+                <div>
+                    <back-button></back-button>
+                </div>
+            </div>
+        </el-card>
+        <div class="table-container">
+            <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="listLoading" border>
+                <el-table-column label="充电站ID" width="100" align="center">
+                    <template slot-scope="scope">{{ scope.row.nickName || '--' }}</template>
+                </el-table-column>
+                <el-table-column label="充电站名称" align="center">
+                    <template slot-scope="scope">{{ scope.row.phone || '--' }}</template>
+                </el-table-column>
+                <el-table-column label="所在城市" align="center" prop="updateBy">
+                    <template slot-scope="scope">
+                        <el-tag v-if="scope.row.type == 1 || scope.row.type == null" type="info">普通用户</el-tag>
+                        <el-tag v-else-if="scope.row.type == 2" type="success">一级分销</el-tag>
+                        <el-tag v-else-if="scope.row.type == 3" type="warning">二级分销</el-tag>
+                    </template>
+                </el-table-column>
+                <el-table-column label="设备所属方" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="详细地址" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="场所类型" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="充电终端数量" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="站点状态" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="服务电话" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="更新时间" align="center" prop="createTime"></el-table-column>
+                <el-table-column label="操作" align="center">
+                    <template slot-scope="scope">
+                        <el-button size="mini" v-if="isAdmin==0" type="warning" plain @click="get_settingType(scope.row)">
+                            设置分销佣金(平台)
+                        </el-button>
+                        <el-button v-if="isAdmin==2" size="mini" type="warning" plain @click="settingsFirst(scope.row)">
+                            设置分销佣金(一级)
+                        </el-button>
+                        <el-button v-if="isAdmin==3" size="mini" type="warning" plain @click="settingsFirst(scope.row)">
+                            查看分销佣金(二级)
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div class="pagination-container">
+            <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                layout="total, sizes,prev, pager, next,jumper" :current-page.sync="listQuery.pageNum"
+                :page-size="listQuery.pageSize" :page-sizes="[10, 15, 20]" :total="total">
+            </el-pagination>
+        </div>
+    </div>
+</template>
+<script>
+import { userList, settingType } from "@/api/distribution";
+const defaultListQuery = {
+    pageNum: 1,
+    pageSize: 10,
+    userId: null,
+    nickName: null,
+    phone: null,
+};
+export default {
+    name: "setCommission",
+    data() {
+        return {
+            isAdmin:null,
+            listQuery: Object.assign({}, defaultListQuery),
+            list: null,
+            listLoading: false,
+            total: null,
+            options: [{
+                value: 2,
+                label: '使用中'
+            }, {
+                value: 3,
+                label: '未使用'
+            }],
+        };
+    },
+    watch: {
+
+    },
+    created() {
+        this.isAdmin= localStorage.getItem("isAdmin");
+        this.getList();
+    },
+    methods: {
+        // 设置分销
+        get_settingType(idnex, row) {
+            this.$router.push({
+                name: "settingsPrice",
+                // query: {
+                //     adminUserId: row.adminUserId,
+                // }
+            })
+        },
+        settingsFirst(){
+            this.$router.push({
+                name: "firstSetPrice",
+                // query: {
+                //     adminUserId: row.adminUserId,
+                // }
+            })
+        },
+
+        handleResetSearch() {
+            this.date = ''
+            this.listQuery = Object.assign({}, defaultListQuery);
+        },
+        handleSearchList() {
+            this.listQuery.userId = null
+            this.listQuery.pageNum = 1;
+            this.getList();
+        },
+        handleSizeChange(val) {
+            this.listQuery.pageNum = 1;
+            this.listQuery.pageSize = val;
+            this.getList();
+        },
+        handleCurrentChange(val) {
+            this.listQuery.pageNum = val;
+            this.getList();
+        },
+
+        getList() {
+            this.listLoading = true;
+            userList(this.listQuery).then((response) => {
+                this.listLoading = false;
+                this.list = response.data.list;
+                this.total = response.data.total;
+            });
+        },
+    },
+};
+</script>
+<style scoped></style>

+ 112 - 0
src/views/distribution/peopleManage/settingsPrice.vue

@@ -0,0 +1,112 @@
+<!--
+ * @Descripttion: 设置代理价
+ * @version: 1.0
+ * @Author: zzx
+ * @Date: 2024-11-27 16:08:16
+ * @LastEditors: zzx tigerzouzx@foxmail.com
+ * @LastEditTime: 2024-11-28 18:00
+-->
+<template>
+    <div class="app-container">
+        <el-card class="operate-container" shadow="hover">
+            <div style="
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+        ">
+                <div style="display: flex; align-items: center">
+                    <div>
+                        <i class="el-icon-tickets"></i>
+                        <span>数据列表</span>
+                    </div>
+                    <div style="margin-left: 20px">
+                        <el-descriptions class="margin-top" :column="3" size="medium" border>
+                            <el-descriptions-item>
+                                <template slot="label"> 电站 </template>
+                                花果园立交南广场停车场
+                            </el-descriptions-item>
+                        </el-descriptions>
+                    </div>
+                </div>
+                <div>
+                    <back-button></back-button>
+                </div>
+            </div>
+        </el-card>
+        <div class="table-container">
+            <el-table ref="adminTable" :data="dialogList" style="width: 100%" v-loading="dialogListLoading" border>
+                <el-table-column label="时间段" align="center"></el-table-column>
+                <el-table-column label="电费(元/度)" align="center" prop="name"></el-table-column>
+                <el-table-column label="结算服务费(元)" align="center"></el-table-column>
+                <el-table-column label="结算费合计(元)" align="center"></el-table-column>
+                <el-table-column label="运营服务费(元)" align="center"></el-table-column>
+                <el-table-column label="销售合计价(元)" align="center"></el-table-column>
+                <el-table-column label="一级代理价(元)" align="center"></el-table-column>
+                <el-table-column label="操作" width="350" align="center">
+                    <template slot-scope="scope">
+                        <el-button size="mini" type="primary" plain
+                            @click="settingsPrice(scope.row)">设置代理价(元)</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <el-dialog title="代理价设置" :visible.sync="forbiddenDialogVisible" width="30%">
+            <el-form :model="forbiddenForm" label-width="120px">
+                <el-form-item label="一级代理价(元)">
+                    <el-input v-model="forbiddenForm.name" size="small" placeholder="请输入一级代理价"></el-input>
+                </el-form-item>
+            </el-form>
+
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="forbiddenDialogVisible = false" size="small">取 消</el-button>
+                <el-button type="primary" @click="confirmForbidden" size="small">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import { userList, settingType } from "@/api/distribution";
+const defaultListQuery = {
+    pageNum: 1,
+    pageSize: 10,
+    userId: null,
+    nickName: null,
+    phone: null,
+};
+export default {
+    name: "settingsPrice",
+    data() {
+        return {
+            date: "",
+            listQuery: Object.assign({}, defaultListQuery),
+            forbiddenForm:{},
+            dialogList: null,
+            dialogListLoading: false,
+            total: null,
+            forbiddenDialogVisible: false,
+        };
+    },
+    watch: {},
+    created() {
+        this.getList();
+    },
+    methods: {
+        // 设置分销
+        settingsPrice(idnex, row) {
+            this.forbiddenDialogVisible = true;
+        },
+        confirmForbidden(){
+
+        },
+        getList() {
+            this.dialogListLoading = true;
+            userList(this.dialogListQuery).then((response) => {
+                this.dialogListLoading = false;
+                this.dialogList = response.data.list;
+                this.dialogTotal = response.data.total;
+            });
+        },
+    },
+};
+</script>
+<style scoped></style>

+ 28 - 10
src/views/distribution/records/index.vue

@@ -41,19 +41,19 @@
                             clearable></el-input>
                     </el-form-item>
                     <el-form-item label="完成时间:">
-                        <el-date-picker v-model="completeDate" size="mini" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="completeDate" size="mini" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
                     </el-form-item>
                     <el-form-item label="提现时间:">
-                        <el-date-picker v-model="withdrawDate" size="mini" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="withdrawDate" size="mini" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
                     </el-form-item>
                     <el-form-item label="结算时间:">
-                        <el-date-picker v-model="colseDate" size="mini" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="colseDate" size="mini" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>
@@ -68,9 +68,9 @@
                     <span>数据列表</span>
                 </div>
                 <div>
-                    <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer"
+                    <el-button class="ml10" type="info" size="small" :disabled="exportDisabled" :loading="downloadLoading" icon="el-icon-printer"
                         @click="exportAllExcel">导出</el-button>
-                    <el-button class="ml10" type="warning" size="small" :loading="updateLoading" icon="el-icon-success"
+                    <el-button class="ml10" v-if="isAdmin==0" type="warning" :disabled="disabled" size="small" :loading="updateLoading" icon="el-icon-success"
                         @click="financeStatus">财务已结算</el-button>
                 </div>
             </div>
@@ -79,7 +79,7 @@
             <el-table ref="adminTable" :data="list" style="width: 100%" v-loading="listLoading" border>
                 <el-table-column label="充电订单编号" width="100" align="center" prop="chargeOrderNo"></el-table-column>
                 <el-table-column label="订单金额/元" align="center" prop="realCost"></el-table-column>
-                <el-table-column label="服务费金额/元" align="center" prop="realServiceCost"></el-table-column>
+                <!-- <el-table-column label="服务费金额/元" align="center" prop="realServiceCost"></el-table-column> -->
                 <el-table-column label="订单完成时间" align="center" prop="endTime"></el-table-column>
                 <el-table-column label="一级分销员" align="center" prop="firstLevelUserName"></el-table-column>
                 <el-table-column label="一级分销员手机号" align="center" prop="firstLevelPhone"></el-table-column>
@@ -154,13 +154,16 @@ export default {
     name: "records",
     data() {
         return {
+            disabled: false,
+            exportDisabled: false,
+            isAdmin: null,
             completeDate: "",
             withdrawDate: "",
             colseDate: "",
             downloadLoading: false,
             updateLoading: false,
             listQuery: Object.assign({}, defaultListQuery),
-            list: null,
+            list:[],
             financeList: [],
             total: null,
             listLoading: false,
@@ -209,6 +212,7 @@ export default {
         },
     },
     created() {
+        this.isAdmin = localStorage.getItem("isAdmin");
         this.getList();
         if (this.$route) {
             this.listQuery.adminUserId = this.$route.query.adminUserId
@@ -277,10 +281,18 @@ export default {
         // 导出数据处理
         exportExcel(r) {
             const data = r.map((item) => {
+                let status = "";
+                if(item.status==0){
+                    status='未提现'
+                }else if(item.status==1){
+                    status='待结算'
+                }else if(item.status==2){
+                    status='已结算'
+                }
                 return {
                     "充电订单编号": item.chargeOrderNo,
                     "订单金额/元": item.realCost,
-                    "服务费金额/元": item.realServiceCost,
+                    // "服务费金额/元": item.realServiceCost,
                     "订单完成时间": item.endTime,
                     "一级分销员": item.firstLevelUserName,
                     "一级分销员手机号": item.firstLevelPhone,
@@ -288,10 +300,9 @@ export default {
                     "二级分销员": item.secondLevelUserName || '--',
                     "二级分销员手机号": item.secondLevelPhone || '--',
                     "二级分销员佣金": item.secondLevelCommission || '--',
-                    "结算状态": item.status == 1 ? '已结算' : '未结算',
+                    "结算状态":status,
                     "提现时间": item.withdrawTime || '--',
                     "结算时间": item.settleTime || '--',
-
                 }
             })
             const worksheet = XLSX.utils.json_to_sheet(data);
@@ -326,6 +337,13 @@ export default {
                 this.listLoading = false;
                 this.list = response.data.list;
                 this.total = response.data.total;
+                if (this.list.length <= 0) {
+                    this.disabled=true
+                    this.exportDisabled = true;
+                }else{
+                    this.disabled=false
+                    this.exportDisabled = false;
+                }
             });
         },
     },

+ 7 - 1
src/views/distribution/statistics/index.vue

@@ -39,7 +39,7 @@
                     <span>数据列表</span>
                     <span class="tips">提现说明:限每月10号-15号提交提现申请,且只能提交一次</span>
                 </div>
-                <el-button class="ml10" type="info" size="small" :loading="downloadLoading" icon="el-icon-printer"
+                <el-button class="ml10" type="info" size="small" :loading="downloadLoading" :disabled="exportDisabled" icon="el-icon-printer"
                     @click="exportAllExcel">导出</el-button>
             </div>
         </el-card>
@@ -114,6 +114,7 @@ export default {
     name: "statistics",
     data() {
         return {
+            exportDisabled: false,
             isAdmin: null,
             downloadLoading: false,
             requestLoading: false,
@@ -243,6 +244,11 @@ export default {
                 this.listLoading = false;
                 this.list = response.data.list;
                 this.total = response.data.total;
+                if(this.list.length <= 0){
+                    this.exportDisabled = true;
+                }else{
+                    this.exportDisabled = false;
+                }
             });
         },
     },

+ 1 - 1
src/views/distribution/userList/index.vue

@@ -30,7 +30,7 @@
                             clearable></el-input>
                     </el-form-item>
                     <el-form-item label="注册时间:">
-                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd"
+                        <el-date-picker v-model="date" size="small" value-format="yyyy-MM-dd HH:mm:ss"
                             class="item-width-350 ml10" type="datetimerange" range-separator="至"
                             start-placeholder="开始日期" end-placeholder="结束日期">
                         </el-date-picker>

+ 1 - 1
src/views/login/index.vue

@@ -88,7 +88,7 @@
       this.loginForm.username = getCookie("username");
       this.loginForm.password = getCookie("password");
       if(this.loginForm.username === undefined||this.loginForm.username==null||this.loginForm.username===''){
-        this.loginForm.username = 'admin';
+        this.loginForm.username = '';
       }
       if(this.loginForm.password === undefined||this.loginForm.password==null){
         this.loginForm.password = '';

+ 13 - 11
src/views/ums/menu/add.vue

@@ -1,14 +1,16 @@
-<template> 
-  <menu-detail :is-edit='false'></menu-detail>
+<template>
+  <div class="app-container">
+    <el-card class="operate-container" shadow="hover">
+      <back-button></back-button>
+    </el-card>
+    <menu-detail :is-edit="false"></menu-detail>
+  </div>
 </template>
 <script>
-  import MenuDetail from './components/MenuDetail'
-  export default {
-    name: 'addMenu',
-    components: { MenuDetail }
-  }
+import MenuDetail from "./components/MenuDetail";
+export default {
+  name: "addMenu",
+  components: { MenuDetail },
+};
 </script>
-<style>
-</style>
-
-
+<style></style>

+ 103 - 129
src/views/ums/menu/index.vue

@@ -2,195 +2,169 @@
   <div class="app-container">
     <el-card class="operate-container" shadow="never">
       <i class="el-icon-tickets" style="margin-top: 5px"></i>
-      <span style="margin-top: 5px">数据列表</span>
-      <el-button
-        class="btn-add"
-        @click="handleAddMenu()"
-        size="mini">
+      <span style="margin-top: 5px;">数据列表</span>
+      <el-button class="btn-add" @click="handleAddMenu()" size="mini">
         添加
       </el-button>
     </el-card>
     <div class="table-container">
-      <el-table ref="menuTable"
-                style="width: 100%"
-                :data="list"
-                v-loading="listLoading" border>
+      <el-table ref="menuTable" style="width: 100%" :data="list" v-loading="listLoading" border>
         <el-table-column label="编号" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.id}}</template>
+          <template slot-scope="scope">{{ scope.row.id }}</template>
         </el-table-column>
         <el-table-column label="菜单名称" align="center">
-          <template slot-scope="scope">{{scope.row.title}}</template>
+          <template slot-scope="scope">{{ scope.row.title }}</template>
         </el-table-column>
         <el-table-column label="菜单级数" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.level | levelFilter}}</template>
+          <template slot-scope="scope">{{ scope.row.level | levelFilter }}</template>
         </el-table-column>
         <el-table-column label="前端名称" align="center">
-          <template slot-scope="scope">{{scope.row.name}}</template>
+          <template slot-scope="scope">{{ scope.row.name }}</template>
         </el-table-column>
         <el-table-column label="前端图标" width="100" align="center">
           <template slot-scope="scope"><svg-icon :icon-class="scope.row.icon"></svg-icon></template>
         </el-table-column>
         <el-table-column label="是否显示" width="100" align="center">
           <template slot-scope="scope">
-            <el-switch
-              @change="handleHiddenChange(scope.$index, scope.row)"
-              :active-value="0"
-              :inactive-value="1"
+            <el-switch @change="handleHiddenChange(scope.$index, scope.row)" :active-value="0" :inactive-value="1"
               v-model="scope.row.hidden">
             </el-switch>
           </template>
         </el-table-column>
         <el-table-column label="排序" width="100" align="center">
-          <template slot-scope="scope">{{scope.row.sort }}</template>
+          <template slot-scope="scope">{{ scope.row.sort }}</template>
         </el-table-column>
         <el-table-column label="设置" width="120" align="center">
           <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              :disabled="scope.row.level | disableNextLevel"
+            <el-button size="mini" type="text" :disabled="scope.row.level | disableNextLevel"
               @click="handleShowNextLevel(scope.$index, scope.row)">查看下级
             </el-button>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="200" align="center">
           <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              @click="handleUpdate(scope.$index, scope.row)">编辑
+            <el-button size="mini" type="text" @click="handleUpdate(scope.$index, scope.row)">编辑
             </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              @click="handleDelete(scope.$index, scope.row)">删除
+            <el-button size="mini" type="text" @click="handleDelete(scope.$index, scope.row)">删除
             </el-button>
           </template>
         </el-table-column>
       </el-table>
     </div>
     <div class="pagination-container">
-      <el-pagination
-        background
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-        layout="total, sizes,prev, pager, next,jumper"
-        :page-size="listQuery.pageSize"
-        :page-sizes="[10,15,20]"
-        :current-page.sync="listQuery.pageNum"
-        :total="total">
+      <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+        layout="total, sizes,prev, pager, next,jumper" :page-size="listQuery.pageSize" :page-sizes="[10, 15, 20]"
+        :current-page.sync="listQuery.pageNum" :total="total">
       </el-pagination>
     </div>
   </div>
 </template>
 
 <script>
-  import {fetchList,deleteMenu,updateMenu,updateHidden} from '@/api/menu'
+import { fetchList, deleteMenu, updateMenu, updateHidden } from '@/api/menu'
 
-  export default {
-    name: "menuList",
-    data() {
-      return {
-        list: null,
-        total: null,
-        listLoading: true,
-        listQuery: {
-          pageNum: 1,
-          pageSize:30
-        },
-        parentId: 0
+export default {
+  name: "menuList",
+  data() {
+    return {
+      list: null,
+      total: null,
+      listLoading: true,
+      listQuery: {
+        pageNum: 1,
+        pageSize: 30
+      },
+      parentId: 0
+    }
+  },
+  created() {
+    this.resetParentId();
+    this.getList();
+  },
+  watch: {
+    $route(route) {
+      this.resetParentId();
+      this.getList();
+    }
+  },
+  methods: {
+    resetParentId() {
+      this.listQuery.pageNum = 1;
+      if (this.$route.query.parentId != null) {
+        this.parentId = this.$route.query.parentId;
+      } else {
+        this.parentId = 0;
       }
     },
-    created() {
-      this.resetParentId();
+    handleAddMenu() {
+      this.$router.push('/ums/addMenu');
+    },
+    getList() {
+      this.listLoading = true;
+      fetchList(this.parentId, this.listQuery).then(response => {
+        this.listLoading = false;
+        this.list = response.data.list;
+        this.total = response.data.total;
+      });
+    },
+    handleSizeChange(val) {
+      this.listQuery.pageNum = 1;
+      this.listQuery.pageSize = val;
       this.getList();
     },
-    watch: {
-      $route(route) {
-        this.resetParentId();
-        this.getList();
-      }
+    handleCurrentChange(val) {
+      this.listQuery.pageNum = val;
+      this.getList();
     },
-    methods: {
-      resetParentId(){
-        this.listQuery.pageNum = 1;
-        if (this.$route.query.parentId != null) {
-          this.parentId = this.$route.query.parentId;
-        } else {
-          this.parentId = 0;
-        }
-      },
-      handleAddMenu() {
-        this.$router.push('/ums/addMenu');
-      },
-      getList() {
-        this.listLoading = true;
-        fetchList(this.parentId, this.listQuery).then(response => {
-          this.listLoading = false;
-          this.list = response.data.list;
-          this.total = response.data.total;
+    handleHiddenChange(index, row) {
+      updateHidden(row.id, { hidden: row.hidden }).then(response => {
+        this.$message({
+          message: '修改成功',
+          type: 'success',
+          duration: 1000
         });
-      },
-      handleSizeChange(val) {
-        this.listQuery.pageNum = 1;
-        this.listQuery.pageSize = val;
-        this.getList();
-      },
-      handleCurrentChange(val) {
-        this.listQuery.pageNum = val;
-        this.getList();
-      },
-      handleHiddenChange(index, row) {
-        updateHidden(row.id,{hidden:row.hidden}).then(response=>{
+      });
+    },
+    handleShowNextLevel(index, row) {
+      this.$router.push({ path: '/ums/menu', query: { parentId: row.id } })
+    },
+    handleUpdate(index, row) {
+      this.$router.push({ path: '/ums/updateMenu', query: { id: row.id } });
+    },
+    handleDelete(index, row) {
+      this.$confirm('是否要删除该菜单', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        deleteMenu(row.id).then(response => {
           this.$message({
-            message: '修改成功',
+            message: '删除成功',
             type: 'success',
             duration: 1000
           });
+          this.getList();
         });
-      },
-      handleShowNextLevel(index, row) {
-        this.$router.push({path: '/ums/menu', query: {parentId: row.id}})
-      },
-      handleUpdate(index, row) {
-        this.$router.push({path:'/ums/updateMenu',query:{id:row.id}});
-      },
-      handleDelete(index, row) {
-        this.$confirm('是否要删除该菜单', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          deleteMenu(row.id).then(response => {
-            this.$message({
-              message: '删除成功',
-              type: 'success',
-              duration: 1000
-            });
-            this.getList();
-          });
-        });
+      });
+    }
+  },
+  filters: {
+    levelFilter(value) {
+      if (value === 0) {
+        return '一级';
+      } else if (value === 1) {
+        return '二级';
       }
     },
-    filters: {
-      levelFilter(value) {
-        if (value === 0) {
-          return '一级';
-        } else if (value === 1) {
-          return '二级';
-        }
-      },
-      disableNextLevel(value) {
-        if (value === 0) {
-          return false;
-        } else {
-          return true;
-        }
+    disableNextLevel(value) {
+      if (value === 0) {
+        return false;
+      } else {
+        return true;
       }
     }
   }
+}
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

+ 6 - 1
src/views/ums/menu/update.vue

@@ -1,5 +1,10 @@
-<template> 
+<template>
+  <div class="app-container">
+    <el-card class="operate-container" shadow="hover">
+      <back-button></back-button>
+    </el-card>
   <menu-detail :is-edit='true'></menu-detail>
+  </div>
 </template>
 <script>
   import MenuDetail from './components/MenuDetail'

+ 82 - 86
src/views/ums/role/allocMenu.vue

@@ -1,101 +1,97 @@
 <template>
-  <el-card class="form-container" shadow="never">
-    <el-tree
-      :data="menuTreeList"
-      show-checkbox
-      default-expand-all
-      node-key="id"
-      ref="tree"
-      highlight-current
-      :props="defaultProps">
-    </el-tree>
-    <div style="margin-top: 20px" align="center">
-      <el-button type="primary" @click="handleSave()">保存</el-button>
-      <el-button @click="handleClear()">清空</el-button>
-    </div>
-
-  </el-card>
+  <div class="app-container">
+    <el-card class="operate-container" shadow="hover">
+      <back-button></back-button>
+    </el-card>
+    <el-card class="form-container" shadow="never">
+      <el-tree :data="menuTreeList" show-checkbox default-expand-all node-key="id" ref="tree" highlight-current
+        :props="defaultProps">
+      </el-tree>
+      <div style="margin-top: 20px" align="center">
+        <el-button type="primary" @click="handleSave()">保存</el-button>
+        <el-button @click="handleClear()">清空</el-button>
+      </div>
+    </el-card>
+  </div>
 </template>
 
 <script>
-  import {fetchTreeList} from '@/api/menu';
-  import {listMenuByRole,allocMenu} from '@/api/role';
+import { fetchTreeList } from '@/api/menu';
+import { listMenuByRole, allocMenu } from '@/api/role';
 
-  export default {
-    name: "allocMenu",
-    data() {
-      return {
-        menuTreeList: [],
-        defaultProps: {
-          children: 'children',
-          label: 'title'
-        },
-        roleId:null
-      };
-    },
-    created() {
-      this.roleId = this.$route.query.roleId;
-      this.treeList();
-      this.getRoleMenu(this.roleId);
-    },
-    methods: {
-      treeList() {
-        fetchTreeList().then(response => {
-          this.menuTreeList = response.data;
-        });
+export default {
+  name: "allocMenu",
+  data() {
+    return {
+      menuTreeList: [],
+      defaultProps: {
+        children: 'children',
+        label: 'title'
       },
-      getRoleMenu(roleId){
-        listMenuByRole(roleId).then(response=>{
-          let menuList = response.data;
-          let checkedMenuIds=[];
-          if(menuList!=null&&menuList.length>0){
-            for(let i=0;i<menuList.length;i++){
-              let menu = menuList[i];
-              if(menu.parentId!==0){
-                checkedMenuIds.push(menu.id);
-              }
+      roleId: null
+    };
+  },
+  created() {
+    this.roleId = this.$route.query.roleId;
+    this.treeList();
+    this.getRoleMenu(this.roleId);
+  },
+  methods: {
+    treeList() {
+      fetchTreeList().then(response => {
+        this.menuTreeList = response.data;
+      });
+    },
+    getRoleMenu(roleId) {
+      listMenuByRole(roleId).then(response => {
+        let menuList = response.data;
+        let checkedMenuIds = [];
+        if (menuList != null && menuList.length > 0) {
+          for (let i = 0; i < menuList.length; i++) {
+            let menu = menuList[i];
+            if (menu.parentId !== 0) {
+              checkedMenuIds.push(menu.id);
             }
           }
-          this.$refs.tree.setCheckedKeys(checkedMenuIds);
-        });
-      },
-      handleSave() {
-        let checkedNodes = this.$refs.tree.getCheckedNodes();
-        let checkedMenuIds=new Set();
-        if(checkedNodes!=null&&checkedNodes.length>0){
-          for(let i=0;i<checkedNodes.length;i++){
-            let checkedNode = checkedNodes[i];
-            checkedMenuIds.add(checkedNode.id);
-            if(checkedNode.parentId!==0){
-              checkedMenuIds.add(checkedNode.parentId);
-            }
+        }
+        this.$refs.tree.setCheckedKeys(checkedMenuIds);
+      });
+    },
+    handleSave() {
+      let checkedNodes = this.$refs.tree.getCheckedNodes();
+      let checkedMenuIds = new Set();
+      if (checkedNodes != null && checkedNodes.length > 0) {
+        for (let i = 0; i < checkedNodes.length; i++) {
+          let checkedNode = checkedNodes[i];
+          checkedMenuIds.add(checkedNode.id);
+          if (checkedNode.parentId !== 0) {
+            checkedMenuIds.add(checkedNode.parentId);
           }
         }
-        this.$confirm('是否分配菜单?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(()=>{
-          let params = new URLSearchParams();
-          params.append("roleId",this.roleId);
-          params.append("menuIds",Array.from(checkedMenuIds));
-          allocMenu(params).then(response => {
-            this.$message({
-              message: '分配成功',
-              type: 'success',
-              duration: 1000
-            });
-            this.$router.back();
-          })
-        })
-      },
-      handleClear() {
-        this.$refs.tree.setCheckedKeys([]);
       }
+      this.$confirm('是否分配菜单?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        let params = new URLSearchParams();
+        params.append("roleId", this.roleId);
+        params.append("menuIds", Array.from(checkedMenuIds));
+        allocMenu(params).then(response => {
+          this.$message({
+            message: '分配成功',
+            type: 'success',
+            duration: 1000
+          });
+          this.$router.back();
+        })
+      })
+    },
+    handleClear() {
+      this.$refs.tree.setCheckedKeys([]);
     }
   }
+}
 </script>
 
-<style scoped>
-
-</style>
+<style scoped></style>

+ 6 - 2
src/views/ums/role/allocResource.vue

@@ -1,5 +1,9 @@
 <template>
-  <el-card class="form-container" shadow="never">
+  <div class="app-container">
+    <el-card class="operate-container" shadow="hover">
+      <back-button></back-button>
+    </el-card>
+    <el-card class="form-container" shadow="never">
     <div v-for="(cate,index) in allResourceCate" :class="index===0?'top-line':null" :key="'cate'+cate.id">
       <el-row class="table-layout" style="background: #F2F6FC;">
         <el-checkbox v-model="cate.checked"
@@ -20,8 +24,8 @@
       <el-button type="primary" @click="handleSave()">保存</el-button>
       <el-button @click="handleClear()">清空</el-button>
     </div>
-
   </el-card>
+  </div>
 </template>
 
 <script>