-- ============================================================ -- 「工具列表」下新增「JSON 格式化」菜单 -- -- 菜单由 t_sys_permission 表驱动,前端 formatMenuList() 会把 component -- 拼成 import('@/view' + component + '.vue'),因此 component 必须带前导斜杠, -- 且要与磁盘文件 src/view/tools/json-format.vue 对应 -- -- 幂等:可重复执行,已存在则先清理再插入 -- 执行库:freedom_db -- -- 注意:id 由数据库自增分配,父菜单通过 permission_code 子查询定位, -- 两者都不硬编码——避免与 t_sys_role_permission 的独立自增序列撞主键。 -- ============================================================ -- ---------- 1. 清理历史遗留 ---------- DELETE rp FROM `t_sys_role_permission` rp JOIN `t_sys_permission` p ON p.id = rp.permission_id WHERE p.permission_code = 'tools:json-format'; DELETE FROM `t_sys_permission` WHERE `permission_code` = 'tools:json-format'; -- ---------- 2. 插入子菜单「JSON 格式化」 ---------- -- parent_id 用子查询取「工具列表」的 id,不写死数字 -- sort=2 排在「文本比对」(sort=1) 之后 -- icon md-brush 已从线上 CSS 校验存在 INSERT INTO `t_sys_permission` (`parent_id`, `permission_code`, `permission_name`, `permission_desc`, `level`, `icon`, `url`, `component`, `sort`, `create_by`, `create_date`, `del_flag`) SELECT p.`id`, 'tools:json-format', 'JSON 格式化', 'JSON 美化、压缩与语法错误定位,支持超长整数原样保留', 2, 'md-brush', '/tools/json-format', '/tools/json-format', 2, 'admin', NOW(), 0 FROM `t_sys_permission` p WHERE p.permission_code = 'tools'; -- ---------- 3. 授权给全部有效角色 ---------- -- 菜单 id 由上一条语句的插入值取得 SET @json_menu_id = ( SELECT `id` FROM `t_sys_permission` WHERE `permission_code` = 'tools:json-format' LIMIT 1 ); INSERT INTO `t_sys_role_permission` (`role_id`, `permission_id`, `create_by`, `create_date`) SELECT r.`id`, @json_menu_id, 'admin', NOW() FROM `t_sys_role` r WHERE r.`del_flag` = 0 AND @json_menu_id IS NOT NULL; -- ---------- 4. 校验 ---------- -- 预期 2 行:工具列表 + 文本比对 + JSON 格式化(level=2 的两条子菜单) SELECT p.`id`, p.`parent_id`, p.`permission_code`, p.`permission_name`, p.`level`, p.`icon`, p.`url`, p.`component`, p.`sort` FROM `t_sys_permission` p WHERE p.permission_code = 'tools' OR p.parent_id IN (SELECT `id` FROM (SELECT `id` FROM `t_sys_permission` WHERE `permission_code` = 'tools') x) ORDER BY p.level, p.sort; -- 预期:每个有效角色 1 条新关联 SELECT rp.`id`, rp.`role_id`, r.`role_name`, rp.`permission_id`, p.`permission_name` FROM `t_sys_role_permission` rp JOIN `t_sys_role` r ON r.`id` = rp.`role_id` JOIN `t_sys_permission` p ON p.`id` = rp.`permission_id` WHERE p.permission_code = 'tools:json-format' ORDER BY rp.`role_id`;