二开项目权限应用全流程

news2024/11/27 10:29:22

二开项目-权限应用全流程(人力资源类)

在这里插入图片描述
在这里插入图片描述

addRoutes基本使用**

格式

**router.addRoutes([路由配置对象])**或者:this.$router.addRoutes([路由配置对象])

改造代码

1 .在router/index.js中的路由配置中删除动态路由的部分

export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: 'Dashboard', icon: 'dashboard' }
    }]
  },
-   approval,
-   attendance,
-   department,
-   employee,
-   permission,
-   role,
-   salary,
-   social
  // 404 page must be placed at the end !!!
--1--  { path: '*', redirect: '/404', hidden: true }
]

+ export const asyncRoytes = [
+   approval,
+   attendance,
+   department,
+   employee,
+   permission,
+   role,
+   salary,
+   social
+ ]
  1. 在permission.js中引入,并使用addRoutes动态添加(前置守卫中)
const whiteList = ['/login', '/404']
// 前置守卫
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  const token = store.state.user.token
  if (token) {
    // 如果有token
    if (to.path === '/login') {
      next('/')
      NProgress.done()
    } else {
      // if (!store.state.user.UserInfo.userId) { await store.dispatch('user/getProfile') }
      if (!store.getters.userId) {
++        const res = await store.dispatch('user/getProfile')//获取个人信息
++        // console.log('当前可以访问多少', res.roles.menus, asyncRoytes)
++        
++        const filteredRoutes = asyncRoytes.filter(item => {
++          return res.roles.menus.includes(item.children[0].name)
++        }) //筛选出跟个人信息里边的权限一样的asyncRoytes并赋值给filteredRoutes
++        // console.log('filteredRoutes', filteredRoutes)
++       
++1++         filteredRoutes.push({ path: '*', redirect: '/404', hidden: true })
++          
++          // 根据用户实际能访问几个页面来决定从整体8个路由设置
++        // 中,过滤中出来几个,然后保存到vuex中
++ ++       store.commit('menu/setMenuList', filteredRoutes)
++          
++        router.addRoutes(filteredRoutes)
++        
++          
++2++     // vueroter addRoutes白屏解决
++2++       next(to)
++      } else {
++        next()
      }
  } else {
    // 如果没有token,但是要进入的是白名单,直接进入
    if (whiteList.includes(to.path)) {
      // console.log('没有token,但是要进入的是白名单,直接进入')
      next()
    } else {
    // 如果没有token,但是要进入的不是白名单,直接进入登录页
      // console.log('没有token,但是要进入的不是白名单,直接进入登录页')
      next('/login')
      NProgress.done()
    }
  }
})

定义vuex管理菜单数据

  1. 补充模块。在src/store/modules下补充menu.js模块:
  • 定义数据menuList ; 修改数据的方法setMenuList
// 导入静态路由
import { constantRoutes } from '@/router'
const state = {
  menuList: [...constantRoutes]
}

const mutations = {
  setMenuList(state, asyncRoutes) {
    // 将动态路由和静态路由组合起来
    state.menuList = [...constantRoutes, ...asyncRoutes]
  }
}

export default {
  namespaced: true,
  state,
  mutations
}

注意:store/index.js中注册这个模块

...
++ import menu from './modules/menu'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
   ...
++    menu
  },
  getters
})

export default store

2. 提交setMenuList生成完整的菜单数据

(修改src/permission.js中的代码)上边改造代码2++++已实现

if (!store.getters.userId) {
        ...

        // 根据用户实际能访问几个页面来决定从整体8个路由设置
        // 中,过滤中出来几个,然后保存到vuex中
++       store.commit('menu/setMenuList', asyncRoutes)
      }

3. 菜单生成部分改写使用vuex中的数据

在src\layout\components\Sidebar\index.vue文件(侧边栏)中,修改

...
routes() {
  // 拿到的是一个完整的包含了静态路由和动态路由的数据结构
 -- // return this.$router.options.routes
 ++  return this.$store.state.menu.menuList
}
...

以上操作过程中,会出现三个问题:

bug1.404必须放在路由列表的最后边:

改造代码–1–和++1++已经实现

bug2.vueroter addRoutes方法白屏问题

改造代码++2++

bug3.控制台打印路由重复

src/router/index.js中已经封装好了方法

...
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

点击退出时,在src/modules/user.js(vuex)中调用该方法即可

...
++ import { resetRouter } from '@/router/index.js'

const state = {
  // 登录-初始化token
  token: getToken() || null,
  // 用户个人信息
  UserInfo: {}
}

const mutations = {
  // 登录-操作token
  setToken(state, newToken) {
    state.token = newToken
    setToken(newToken)
  },
  // 用户个人信息
  setUserInfo(state, newUserInfo) {
    state.UserInfo = newUserInfo
  }
}

const actions = {
  // 登录-发请求
  async login(context, n) {
    // console.log(context, n)
    const res = await login(n)
    // console.log('actions login', res)
    const token = res.data
    context.commit('setToken', token)
  },
  // 获取用户基本信息-发请求
  async getProfile(context) {
    const res = await getProfile()
    // console.log(res.data)
    context.commit('setUserInfo', res.data)
    return res.data
  },
  // 退出
  logout(context) {
    context.commit('setToken', '')
    context.commit('setUserInfo', {})
 ++   resetRouter()
  }
}

s = await getProfile()
// console.log(res.data)
context.commit(‘setUserInfo’, res.data)
return res.data
},
// 退出
logout(context) {
context.commit(‘setToken’, ‘’)
context.commit(‘setUserInfo’, {})
++ resetRouter()
}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ChatGPT】如何入门GPT并快速follow当前的大语言模型LLM进展?

如何入门GPT并快速follow当前的大语言模型LLM进展? 自从去年chatGPT悄悄发布,OpenAI发布的GPT系列工作也变得炙手可热,而基于此,各家公司/实验室百家争鸣,纷纷发布自己的工作,可以说每天都有新的进展。 在当前的情况下,要如何入门GPT系列生成模型,并快速跟进SOTA进展…

SpringMVC一站式学习,分分钟钟让你上手

文章目录 一、SpringMVC1.1 引言1.2 MVC架构1.2.1 概念1.2.2 好处 二、开发流程2.1 导入依赖2.2 配置核心(前端)控制器2.3 后端控制器2.4 配置文件2.5 访问 三、接收请求参数3.1 基本类型参数3.2 实体收参【重点】3.3 数组收参3.4 集合收参 【了解】3.5 路径参数3.6 中文乱码 四…

突破障碍:数字化如何改变对外劳务行业

有没有一份工作是又高薪又能学英语又能环游世界?在小红书上一搜,就发现许多年轻人曾经有过“国际邮轮”工作的经历,打卡全球100城市、全方面的英文口语环境、一觉起来就是一个新的国家...而且还能赚钱?听上去真是令人向往的生活&a…

PoseiSwap 参赛,参与斯坦福、Nautilus Chain等联合主办的 Hackathon 活动

近日,由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的“ Boundless Hackathon Stanford ” 主题的黑客松活动,目前已接受报名。该活动旨在帮助更多的优质开发者参与到 Web3 世界的发展中,推动链…

自动化测试框架、Python面向对象以及POM设计模型简介

目录 1 自动化测试框架概述 2 自动化测试框架需要的环境 3 自动化测试框架设计思想:Python面向对象 4 自动化测试框架设计思想:POM(Page Object Model)页面对象模型 1 自动化测试框架概述 所谓的框架其实就是一个解决问题…

如何在华为OD机试中获得满分?Java实现【去除多余空格】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 去除文本多余空格,但不…

MOTOTRBO CPS2.0安装与写频流程

一、安装MOTOTRBO CPS2.0写频软件 安装MOTOTRBO CPS2.0写频软件,选择安装软件的电脑系统必须WIN7以上 1.解压CPS2_2.21.61.0.zip至当前文件内 2. 双击MOTOTRBO_CPS_2.0.exe安装文件 3. 选择安装语言中文(简体),点击确定 4.点击下一…

SW质量属性

1. 覆盖质量属性:指派质量、质量中心和惯性张量的值以覆写所计算的值。 2. 质量属性内容: 密度质量体积曲面区域质量中心惯性主轴惯性矩和产品准则 在图形区域中,单色三重轴指示了模型的主轴和质量中心。 三色参考 3D 三重轴将显示在原点 …

Windows10如何快速安装虚拟机! Hyper-V

您可以在 Windows 10 上使用 Hyper-V 来创建虚拟机。Hyper-V 是 Microsoft 提供的虚拟化软件。您可以按照以下步骤在 Windows 10 上安装 Hyper-V 虚拟机: 1. 打开 Hyper-V 管理器,您可以按下 Windows 键并键入 “Hyper-V 管理器”。如果没有Hyper-V这个选…

汇编寄存器认识

1.8086CPU的16个寄存器: 8086CPU所有寄存器都16位: 通用寄存器: 存放一般性数据: 包括 数据寄存器 , 指针寄存器, 索引寄存器 (AX,BX,CX,DX,BP,SP,SI,DI) 数据寄存器: AX,BX,CX,DX AX: AX(Accumulator Register) :累加寄存器,主要用于输入/输出和大…

【JavaSE】Java基础语法(十七)

文章目录 1. final2. 代码块2.1 代码块概述2.2 代码块分类 1. final fianl关键字的作用 final代表最终的意思,可以修饰成员方法,成员变量,类 final修饰类、方法、变量的效果 fianl修饰类:该类不能被继承(不能有子类&a…

【EHub_tx1_A200】Ubuntu18.04 + ROS-Melodic/ROS2-Elequent + 速腾 RS-Helios_16P雷达 评测

大家好,我是虎哥,之前使用了很多单线激光雷达,这几年,3D激光雷达国产化后,逐步已经降价很多,3D激光雷达对于大环境导航,无人驾驶辅助导航,都有很多优势。经过逐步的筛选,…

性能测试知多少---性能分析与调优的原理

最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP )&…

JavaEE——自主实现计时器

文章目录 一、认识定时器二、自主实现定时器1.明确定时器的内核原理2.定时器框架搭建3.优先级队列中的比较问题4.“忙等”问题5. 代码中随机调度的问题 三、整体代码罗列 一、认识定时器 什么是定时器 定时器是我们在日常的软件开发中很重要的一个组件。类似于闹钟&#xff0c…

毫米波雷达数据采集

目录 1.数据采集方式2.分析数据格式3. 解读原始数据4.Bin文件格式 1.数据采集方式 数据采集有两种方式: 方式一:使用SDK中包含的Capture Demo: how to save raw data from the Capture Demo using Code Composer Studio(CCS) 在CCS中通过…

Python自动化测试框架有哪些?怎么选

目录 自动化测试框架概念 自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种: 模块化测试脚本框架: 测试库框架: 数据驱动测试框架: 关键字驱动或表驱动的测试框架: 混合测试自动化框架&am…

软考A计划-软件设计师笔记

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

2023自动部署神器——Jenkins全网最全攻略

​ 大纲 ​ 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口&#xff…

从0到1腾讯云服务器使用教程(新手入门)

腾讯云服务器使用教程包括注册账号实名认证、选择云服务器CVM或轻量应用服务器CPU内存带宽和系统盘配置、安全设置和云服务器远程连接、安全组端口开通教程、云服务器环境部署以搭建网站为例手把手网站上线,云服务器文件传输和数据备份以及技术支持等详细说明&#…

Maven学习笔记(上)22版

1. 概述部分 1. 什么是 Maven? 为什么要学习Maven? 管理规模庞大的 jar 包,需要专门工具。脱离 IDE 环境执行构建操作,需要专门工具。 1、构建 Java 项目开发过程中,构建指的是使用『原材料生产产品』的过程。 原…