123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import { constantRoutes } from '@/router'
- import { getRouters } from '@/api/menu'
- import { reject } from 'lodash'
- /**
- * 路由数据
- * @param item
- * @returns {{path, children: *[], meta: {icon, id, title}, name}}
- */
- function getRoute(item) {
- // 路由基本格式
- const route = {
- // 路由的路径
- path: item.url,
- // 路由名
- name: item.label,
- hidden: false,
- meta: {
- id: item.id,
- title: item.label,
- icon: item.icon
- },
- // 路由的子路由
- children: []
- }
- if (item.url === 'layout') {
- route.component = (resolve) => require([`@/layout`], resolve)
- } else {
- route.component = (resolve) => require([`@/views${item.url}`], resolve)
- }
- return route
- }
- /**
- * 菜单数据转换路由
- * @param menuList
- * @param routes
- * @returns {*[]}
- */
- function dynamicMenuRoutes(menuList = [], routes = []) {
- // 用于保存普通路由数据
- const temp = []
- // 用于保存存在子路由的路由数据
- let route = []
- // 遍历数据
- for (let i = 0; i < menuList.length; i++) {
- // 存在子路由,则递归遍历,并返回数据作为 children 保存
- if (menuList[i].children && menuList[i].children.length > 0) {
- // 获取路由的基本格式
- route = getRoute(menuList[i])
- // 递归处理子路由数据,并返回,将其作为路由的 children 保存
- route.children = dynamicMenuRoutes(menuList[i].children)
- // 保存存在子路由的路由
- routes.push(route)
- } else {
- // 保存普通路由
- temp.push(getRoute(menuList[i]))
- }
- }
- return routes.concat(temp)
- }
- const state = {
- routes: [],
- addRoutes: []
- }
- const mutations = {
- SET_ROUTES: (state, routes) => {
- state.addRoutes = routes
- state.routes = constantRoutes.concat(routes)
- }
- }
- const actions = {
- /**
- * 根据角色设置路由菜单
- * @param commit
- * @param roles
- * @returns {Promise<unknown>}
- */
- GenerateRoutes({ commit }, roles) {
- let roleIdList = []
- const rCode = roles.find((item) => item.roleCode === 'ManagerRole')
- if (rCode) {
- roleIdList = [1]
- } else if (rCode === undefined) {
- roleIdList = [2]
- }
- return new Promise((resolve) => {
- // 向后端请求路由数据
- getRouters(roleIdList).then((res) => {
- try {
- const menuList = res.data.menuTree
- const accessedRoutes = dynamicMenuRoutes(menuList)
- accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
- commit('SET_ROUTES', accessedRoutes)
- resolve(accessedRoutes)
- } catch (error) {
- reject(error)
- }
- })
- })
- }
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions
- }
|