按钮级别的新版本,多级别的组织架构
loulijun2021
2023-08-10 92d98d931ef4199c06fb220d2b85a5b5e5e7701c
1.角色权限优化
已修改6个文件
180 ■■■■■ 文件已修改
src/api/user.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicSettings/roleList.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/user.js
@@ -34,6 +34,9 @@
  return request({
    url: '/Login/UserTorgData',
    method: 'get',
    headers: {
      Token: localStorage.getItem('token')
    },
    params: data
  })
}
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
            }
          })
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')
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 })
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) {
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,