From 92d98d931ef4199c06fb220d2b85a5b5e5e7701c Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期四, 10 八月 2023 10:25:20 +0800
Subject: [PATCH] 1.角色权限优化
---
src/utils/request.js | 8 +-
src/permission.js | 41 ++++++++-----
src/store/modules/user.js | 64 ++++++++++++++++----
src/api/user.js | 3 +
src/views/basicSettings/roleList.vue | 34 ++++++++---
src/layout/components/Navbar.vue | 30 ++++------
6 files changed, 120 insertions(+), 60 deletions(-)
diff --git a/src/api/user.js b/src/api/user.js
index f2d8863..94c4596 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -34,6 +34,9 @@
return request({
url: '/Login/UserTorgData',
method: 'get',
+ headers: {
+ Token: localStorage.getItem('token')
+ },
params: data
})
}
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index c625215..bb804f2 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -74,11 +74,11 @@
<div style=" font-size: 18px;font-family: 'Microsoft YaHei';color:#AAAAAA;cursor: pointer">
<!-- {{ stu_torgname }}-->
- <el-dropdown class="avatar-container" trigger="hover">
+ <el-dropdown v-if="stu_torgname.toString().length>0" class="avatar-container" trigger="hover">
<div class="avatar-wrapper">
<div style="display: flex;align-items: center;margin-top: -5px">
- <!-- <i class="el-icon-user" style="font-weight: bolder;font-size: 18px;margin-right: 5px;color:#A7A7A7" />-->
+ <i class="el-icon-office-building" style="font-weight: bolder;font-size: 18px;margin-right: 5px;color:#A7A7A7" />
<div style=" font-size: 18px;font-family: 'Microsoft YaHei';color:#AAAAAA">{{ stu_torgname }}</div>
</div>
@@ -202,6 +202,7 @@
import * as signalR from '@aspnet/signalr'
import { ButtonData } from '@/api/basicSettings'
import Vue from 'vue'
+import store from '@/store'
export default {
components: {
@@ -239,8 +240,8 @@
}
}
return {
- usercode: '',
- username: '',
+ usercode: localStorage.getItem('usercode'),
+ username: localStorage.getItem('username'),
form: {
password: '',
newpassword: ''
@@ -254,7 +255,7 @@
{ required: true, validator: validatePassword2, trigger: ['blur', 'change'] }
]
},
- stu_torgname: '',
+ stu_torgname: localStorage.getItem('torg_name'),
show: false,
signalr: null
}
@@ -264,15 +265,6 @@
],
created() {
// this.$signalr.start()
-
- this.usercode = localStorage.getItem('usercode')
- this.username = localStorage.getItem('username')
- Vue.prototype.$stu_torg = JSON.parse(localStorage.getItem('torg'))
-
- if (Vue.prototype.$stu_torg.length > 0) {
- this.stu_torgname = Vue.prototype.$stu_torg[0].torg_name
- setCookie('torg_code', Vue.prototype.$stu_torg.find(i => i.torg_name === this.stu_torgname).torg_code)
- }
},
mounted() {
// this.getHubConnectionBuilder()
@@ -312,7 +304,11 @@
changeTrog(val) {
if (val.torg_name !== this.stu_torgname) {
this.stu_torgname = val.torg_name
- setCookie('torg_code', val.torg_code)
+ localStorage.setItem('torg_code', val.torg_code)
+ localStorage.setItem('torg_name', val.torg_name)
+
+ store.dispatch('user/getMenu')
+ // this.$store.state.tagsView.visitedViews = this.$store.state.tagsView.visitedViews.filter(i => i.title === '绯荤粺棣栭〉')
}
},
// 寤虹珛hub杩炴帴
@@ -393,14 +389,12 @@
this.$refs.dialogForm.validate(valid => {
if (valid) {
const data = {
- usercode: this.usercode,
- username: this.username,
password: this.form.password,
newpassword: this.form.newpassword
}
UpdateUserPassword(data).then(res => {
if (res.code === '200') {
- this.$message.success('淇敼鎴愬姛锛�')
+ this.$notify.success('淇敼鎴愬姛锛�')
this.dialogVisible = false
}
})
diff --git a/src/permission.js b/src/permission.js
index b6ef584..0272301 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -40,21 +40,32 @@
const jwt = decode(localStorage.getItem('token'))
localStorage.setItem('usercode', jwt.usercode)
- // 鎷夊彇鑿滃崟淇℃伅琛�
- const menu = await store.dispatch('user/getMenu')
- // 鐢熸垚鍙闂殑璺敱琛�
- await store.dispatch('permission/generateRoutes', menu)
-
- // eslint-disable-next-line require-atomic-updates
- // store.state.settings.orgType = getCookie('description') //娉ㄩ噴鎺�
-
- // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
- router.addRoutes(store.getters.addRouters)
-
- // hack鏂规硶 纭繚addRoutes宸插畬鎴�
- next({ ...to, replace: true })
-
- // next()
+ const code = await store.dispatch('user/getUserTorgData')
+ if (code === '200') {
+ // 鎷夊彇鑿滃崟淇℃伅琛�
+ const menu = await store.dispatch('user/getMenu')
+ // 鐢熸垚鍙闂殑璺敱琛�
+ await store.dispatch('permission/generateRoutes', menu)
+ // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
+ router.addRoutes(store.getters.addRouters)
+ // hack鏂规硶 纭繚addRoutes宸插畬鎴�
+ next({ ...to, replace: true })
+ }
+ // // 鎷夊彇鑿滃崟淇℃伅琛�
+ // const menu = await store.dispatch('user/getMenu')
+ // // 鐢熸垚鍙闂殑璺敱琛�
+ // await store.dispatch('permission/generateRoutes', menu)
+ //
+ // // eslint-disable-next-line require-atomic-updates
+ // // store.state.settings.orgType = getCookie('description') //娉ㄩ噴鎺�
+ //
+ // // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
+ // router.addRoutes(store.getters.addRouters)
+ //
+ // // hack鏂规硶 纭繚addRoutes宸插畬鎴�
+ // next({ ...to, replace: true })
+ //
+ // // next()
} catch (error) {
// remove token and go to login page to re-login
await store.dispatch('user/resetToken')
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index e8bb9cf..fa624eb 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -2,6 +2,7 @@
import { getToken, setToken, removeToken, setCookie, removeCookie, getCookie } from '@/utils/auth'
import { resetRouter } from '@/router'
import { ButtonData } from '@/api/basicSettings'
+import Vue from 'vue'
const getDefaultState = () => {
return {
@@ -71,20 +72,47 @@
})
},
- // get user menu
- getMenu({ commit, state }) {
+ getUserTorgData() {
return new Promise((resolve, reject) => {
- console.log('鑿滃崟鎺ュ彛杩涙潵浜�11111')
- LoginMenu({ usertype: 'PC', usercode: localStorage.getItem('usercode') }).then(res => {
- if (res.code === '200') {
- UserTorgData({ usercode: localStorage.getItem('usercode') }).then(res1 => {
- localStorage.setItem('username', res1.data.user)
- localStorage.setItem('torg', JSON.stringify(res1.data.torg))
- })
+ UserTorgData({ usercode: localStorage.getItem('usercode') }).then(res1 => {
+ localStorage.setItem('username', res1.data.user)
+ localStorage.setItem('torg', JSON.stringify(res1.data.torg))
+
+ Vue.prototype.$stu_torg = JSON.parse(localStorage.getItem('torg'))
+
+ if (Vue.prototype.$stu_torg.length > 0) {
+ const name = Vue.prototype.$stu_torg[0].torg_name
+ const code = Vue.prototype.$stu_torg[0].torg_code
+ localStorage.setItem('torg_name', name)
+ localStorage.setItem('torg_code', code)
+ } else {
+ localStorage.setItem('torg_name', '')
+ localStorage.setItem('torg_code', '')
+ }
+
+ if (res1.code === '200') {
ButtonData().then(res2 => {
localStorage.setItem('ButtonData', JSON.stringify(res2.data))
})
+ }
+ resolve(res1.code)
+ }).catch(e => {
+ reject(e)
+ })
+ })
+ },
+
+ // get user menu
+ getMenu({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ // console.log('鑿滃崟鎺ュ彛杩涙潵浜�11111')
+ LoginMenu({
+ usertype: 'PC',
+ usercode: localStorage.getItem('usercode'),
+ torg_code: localStorage.getItem('torg_code')
+ }).then(res => {
+ if (res.code === '200') {
commit('SET_NAME', res.message)
commit('SET_MENU', res.data)
resolve(res.data)
@@ -116,11 +144,19 @@
removeToken() // must remove token first
resetRouter()
- removeCookie('ruleCode')
- removeCookie('username')
- removeCookie('usercode')
- removeCookie('stu_torgname')
- removeCookie('code')
+ localStorage.removeItem('torg_code')
+ localStorage.removeItem('ButtonData')
+ localStorage.removeItem('usercode')
+ localStorage.removeItem('username')
+ localStorage.removeItem('torg')
+ localStorage.removeItem('token')
+ localStorage.removeItem('torg_name')
+
+ // removeCookie('ruleCode')
+ // removeCookie('username')
+ // removeCookie('usercode')
+ // removeCookie('stu_torgname')
+ // removeCookie('code')
// reset visited views and cached views
dispatch('tagsView/delAllViews', null, { root: true })
diff --git a/src/utils/request.js b/src/utils/request.js
index 265a3ba..2d0b42b 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -2,6 +2,7 @@
import { Message, Notification } from 'element-ui'
import store from '@/store'
import { getCookie, removeCookie } from '@/utils/auth'
+import Vue from 'vue'
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
@@ -64,9 +65,10 @@
localStorage.removeItem('torg')
localStorage.removeItem('token')
sessionStorage.removeItem('tabViews')
- // setTimeout(() => {
- // window.location.reload()
- // }, 1000)
+
+ setTimeout(() => {
+ window.location.reload()
+ }, 1000)
}
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
// if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
diff --git a/src/views/basicSettings/roleList.vue b/src/views/basicSettings/roleList.vue
index ed294ec..cd9cfe5 100644
--- a/src/views/basicSettings/roleList.vue
+++ b/src/views/basicSettings/roleList.vue
@@ -319,7 +319,7 @@
// 鑾峰彇鑿滃崟鏉冮檺瀵瑰簲鐨勬寜閽�
async getRolePermissionSearchRoleMenuButton(rolecode) {
const { data: res } = await RolePermissionSearchRoleMenuButton({ rolecode, type: this.activeName })
- this.allButtonData = JSON.parse(res[0].jsondate)
+ this.allButtonData = res.length > 0 ? JSON.parse(res[0].jsondate) : []
},
// 鑾峰彇鑿滃崟鏉冮檺
async getRolePermissionSearchRoleMenu(rolecode) {
@@ -589,21 +589,35 @@
// 瑙掕壊鍚嶇О鍒犻櫎
roleDeleteClick(self, node, data) {
// console.log(self, node, data)
- const D = {
- rolecode: data.code,
- rolename: data.name,
- type: this.activeName
- }
- RoleDeleteSava(D).then(res => {
- if (res.code === '200') {
- this.$notify.success('瑙掕壊鍒犻櫎鎴愬姛锛�')
+ this.$confirm('鏄惁纭鍒犻櫎?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ const D = {
+ rolecode: data.code,
+ rolename: data.name,
+ type: this.activeName
}
- this.getRolePermissionSearchRole()
+ RoleDeleteSava(D).then(res => {
+ if (res.code === '200') {
+ this.$notify.success('瑙掕壊鍒犻櫎鎴愬姛锛�')
+ }
+ this.getRolePermissionSearchRole()
+ })
+ }).catch(() => {
+ this.$notify.info('宸插彇娑堝垹闄�')
})
},
// 瑙掕壊鍚嶇О淇濆瓨 閲囩敤闃叉姈褰㈠紡
roleSave: throttle(function(val) {
val.isEdit = false
+
+ if (val.name.trim().length === 0) {
+ this.getRolePermissionSearchRole()
+ return this.$notify.info('鏃犳晥淇濆瓨锛�')
+ }
+
const data = {
rolecode: val.code,
rolename: val.name,
--
Gitblit v1.9.3