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