-- S8-ORDER-REVIEW-HOURS-PAGE-RETIREMENT-1 · 下线「订单评审耗时」独立页入口。 -- -- 背景:该页已无独立业务价值 —— S8 主链已 Order-centric,评审耗时在「订单执行档案」 -- 的五阶段里呈现(Stage-1 ORDER_REVIEW 的 ActualHours / CalculationStatus), -- 不需要再开一个平行入口。 -- -- 附带修掉的一个真实缺陷(也是用户看到的怪现象的成因): -- 1.0.527 建这条菜单时,把 `OutLink` 当成布尔开关按位置写了字面量 0, -- 但 `SysMenu.OutLink` 是 **string?(外链 URL)**,于是该行存的是字符串 '0' -- (同目录兄弟菜单均为 NULL)。链路: -- SysMenu.OutLink='0' → MenuOutput.Meta.IsLink='0'(truthy) -- → navMenu/vertical.vue 走 `v-else` 分支渲染 -- → other.handleOpenLink → window.open(origin + pathname + '#' + '0') -- → 新开一个 tab 落到 #/0 → 无匹配路由 → 「找不到此页面」。 -- 本批把该菜单整条停用,症状随之消失;**不修 OutLink 值**,因为页面本身要退役, -- 改一个即将停用的行的字段没有意义,反而会掩盖 1.0.527 的历史事实。 -- -- 为什么 Status=2 而不是 IsHide=1: -- IsHide 只是不出现在侧栏,路由仍会下发,手输 URL 照样进得去。 -- Status=2(Disable) 才会让 SysMenuService 不再下发该路由 —— 这才是真退役。 -- (与 1.0.484 下线「数据源 / 报警规则」采用的是同一套机制。) -- -- 为什么不 DELETE: -- 1. 1.0.528 已按父目录授权集合写入了 SysRoleMenu 行,DELETE 会留下悬挂引用; -- 2. 本批只做 Runtime Retirement,物理清理留待后续独立批次; -- 3. 要复活只需改回 Status=1。 -- -- 精确匹配 Name + Path 两列,不使用 LIKE '/aidop/s8/monitoring/%' 之类的范围条件 —— -- 同目录下的「订单执行档案」「订单链路全景」是本批明确要保留的页面。 -- -- 幂等:带 Status <> 2 前置条件,重复执行不产生额外影响。 UPDATE SysMenu SET Status = 2, Remark = 'S8 订单评审耗时(已退役,评审耗时并入订单执行档案五阶段;历史保留)', UpdateTime = NOW() WHERE Name = 'aidopS8OrderReviewActualHours' AND Path = '/aidop/s8/monitoring/order-review-hours' AND Status <> 2;