Commit 6891837f by ‘巴博尔’

修改权限

parent 2cea9506
......@@ -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
<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",
})
}).catch(() => {});
}
.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(() => {});
},
},
};
</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);
}
}
}
......
/*
* @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,
......
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)
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_ROLES", ["ROLE_DEFAULT"]);
}
commit('SET_NAME', user.userName)
commit('SET_AVATAR', avatar)
resolve(res)
}).catch(error => {
reject(error)
})
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;
......@@ -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();
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);
});
......
......@@ -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,21 +970,45 @@ 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 = "";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment