release(custom): i

This commit is contained in:
2023-10-10 15:01:00 +08:00
parent a9707c6d94
commit 5b33290de6
78 changed files with 13003 additions and 5230 deletions

View File

@@ -1,33 +1,105 @@
import { defineStore } from 'pinia'
import { asyncRoutes, basicRoutes } from '@/router/routes'
import { basicRoutes } from '@/router/routes'
import { RouterView } from 'vue-router'
function hasPermission(route, role) {
// * 不需要权限直接返回true
if (!route.meta?.requireAuth) return true
const Layout = () => import('@/layout/index.vue')
const routeRole = route.meta?.role ? route.meta.role : []
// 匹配views里面所有的.vue文件动态引入
const modules = import.meta.glob('/src/views/**/*.vue')
// * 登录用户没有角色或者路由没有设置角色判定为没有权限
if (!role.length || !routeRole.length) return false
// * 路由指定的角色包含任一登录用户角色则判定有权限
return role.some((item) => routeRole.includes(item))
//
export function getModulesKey() {
return Object.keys(modules).map((item) => item.replace('/src/views/', '').replace('.vue', ''))
}
function filterAsyncRoutes(routes = [], role) {
// 动态加载组件
export function loadRouteView(component) {
try {
const key = Object.keys(modules).find((key) => {
return key.includes(`${component}.vue`)
})
if (key) {
return modules[key]
}
throw Error(`找不到组件${component},请确保组件路径正确`)
} catch (error) {
console.error(error)
return RouterView
}
}
// function hasPermission(route, role) {
// // * 不需要权限直接返回true
// if (!route.meta?.requireAuth) return true
// const routeRole = route.meta?.role ? route.meta.role : []
// // * 登录用户没有角色或者路由没有设置角色判定为没有权限
// if (!role.length || !routeRole.length) return false
// // * 路由指定的角色包含任一登录用户角色则判定有权限
// return role.some((item) => routeRole.includes(item))
// }
// 过滤异步路由
function filterAsyncRoutes(routes = [], firstRoute = true) {
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)
// 过滤掉type为3的路由
if (route.type === 3) return
const isHidden = route.is_show === 1 ? false : true
const meta = {
requireAuth: true,
title: route.name,
icon: route.icon,
order: route.sort,
}
let redirect = ''
if (route.route === '/' && firstRoute) {
// 重定向
redirect = route.subMenu[0].route
}
const curRoute = {
path: route.route,
name: route.name,
isHidden,
meta,
redirect,
children: [],
}
if (route.subMenu && route.subMenu.length) {
curRoute.children = filterAsyncRoutes(route.subMenu, false)
} else {
Reflect.deleteProperty(curRoute, 'children')
}
switch (route.type) {
case 1:
curRoute.component = firstRoute ? Layout : RouterView
break
case 2:
curRoute.component = loadRouteView(route.components)
break
}
ret.push(curRoute)
})
return ret
}
// 递归寻找type为3的路由
function findType3Routes(routes = []) {
const ret = []
routes.forEach((route) => {
if (route.type === 3) {
ret.push(route.api_route)
}
if (route.subMenu && route.subMenu.length) {
ret.push(...findType3Routes(route.subMenu))
}
})
return ret
@@ -48,8 +120,10 @@ export const usePermissionStore = defineStore('permission', {
},
},
actions: {
generateRoutes(role = []) {
const accessRoutes = filterAsyncRoutes(asyncRoutes, role)
generateRoutes() {
const menus = JSON.parse(localStorage.getItem('menu'))
const accessRoutes = filterAsyncRoutes(menus)
window.localStorage.setItem('roles', JSON.stringify(findType3Routes(menus)))
this.accessRoutes = accessRoutes
return accessRoutes
},

View File

@@ -1,5 +1,5 @@
import { defineStore } from 'pinia'
import { resetRouter } from '@/router'
// import { resetRouter } from '@/router'
import { useTagsStore, usePermissionStore } from '@/store'
import { removeToken, toLogin } from '@/utils'
// import api from '@/api'
@@ -18,7 +18,10 @@ export const useUserStore = defineStore('user', {
return this.userInfo?.name
},
avatar() {
return this.userInfo?.avatar
return (
this.userInfo?.avatar ||
'https://pic3.58cdn.com.cn/nowater/webim/big/n_v21bc7874294754e63a22b80febac9cf51.jpg'
)
},
role() {
return this.userInfo?.role || []
@@ -41,7 +44,7 @@ export const useUserStore = defineStore('user', {
removeToken()
resetTags()
resetPermission()
resetRouter()
// resetRouter()
this.$reset()
toLogin()
},