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; }); }