From 6891837ff8dd0fbf40c892f746a20066d34e2183 Mon Sep 17 00:00:00 2001
From: ‘巴博尔’ <2164119982@qq.com>
Date: Tue, 10 Oct 2023 13:30:11 +0800
Subject: [PATCH] 修改权限

---
 src/api/index.js                   |  18 ++++++++++++++++++
 src/layout/components/Navbar.vue   | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------
 src/store/getters.js               |   9 +++++++++
 src/store/modules/user.js          | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------
 src/views/index.vue                |  13 ++++++++++---
 src/views/user/companion/index.vue | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 6 files changed, 306 insertions(+), 117 deletions(-)

diff --git a/src/api/index.js b/src/api/index.js
index e56ef07..b8f7d29 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -105,3 +105,21 @@ export function switchIdentityPut(data) {
     // data: data,
   });
 }
+
+// 所属商户
+export function companyPlistGet(query) {
+  return request({
+    url: `/merchant/company/Plist`,
+    method: "get",
+    params: query,
+  });
+}
+
+// 设置时间
+export function employeesSetWorkHourPut(data) {
+    return request({
+      url: "/merchant/app/employees/setWorkHour",
+      method: "put",
+      data: data,
+    });
+  }
\ No newline at end of file
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index f56398b..2ab0a58 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -1,12 +1,21 @@
 <template>
   <div class="navbar">
-    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
-
-    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
-    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
+    <hamburger
+      id="hamburger-container"
+      :is-active="sidebar.opened"
+      class="hamburger-container"
+      @toggleClick="toggleSideBar"
+    />
+
+    <breadcrumb
+      id="breadcrumb-container"
+      class="breadcrumb-container"
+      v-if="!topNav"
+    />
+    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
 
     <div class="right-menu">
-      <template v-if="device!=='mobile'">
+      <template v-if="device !== 'mobile'">
         <!-- <search id="header-search" class="right-menu-item" /> -->
 
         <!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">
@@ -22,12 +31,14 @@
         <!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">
           <size-select id="size-select" class="right-menu-item hover-effect" />
         </el-tooltip> -->
-
       </template>
 
-      <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
+      <el-dropdown
+        class="avatar-container right-menu-item hover-effect"
+        trigger="click"
+      >
         <div class="avatar-wrapper">
-          <img :src="avatar" class="user-avatar">
+          <img :src="avatar" class="user-avatar" />
           <i class="el-icon-caret-bottom" />
         </div>
         <el-dropdown-menu slot="dropdown">
@@ -47,15 +58,15 @@
 </template>
 
 <script>
-import { mapGetters } from 'vuex'
-import Breadcrumb from '@/components/Breadcrumb'
-import TopNav from '@/components/TopNav'
-import Hamburger from '@/components/Hamburger'
-import Screenfull from '@/components/Screenfull'
-import SizeSelect from '@/components/SizeSelect'
-import Search from '@/components/HeaderSearch'
-import RuoYiGit from '@/components/RuoYi/Git'
-import RuoYiDoc from '@/components/RuoYi/Doc'
+import { mapGetters } from "vuex";
+import Breadcrumb from "@/components/Breadcrumb";
+import TopNav from "@/components/TopNav";
+import Hamburger from "@/components/Hamburger";
+import Screenfull from "@/components/Screenfull";
+import SizeSelect from "@/components/SizeSelect";
+import Search from "@/components/HeaderSearch";
+import RuoYiGit from "@/components/RuoYi/Git";
+import RuoYiDoc from "@/components/RuoYi/Doc";
 
 export default {
   components: {
@@ -66,48 +77,51 @@ export default {
     SizeSelect,
     Search,
     RuoYiGit,
-    RuoYiDoc
+    RuoYiDoc,
   },
   computed: {
-    ...mapGetters([
-      'sidebar',
-      'avatar',
-      'device'
-    ]),
+    ...mapGetters(["sidebar", "avatar", "device"]),
     setting: {
       get() {
-        return this.$store.state.settings.showSettings
+        return this.$store.state.settings.showSettings;
       },
       set(val) {
-        this.$store.dispatch('settings/changeSetting', {
-          key: 'showSettings',
-          value: val
-        })
-      }
+        this.$store.dispatch("settings/changeSetting", {
+          key: "showSettings",
+          value: val,
+        });
+      },
     },
     topNav: {
       get() {
-        return this.$store.state.settings.topNav
-      }
-    }
+        return this.$store.state.settings.topNav;
+      },
+    },
   },
   methods: {
     toggleSideBar() {
-      this.$store.dispatch('app/toggleSideBar')
+      this.$store.dispatch("app/toggleSideBar");
     },
     async logout() {
-      this.$confirm('确定注销并退出系统吗?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        this.$store.dispatch('LogOut').then(() => {
-          location.href = process.env.VUE_APP_CONTEXT_PATH + "#/index";
+      this.$confirm("确定注销并退出系统吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$store.dispatch("LogOut").then(() => {
+            console.log("process.env.NODE_ENV",process.env.NODE_ENV);
+            if (process.env.NODE_ENV === "development") {
+              location.href = process.env.VUE_APP_CONTEXT_PATH + "index";
+            } else {
+              location.href = process.env.VUE_APP_CONTEXT_PATH + "#/index";
+            }
+          });
         })
-      }).catch(() => {});
-    }
-  }
-}
+        .catch(() => {});
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>
@@ -116,18 +130,18 @@ export default {
   overflow: hidden;
   position: relative;
   background: #fff;
-  box-shadow: 0 1px 4px rgba(0,21,41,.08);
+  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
 
   .hamburger-container {
     line-height: 46px;
     height: 100%;
     float: left;
     cursor: pointer;
-    transition: background .3s;
-    -webkit-tap-highlight-color:transparent;
+    transition: background 0.3s;
+    -webkit-tap-highlight-color: transparent;
 
     &:hover {
-      background: rgba(0, 0, 0, .025)
+      background: rgba(0, 0, 0, 0.025);
     }
   }
 
@@ -164,10 +178,10 @@ export default {
 
       &.hover-effect {
         cursor: pointer;
-        transition: background .3s;
+        transition: background 0.3s;
 
         &:hover {
-          background: rgba(0, 0, 0, .025)
+          background: rgba(0, 0, 0, 0.025);
         }
       }
     }
diff --git a/src/store/getters.js b/src/store/getters.js
index 8adb1b6..599716c 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -1,3 +1,11 @@
+/*
+ * @Author: ‘巴博尔’ 2164119982@qq.com
+ * @Date: 2023-09-07 10:41:27
+ * @LastEditors: ‘巴博尔’ 2164119982@qq.com
+ * @LastEditTime: 2023-10-10 13:22:57
+ * @FilePath: \peizhen-vue\src\store\getters.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
 const getters = {
   sidebar: state => state.app.sidebar,
   size: state => state.app.size,
@@ -8,6 +16,7 @@ const getters = {
   token: state => state.user.token,
   avatar: state => state.user.avatar,
   name: state => state.user.name,
+  user: state => state.user.user,
   introduction: state => state.user.introduction,
   roles: state => state.user.roles,
   permissions: state => state.user.permissions,
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index d67c9a4..3903bc2 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,96 +1,111 @@
-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";
 
 const user = {
   state: {
     token: getToken(),
-    name: '',
-    avatar: '',
+    name: "",
+    avatar: "",
     roles: [],
-    permissions: []
+    permissions: [],
+    user: {},
   },
 
   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;
     },
     SET_PERMISSIONS: (state, permissions) => {
-      state.permissions = permissions
-    }
+      state.permissions = permissions;
+    },
+    SET_USER: (state, user) => {
+      state.user = user;
+    },
   },
 
   actions: {
     // 登录
     Login({ commit }, userInfo) {
-      const username = userInfo.username.trim()
-      const password = userInfo.password
-      const code = userInfo.code
-      const uuid = userInfo.uuid
+      const username = userInfo.username.trim();
+      const password = userInfo.password;
+      const code = userInfo.code;
+      const uuid = userInfo.uuid;
       return new Promise((resolve, reject) => {
-        login(username, password, code, uuid).then(res => {
-          setToken(res.data.token)
-          commit('SET_TOKEN', res.data.token)
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        login(username, password, code, uuid)
+          .then((res) => {
+            setToken(res.data.token);
+            commit("SET_TOKEN", res.data.token);
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
 
     // 获取用户信息
     GetInfo({ commit, state }) {
       return new Promise((resolve, reject) => {
-        getInfo().then(res => {
-          const user = res.data.user
-          const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar;
-          if (res.data.roles && res.data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
-            commit('SET_ROLES', res.data.roles)
-            commit('SET_PERMISSIONS', res.data.permissions)
-          } else {
-            commit('SET_ROLES', ['ROLE_DEFAULT'])
-          }
-          commit('SET_NAME', user.userName)
-          commit('SET_AVATAR', avatar)
-          resolve(res)
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        getInfo()
+          .then((res) => {
+            const user = res.data.user;
+            const avatar =
+              user.avatar == "" || user.avatar == null
+                ? require("@/assets/images/profile.jpg")
+                : user.avatar;
+            if (res.data.roles && res.data.roles.length > 0) {
+              // 验证返回的roles是否是一个非空数组
+              commit("SET_ROLES", res.data.roles);
+              commit("SET_PERMISSIONS", res.data.permissions);
+            } else {
+              commit("SET_ROLES", ["ROLE_DEFAULT"]);
+            }
+            commit("SET_NAME", user.userName);
+            commit("SET_AVATAR", avatar);
+            commit("SET_USER", user);
+            resolve(res);
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
 
     // 退出系统
     LogOut({ commit, state }) {
       return new Promise((resolve, reject) => {
-        logout(state.token).then(() => {
-          commit('SET_TOKEN', '')
-          commit('SET_ROLES', [])
-          commit('SET_PERMISSIONS', [])
-          removeToken()
-          resolve()
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        logout(state.token)
+          .then(() => {
+            commit("SET_TOKEN", "");
+            commit("SET_ROLES", []);
+            commit("SET_PERMISSIONS", []);
+            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;
diff --git a/src/views/index.vue b/src/views/index.vue
index 000c586..5d0a5b1 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -84,7 +84,7 @@
               <h2>{{ sumC }}</h2>
             </div>
           </el-col>
-          <el-col :span="4">
+          <el-col :span="4" v-if="user.roleId == 3">
             <div class="index-content-nav-item">
               <div class="index-content-nav-item-top">
                 <h3>平台收益</h3>
@@ -232,9 +232,13 @@ import {
   orderQuantityGet,
   orderQuantityEchartsGet,
 } from "@/api/index.js";
+import { mapGetters } from "vuex";
 export default {
   name: "Index",
   mixins: [resize],
+  computed: {
+    ...mapGetters(["user"]),
+  },
   data() {
     return {
       // 版本号
@@ -272,10 +276,13 @@ export default {
     };
   },
   mounted() {
+    console.log("user", this.user);
     this.dataUserAxios();
     this.dataEmployeesAxios();
     this.saleroomAxios();
-    this.platformRevenueAxios();
+    if (this.user.roleId == 3) {
+      this.platformRevenueAxios();
+    }
     this.orderQuantityAxios();
     this.orderQuantityEchartsAxios();
   },
@@ -341,7 +348,7 @@ export default {
             maxList.push(max);
           }
         });
-        console.log(xData, yData, maxList, data);
+        // console.log(xData, yData, maxList, data);
         this.$nextTick(() => {
           this.initChart(xData, yData, maxList, data);
         });
diff --git a/src/views/user/companion/index.vue b/src/views/user/companion/index.vue
index 36109ea..b5c6b91 100644
--- a/src/views/user/companion/index.vue
+++ b/src/views/user/companion/index.vue
@@ -169,6 +169,7 @@
             key="name"
             prop="name"
             :show-overflow-tooltip="true"
+            width="150"
           />
           <el-table-column
             label="职业开始年份"
@@ -184,6 +185,7 @@
             key="userName"
             prop="userName"
             :show-overflow-tooltip="true"
+            width="150"
           />
           <el-table-column
             label="所属商户"
@@ -191,6 +193,7 @@
             key="companyName"
             prop="companyName"
             :show-overflow-tooltip="true"
+            width="150"
           />
           <el-table-column
             label="身份证正面照"
@@ -248,6 +251,7 @@
             align="center"
             key="nowType"
             prop="nowType"
+            width="140"
           >
             <template slot-scope="{ row }">
               <span v-if="row.nowType == 1">陪诊员</span>
@@ -259,21 +263,25 @@
             align="center"
             key="totalRevenue"
             prop="totalRevenue"
+            width="140"
           />
           <el-table-column
             label="当前余额"
             align="center"
             key="balance"
             prop="balance"
+            width="140"
           />
           <el-table-column
             label="城市"
             align="center"
             key="cityName"
             prop="cityName"
+            width="140"
+            :show-overflow-tooltip="true"
           />
           <!-- <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> -->
-          <el-table-column label="状态" align="center" key="status">
+          <el-table-column label="状态" align="center" key="status" width="120">
             <template slot-scope="{ row }">
               <!-- <el-switch
                 v-model="scope.row.status"
@@ -315,6 +323,12 @@
             prop="createTime"
             width="160"
           />
+          <el-table-column
+            label="工作时段"
+            align="center"
+            prop="workingHours"
+            width="120"
+          />
           <!-- <el-table-column
               label="更新时间"
               align="center"
@@ -328,7 +342,8 @@
           <el-table-column
             label="操作"
             align="center"
-            width="160"
+            width="200"
+            fixed="right"
             class-name="small-padding fixed-width"
           >
             <template slot-scope="scope" v-if="scope.row.userId !== 1">
@@ -372,6 +387,12 @@
                 v-if="scope.row.nowType == 2"
                 >设置为陪诊人员</el-button
               >
+              <el-button
+                size="mini"
+                type="text"
+                @click="handleUBTns(scope.row, 5)"
+                >设置时间</el-button
+              >
               <!-- <el-dropdown
                   size="mini"
                   @command="(command) => handleCommand(command, scope.row)"
@@ -441,11 +462,32 @@
                 placeholder="选择职业开始年份"
                 style="width: 100%"
                 :disabled="[1].includes(typeH)"
+                value-format="yyyy"
               >
               </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="24">
+            <el-form-item label="所属商户" prop="companyId">
+              <el-select
+                filterable
+                clearable
+                v-model="form.companyId"
+                placeholder="请选择所属商户"
+                :disabled="[1].includes(typeH)"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in companyLaist"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
             <el-form-item label="头像" prop="avatar">
               <imageUpload
                 v-model="form.avatar"
@@ -554,6 +596,45 @@
         <el-button @click="upload.open = false">取 消</el-button>
       </div>
     </el-dialog>
+
+    <template v-if="dialogSetTime">
+      <el-dialog
+        title="设置时间"
+        :visible.sync="dialogSetTime"
+        width="60%"
+        append-to-body
+      >
+        <el-form
+          ref="formTime"
+          :model="formTimeData"
+          :rules="rulesTime"
+          label-width="120px"
+        >
+          <el-form-item label="时间选择" prop="workingHours">
+            <el-time-picker
+              is-range
+              arrow-control
+              v-model="formTimeData.workingHours"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              placeholder="选择时间范围"
+              format="HH:mm"
+              value-format="HH:mm"
+              :picker-options="{
+                format: 'HH:mm',
+              }"
+              @change="timePickerChange"
+            >
+            </el-time-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="onSubmitTime">确认时间</el-button>
+            <el-button @click="dialogSetTime = false">取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-dialog>
+    </template>
   </div>
 </template>
 
@@ -578,6 +659,8 @@ import {
   employeesUpdatePut,
   switchStatusPut,
   switchIdentityPut,
+  companyPlistGet,
+  employeesSetWorkHourPut,
 } from "@/api/index.js";
 
 export default {
@@ -586,6 +669,7 @@ export default {
   components: { Treeselect },
   data() {
     return {
+      dialogSetTime: false,
       typeH: 0, //0新增 1详情 2修改
       // 遮罩层
       loading: true,
@@ -649,6 +733,7 @@ export default {
         // deptId: undefined
         // userType: 'app_user'
       },
+      companyLaist: [],
       // 列信息
       columns: [
         { key: 0, label: `用户编号`, visible: true },
@@ -721,6 +806,16 @@ export default {
           },
         ],
       },
+      formTimeData: {},
+      rulesTime: {
+        workingHours: [
+          {
+            required: true,
+            message: "时间选择不能为空",
+            trigger: ["blur", "change"],
+          },
+        ],
+      },
     };
   },
   watch: {
@@ -845,6 +940,7 @@ export default {
     handleAdd() {
       this.reset();
       this.cityVoListAxios();
+      this.companyPlistAxios();
       // getUser().then((response) => {
       //   this.postOptions = response.data.posts;
       //   this.roleOptions = response.data.roles;
@@ -857,6 +953,12 @@ export default {
       this.open = true;
       this.title = "新增";
     },
+    async companyPlistAxios() {
+      const { code, data } = await companyPlistGet();
+      if (code === 200) {
+        this.companyLaist = data;
+      }
+    },
     async cityVoListAxios() {
       const data_back = await cityVoListGET();
       const { code, data } = data_back;
@@ -868,22 +970,46 @@ export default {
       let self = this;
       self.typeH = typeH;
       switch (typeH) {
-        case 1:
+        case 1: //详情
           self.cityVoListAxios();
+          self.companyPlistAxios();
           self.employeesDetailsGetA(row);
           break;
-        case 2:
+        case 2: //修改
           self.cityVoListAxios();
+          self.companyPlistAxios();
           self.employeesDetailsGetA(row);
           break;
-        case 3:
+        case 3: //冻结/解禁
           self.switchStatusPutA(row);
           break;
-        case 4:
+        case 4: //设置为陪护人员/设置为陪诊人员
           self.switchIdentityPutA(row);
           break;
+        case 5: //设置时间
+          self.$set(self.formTimeData, "workingHours", undefined);
+          self.$set(self.formTimeData, "emId", row.id);
+          self.dialogSetTime = true;
+          break;
       }
     },
+    timePickerChange(e) {
+      console.log("timePickerChange", e);
+    },
+    onSubmitTime() {
+      this.$refs["formTime"].validate((valid) => {
+        if (valid) {
+          employeesSetWorkHourPut({
+            workingHours: `${this.formTimeData.workingHours[0]}-${this.formTimeData.workingHours[1]}`,
+            emId: this.formTimeData.emId,
+          }).then((response) => {
+            this.$modal.msgSuccess("设置成功");
+            this.dialogSetTime = false;
+            this.getList();
+          });
+        }
+      });
+    },
     switchIdentityPutA(row) {
       let txt = "";
       if (row.nowType == 1) {
--
libgit2 0.26.0