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