diff --git a/generate-menu-excel.js b/generate-menu-excel.js index f7462f2..6d3d38e 100644 --- a/generate-menu-excel.js +++ b/generate-menu-excel.js @@ -304,6 +304,17 @@ const menuData = [ hideInMenu: false, }, // 二级菜单 - 订单 + { + level: 2, + name: '新手指引', + permissionCode: 'Order', + route: '/order/guide', + component: 'views/order/orderGuide/index', + icon: 'icon-book', + order: 0, + hideInMenu: false, + parentRoute: '/order', + }, { level: 2, name: '我要查价', @@ -361,6 +372,17 @@ const menuData = [ hideInMenu: false, }, // 二级菜单 - 渠道 + { + level: 2, + name: '新手指引', + permissionCode: 'Channel', + route: '/channel/guide', + component: 'views/channel/channelGuide/index', + icon: 'icon-book', + order: 0, + hideInMenu: false, + parentRoute: '/channel', + }, { level: 2, name: '销售产品', diff --git a/src/components/top-nav/index.vue b/src/components/top-nav/index.vue index fc08fb5..56cdf3d 100644 --- a/src/components/top-nav/index.vue +++ b/src/components/top-nav/index.vue @@ -32,7 +32,7 @@ - {{ formatMenuTitle(menuItem.name || menuItem.meta?.title) }} + {{ formatMenuTitle(menuItem.name || menuItem.meta?.title, menuItem.path || menuItem.route) }} @@ -169,7 +169,7 @@ import { useHiprintClientState, } from '@/utils/hiprint/hiprintClientState'; import { getMapIdFromAccessToken } from '@/utils/jwt'; -import { getSubMenuIcon } from '@/utils/menu-icon'; +import { getSubMenuIcon, PATH_TO_LOCALE_KEY } from '@/utils/menu-icon'; import { canAccessCustomerPortalRoute } from '@/utils/login-portal'; import { resolveCurrentCustomer } from '@/api/customer/resolve'; import { CUSTOMER_BALANCE_CHANGED_EVENT } from '@/api/customer/accountFlow'; @@ -405,6 +405,9 @@ const belongTopMenu = computed(() => { return ''; }); +// 路径 → locale(同名菜单如「新手指引」须按 path 区分) +const pathToLocaleKeyMap = PATH_TO_LOCALE_KEY; + // 中文菜单名称到 locale key 的映射表 const menuNameToLocaleKeyMap: Record = { '首页': 'menu.home', @@ -483,8 +486,12 @@ const menuNameToLocaleKeyMap: Record = { }; // 格式化菜单标题 -const formatMenuTitle = (title?: string) => { +const formatMenuTitle = (title?: string, path?: string) => { if (!title) return ''; + const routePath = path?.trim(); + if (routePath && pathToLocaleKeyMap[routePath]) { + return t(pathToLocaleKeyMap[routePath]) || title; + } // 如果是 locale key,直接翻译 if (title.startsWith('menu.')) { return t(title) || title; @@ -576,7 +583,14 @@ const pathToRouteNameMap: Record = { '/channel/weightRounding': 'WeightRounding', '/channel/autoTrigger': 'AutoTrigger', '/channel/issueTemplate': 'IssueTemplate', + '/channel/guide': 'ChannelGuide', + '/order/guide': 'OrderGuide', + '/order/priceCheck': 'PriceCheck', + '/order/placeOrder': 'PlaceOrder', + '/order/myOrders': 'MyOrders', + '/order/batchJobs': 'OrderBatchJobs', // Track 相关路由 + '/track/guide': 'TrackGuide', '/track/order': 'TrackOrder', '/track/warningOrder': 'TrackWarningOrder', '/track/state': 'TrackState', diff --git a/src/utils/menu-icon.ts b/src/utils/menu-icon.ts index 537abdf..798f44d 100644 --- a/src/utils/menu-icon.ts +++ b/src/utils/menu-icon.ts @@ -104,6 +104,13 @@ export function resolveArcoIcon(icon?: string | null): Component | null { return (Icons as Record)[pascal] ?? null } +/** 同名菜单(如「新手指引」)按 path 区分 locale */ +export const PATH_TO_LOCALE_KEY: Record = { + '/track/guide': 'menu.track.trackGuide', + '/order/guide': 'menu.order.orderGuide', + '/channel/guide': 'menu.channel.channelGuide', +} + type MenuIconItem = { name?: string path?: string @@ -118,6 +125,10 @@ function resolveLocaleKey( menuItem: MenuIconItem, nameToLocaleKeyMap?: Record, ): string | undefined { + const routePath = (menuItem.path || menuItem.route || '').trim() + if (routePath && PATH_TO_LOCALE_KEY[routePath]) { + return PATH_TO_LOCALE_KEY[routePath] + } const title = menuItem.name || menuItem.meta?.title || '' if (!title) return undefined if (title.startsWith('menu.')) return title diff --git a/vite.config.ts b/vite.config.ts index 6009681..7dc8112 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -258,7 +258,9 @@ export default defineConfig(({ mode }) => { '/channel/autoTrigger', '/channel/issueTemplate', '/channel/labelDesign', + '/channel/guide', // Order 相关前端路由 + '/order/guide', '/order/priceCheck', '/order/placeOrder', '/order/myOrders',