-- ============================================================================= -- 缴费信息独立菜单:显示与排序(2026-10-05) -- ============================================================================= -- -- 【主路径 — 前端固定菜单】 -- 当前 Web 管理端使用 VITE_ACCESS_MODE=frontend,菜单树由以下两处维护,Task 4 已更新: -- - backend/app/api/menu.py → CellStoragePaymentInfo(id 904b5173519411f1944300163e3bdd96) -- - web-admin/src/router/modules/sqxp.ts → 预签约订单与样本信息管理之间,已取消 isHide -- 前端模式环境 **无需执行** 本脚本;保留本文件供 DB 菜单模式或角色授权同步参考。 -- -- 【可选 — DB 菜单模式】 -- sys_menu 列名以 backend/app/models/models.py :: SysMenu 为准(docs/sql/zkxw.sql 无 sys_menu 段)。 -- visible: '1'=显示, '0'=隐藏(与 menu.py meta.isHide 映射一致,见 reorder_web_menus.py) -- -- 细胞存储目录 parent_id: CEL00000000000000000000000000001 -- 预签约订单 id: 50000000000000000000000000000020 -- 缴费信息 id: 904b5173519411f1944300163e3bdd96 path=payment-info perms=cellStorage:paymentInfo:list -- 样本信息 id: 50000000000000000000000000000013 -- ============================================================================= -- 1) 若库中已有该菜单(按 id 或 perms 匹配):取消隐藏并调整排序至预签约与样本信息之间 UPDATE sys_menu SET del_flag = 0, visible = '1', status = '1', order_num = ( SELECT mid_order FROM ( SELECT COALESCE(MAX(m2.order_num), 0) AS mid_order FROM sys_menu m2 WHERE m2.del_flag = 0 AND ( m2.id = '50000000000000000000000000000020' OR m2.perms = 'cell-storage:presign-order:list' OR m2.path = 'presign-order' ) ) t ) + 1, update_time = NOW() WHERE del_flag = 0 AND ( id = '904b5173519411f1944300163e3bdd96' OR perms = 'cellStorage:paymentInfo:list' OR (path = 'payment-info' AND parent_id = 'CEL00000000000000000000000000001') ); -- 2) 若不存在则幂等插入(仅 DB 菜单模式需要;前端模式可跳过) INSERT INTO sys_menu ( id, menu_name, parent_id, menu_type, path, component, perms, is_frame, visible, status, tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag ) SELECT '904b5173519411f1944300163e3bdd96', '缴费信息', 'CEL00000000000000000000000000001', 'C', 'payment-info', '/cell-storage/payment-info/index', 'cellStorage:paymentInfo:list', 1, '1', '1', 'zkxw', COALESCE(( SELECT MAX(m2.order_num) + 1 FROM sys_menu m2 WHERE m2.del_flag = 0 AND ( m2.id = '50000000000000000000000000000020' OR m2.perms = 'cell-storage:presign-order:list' ) ), 1), '细胞存储:缴费信息(流程看板 + 按样本),独立于采集协议单', NULL, '', NOW(), NULL, NOW(), 0 FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM sys_menu m WHERE m.del_flag = 0 AND ( m.id = '904b5173519411f1944300163e3bdd96' OR m.perms = 'cellStorage:paymentInfo:list' ) ); -- 3) 已有「采集协议单」权限的角色补授权(幂等) INSERT INTO sys_role_menu ( id, role_id, menu_id, tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag ) SELECT MD5(CONCAT(r.id, '|904b5173519411f1944300163e3bdd96')), r.id, '904b5173519411f1944300163e3bdd96', IFNULL(NULLIF(r.tenant_no, ''), 'zkxw'), 0, 'grant payment-info to protocol-audit roles', NULL, '', NOW(), NULL, NOW(), 0 FROM sys_role r INNER JOIN sys_role_menu rm ON rm.role_id = r.id AND rm.menu_id = '50000000000000000000000000000003' AND rm.del_flag = 0 WHERE r.del_flag = 0 AND NOT EXISTS ( SELECT 1 FROM sys_role_menu x WHERE x.role_id = r.id AND x.menu_id = '904b5173519411f1944300163e3bdd96' AND x.del_flag = 0 );