-- ============================================================
-- 应用管理 / 应用上传 菜单修复与初始化（幂等，可重复执行）
-- ------------------------------------------------------------
-- 说明：
--   本项目使用 vue3-element-admin，后端动态菜单约定：
--   - 目录(type='C')的 component 必须是 'Layout'（顶层目录必须有 Layout 壳），
--     否则 transformRoutes 不会包裹 Layout，点击进入页面会白屏/一直 loading。
--   - 菜单(type='M')的 component 才是页面路径，如 'app-manager/upload-package/index'。
--
-- 本脚本：
--   1. 修正「应用管理」目录 (route_path=/app-manager) 的 component = 'Layout'（关键修复白屏）。
--   2. 确保「应用上传」菜单存在且 component 指向正确页面。
--   3. 授权给 ADMIN 角色 (role_id=2，如不同请改)。
-- ============================================================

-- 1. 修正「应用管理」目录（无论是否已存在，都强制 component='Layout'）
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 0, '0', '应用管理', 'C', '', '/app-manager', 'Layout',
       NULL, 1, NULL, 1, 3, 'box', '/app-manager/upload-package',
       now(), now(), NULL
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C');

-- 把已存在但 component 不是 Layout 的「应用管理」目录修正为 Layout（关键）
UPDATE sys_menu
SET component = 'Layout',
    always_show = 1,
    redirect = '/app-manager/upload-package',
    update_time = now()
WHERE route_path = '/app-manager' AND type = 'C' AND component <> 'Layout';

-- 2. 确保「应用上传」菜单存在（挂在应用管理目录下）
SET @parent_id = (SELECT id FROM sys_menu WHERE route_path = '/app-manager' AND type = 'C' 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', 'UploadPackage', 'upload-package', 'app-manager/upload-package/index',
       NULL, NULL, 1, 1, 1, 'upload', NULL,
       now(), now(), NULL
FROM DUAL
WHERE @parent_id IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE component = 'app-manager/upload-package/index');

-- 3. 授权给 ADMIN 角色（role_id=2，如实际不同请修改）
SET @menu_id = (SELECT id FROM sys_menu WHERE component = 'app-manager/upload-package/index' LIMIT 1);
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
SELECT 2, @menu_id
FROM DUAL
WHERE @menu_id IS NOT NULL;
