mi-assessment/server/MiAssessment/scripts/init_admin_db.sql
2026-02-03 14:25:01 +08:00

627 lines
29 KiB
Transact-SQL

-- =============================================
-- 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