94 lines
2.3 KiB
JavaScript
94 lines
2.3 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { basicRoutes, vueModules } from '@/router/routes'
|
|
import Layout from '@/layout/index.vue'
|
|
import api from '@/api'
|
|
|
|
// * 后端路由相关函数
|
|
// 根据后端传来数据构建出前端路由
|
|
|
|
function buildRoutes(routes = []) {
|
|
return routes.map((e) => {
|
|
const route = {
|
|
name: e.name,
|
|
path: e.path,
|
|
component: shallowRef(Layout),
|
|
isHidden: e.is_hidden,
|
|
redirect: e.redirect,
|
|
meta: {
|
|
title: e.name,
|
|
icon: e.icon,
|
|
order: e.order,
|
|
keepAlive: e.keepalive,
|
|
},
|
|
children: [],
|
|
}
|
|
|
|
if (e.children && e.children.length > 0) {
|
|
// 有子菜单
|
|
route.children = e.children.map((e_child) => ({
|
|
name: e_child.name,
|
|
path: e_child.path,
|
|
component: vueModules[`/src/views${e_child.component}/index.vue`],
|
|
isHidden: e_child.is_hidden,
|
|
meta: {
|
|
title: e_child.name,
|
|
icon: e_child.icon,
|
|
order: e_child.order,
|
|
keepAlive: e_child.keepalive,
|
|
},
|
|
}))
|
|
} else {
|
|
// 没有子菜单,创建一个默认的子路由
|
|
route.children.push({
|
|
name: `${e.name}Default`,
|
|
path: '',
|
|
component: vueModules[`/src/views${e.component}/index.vue`],
|
|
isHidden: true,
|
|
meta: {
|
|
title: e.name,
|
|
icon: e.icon,
|
|
order: e.order,
|
|
keepAlive: e.keepalive,
|
|
},
|
|
})
|
|
}
|
|
|
|
return route
|
|
})
|
|
}
|
|
|
|
export const usePermissionStore = defineStore('permission', {
|
|
state() {
|
|
return {
|
|
accessRoutes: [],
|
|
accessApis: [],
|
|
}
|
|
},
|
|
getters: {
|
|
routes() {
|
|
return basicRoutes.concat(this.accessRoutes)
|
|
},
|
|
menus() {
|
|
return this.routes.filter((route) => route.name && !route.isHidden)
|
|
},
|
|
apis() {
|
|
return this.accessApis
|
|
},
|
|
},
|
|
actions: {
|
|
async generateRoutes() {
|
|
const res = await api.getUserMenu() // 调用接口获取后端传来的菜单路由
|
|
this.accessRoutes = buildRoutes(res.data) // 处理成前端路由格式
|
|
return this.accessRoutes
|
|
},
|
|
async getAccessApis() {
|
|
const res = await api.getUserApi()
|
|
this.accessApis = res.data
|
|
return this.accessApis
|
|
},
|
|
resetPermission() {
|
|
this.$reset()
|
|
},
|
|
},
|
|
})
|