路由权限重构
This commit is contained in:
@@ -68,7 +68,7 @@ function handleDropdown(key: DropdownKey) {
|
||||
if (key === 'logout') {
|
||||
logout();
|
||||
} else {
|
||||
routerPushByKey('systemmanage_changepassword');
|
||||
routerPushByKey('changepassword');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -224,14 +224,16 @@ const local: App.I18n.Schema = {
|
||||
403: '无权限',
|
||||
404: '页面不存在',
|
||||
500: '服务器错误',
|
||||
details: '详情',
|
||||
details_closedoc: '资料关闭详情',
|
||||
details_index: '变更详情',
|
||||
changepassword: '修改密码',
|
||||
home: '首页',
|
||||
my: '我的操作台',
|
||||
my_initiatechange: '发起变更',
|
||||
my_highrisk: '本专业高风险',
|
||||
my_highriskdetail: '高风险场景详情',
|
||||
my_mytask: '我的任务',
|
||||
my_mydraft: '我的草稿',
|
||||
my_pending: '待我处理',
|
||||
my_pendingchange: '待投用变更',
|
||||
my_effect: '变更投入和效果',
|
||||
my_datachangecenter: '变更数据中心',
|
||||
@@ -249,12 +251,10 @@ const local: App.I18n.Schema = {
|
||||
systemmanage_template: '审批模板管理',
|
||||
my_pssr: 'PSSR监督',
|
||||
riskstatistics: '安全与风险统计',
|
||||
|
||||
report: '统计报表',
|
||||
signstatistics: '质量会签统计',
|
||||
factoryoverview: '全工厂统计概览',
|
||||
systemmanage_setting: '系统配置',
|
||||
systemmanage_changepassword: '修改密码'
|
||||
},
|
||||
form: {
|
||||
required: '不能为空',
|
||||
|
||||
@@ -20,7 +20,10 @@ export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<Ro
|
||||
500: () => import("@/views/_builtin/500/index.vue"),
|
||||
changeledger_mychanges: () => import("@/views/changeLedger/myChanges/index.vue"),
|
||||
changeledger_workshopchanges: () => import("@/views/changeLedger/workshopChanges/index.vue"),
|
||||
changepassword: () => import("@/views/changePassword/index.vue"),
|
||||
changestatistics: () => import("@/views/changeStatistics/index.vue"),
|
||||
details_closedoc: () => import("@/views/details/closeDoc/index.vue"),
|
||||
details_index: () => import("@/views/details/index/index.vue"),
|
||||
docs_archives: () => import("@/views/docs/archives/index.vue"),
|
||||
docs_query: () => import("@/views/docs/query/index.vue"),
|
||||
factoryoverview: () => import("@/views/factoryOverview/index.vue"),
|
||||
@@ -30,17 +33,14 @@ export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<Ro
|
||||
my_datachangecenter: () => import("@/views/my/dataChangeCenter/index.vue"),
|
||||
my_effect: () => import("@/views/my/effect/index.vue"),
|
||||
my_highrisk: () => import("@/views/my/highRisk/index.vue"),
|
||||
my_highriskdetail: () => import("@/views/my/highRiskDetail/index.vue"),
|
||||
my_initiatechange: () => import("@/views/my/initiateChange/index.vue"),
|
||||
my_mydraft: () => import("@/views/my/myDraft/index.vue"),
|
||||
my_mytask: () => import("@/views/my/myTask/index.vue"),
|
||||
my_pending: () => import("@/views/my/pending/index.vue"),
|
||||
my_pendingchange: () => import("@/views/my/pendingChange/index.vue"),
|
||||
my_pssr: () => import("@/views/my/pssr/index.vue"),
|
||||
report: () => import("@/views/report/index.vue"),
|
||||
riskstatistics: () => import("@/views/riskStatistics/index.vue"),
|
||||
signstatistics: () => import("@/views/signStatistics/index.vue"),
|
||||
systemmanage_changepassword: () => import("@/views/systemManage/changePassword/index.vue"),
|
||||
systemmanage_role: () => import("@/views/systemManage/role/index.vue"),
|
||||
systemmanage_setting: () => import("@/views/systemManage/setting/index.vue"),
|
||||
systemmanage_template: () => import("@/views/systemManage/template/index.vue"),
|
||||
|
||||
@@ -70,6 +70,17 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'changepassword',
|
||||
path: '/changepassword',
|
||||
component: 'layout.base$view.changepassword',
|
||||
meta: {
|
||||
title: '修改密码',
|
||||
i18nKey: 'route.changepassword',
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'changestatistics',
|
||||
path: '/changestatistics',
|
||||
@@ -81,6 +92,41 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
i18nKey: 'route.changestatistics'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'details',
|
||||
path: '/details',
|
||||
component: 'layout.base',
|
||||
meta: {
|
||||
title: '详情',
|
||||
i18nKey: 'route.details',
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: 'details_closedoc',
|
||||
path: '/details/closedoc',
|
||||
component: 'view.details_closedoc',
|
||||
meta: {
|
||||
title: '资料关闭详情',
|
||||
i18nKey: 'route.details_closedoc',
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'details_index',
|
||||
path: '/details/index',
|
||||
component: 'view.details_index',
|
||||
meta: {
|
||||
title: '变更详情',
|
||||
i18nKey: 'route.details_index',
|
||||
constant: true,
|
||||
hideInMenu: true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'docs',
|
||||
path: '/docs',
|
||||
@@ -141,9 +187,9 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
props: true,
|
||||
meta: {
|
||||
title: '登录',
|
||||
i18nKey: 'route.login',
|
||||
constant: true,
|
||||
hideInMenu: true,
|
||||
i18nKey: 'route.login'
|
||||
hideInMenu: true
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -193,17 +239,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
i18nKey: 'route.my_highrisk'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'my_highriskdetail',
|
||||
path: '/my/highriskdetail',
|
||||
component: 'view.my_highriskdetail',
|
||||
meta: {
|
||||
title: '变更详情',
|
||||
constant: true,
|
||||
hideInMenu: true,
|
||||
i18nKey: 'route.my_highriskdetail'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'my_initiatechange',
|
||||
path: '/my/initiatechange',
|
||||
@@ -231,15 +266,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
i18nKey: 'route.my_mytask'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'my_pending',
|
||||
path: '/my/pending',
|
||||
component: 'view.my_pending',
|
||||
meta: {
|
||||
title: '待我处理',
|
||||
i18nKey: 'route.my_pending'
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'my_pendingchange',
|
||||
path: '/my/pendingchange',
|
||||
@@ -304,17 +330,6 @@ export const generatedRoutes: GeneratedRoute[] = [
|
||||
i18nKey: 'route.systemmanage'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: 'systemmanage_changepassword',
|
||||
path: '/systemmanage/changepassword',
|
||||
component: 'view.systemmanage_changepassword',
|
||||
meta: {
|
||||
title: '修改密码',
|
||||
i18nKey: 'route.systemmanage_changepassword',
|
||||
constant: true,
|
||||
order: 5
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'systemmanage_role',
|
||||
path: '/systemmanage/role',
|
||||
|
||||
@@ -169,7 +169,11 @@ const routeMap: RouteMap = {
|
||||
"changeledger": "/changeledger",
|
||||
"changeledger_mychanges": "/changeledger/mychanges",
|
||||
"changeledger_workshopchanges": "/changeledger/workshopchanges",
|
||||
"changepassword": "/changepassword",
|
||||
"changestatistics": "/changestatistics",
|
||||
"details": "/details",
|
||||
"details_closedoc": "/details/closedoc",
|
||||
"details_index": "/details/index",
|
||||
"docs": "/docs",
|
||||
"docs_archives": "/docs/archives",
|
||||
"docs_query": "/docs/query",
|
||||
@@ -181,18 +185,15 @@ const routeMap: RouteMap = {
|
||||
"my_datachangecenter": "/my/datachangecenter",
|
||||
"my_effect": "/my/effect",
|
||||
"my_highrisk": "/my/highrisk",
|
||||
"my_highriskdetail": "/my/highriskdetail",
|
||||
"my_initiatechange": "/my/initiatechange",
|
||||
"my_mydraft": "/my/mydraft",
|
||||
"my_mytask": "/my/mytask",
|
||||
"my_pending": "/my/pending",
|
||||
"my_pendingchange": "/my/pendingchange",
|
||||
"my_pssr": "/my/pssr",
|
||||
"report": "/report",
|
||||
"riskstatistics": "/riskstatistics",
|
||||
"signstatistics": "/signstatistics",
|
||||
"systemmanage": "/systemmanage",
|
||||
"systemmanage_changepassword": "/systemmanage/changepassword",
|
||||
"systemmanage_role": "/systemmanage/role",
|
||||
"systemmanage_setting": "/systemmanage/setting",
|
||||
"systemmanage_template": "/systemmanage/template",
|
||||
|
||||
@@ -232,11 +232,24 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
|
||||
/** Init static auth route */
|
||||
function initStaticAuthRoute() {
|
||||
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
|
||||
const filteredRoutes = filterRoutesByPaths(staticAuthRoutes, localStg.get('userInfo')?.perms);
|
||||
// 全部静态路由
|
||||
let allowRouter = staticAuthRoutes
|
||||
// 权限
|
||||
let perms = localStg.get('userInfo')?.perms || []
|
||||
if(perms){
|
||||
if(perms.length>0 && perms[0]!=='*'){
|
||||
const filteredRoutes = filterRoutesByPaths(staticAuthRoutes, perms);
|
||||
if (filteredRoutes.length) {
|
||||
allowRouter = filteredRoutes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (authStore.isStaticSuper) {
|
||||
addAuthRoutes(filteredRoutes);
|
||||
addAuthRoutes(allowRouter);
|
||||
} else {
|
||||
const filteredAuthRoutes = filterAuthRoutesByRoles(filteredRoutes, authStore.userInfo.roles);
|
||||
const filteredAuthRoutes = filterAuthRoutesByRoles(allowRouter, authStore.userInfo.roles);
|
||||
|
||||
addAuthRoutes(filteredAuthRoutes);
|
||||
}
|
||||
|
||||
Vendored
+9
-6
@@ -23,7 +23,11 @@ declare module "@elegant-router/types" {
|
||||
"changeledger": "/changeledger";
|
||||
"changeledger_mychanges": "/changeledger/mychanges";
|
||||
"changeledger_workshopchanges": "/changeledger/workshopchanges";
|
||||
"changepassword": "/changepassword";
|
||||
"changestatistics": "/changestatistics";
|
||||
"details": "/details";
|
||||
"details_closedoc": "/details/closedoc";
|
||||
"details_index": "/details/index";
|
||||
"docs": "/docs";
|
||||
"docs_archives": "/docs/archives";
|
||||
"docs_query": "/docs/query";
|
||||
@@ -35,18 +39,15 @@ declare module "@elegant-router/types" {
|
||||
"my_datachangecenter": "/my/datachangecenter";
|
||||
"my_effect": "/my/effect";
|
||||
"my_highrisk": "/my/highrisk";
|
||||
"my_highriskdetail": "/my/highriskdetail";
|
||||
"my_initiatechange": "/my/initiatechange";
|
||||
"my_mydraft": "/my/mydraft";
|
||||
"my_mytask": "/my/mytask";
|
||||
"my_pending": "/my/pending";
|
||||
"my_pendingchange": "/my/pendingchange";
|
||||
"my_pssr": "/my/pssr";
|
||||
"report": "/report";
|
||||
"riskstatistics": "/riskstatistics";
|
||||
"signstatistics": "/signstatistics";
|
||||
"systemmanage": "/systemmanage";
|
||||
"systemmanage_changepassword": "/systemmanage/changepassword";
|
||||
"systemmanage_role": "/systemmanage/role";
|
||||
"systemmanage_setting": "/systemmanage/setting";
|
||||
"systemmanage_template": "/systemmanage/template";
|
||||
@@ -86,7 +87,9 @@ declare module "@elegant-router/types" {
|
||||
| "404"
|
||||
| "500"
|
||||
| "changeledger"
|
||||
| "changepassword"
|
||||
| "changestatistics"
|
||||
| "details"
|
||||
| "docs"
|
||||
| "factoryoverview"
|
||||
| "home"
|
||||
@@ -117,7 +120,10 @@ declare module "@elegant-router/types" {
|
||||
| "500"
|
||||
| "changeledger_mychanges"
|
||||
| "changeledger_workshopchanges"
|
||||
| "changepassword"
|
||||
| "changestatistics"
|
||||
| "details_closedoc"
|
||||
| "details_index"
|
||||
| "docs_archives"
|
||||
| "docs_query"
|
||||
| "factoryoverview"
|
||||
@@ -127,17 +133,14 @@ declare module "@elegant-router/types" {
|
||||
| "my_datachangecenter"
|
||||
| "my_effect"
|
||||
| "my_highrisk"
|
||||
| "my_highriskdetail"
|
||||
| "my_initiatechange"
|
||||
| "my_mydraft"
|
||||
| "my_mytask"
|
||||
| "my_pending"
|
||||
| "my_pendingchange"
|
||||
| "my_pssr"
|
||||
| "report"
|
||||
| "riskstatistics"
|
||||
| "signstatistics"
|
||||
| "systemmanage_changepassword"
|
||||
| "systemmanage_role"
|
||||
| "systemmanage_setting"
|
||||
| "systemmanage_template"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -171,7 +171,7 @@ const tabChange = (k: string) => {
|
||||
|
||||
// 高风险场景查看变更
|
||||
const openSceneChange = (record: any) => {
|
||||
routerPushByKey('home_highriskdetail', { query: { params: JSON.stringify(record) } })
|
||||
routerPushByKey('details_index', { query: { params: JSON.stringify(record) } })
|
||||
};
|
||||
// 查看分析记录
|
||||
const viewAnalysis = (record: any) => {
|
||||
|
||||
@@ -91,7 +91,7 @@ const opts = computed<Opt[]>(() => {
|
||||
// 打开详情、修改重报
|
||||
const openDetail = (c: any,type:string = '') => {
|
||||
if(type==='detail'){
|
||||
routerPushByKey("my_highriskdetail",{ query: { id: c.change_id.toString() } });
|
||||
routerPushByKey("details_index",{ query: { id: c.change_id.toString() } });
|
||||
}
|
||||
if(type==='edit'){
|
||||
routerPushByKey("my_initiatechange",{ query: { id: c.change_id.toString() } });
|
||||
|
||||
@@ -61,7 +61,7 @@ const downloadFile = (record: any) => {
|
||||
};
|
||||
// 打开变更单
|
||||
const openChange = (record: any) => {
|
||||
routerPushByKey('home_highriskdetail', { query: { params: JSON.stringify(record) } })
|
||||
routerPushByKey('details_index', { query: { params: JSON.stringify(record) } })
|
||||
};
|
||||
// 填写投用日期
|
||||
const fillUseTime = (record: any) => {
|
||||
|
||||
@@ -136,7 +136,7 @@ const downloadTemplate = (record: any) => {
|
||||
};
|
||||
// 打开变更单
|
||||
const openChange = (record: any) => {
|
||||
routerPushByKey('home_highriskdetail', { query: { params: JSON.stringify(record) } })
|
||||
routerPushByKey('details_index', { query: { params: JSON.stringify(record) } })
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
@@ -169,22 +169,32 @@ const getAllPaths = (tree:any) => {
|
||||
})
|
||||
return paths
|
||||
}
|
||||
|
||||
// 过滤路由
|
||||
const filterRoutes = (routes:any) => {
|
||||
return routes
|
||||
.filter((route:any) => route.name != null && route.meta?.constant !== true)
|
||||
.map((route:any) => ({
|
||||
...route,
|
||||
children: Array.isArray(route.children)
|
||||
? filterRoutes(route.children)
|
||||
: route.children
|
||||
}));
|
||||
}
|
||||
// 获取所有路由
|
||||
const getAllRoutes = () => {
|
||||
console.log(router.getRoutes())
|
||||
const filtered = router.getRoutes().filter((item:any) => {
|
||||
// 条件1:有name且非常量
|
||||
if (item.name === undefined || item.meta?.constant === true) return false;
|
||||
// 条件2:path中斜杠数量 < 2(即只有一级)
|
||||
const path = item.path || '';
|
||||
const slashCount = (path.match(/\//g) || []).length;
|
||||
if (slashCount >= 2) return false;
|
||||
return true;
|
||||
})
|
||||
// 过滤路由
|
||||
const result = filterRoutes(router.getRoutes());
|
||||
console.log(router.getRoutes());
|
||||
// 过滤一级路由
|
||||
const filtered = result.filter((route:any) => {
|
||||
// 计算 path 中 '/' 的个数
|
||||
const slashCount = (route.path.match(/\//g) || []).length;
|
||||
return slashCount <= 1;
|
||||
});
|
||||
// 复制title到顶层
|
||||
const tree = filtered.map((item:any) => copyTitleToTop(item));
|
||||
routeTree.value = tree;
|
||||
|
||||
console.log(tree)
|
||||
allPaths.value = getAllPaths(tree);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user