hhz_restructure/src/store/modules/permission.js

127 lines
3.2 KiB
JavaScript
Raw Normal View History

2022-11-15 11:35:54 +08:00
import { defineStore } from 'pinia'
import { asyncRoutes, basicRoutes } from '@/router/routes'
2022-11-21 09:32:31 +08:00
import { fetchPermission } from '@/api/auth/index'
2022-11-15 11:35:54 +08:00
import Layout from '@/layout/index.vue'
import modules from '@/utils/module.js'
/**
* @description:
* @param {*} route
* @param {*} role
* @return {*}
*/
function hasPermission(route, role) {
// const routeRole = route.meta?.role ? route.meta.role : []
// if (!role.length || !routeRole.length) {
// return false
// }
// return role.some((item) => routeRole.includes(item))
return true
}
/**
* @description: 过滤权限路由
* @param {*} routes
* @param {*} role
* @return {*}
*/
function filterAsyncRoutes(routes = [], role) {
const ret = []
routes.forEach((route) => {
if (hasPermission(route, role)) {
const curRoute = {
...route,
children: []
}
if (route.children && route.children.length) {
curRoute.children = filterAsyncRoutes(route.children, role)
} else {
Reflect.deleteProperty(curRoute, 'children')
}
ret.push(curRoute)
}
})
return ret
}
2022-11-21 09:32:31 +08:00
function dealRoutes(routes) {
2022-11-15 11:35:54 +08:00
const res = []
routes.forEach(item => {
const tmp = { ...item }
2022-11-21 09:32:31 +08:00
if (tmp.parentId === 0) {
2022-11-15 11:35:54 +08:00
tmp.component = Layout
if (tmp.children) {
2022-11-21 09:32:31 +08:00
tmp.redirect = tmp.path === '/' ? `/${tmp.children[0].path}` : `${tmp.path}/${tmp.children[0].path}`
tmp.children = dealRoutes(tmp.children)
2022-11-15 11:35:54 +08:00
}
} else {
const sub_view = tmp.component.replace(/^\/*/g, '')
const component = `../${sub_view}.vue`
tmp.component = modules[component]
}
2022-11-21 09:32:31 +08:00
tmp.title = tmp.name
2022-11-15 11:35:54 +08:00
tmp.meta = {
2022-11-21 09:32:31 +08:00
...tmp?.meta,
title: tmp.name
2022-11-15 11:35:54 +08:00
}
res.push(tmp)
})
return res
}
2022-11-21 09:32:31 +08:00
function dealPermissions(permissionsList) {
const res = permissionsList.map((tmp) => {
return tmp.code
})
return res
}
2022-11-15 11:35:54 +08:00
export const usePermissionStore = defineStore('permission', {
state() {
return {
2022-11-21 09:32:31 +08:00
accessRoutes: [],
accessPermissions: []
2022-11-15 11:35:54 +08:00
}
},
getters: {
routes() {
return basicRoutes.concat(this.accessRoutes)
},
permissionRoutes() {
return this.accessRoutes
2022-11-21 09:32:31 +08:00
},
validatePermission() {
return this.accessPermissions
2022-11-15 11:35:54 +08:00
}
},
actions: {
generateRoutesMock(role = []) {
const accessRoutes = filterAsyncRoutes(asyncRoutes, role)
this.accessRoutes = accessRoutes
return accessRoutes
},
2022-11-21 09:32:31 +08:00
async generateRoutes(roleId) {
2022-11-15 11:35:54 +08:00
try {
2022-12-13 14:13:10 +08:00
const res = await fetchPermission({ roleId, clientId: 'tuoheng-hhz-admin' })
2022-11-21 09:32:31 +08:00
// const res = await fetchPermission(3)
2022-11-15 11:35:54 +08:00
if (res.code === 0) {
2022-11-21 09:32:31 +08:00
const { opMenusList, permissionsList } = res.data
const menus = dealRoutes(opMenusList)
const permissions = dealPermissions(permissionsList)
this.accessRoutes = menus
this.accessPermissions = permissions
return Promise.resolve(menus)
// const accessRoutes = filterAsyncRoutes(asyncRoutes)
// this.accessRoutes = accessRoutes
// return Promise.resolve(accessRoutes)
2022-11-15 11:35:54 +08:00
} else {
return Promise.reject(res.message)
}
} catch (error) {
console.error(error)
return Promise.reject(error.message)
}
}
}
})