Files
freedom-admin/sql/add_json_format_menu.sql
T
zhangjiaxun 264e60392d
CI/CD Deploy (Admin) / 构建后端镜像并部署 (push) Successful in 1m7s
feat(tools): 新增 JSON 格式化菜单 SQL
沿用已验证的自增版式:
- parent_id 用子查询按 permission_code 定位「工具列表」,不硬编码 id
- 菜单 id 由 LAST_INSERT_ID() 经 SET 变量传给授权语句
- 授权用 INSERT...SELECT 覆盖全部有效角色
- 清理语句用 JOIN 精确定位,不误删他人菜单

已实测执行并校验:菜单树与授权均正确,超级管理员无遗漏项。
2026-10-20 23:00:38 +08:00

64 lines
2.9 KiB
SQL

-- ============================================================
-- 「工具列表」下新增「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`;