177 lines
7.6 KiB
PL/PgSQL
177 lines
7.6 KiB
PL/PgSQL
-- Migration: convert platform admin menu to hierarchical navigation
|
|
-- Created at: 2026-03-03
|
|
|
|
BEGIN;
|
|
|
|
-- 1) Ensure top-level menus exist and are aligned
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
VALUES ('account_settings', '账户设置', 'UserCog', '/account-settings', 'link', NULL, 1, 1, '管理个人账户信息')
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
VALUES ('prompt_management', '提示词仓库', 'BookText', '/prompt-management', 'link', NULL, 2, 1, '管理AI提示词模版')
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
VALUES ('platform_admin', '平台管理', 'Shield', '/admin/management/user-management', 'link', NULL, 3, 1, '平台管理员后台')
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
VALUES ('logout', '退出登录', 'LogOut', NULL, 'action', NULL, 99, 1, '退出当前账号')
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
-- 2) Ensure children under platform_admin
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'user_management', '用户管理', 'Users', '/admin/management/user-management', 'link', m.menu_id, 1, 1, '账号、角色、密码重置'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'permission_management', '权限管理', 'KeyRound', '/admin/management/permission-management', 'link', m.menu_id, 2, 1, '菜单与角色授权矩阵'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'dict_management', '字典管理', 'BookMarked', '/admin/management/dict-management', 'link', m.menu_id, 3, 1, '码表、平台类型、扩展属性'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'hot_word_management', '热词管理', 'Text', '/admin/management/hot-word-management', 'link', m.menu_id, 4, 1, 'ASR 热词与同步'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'client_management', '客户端管理', 'Smartphone', '/admin/management/client-management', 'link', m.menu_id, 5, 1, '版本、下载地址、发布状态'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'external_app_management', '外部应用管理', 'AppWindow', '/admin/management/external-app-management', 'link', m.menu_id, 6, 1, '外部系统入口与图标配置'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
INSERT INTO `menus` (`menu_code`, `menu_name`, `menu_icon`, `menu_url`, `menu_type`, `parent_id`, `sort_order`, `is_active`, `description`)
|
|
SELECT 'terminal_management', '终端管理', 'Monitor', '/admin/management/terminal-management', 'link', m.menu_id, 7, 1, '专用设备、激活和绑定状态'
|
|
FROM `menus` m
|
|
WHERE m.`menu_code` = 'platform_admin'
|
|
ON DUPLICATE KEY UPDATE
|
|
`menu_name` = VALUES(`menu_name`),
|
|
`menu_icon` = VALUES(`menu_icon`),
|
|
`menu_url` = VALUES(`menu_url`),
|
|
`menu_type` = VALUES(`menu_type`),
|
|
`parent_id` = VALUES(`parent_id`),
|
|
`sort_order` = VALUES(`sort_order`),
|
|
`is_active` = VALUES(`is_active`),
|
|
`description` = VALUES(`description`);
|
|
|
|
-- 3) Permission alignment
|
|
DELETE FROM `role_menu_permissions`
|
|
WHERE `role_id` = 2
|
|
AND `menu_id` IN (
|
|
SELECT `menu_id` FROM `menus`
|
|
WHERE `menu_code` IN (
|
|
'platform_admin',
|
|
'user_management',
|
|
'permission_management',
|
|
'dict_management',
|
|
'hot_word_management',
|
|
'client_management',
|
|
'external_app_management',
|
|
'terminal_management'
|
|
)
|
|
);
|
|
|
|
INSERT IGNORE INTO `role_menu_permissions` (`role_id`, `menu_id`)
|
|
SELECT 1, `menu_id`
|
|
FROM `menus`
|
|
WHERE `is_active` = 1;
|
|
|
|
COMMIT;
|