Files
youlai-boot/sql/menu_app_icon.sql
TongTongStudio 33fcbcff3e feat(device): add app icon management with pagination and delete functionality
新增应用图标库分页查询和图标删除接口,并完成对应的菜单与按钮权限初始化。
2026-08-06 02:25:25 +08:00

56 lines
3.5 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ----------------------------------------------------------------------------
-- 应用图标管理 菜单 & 按钮权限初始化脚本(可重复执行 / 幂等)
--
-- 依赖
-- 1. 前端页面 vue3-element-admin-ttstd/src/views/devices/app-icon/index.vue
-- 2. 后端接口 com.youlai.boot.device.controller.AppIconController (/api/v1/app-icons)
--
-- 说明
-- - 菜单本身(type=M)不携带权限字符串,权限必须来自按钮行(type=B, perm 非空)
-- - 权限字符串中含冒号,部分客户端会把 :xxx 当成绑定变量,故本脚本用 CONCAT 拼接
-- 且授权改用「菜单下所有按钮」子查询SQL 文本中避免出现 :token
-- - 权限每次请求实时查库,执行后刷新页面即可,无需重启
-- ----------------------------------------------------------------------------
-- 0. 定位「应用图标管理」菜单(按前端组件路径唯一标识)
SET @menu_id = (SELECT `id` FROM `sys_menu` WHERE `component` = 'devices/app-icon/index' LIMIT 1);
-- 若菜单不存在则创建(挂到「设备调试」目录下;如目录 id 不同请自行调整 parent_id
SET @parent_id = (SELECT `id` FROM `sys_menu` WHERE `name` = '设备调试' AND `parent_id` = 0 LIMIT 1);
INSERT INTO `sys_menu` (`parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`,
`perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`,
`create_time`, `update_time`, `params`)
SELECT @parent_id, CONCAT('0,', @parent_id), '应用图标管理', 'M', 'AppIcon', 'app-icon',
'devices/app-icon/index', NULL, NULL, 1, 1, 6, 'picture', NULL, now(), now(), NULL
FROM DUAL
WHERE @parent_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `component` = 'devices/app-icon/index');
-- 重新取一次菜单 id可能刚创建
SET @menu_id = (SELECT `id` FROM `sys_menu` WHERE `component` = 'devices/app-icon/index' LIMIT 1);
-- 计算按钮的 tree_path = 菜单 tree_path + ',' + 菜单 id
SET @tree_path = (SELECT CONCAT(`tree_path`, ',', `id`) FROM `sys_menu` WHERE `id` = @menu_id);
-- 1. 插入 4 个按钮权限(上传 / 锁定 / 解锁 / 删除;不存在才插入)
-- 权限字符串用 CONCAT 拼接,避免 :token 被客户端误判
INSERT INTO `sys_menu` (`parent_id`, `tree_path`, `name`, `type`, `route_name`, `route_path`, `component`,
`perm`, `always_show`, `keep_alive`, `visible`, `sort`, `icon`, `redirect`,
`create_time`, `update_time`, `params`)
SELECT @menu_id, @tree_path, t.`name`, 'B', NULL, NULL, NULL,
t.`perm`, NULL, NULL, 1, t.`sort`, NULL, NULL, now(), now(), NULL
FROM (
SELECT '上传' AS `name`, CONCAT('device', ':', 'app-icon', ':', 'upload') AS `perm`, 1 AS `sort` UNION ALL
SELECT '锁定', CONCAT('device', ':', 'app-icon', ':', 'lock'), 2 UNION ALL
SELECT '解锁', CONCAT('device', ':', 'app-icon', ':', 'unlock'), 3 UNION ALL
SELECT '删除', CONCAT('device', ':', 'app-icon', ':', 'delete'), 4
) t
WHERE @menu_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM `sys_menu` m WHERE m.`perm` = t.`perm`);
-- 2. 授权给 ADMIN 角色role_id = 2如实际角色 id 不同请修改)
-- 直接授权该菜单下的全部按钮,避免 SQL 文本中出现带冒号的权限字符串
INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`)
SELECT 2, `id`
FROM `sys_menu`
WHERE `parent_id` = @menu_id AND `type` = 'B';