更改校端权限
This commit is contained in:
+46
-22
@@ -1,26 +1,23 @@
|
||||
import type { IModule } from "@/store";
|
||||
import { UserRoleEnum } from "@/types";
|
||||
|
||||
/**
|
||||
* 左侧菜单数据(系统管理功能分组)
|
||||
* 左侧菜单数据(系统管理功能分组)+ 菜单权限矩阵(管理端权限分级改造 §4.2)。
|
||||
* ----------------------------------------------------------------
|
||||
* 当前直接 Promise.resolve 返回写死数据;后续接入真实接口时,
|
||||
* 只需把 `return Promise.resolve(menu)` 替换为
|
||||
* `return alovaInstance.Request(Apis.xxx.getMenu())`
|
||||
* 即可无缝对接,调用方(store.fetchModules)无需任何改动。
|
||||
* 每个节点带 roles 元数据(可访问级别集合),getMenuList(userRole) 按级别过滤,
|
||||
* children 过滤后为空的父目录整体隐藏。当前数据写死;后续接入真实接口时,
|
||||
* 只需把 `return Promise.resolve(...)` 替换为接口调用后 filterMenuByRole 即可。
|
||||
*
|
||||
* 分组结构:
|
||||
* 1. 组,用户管理 —— 顶层独立选项卡(单页)
|
||||
* 2. 应用管理 —— 顶层独立选项卡(= 应用列表主页 /app-manage/list);
|
||||
* 页内按钮跳转「应用类别管理」子页(/app-manage/category,不在菜单里,
|
||||
* 由 routes.ts 的 meta.parentId=1102 关联,面包屑「应用管理>应用类别管理」)
|
||||
* 3. 权限管理 —— 父目录:应用开通 / 组授权 / 权限一览
|
||||
* 4. 日志管理 —— 父目录:接口日志 / 系统日志
|
||||
* 1. 组,用户管理 —— S+B+C
|
||||
* 2. 应用管理 —— S+C(局端不开放:局端的应用动作是「开通」,应用维护是平台级)
|
||||
* 3. 权限管理 —— 父目录:应用开通(S+B) / 组授权 / 角色授权 / 权限一览(S+B+C)
|
||||
* 4. 日志管理 —— 仅超管(父目录)
|
||||
*
|
||||
* 每个节点带唯一 id;子节点的 pid 由 layout.vue 的 flaten() 扁平化时
|
||||
* 依据父节点 id 自动推导,用于「高亮自身 + 面包屑展示父级」联动。
|
||||
* 菜单项不再渲染 icon。
|
||||
*/
|
||||
export function getMenuList(): Promise<IModule[]> {
|
||||
export function getMenuList(userRole?: UserRoleEnum): Promise<IModule[]> {
|
||||
const menu: IModule[] = [
|
||||
// 1. 组,用户管理(顶层独立选项卡)
|
||||
{
|
||||
@@ -28,6 +25,7 @@ export function getMenuList(): Promise<IModule[]> {
|
||||
modId: 1101,
|
||||
name: "组,用户管理",
|
||||
page: "/group-user",
|
||||
roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau, UserRoleEnum.School],
|
||||
},
|
||||
// 2. 应用管理(顶层独立选项卡,= 应用列表主页;页内按钮跳转应用类别管理子页)
|
||||
{
|
||||
@@ -35,6 +33,7 @@ export function getMenuList(): Promise<IModule[]> {
|
||||
modId: 1102,
|
||||
name: "应用管理",
|
||||
page: "/app-manage/list",
|
||||
roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.School],
|
||||
},
|
||||
// 3. 权限管理(父目录)
|
||||
{
|
||||
@@ -43,11 +42,12 @@ export function getMenuList(): Promise<IModule[]> {
|
||||
name: "权限管理",
|
||||
page: "",
|
||||
childState: true,
|
||||
roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau, UserRoleEnum.School],
|
||||
children: [
|
||||
{ id: 41, modId: 1103, name: "应用开通", page: "/app-open" },
|
||||
{ id: 42, modId: 1104, name: "组授权", page: "/group-auth" },
|
||||
{ id: 44, modId: 1110, name: "角色授权", page: "/role-authz/list" },
|
||||
{ id: 43, modId: 1105, name: "权限一览", page: "/permission-view" },
|
||||
{ id: 41, modId: 1103, name: "应用开通", page: "/app-open", roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau] },
|
||||
{ id: 42, modId: 1104, name: "组授权", page: "/group-auth", roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau, UserRoleEnum.School] },
|
||||
{ id: 44, modId: 1110, name: "角色授权", page: "/role-authz/list", roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau, UserRoleEnum.School] },
|
||||
{ id: 43, modId: 1105, name: "权限一览", page: "/permission-view", roles: [UserRoleEnum.SuperAdmin, UserRoleEnum.Bureau, UserRoleEnum.School] },
|
||||
],
|
||||
},
|
||||
// 4. 日志管理(父目录)
|
||||
@@ -57,13 +57,37 @@ export function getMenuList(): Promise<IModule[]> {
|
||||
name: "日志管理",
|
||||
page: "",
|
||||
childState: true,
|
||||
roles: [UserRoleEnum.SuperAdmin],
|
||||
children: [
|
||||
{ id: 53, modId: 1111, name: "操作日志", page: "/oplog" },
|
||||
{ id: 56, modId: 1114, name: "开放接口日志", page: "/oapilog" },
|
||||
{ id: 54, modId: 1112, name: "推送日志", page: "/push-log" },
|
||||
{ id: 55, modId: 1113, name: "测试推送", page: "/push-test" },
|
||||
{ id: 53, modId: 1111, name: "操作日志", page: "/oplog", roles: [UserRoleEnum.SuperAdmin] },
|
||||
{ id: 56, modId: 1114, name: "开放接口日志", page: "/oapilog", roles: [UserRoleEnum.SuperAdmin] },
|
||||
{ id: 54, modId: 1112, name: "推送日志", page: "/push-log", roles: [UserRoleEnum.SuperAdmin] },
|
||||
{ id: 55, modId: 1113, name: "测试推送", page: "/push-test", roles: [UserRoleEnum.SuperAdmin] },
|
||||
],
|
||||
},
|
||||
];
|
||||
return Promise.resolve(menu);
|
||||
return Promise.resolve(filterMenuByRole(menu, userRole));
|
||||
}
|
||||
|
||||
/** 按级别过滤菜单:roles 未声明的节点视为全部级别可见;children 过滤后为空的父目录整体隐藏 */
|
||||
export function filterMenuByRole(menu: IModule[], userRole?: UserRoleEnum): IModule[] {
|
||||
if (userRole == null) {
|
||||
return menu;
|
||||
}
|
||||
const result: IModule[] = [];
|
||||
for (const item of menu) {
|
||||
const roles = (item as any).roles as UserRoleEnum[] | undefined;
|
||||
if (roles && !roles.includes(userRole)) {
|
||||
continue;
|
||||
}
|
||||
const children = item.children
|
||||
? filterMenuByRole(item.children, userRole)
|
||||
: undefined;
|
||||
if (item.childState && (!children || children.length === 0)) {
|
||||
// 父目录:可见但全部子项被过滤 → 整体隐藏
|
||||
continue;
|
||||
}
|
||||
result.push(children ? { ...item, children } : item);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user