-- ============================================= -- Admin Database Initialization Script -- Framework Template - MiAssessment -- -- This script creates all tables for the Admin database -- and inserts default data (admin user, roles, permissions, menus) -- -- Requirements: 2.1-2.13, 13.1-13.10 -- ============================================= USE [MiAssessment_Admin]; GO -- ============================================= -- 1. Create Departments Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[departments]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[departments] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [ParentId] BIGINT NOT NULL DEFAULT 0, [Name] NVARCHAR(100) NOT NULL, [Code] VARCHAR(50) NULL, [Description] NVARCHAR(500) NULL, [SortOrder] INT NOT NULL DEFAULT 0, [Status] TINYINT NOT NULL DEFAULT 1, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), [UpdatedAt] DATETIME NULL, CONSTRAINT [PK_departments] PRIMARY KEY CLUSTERED ([Id] ASC) ); PRINT N'Table departments created successfully'; END GO -- ============================================= -- 2. Create Admin Users Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[admin_users]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[admin_users] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [Username] VARCHAR(50) NOT NULL, [PasswordHash] VARCHAR(255) NOT NULL, [RealName] NVARCHAR(50) NULL, [Avatar] VARCHAR(500) NULL, [Email] VARCHAR(100) NULL, [Phone] VARCHAR(20) NULL, [DepartmentId] BIGINT NULL, [Status] TINYINT NOT NULL DEFAULT 1, [LastLoginTime] DATETIME NULL, [LastLoginIp] VARCHAR(50) NULL, [LoginFailCount] INT NOT NULL DEFAULT 0, [LockoutEnd] DATETIME NULL, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), [UpdatedAt] DATETIME NULL, [CreatedBy] BIGINT NULL, [Remark] NVARCHAR(500) NULL, CONSTRAINT [PK_admin_users] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_admin_users_departments] FOREIGN KEY ([DepartmentId]) REFERENCES [dbo].[departments] ([Id]) ON DELETE SET NULL ); CREATE UNIQUE NONCLUSTERED INDEX [IX_admin_users_username] ON [dbo].[admin_users] ([Username] ASC); PRINT N'Table admin_users created successfully'; END GO -- ============================================= -- 3. Create Roles Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[roles]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[roles] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [Name] NVARCHAR(50) NOT NULL, [Code] VARCHAR(50) NOT NULL, [Description] NVARCHAR(500) NULL, [SortOrder] INT NOT NULL DEFAULT 0, [Status] TINYINT NOT NULL DEFAULT 1, [IsSystem] BIT NOT NULL DEFAULT 0, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), [UpdatedAt] DATETIME NULL, CONSTRAINT [PK_roles] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_roles_code] ON [dbo].[roles] ([Code] ASC); PRINT N'Table roles created successfully'; END GO -- ============================================= -- 4. Create Permissions Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[permissions]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[permissions] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [Name] NVARCHAR(100) NOT NULL, [Code] VARCHAR(100) NOT NULL, [Module] VARCHAR(50) NULL, [Description] NVARCHAR(500) NULL, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), CONSTRAINT [PK_permissions] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_permissions_code] ON [dbo].[permissions] ([Code] ASC); PRINT N'Table permissions created successfully'; END GO -- ============================================= -- 5. Create Menus Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[menus]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[menus] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [ParentId] BIGINT NOT NULL DEFAULT 0, [Name] NVARCHAR(50) NOT NULL, [Path] VARCHAR(200) NULL, [Component] VARCHAR(200) NULL, [Icon] VARCHAR(100) NULL, [MenuType] TINYINT NOT NULL DEFAULT 1, [Permission] VARCHAR(100) NULL, [SortOrder] INT NOT NULL DEFAULT 0, [Status] TINYINT NOT NULL DEFAULT 1, [IsExternal] BIT NOT NULL DEFAULT 0, [IsCache] BIT NOT NULL DEFAULT 1, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), [UpdatedAt] DATETIME NULL, CONSTRAINT [PK_menus] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE NONCLUSTERED INDEX [IX_menus_parent_sort] ON [dbo].[menus] ([ParentId] ASC, [SortOrder] ASC); PRINT N'Table menus created successfully'; END GO -- ============================================= -- 6. Create Admin User Roles Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[admin_user_roles]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[admin_user_roles] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [AdminUserId] BIGINT NOT NULL, [RoleId] BIGINT NOT NULL, CONSTRAINT [PK_admin_user_roles] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_admin_user_roles_admin_users] FOREIGN KEY ([AdminUserId]) REFERENCES [dbo].[admin_users] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_admin_user_roles_roles] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[roles] ([Id]) ON DELETE CASCADE ); CREATE UNIQUE NONCLUSTERED INDEX [IX_admin_user_roles_unique] ON [dbo].[admin_user_roles] ([AdminUserId] ASC, [RoleId] ASC); PRINT N'Table admin_user_roles created successfully'; END GO -- ============================================= -- 7. Create Role Menus Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[role_menus]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[role_menus] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [RoleId] BIGINT NOT NULL, [MenuId] BIGINT NOT NULL, CONSTRAINT [PK_role_menus] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_role_menus_roles] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[roles] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_role_menus_menus] FOREIGN KEY ([MenuId]) REFERENCES [dbo].[menus] ([Id]) ON DELETE CASCADE ); CREATE UNIQUE NONCLUSTERED INDEX [IX_role_menus_unique] ON [dbo].[role_menus] ([RoleId] ASC, [MenuId] ASC); PRINT N'Table role_menus created successfully'; END GO -- ============================================= -- 8. Create Role Permissions Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[role_permissions]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[role_permissions] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [RoleId] BIGINT NOT NULL, [PermissionId] BIGINT NOT NULL, CONSTRAINT [PK_role_permissions] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_role_permissions_roles] FOREIGN KEY ([RoleId]) REFERENCES [dbo].[roles] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_role_permissions_permissions] FOREIGN KEY ([PermissionId]) REFERENCES [dbo].[permissions] ([Id]) ON DELETE CASCADE ); CREATE UNIQUE NONCLUSTERED INDEX [IX_role_permissions_unique] ON [dbo].[role_permissions] ([RoleId] ASC, [PermissionId] ASC); PRINT N'Table role_permissions created successfully'; END GO -- ============================================= -- 9. Create Admin User Menus Table (User-specific menus) -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[admin_user_menus]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[admin_user_menus] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [AdminUserId] BIGINT NOT NULL, [MenuId] BIGINT NOT NULL, CONSTRAINT [PK_admin_user_menus] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_admin_user_menus_admin_users] FOREIGN KEY ([AdminUserId]) REFERENCES [dbo].[admin_users] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_admin_user_menus_menus] FOREIGN KEY ([MenuId]) REFERENCES [dbo].[menus] ([Id]) ON DELETE CASCADE ); CREATE UNIQUE NONCLUSTERED INDEX [IX_admin_user_menus_unique] ON [dbo].[admin_user_menus] ([AdminUserId] ASC, [MenuId] ASC); PRINT N'Table admin_user_menus created successfully'; END GO -- ============================================= -- 10. Create Department Menus Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[department_menus]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[department_menus] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [DepartmentId] BIGINT NOT NULL, [MenuId] BIGINT NOT NULL, CONSTRAINT [PK_department_menus] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_department_menus_departments] FOREIGN KEY ([DepartmentId]) REFERENCES [dbo].[departments] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_department_menus_menus] FOREIGN KEY ([MenuId]) REFERENCES [dbo].[menus] ([Id]) ON DELETE CASCADE ); CREATE UNIQUE NONCLUSTERED INDEX [IX_department_menus_unique] ON [dbo].[department_menus] ([DepartmentId] ASC, [MenuId] ASC); PRINT N'Table department_menus created successfully'; END GO -- ============================================= -- 11. Create Operation Logs Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[operation_logs]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[operation_logs] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [AdminUserId] BIGINT NULL, [Username] VARCHAR(50) NULL, [Module] VARCHAR(50) NULL, [Action] VARCHAR(50) NULL, [Method] VARCHAR(10) NULL, [Url] VARCHAR(500) NULL, [Ip] VARCHAR(50) NULL, [RequestData] NVARCHAR(MAX) NULL, [ResponseData] NVARCHAR(MAX) NULL, [Status] TINYINT NOT NULL DEFAULT 1, [ErrorMsg] NVARCHAR(2000) NULL, [Duration] INT NOT NULL DEFAULT 0, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), CONSTRAINT [PK_operation_logs] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE NONCLUSTERED INDEX [IX_operation_logs_admin_user] ON [dbo].[operation_logs] ([AdminUserId] ASC); CREATE NONCLUSTERED INDEX [IX_operation_logs_created_at] ON [dbo].[operation_logs] ([CreatedAt] DESC); PRINT N'Table operation_logs created successfully'; END GO -- ============================================= -- 12. Create Refresh Tokens Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[refresh_tokens]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[refresh_tokens] ( [Id] BIGINT IDENTITY(1,1) NOT NULL, [AdminUserId] BIGINT NOT NULL, [TokenHash] VARCHAR(256) NOT NULL, [ExpiresAt] DATETIME NOT NULL, [CreatedAt] DATETIME NOT NULL DEFAULT GETDATE(), [CreatedByIp] VARCHAR(50) NULL, [RevokedAt] DATETIME NULL, [RevokedByIp] VARCHAR(50) NULL, [ReplacedByToken] VARCHAR(256) NULL, CONSTRAINT [PK_refresh_tokens] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_refresh_tokens_admin_users] FOREIGN KEY ([AdminUserId]) REFERENCES [dbo].[admin_users] ([Id]) ON DELETE CASCADE ); CREATE NONCLUSTERED INDEX [IX_refresh_tokens_admin_user] ON [dbo].[refresh_tokens] ([AdminUserId] ASC); CREATE NONCLUSTERED INDEX [IX_refresh_tokens_token_hash] ON [dbo].[refresh_tokens] ([TokenHash] ASC); PRINT N'Table refresh_tokens created successfully'; END GO -- ============================================= -- 13. Create Admin Configs Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[admin_configs]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[admin_configs] ( [Id] INT IDENTITY(1,1) NOT NULL, [config_key] VARCHAR(100) NOT NULL, [config_value] NVARCHAR(MAX) NULL, [description] NVARCHAR(200) NULL, [created_at] DATETIME NOT NULL DEFAULT GETDATE(), [updated_at] DATETIME NULL, CONSTRAINT [PK_admin_configs] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_admin_configs_config_key] ON [dbo].[admin_configs] ([config_key] ASC); PRINT N'Table admin_configs created successfully'; END GO -- ============================================= -- 14. Create Dict Types Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[dict_types]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[dict_types] ( [Id] INT IDENTITY(1,1) NOT NULL, [code] VARCHAR(50) NOT NULL, [name] NVARCHAR(50) NOT NULL, [description] NVARCHAR(200) NULL, [source_type] TINYINT NOT NULL DEFAULT 1, [source_sql] NVARCHAR(MAX) NULL, [status] TINYINT NOT NULL DEFAULT 1, [sort] INT NOT NULL DEFAULT 0, [created_at] DATETIME NOT NULL DEFAULT GETDATE(), [updated_at] DATETIME NULL, CONSTRAINT [PK_dict_types] PRIMARY KEY CLUSTERED ([Id] ASC) ); CREATE UNIQUE NONCLUSTERED INDEX [IX_dict_types_code] ON [dbo].[dict_types] ([code] ASC); CREATE NONCLUSTERED INDEX [IX_dict_types_status_sort] ON [dbo].[dict_types] ([status] ASC, [sort] ASC); PRINT N'Table dict_types created successfully'; END GO -- ============================================= -- 15. Create Dict Items Table -- ============================================= IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[dict_items]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[dict_items] ( [Id] INT IDENTITY(1,1) NOT NULL, [type_id] INT NOT NULL, [label] NVARCHAR(100) NOT NULL, [value] VARCHAR(100) NOT NULL, [description] NVARCHAR(200) NULL, [css_class] VARCHAR(50) NULL, [status] TINYINT NOT NULL DEFAULT 1, [sort] INT NOT NULL DEFAULT 0, [created_at] DATETIME NOT NULL DEFAULT GETDATE(), [updated_at] DATETIME NULL, CONSTRAINT [PK_dict_items] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_dict_items_dict_types] FOREIGN KEY ([type_id]) REFERENCES [dbo].[dict_types] ([Id]) ON DELETE CASCADE ); CREATE NONCLUSTERED INDEX [IX_dict_items_type_id] ON [dbo].[dict_items] ([type_id] ASC); CREATE NONCLUSTERED INDEX [IX_dict_items_type_status_sort] ON [dbo].[dict_items] ([type_id] ASC, [status] ASC, [sort] ASC); PRINT N'Table dict_items created successfully'; END GO -- ============================================= -- INSERT DEFAULT DATA -- ============================================= -- ============================================= -- 16. Insert Default Department -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[departments] WHERE [Name] = N'总部') BEGIN SET IDENTITY_INSERT [dbo].[departments] ON; INSERT INTO [dbo].[departments] ([Id], [ParentId], [Name], [Code], [Description], [SortOrder], [Status], [CreatedAt]) VALUES (1, 0, N'总部', 'HQ', N'公司总部', 1, 1, GETDATE()); SET IDENTITY_INSERT [dbo].[departments] OFF; PRINT N'Default department inserted'; END GO -- ============================================= -- 17. Insert Default Roles -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[roles] WHERE [Code] = 'super_admin') BEGIN SET IDENTITY_INSERT [dbo].[roles] ON; INSERT INTO [dbo].[roles] ([Id], [Name], [Code], [Description], [SortOrder], [Status], [IsSystem], [CreatedAt]) VALUES (1, N'超级管理员', 'super_admin', N'拥有系统所有权限', 1, 1, 1, GETDATE()), (2, N'管理员', 'admin', N'普通管理员', 2, 1, 0, GETDATE()); SET IDENTITY_INSERT [dbo].[roles] OFF; PRINT N'Default roles inserted'; END GO -- ============================================= -- 18. Insert Default Admin User (admin/admin123) -- Password hash is BCrypt hash of 'admin123' -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[admin_users] WHERE [Username] = 'admin') BEGIN SET IDENTITY_INSERT [dbo].[admin_users] ON; INSERT INTO [dbo].[admin_users] ([Id], [Username], [PasswordHash], [RealName], [DepartmentId], [Status], [CreatedAt]) VALUES (1, 'admin', '$2a$11$K7.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5', N'超级管理员', 1, 1, GETDATE()); SET IDENTITY_INSERT [dbo].[admin_users] OFF; PRINT N'Default admin user inserted (username: admin, password: admin123)'; END GO -- ============================================= -- 19. Assign Super Admin Role to Admin User -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[admin_user_roles] WHERE [AdminUserId] = 1 AND [RoleId] = 1) BEGIN INSERT INTO [dbo].[admin_user_roles] ([AdminUserId], [RoleId]) VALUES (1, 1); PRINT N'Admin user assigned to super_admin role'; END GO -- ============================================= -- 20. Insert Default Permissions -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[permissions] WHERE [Code] = 'system:admin:list') BEGIN SET IDENTITY_INSERT [dbo].[permissions] ON; INSERT INTO [dbo].[permissions] ([Id], [Name], [Code], [Module], [Description], [CreatedAt]) VALUES -- System Management (1, N'管理员列表', 'system:admin:list', 'system', N'查看管理员列表', GETDATE()), (2, N'管理员新增', 'system:admin:add', 'system', N'新增管理员', GETDATE()), (3, N'管理员编辑', 'system:admin:edit', 'system', N'编辑管理员', GETDATE()), (4, N'管理员删除', 'system:admin:delete', 'system', N'删除管理员', GETDATE()), (5, N'角色列表', 'system:role:list', 'system', N'查看角色列表', GETDATE()), (6, N'角色新增', 'system:role:add', 'system', N'新增角色', GETDATE()), (7, N'角色编辑', 'system:role:edit', 'system', N'编辑角色', GETDATE()), (8, N'角色删除', 'system:role:delete', 'system', N'删除角色', GETDATE()), (9, N'菜单列表', 'system:menu:list', 'system', N'查看菜单列表', GETDATE()), (10, N'菜单新增', 'system:menu:add', 'system', N'新增菜单', GETDATE()), (11, N'菜单编辑', 'system:menu:edit', 'system', N'编辑菜单', GETDATE()), (12, N'菜单删除', 'system:menu:delete', 'system', N'删除菜单', GETDATE()), (13, N'部门列表', 'system:dept:list', 'system', N'查看部门列表', GETDATE()), (14, N'部门新增', 'system:dept:add', 'system', N'新增部门', GETDATE()), (15, N'部门编辑', 'system:dept:edit', 'system', N'编辑部门', GETDATE()), (16, N'部门删除', 'system:dept:delete', 'system', N'删除部门', GETDATE()), -- Dictionary Management (17, N'字典类型列表', 'system:dict:type:list', 'system', N'查看字典类型列表', GETDATE()), (18, N'字典类型新增', 'system:dict:type:add', 'system', N'新增字典类型', GETDATE()), (19, N'字典类型编辑', 'system:dict:type:edit', 'system', N'编辑字典类型', GETDATE()), (20, N'字典类型删除', 'system:dict:type:delete', 'system', N'删除字典类型', GETDATE()), (21, N'字典数据列表', 'system:dict:item:list', 'system', N'查看字典数据列表', GETDATE()), (22, N'字典数据新增', 'system:dict:item:add', 'system', N'新增字典数据', GETDATE()), (23, N'字典数据编辑', 'system:dict:item:edit', 'system', N'编辑字典数据', GETDATE()), (24, N'字典数据删除', 'system:dict:item:delete', 'system', N'删除字典数据', GETDATE()), -- Config Management (25, N'配置列表', 'system:config:list', 'system', N'查看配置列表', GETDATE()), (26, N'配置编辑', 'system:config:edit', 'system', N'编辑配置', GETDATE()), -- Upload Management (27, N'文件上传', 'system:upload:file', 'system', N'上传文件', GETDATE()), -- User Management (28, N'用户列表', 'user:list', 'user', N'查看用户列表', GETDATE()), (29, N'用户详情', 'user:detail', 'user', N'查看用户详情', GETDATE()), (30, N'用户编辑', 'user:edit', 'user', N'编辑用户', GETDATE()), (31, N'用户禁用', 'user:disable', 'user', N'禁用用户', GETDATE()), -- Operation Log (32, N'操作日志', 'system:log:list', 'system', N'查看操作日志', GETDATE()); SET IDENTITY_INSERT [dbo].[permissions] OFF; PRINT N'Default permissions inserted'; END GO -- ============================================= -- 21. Assign All Permissions to Super Admin Role -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[role_permissions] WHERE [RoleId] = 1) BEGIN INSERT INTO [dbo].[role_permissions] ([RoleId], [PermissionId]) SELECT 1, [Id] FROM [dbo].[permissions]; PRINT N'All permissions assigned to super_admin role'; END GO -- ============================================= -- 22. Insert Default Menus -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[menus] WHERE [Name] = N'系统管理') BEGIN SET IDENTITY_INSERT [dbo].[menus] ON; INSERT INTO [dbo].[menus] ([Id], [ParentId], [Name], [Path], [Component], [Icon], [MenuType], [Permission], [SortOrder], [Status], [CreatedAt]) VALUES -- System Management (Directory) (1, 0, N'系统管理', '/system', 'Layout', 'setting', 1, NULL, 1, 1, GETDATE()), -- Admin Management (2, 1, N'管理员管理', '/system/admin', 'system/admin/index', 'user', 2, 'system:admin:list', 1, 1, GETDATE()), (3, 2, N'新增', NULL, NULL, NULL, 3, 'system:admin:add', 1, 1, GETDATE()), (4, 2, N'编辑', NULL, NULL, NULL, 3, 'system:admin:edit', 2, 1, GETDATE()), (5, 2, N'删除', NULL, NULL, NULL, 3, 'system:admin:delete', 3, 1, GETDATE()), -- Role Management (6, 1, N'角色管理', '/system/role', 'system/role/index', 'peoples', 2, 'system:role:list', 2, 1, GETDATE()), (7, 6, N'新增', NULL, NULL, NULL, 3, 'system:role:add', 1, 1, GETDATE()), (8, 6, N'编辑', NULL, NULL, NULL, 3, 'system:role:edit', 2, 1, GETDATE()), (9, 6, N'删除', NULL, NULL, NULL, 3, 'system:role:delete', 3, 1, GETDATE()), -- Menu Management (10, 1, N'菜单管理', '/system/menu', 'system/menu/index', 'tree-table', 2, 'system:menu:list', 3, 1, GETDATE()), (11, 10, N'新增', NULL, NULL, NULL, 3, 'system:menu:add', 1, 1, GETDATE()), (12, 10, N'编辑', NULL, NULL, NULL, 3, 'system:menu:edit', 2, 1, GETDATE()), (13, 10, N'删除', NULL, NULL, NULL, 3, 'system:menu:delete', 3, 1, GETDATE()), -- Department Management (14, 1, N'部门管理', '/system/dept', 'system/dept/index', 'tree', 2, 'system:dept:list', 4, 1, GETDATE()), (15, 14, N'新增', NULL, NULL, NULL, 3, 'system:dept:add', 1, 1, GETDATE()), (16, 14, N'编辑', NULL, NULL, NULL, 3, 'system:dept:edit', 2, 1, GETDATE()), (17, 14, N'删除', NULL, NULL, NULL, 3, 'system:dept:delete', 3, 1, GETDATE()), -- Dictionary Management (18, 1, N'字典管理', '/system/dict', 'system/dict/index', 'dict', 2, 'system:dict:type:list', 5, 1, GETDATE()), (19, 18, N'类型新增', NULL, NULL, NULL, 3, 'system:dict:type:add', 1, 1, GETDATE()), (20, 18, N'类型编辑', NULL, NULL, NULL, 3, 'system:dict:type:edit', 2, 1, GETDATE()), (21, 18, N'类型删除', NULL, NULL, NULL, 3, 'system:dict:type:delete', 3, 1, GETDATE()), (22, 18, N'数据新增', NULL, NULL, NULL, 3, 'system:dict:item:add', 4, 1, GETDATE()), (23, 18, N'数据编辑', NULL, NULL, NULL, 3, 'system:dict:item:edit', 5, 1, GETDATE()), (24, 18, N'数据删除', NULL, NULL, NULL, 3, 'system:dict:item:delete', 6, 1, GETDATE()), -- Config Management (25, 1, N'配置管理', '/system/config', 'system/config/index', 'edit', 2, 'system:config:list', 6, 1, GETDATE()), (26, 25, N'编辑', NULL, NULL, NULL, 3, 'system:config:edit', 1, 1, GETDATE()), -- Operation Log (27, 1, N'操作日志', '/system/log', 'system/log/index', 'log', 2, 'system:log:list', 7, 1, GETDATE()), -- User Management (Directory) (28, 0, N'用户管理', '/user', 'Layout', 'user', 1, NULL, 2, 1, GETDATE()), -- User List (29, 28, N'用户列表', '/user/list', 'user/list/index', 'peoples', 2, 'user:list', 1, 1, GETDATE()), (30, 29, N'详情', NULL, NULL, NULL, 3, 'user:detail', 1, 1, GETDATE()), (31, 29, N'编辑', NULL, NULL, NULL, 3, 'user:edit', 2, 1, GETDATE()), (32, 29, N'禁用', NULL, NULL, NULL, 3, 'user:disable', 3, 1, GETDATE()); SET IDENTITY_INSERT [dbo].[menus] OFF; PRINT N'Default menus inserted'; END GO -- ============================================= -- 23. Assign All Menus to Super Admin Role -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[role_menus] WHERE [RoleId] = 1) BEGIN INSERT INTO [dbo].[role_menus] ([RoleId], [MenuId]) SELECT 1, [Id] FROM [dbo].[menus]; PRINT N'All menus assigned to super_admin role'; END GO -- ============================================= -- 24. Insert Default Admin Configs -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[admin_configs] WHERE [config_key] = 'uploads') BEGIN INSERT INTO [dbo].[admin_configs] ([config_key], [config_value], [description], [created_at]) VALUES ('uploads', '{"storage_type":"local","local":{"base_path":"uploads","base_url":"/uploads"},"cos":{"secret_id":"","secret_key":"","region":"","bucket":"","base_url":""}}', N'文件上传配置', GETDATE()), ('system', '{"site_name":"MiAssessment 管理后台","site_logo":"","copyright":"","version":"1.0.0"}', N'系统基础配置', GETDATE()); PRINT N'Default admin configs inserted'; END GO -- ============================================= -- 25. Insert Default Dictionary Types -- ============================================= IF NOT EXISTS (SELECT 1 FROM [dbo].[dict_types] WHERE [code] = 'user_status') BEGIN INSERT INTO [dbo].[dict_types] ([code], [name], [description], [source_type], [status], [sort], [created_at]) VALUES ('user_status', N'用户状态', N'用户账号状态', 1, 1, 1, GETDATE()), ('gender', N'性别', N'用户性别', 1, 1, 2, GETDATE()), ('yes_no', N'是否', N'通用是否选项', 1, 1, 3, GETDATE()); PRINT N'Default dictionary types inserted'; END GO -- ============================================= -- 26. Insert Default Dictionary Items -- ============================================= DECLARE @user_status_id INT, @gender_id INT, @yes_no_id INT; SELECT @user_status_id = [Id] FROM [dbo].[dict_types] WHERE [code] = 'user_status'; SELECT @gender_id = [Id] FROM [dbo].[dict_types] WHERE [code] = 'gender'; SELECT @yes_no_id = [Id] FROM [dbo].[dict_types] WHERE [code] = 'yes_no'; IF @user_status_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM [dbo].[dict_items] WHERE [type_id] = @user_status_id) BEGIN INSERT INTO [dbo].[dict_items] ([type_id], [label], [value], [css_class], [status], [sort], [created_at]) VALUES (@user_status_id, N'正常', '1', 'success', 1, 1, GETDATE()), (@user_status_id, N'禁用', '0', 'danger', 1, 2, GETDATE()); PRINT N'User status dictionary items inserted'; END IF @gender_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM [dbo].[dict_items] WHERE [type_id] = @gender_id) BEGIN INSERT INTO [dbo].[dict_items] ([type_id], [label], [value], [css_class], [status], [sort], [created_at]) VALUES (@gender_id, N'未知', '0', '', 1, 1, GETDATE()), (@gender_id, N'男', '1', 'primary', 1, 2, GETDATE()), (@gender_id, N'女', '2', 'warning', 1, 3, GETDATE()); PRINT N'Gender dictionary items inserted'; END IF @yes_no_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM [dbo].[dict_items] WHERE [type_id] = @yes_no_id) BEGIN INSERT INTO [dbo].[dict_items] ([type_id], [label], [value], [css_class], [status], [sort], [created_at]) VALUES (@yes_no_id, N'是', '1', 'success', 1, 1, GETDATE()), (@yes_no_id, N'否', '0', 'info', 1, 2, GETDATE()); PRINT N'Yes/No dictionary items inserted'; END GO PRINT N'============================================='; PRINT N'Admin database initialization completed!'; PRINT N'Default admin user: admin / admin123'; PRINT N'============================================='; GO