// 「平台菜单 → 内部路由」解析验收脚本(独立预览,不参与业务构建) // // 背景:基础平台 GetUserMod 返回的模块 path 是历史路径(/leave/shenhe、 // /leave/liucheng…),modId 又是环境相关的自增 id(本环境 97–105,与路由 // meta 里的历史编号并不一致)。只要有模块解析不出内部路由,侧栏点击就会弹 // 「菜单「x」未配置有效页面路径」。本脚本把平台真实返回原样喂给解析器, // 逐项核对解析结果 + 路由是否可 resolve,结果写入 document.title 供无头 // 浏览器 --dump-dom 读取(DOM 渲染中文在无头环境不稳定,标题更可靠)。 // // 用法: // npx vite --config preview.vite.config.ts --port 8099 // 打开 http://localhost:8099/preview-menu.html(人眼)或加 --dump-dom(断言) import { createRouter, createMemoryHistory } from "vue-router"; import routes from "@/router/routes"; import { resolveMenuPage } from "@/utils/menuRoute"; /** 平台 GetUserMod 原样返回(2026-10 环境) */ const MODS: any[] = [ { id: 97, modId: 97, name: "我要请假", page: "/leave/" }, { id: 98, modId: 98, name: "我的请假", page: "/leave/myleave" }, { id: 99, modId: 99, name: "审批列表", page: "/leave/shenhe" }, { id: 100, modId: 100, name: "抄送列表", page: "/leave/leave_send" }, { id: 101, modId: 101, name: "全部请假", page: "/leave/totallist" }, { id: 102, modId: 102, name: "流程管理", page: "/leave/liucheng" }, { id: 103, modId: 103, name: "请假设置", page: "/leave/leave_timeSetting" }, { id: 104, modId: 104, name: "时长日志", page: "/leave/leave_amendant" }, { id: 105, modId: 105, name: "统计分析", page: "/leave/tongji" }, ]; const router = createRouter({ history: createMemoryHistory(), routes }); const rows = MODS.map((m) => { const r = resolveMenuPage(m.page, m.modId ?? m.id, m.name); // 路由层能否 resolve(含重定向穿透),用于区分「解析器不认」与「路由表没有」 const rv = router.resolve(m.page || "/"); return { name: m.name, modId: m.modId, page: m.page, resolved: r.path, external: r.external, routerPath: rv.path, matched: rv.matched.length, }; }); const bad = rows.filter((r) => !r.resolved); document.title = `MENU|bad=${bad.length}|` + rows.map((r) => `${r.name}=${r.resolved || "ERR"}${r.external ? "(ext)" : ""}`).join(" | "); // 人眼核对用的表格 const app = document.getElementById("app")!; app.innerHTML = `
| ${h} | `) .join("")}||||||
|---|---|---|---|---|---|---|
| ${r.name} | ${r.modId} | ${r.page} | ${r.resolved || "解析失败"} | ${r.external ? "是" : "-"} | ${r.routerPath}${r.matched ? "" : "(无匹配)"} | ${r.matched} |
期望:9 项全部解析到注册路由;「流程管理」应落在 /flow(打开请假设置页的流程管理 tab)。