HaniBlindBox/server/HoneyBox/scripts/seed_system_config_menus.sql
2026-01-18 01:29:27 +08:00

205 lines
7.9 KiB
Transact-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. 已存在超级管理员角色 (Code = 'super_admin')
-- 2. 数据库中已有基础菜单数据
-- 声明变量
DECLARE @ConfigMenuId INT;
DECLARE @SuperAdminRoleId INT;
-- 获取超级管理员角色ID
SELECT @SuperAdminRoleId = Id FROM Roles WHERE Code = 'super_admin';
-- =============================================
-- 1. 创建系统配置目录(顶级菜单)
-- =============================================
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (0, N'系统配置', '/business/config', 'Layout', 'Setting', 1, NULL, 60, 1, 0, 0, GETDATE());
SET @ConfigMenuId = SCOPE_IDENTITY();
PRINT N'创建系统配置目录ID: ' + CAST(@ConfigMenuId AS VARCHAR);
END
ELSE
BEGIN
SELECT @ConfigMenuId = Id FROM Menus WHERE Path = '/business/config';
-- 确保是顶级菜单
UPDATE Menus SET ParentId = 0, Component = 'Layout' WHERE Id = @ConfigMenuId AND ParentId <> 0;
PRINT N'系统配置目录已存在ID: ' + CAST(@ConfigMenuId AS VARCHAR);
END
-- =============================================
-- 2. 创建系统配置子菜单
-- =============================================
-- 2.1 基础设置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/base')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'基础设置', '/business/config/base', 'business/config/base', 'HomeFilled', 2, 'config:view', 1, 1, 0, 1, GETDATE());
PRINT N'创建基础设置菜单';
END
-- 2.2 微信支付配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/weixinpay')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'微信支付配置', '/business/config/weixinpay', 'business/config/weixinpay', 'ChatDotRound', 2, 'config:view', 2, 1, 0, 1, GETDATE());
PRINT N'创建微信支付配置菜单';
END
-- 2.3 支付宝配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/alipay')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'支付宝配置', '/business/config/alipay', 'business/config/alipay', 'Wallet', 2, 'config:view', 3, 1, 0, 1, GETDATE());
PRINT N'创建支付宝配置菜单';
END
-- 2.4 小程序配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/miniprogram')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'小程序配置', '/business/config/miniprogram', 'business/config/miniprogram', 'Cellphone', 2, 'config:view', 4, 1, 0, 1, GETDATE());
PRINT N'创建小程序配置菜单';
END
-- 2.5 H5配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/h5')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'H5配置', '/business/config/h5', 'business/config/h5', 'Monitor', 2, 'config:view', 5, 1, 0, 1, GETDATE());
PRINT N'创建H5配置菜单';
END
-- 2.6 上传配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/uploads')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'上传配置', '/business/config/uploads', 'business/config/uploads', 'Upload', 2, 'config:view', 6, 1, 0, 1, GETDATE());
PRINT N'创建上传配置菜单';
END
-- 2.7 签到配置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/sign')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'签到配置', '/business/config/sign', 'business/config/sign', 'Calendar', 2, 'config:view', 7, 1, 0, 1, GETDATE());
PRINT N'创建签到配置菜单';
END
-- 2.8 系统设置
IF NOT EXISTS (SELECT 1 FROM Menus WHERE Path = '/business/config/system')
BEGIN
INSERT INTO Menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
VALUES (@ConfigMenuId, N'系统设置', '/business/config/system', 'business/config/system', 'Tools', 2, 'config:view', 8, 1, 0, 1, GETDATE());
PRINT N'创建系统设置菜单';
END
-- =============================================
-- 3. 添加系统配置相关权限(如果不存在)
-- =============================================
-- 配置查看权限
IF NOT EXISTS (SELECT 1 FROM Permissions WHERE Code = 'config:view')
INSERT INTO Permissions (Name, Code, Module, CreatedAt) VALUES (N'查看配置', 'config:view', N'系统配置', GETDATE());
-- 配置编辑权限
IF NOT EXISTS (SELECT 1 FROM Permissions WHERE Code = 'config:edit')
INSERT INTO Permissions (Name, Code, Module, CreatedAt) VALUES (N'编辑配置', 'config:edit', N'系统配置', GETDATE());
-- =============================================
-- 4. 为超级管理员角色分配新菜单
-- =============================================
IF @SuperAdminRoleId IS NOT NULL
BEGIN
-- 分配系统配置目录
IF NOT EXISTS (SELECT 1 FROM RoleMenus WHERE RoleId = @SuperAdminRoleId AND MenuId = @ConfigMenuId)
BEGIN
INSERT INTO RoleMenus (RoleId, MenuId) VALUES (@SuperAdminRoleId, @ConfigMenuId);
PRINT N'为超级管理员分配系统配置目录';
END
-- 分配所有新创建的子菜单
INSERT INTO RoleMenus (RoleId, MenuId)
SELECT @SuperAdminRoleId, m.Id
FROM Menus m
WHERE m.ParentId = @ConfigMenuId
AND NOT EXISTS (SELECT 1 FROM RoleMenus rm WHERE rm.RoleId = @SuperAdminRoleId AND rm.MenuId = m.Id);
PRINT N'为超级管理员分配系统配置子菜单';
-- 分配新增的权限
INSERT INTO RolePermissions (RoleId, PermissionId)
SELECT @SuperAdminRoleId, p.Id
FROM Permissions p
WHERE p.Code IN ('config:view', 'config:edit')
AND NOT EXISTS (
SELECT 1 FROM RolePermissions rp
WHERE rp.RoleId = @SuperAdminRoleId AND rp.PermissionId = p.Id
);
PRINT N'为超级管理员分配系统配置权限';
END
-- =============================================
-- 5. 验证结果
-- =============================================
PRINT N'';
PRINT N'========== 菜单创建结果 ==========';
SELECT
m.Id,
m.ParentId,
m.Name,
m.Path,
m.Component,
m.MenuType,
m.Permission,
m.SortOrder
FROM Menus m
WHERE m.Path LIKE '/business/config%'
ORDER BY m.ParentId, m.SortOrder;
PRINT N'';
PRINT N'========== 权限创建结果 ==========';
SELECT
p.Id,
p.Name,
p.Code,
p.Module
FROM Permissions p
WHERE p.Code LIKE 'config:%'
ORDER BY p.Code;
PRINT N'';
PRINT N'========== 角色菜单分配结果 ==========';
SELECT
r.Name AS RoleName,
m.Name AS MenuName,
m.Path
FROM RoleMenus rm
INNER JOIN Roles r ON rm.RoleId = r.Id
INNER JOIN Menus m ON rm.MenuId = m.Id
WHERE m.Path LIKE '/business/config%'
ORDER BY r.Name, m.Path;
PRINT N'';
PRINT N'========== 角色权限分配结果 ==========';
SELECT
r.Name AS RoleName,
p.Name AS PermissionName,
p.Code
FROM RolePermissions rp
INNER JOIN Roles r ON rp.RoleId = r.Id
INNER JOIN Permissions p ON rp.PermissionId = p.Id
WHERE p.Code LIKE 'config:%'
ORDER BY r.Name, p.Code;
PRINT N'';
PRINT N'系统配置模块菜单初始化完成';