菜单权限
This commit is contained in:
@@ -1,210 +1,180 @@
|
||||
import { lazy } from "react";
|
||||
|
||||
// Resource Management routes
|
||||
const resourceRoutes = [
|
||||
// 所有可用的路由配置
|
||||
export const allRoutes = [
|
||||
{
|
||||
path: "team",
|
||||
component: lazy(() => import("@/pages/resource/team")),
|
||||
name: "团队管理",
|
||||
icon: "team",
|
||||
roles: ["OWNER"],
|
||||
path: "dashboard",
|
||||
component: lazy(() => import("@/pages/Dashboard")),
|
||||
name: "仪表盘",
|
||||
icon: "dashboard",
|
||||
key: "dashboard",
|
||||
},
|
||||
{
|
||||
path: "role",
|
||||
component: lazy(() => import("@/pages/resource/role")),
|
||||
name: "角色管理",
|
||||
icon: "setting",
|
||||
roles: ["OWNER"],
|
||||
},
|
||||
{
|
||||
path: "bucket",
|
||||
component: lazy(() => import("@/pages/resource/bucket")),
|
||||
name: "对象存储",
|
||||
icon: "shop",
|
||||
roles: ["OWNER"],
|
||||
},
|
||||
|
||||
{
|
||||
path: "task/edit/:id?",
|
||||
component: lazy(() => import("@/pages/resource/resourceTask/edit")),
|
||||
hidden: true,
|
||||
name: "新增/编辑任务",
|
||||
roles: ["OWNER"],
|
||||
},
|
||||
];
|
||||
|
||||
// Company routes
|
||||
const companyRoutes = [
|
||||
{
|
||||
path: "quotation",
|
||||
component: lazy(() => import("@/pages/company/quotation")),
|
||||
name: "报价单",
|
||||
icon: "file",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
|
||||
{
|
||||
path: "quotaInfo/:id?", // 添加可选的 id 参数
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/quotation/detail")),
|
||||
name: "报价单详情",
|
||||
icon: "file",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "project",
|
||||
component: lazy(() => import("@/pages/company/project")),
|
||||
name: "专案管理",
|
||||
path: "resource",
|
||||
component: lazy(() => import("@/pages/resource")),
|
||||
name: "资源管理",
|
||||
icon: "appstore",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "task",
|
||||
component: lazy(() => import("@/pages/company/task")),
|
||||
name: "任务管理",
|
||||
icon: "appstore",
|
||||
roles: ["OWNER"],
|
||||
key: "resource",
|
||||
children: [
|
||||
{
|
||||
path: "team",
|
||||
component: lazy(() => import("@/pages/resource/team")),
|
||||
name: "团队管理",
|
||||
icon: "team",
|
||||
key: "resource/team",
|
||||
},
|
||||
{
|
||||
path: "role",
|
||||
component: lazy(() => import("@/pages/resource/role")),
|
||||
name: "角色管理",
|
||||
icon: "setting",
|
||||
key: "resource/role",
|
||||
},
|
||||
{
|
||||
path: "menu",
|
||||
component: lazy(() => import("@/pages/resource/menu")),
|
||||
name: "菜单管理",
|
||||
icon: "menu",
|
||||
key: "resource/menu",
|
||||
},
|
||||
{
|
||||
path: "bucket",
|
||||
component: lazy(() => import("@/pages/resource/bucket")),
|
||||
name: "对象存储",
|
||||
icon: "shop",
|
||||
key: "resource/bucket",
|
||||
},
|
||||
{
|
||||
path: "task/edit/:id?",
|
||||
component: lazy(() => import("@/pages/resource/resourceTask/edit")),
|
||||
name: "新增/编辑任务",
|
||||
hidden: true,
|
||||
key: "resource/task/edit",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: "taskInfo/:id?",
|
||||
hidden:true,
|
||||
component: lazy(() => import("@/pages/company/task/detail")),
|
||||
name: "任务管理详情",
|
||||
icon: "appstore",
|
||||
roles: ["OWNER"],
|
||||
},
|
||||
{
|
||||
path: "serviceTemplate",
|
||||
component: lazy(() => import("@/pages/company/service")),
|
||||
name: "服务管理",
|
||||
icon: "container",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "templateItemManage",
|
||||
component: lazy(() => import("@/pages/company/service/itemsManange")),
|
||||
name: "资源类型",
|
||||
icon: "container",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "serviceTemplateInfo/:id?",
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/service/detail")),
|
||||
name: "服务模版详情",
|
||||
icon: "container",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "quotaInfo/preview/:id?", // 添加可选的 id 参数
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/quotation/view")),
|
||||
name: "报价单预览",
|
||||
icon: "file",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "customer",
|
||||
component: lazy(() => import("@/pages/company/customer")),
|
||||
name: "客户管理",
|
||||
icon: "user",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "customerInfo/:id?",
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/customer/detail")),
|
||||
name: "客户详情",
|
||||
icon: "user",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "supplier",
|
||||
component: lazy(() => import("@/pages/company/supplier")),
|
||||
name: "供应商管理",
|
||||
icon: "branches",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "supplierInfo/:id?",
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/supplier/detail")),
|
||||
name: "供应商详情",
|
||||
icon: "branches",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
|
||||
{
|
||||
path: "projectInfo/:id?",
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/project/detail")),
|
||||
name: "专案管理详情",
|
||||
icon: "appstore",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
{
|
||||
path: "projectView/:id?",
|
||||
hidden: true,
|
||||
component: lazy(() => import("@/pages/company/project/info")),
|
||||
name: "专案详情",
|
||||
icon: "appstore",
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
path: "company",
|
||||
component: lazy(() => import("@/pages/company")),
|
||||
name: "公司管理",
|
||||
icon: "bank",
|
||||
key: "company",
|
||||
children: [
|
||||
{
|
||||
path: "quotation",
|
||||
component: lazy(() => import("@/pages/company/quotation")),
|
||||
name: "报价单",
|
||||
icon: "file",
|
||||
key: "company/quotation",
|
||||
},
|
||||
{
|
||||
path: "quotaInfo/:id?",
|
||||
component: lazy(() => import("@/pages/company/quotation/detail")),
|
||||
name: "报价单详情",
|
||||
icon: "file",
|
||||
hidden: true,
|
||||
key: "company/quotaInfo",
|
||||
},
|
||||
{
|
||||
path: "project",
|
||||
component: lazy(() => import("@/pages/company/project")),
|
||||
name: "专案管理",
|
||||
icon: "appstore",
|
||||
key: "company/project",
|
||||
},
|
||||
{
|
||||
path: "task",
|
||||
component: lazy(() => import("@/pages/company/task")),
|
||||
name: "任务管理",
|
||||
icon: "appstore",
|
||||
key: "company/task",
|
||||
},
|
||||
{
|
||||
path: "taskInfo/:id?",
|
||||
component: lazy(() => import("@/pages/company/task/detail")),
|
||||
name: "任务管理详情",
|
||||
icon: "appstore",
|
||||
hidden: true,
|
||||
key: "company/taskInfo",
|
||||
},
|
||||
{
|
||||
path: "serviceTemplate",
|
||||
component: lazy(() => import("@/pages/company/service")),
|
||||
name: "服务管理",
|
||||
icon: "appstore",
|
||||
key: "company/serviceTemplate",
|
||||
},
|
||||
{
|
||||
path: "supplier",
|
||||
component: lazy(() => import("@/pages/company/supplier")),
|
||||
name: "供应商管理",
|
||||
icon: "branches",
|
||||
key: "company/supplier",
|
||||
},
|
||||
{
|
||||
path: "supplierInfo/:id?",
|
||||
component: lazy(() => import("@/pages/company/supplier/detail")),
|
||||
name: "供应商详情",
|
||||
icon: "branches",
|
||||
hidden: true,
|
||||
key: "company/supplierInfo",
|
||||
},
|
||||
{
|
||||
path: "projectInfo/:id?",
|
||||
component: lazy(() => import("@/pages/company/project/detail")),
|
||||
name: "专案管理详情",
|
||||
icon: "appstore",
|
||||
hidden: true,
|
||||
key: "company/projectInfo",
|
||||
},
|
||||
{
|
||||
path: "projectView/:id?",
|
||||
component: lazy(() => import("@/pages/company/project/info")),
|
||||
name: "专案详情",
|
||||
icon: "appstore",
|
||||
hidden: true,
|
||||
key: "company/projectView",
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
const marketingRoutes = [];
|
||||
export const getRouteByKey = (key) => {
|
||||
const keys = key.split('/').filter(Boolean);
|
||||
let current = allRoutes;
|
||||
let result = null;
|
||||
|
||||
// const roleRoutes = [
|
||||
// {
|
||||
// path: "role",
|
||||
// component: lazy(() => import("@/pages/role")),
|
||||
// name: "角色管理",
|
||||
// icon: "setting",
|
||||
// roles: ["ADMIN", "OWNER"],
|
||||
// },
|
||||
// ];
|
||||
keys.forEach(k => {
|
||||
const found = current.find(r => r.path.split('/')[0] === k);
|
||||
if (found) {
|
||||
result = found;
|
||||
current = found.children || [];
|
||||
}
|
||||
});
|
||||
|
||||
export const generateRoutes = (role) => {
|
||||
return [
|
||||
{
|
||||
path: "dashboard",
|
||||
component: lazy(() => import("@/pages/Dashboard")),
|
||||
name: "仪表盘",
|
||||
icon: "dashboard",
|
||||
roles: ["ADMIN", "OWNER", "MEMBER"],
|
||||
},
|
||||
{
|
||||
path: "resource",
|
||||
component: lazy(() => import("@/pages/resource")),
|
||||
name: "资源管理",
|
||||
icon: "appstore",
|
||||
children: resourceRoutes.filter((route) => route.roles.includes(role)),
|
||||
roles: ["OWNER"],
|
||||
},
|
||||
{
|
||||
path: "company",
|
||||
component: lazy(() => import("@/pages/company")),
|
||||
name: "公司管理",
|
||||
icon: "bank",
|
||||
children: companyRoutes.filter((route) => route.roles.includes(role)),
|
||||
roles: ["ADMIN", "OWNER"],
|
||||
},
|
||||
// {
|
||||
// path: "marketing",
|
||||
// component: lazy(() => import("@/pages/marketing")),
|
||||
// name: "行销中心",
|
||||
// icon: "shopping",
|
||||
// children: marketingRoutes.filter((route) => route.roles.includes(role)),
|
||||
// roles: ["ADMIN", "OWNER"],
|
||||
// },
|
||||
|
||||
// {
|
||||
// path: "role",
|
||||
// component: lazy(() => import("@/pages/role")),
|
||||
// name: "权限管理",
|
||||
// icon: "setting",
|
||||
// children: roleRoutes.filter((route) => route.roles.includes(role)),
|
||||
// roles: ["ADMIN", "OWNER"],
|
||||
// },
|
||||
].filter((route) => route.roles.includes(role));
|
||||
return result;
|
||||
};
|
||||
|
||||
export const flattenRoutes = (routes, parentPath = '') => {
|
||||
return routes.reduce((acc, route) => {
|
||||
const path = parentPath ? `${parentPath}/${route.path}` : route.path;
|
||||
acc.push({ ...route, path });
|
||||
|
||||
if (route.children) {
|
||||
acc.push(...flattenRoutes(route.children, path));
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, []);
|
||||
};
|
||||
|
||||
// 获取所有可选的路由选项(用于菜单管理)
|
||||
export const getAllRouteOptions = () => {
|
||||
return flattenRoutes(allRoutes)
|
||||
.filter(route => !route.hidden)
|
||||
.map(route => ({
|
||||
label: route.name,
|
||||
value: route.key,
|
||||
isLeaf: !route.children
|
||||
}));
|
||||
};
|
||||
Reference in New Issue
Block a user