| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import { HOME_PATH, HOME_TITLE, isHomeAliasPath } from '@/config/setting';
- /**
- * 把后端旧菜单(资质管理 / 期限管理)改成工种管理、资质证照管理。
- * 注意:保留原 path,避免门户/接口仍走旧地址时路由丢失白屏。
- * 首页 path 统一为 HOME_PATH,避免 /homeView 与 /home 双路由双页签。
- */
- const MENU_REWRITES = [
- {
- matchPath: [
- /term-management/i,
- /termManagement/i,
- /term_management/i,
- /job-management/i,
- ],
- matchTitle: [/期限管理/, /工种管理/],
- matchComponent: [/termManagement/i, /jobManagement/i],
- // 不改 path,兼容后端/门户旧地址
- component: 'hrManagement/jobManagement/index',
- title: '工种管理',
- },
- {
- matchPath: [
- /qualification-management/i,
- /qualificationManagement/i,
- /qualification_management/i,
- /qualification-certificate/i,
- ],
- matchTitle: [/^资质管理$/, /资质证照管理/],
- matchComponent: [/qualificationManagement/i, /qualificationCertificate/i],
- component: 'hrManagement/qualificationCertificate/index',
- title: '资质证照管理',
- },
- ];
- function getMenuTitle(menu) {
- return String(
- menu?.meta?.title || menu?.title || menu?.name || menu?.menuName || '',
- ).trim();
- }
- function getMenuPath(menu) {
- return String(menu?.path || '').trim();
- }
- function getMenuComponent(menu) {
- return String(menu?.component || '').trim();
- }
- function findRewrite(menu) {
- const path = getMenuPath(menu);
- const title = getMenuTitle(menu);
- const component = getMenuComponent(menu);
- return MENU_REWRITES.find(
- (rule) =>
- rule.matchPath.some((re) => re.test(path)) ||
- rule.matchTitle.some((re) => re.test(title)) ||
- rule.matchComponent.some((re) => re.test(component)),
- );
- }
- function isHomeMenu(menu) {
- if (isHomeAliasPath(getMenuPath(menu))) return true;
- const title = getMenuTitle(menu);
- if (title === HOME_TITLE || title === 'Home') return true;
- return /homeView|(^|\/)home$/i.test(getMenuComponent(menu));
- }
- /**
- * 递归改写菜单树中的旧模块
- * - 首页 path 统一为 /home/index(WT 内完整地址 /page-hr/home/index),侧栏仍显示「首页」
- * - 顶部只走小房子,不另开可关闭页签
- */
- export function rewriteLegacyHrMenus(menus = []) {
- if (!Array.isArray(menus) || !menus.length) return menus || [];
- return menus.map((item) => {
- const next = { ...item };
- if (isHomeMenu(next)) {
- next.path = HOME_PATH;
- next.component = 'homeView/index';
- next.title = HOME_TITLE;
- next.meta = {
- ...(next.meta || {}),
- title: HOME_TITLE,
- icon: next.meta?.icon || next.icon || 'el-icon-house',
- closable: false,
- };
- } else {
- const rule = findRewrite(next);
- if (rule) {
- next.component = rule.component;
- next.title = rule.title;
- next.meta = {
- ...(next.meta || {}),
- title: rule.title,
- };
- }
- }
- if (Array.isArray(next.children) && next.children.length) {
- next.children = rewriteLegacyHrMenus(next.children);
- }
- return next;
- });
- }
|