20260721223033

This commit is contained in:
oneao committed 2026-07-21 22:30:33 +08:00
1 parent bab8e2972f
commit e9f099f044
26 files changed
+1687 -349

No files matched your search

@@ -7,8 +7,9 @@ BEGIN TRY
IF OBJECT_ID(N'dbo.b_module', N'U') IS NULL
BEGIN
CREATE TABLE dbo.b_module (
b_id varchar(50) NOT NULL,
b_parent_id varchar(50) NULL,
b_id bigint NOT NULL,
b_code varchar(50) NOT NULL,
b_parent_id bigint NULL,
b_name nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
b_type varchar(20) NOT NULL,
@@ -16,20 +17,19 @@ BEGIN TRY
b_viewtable varchar(128) NULL,
b_savetable varchar(128) NULL,
b_keyfield varchar(50) NULL,
b_orderfield varchar(50) NULL,
b_ordertype varchar(4) NULL,
b_orderfield varchar(500) NULL,
b_canmenu int NOT NULL CONSTRAINT DF_b_module_canmenu DEFAULT (0),
b_canuse int NOT NULL CONSTRAINT DF_b_module_canuse DEFAULT (1),
b_xh int NOT NULL CONSTRAINT DF_b_module_xh DEFAULT (0),
CONSTRAINT PK_b_module PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT CK_b_module_id CHECK (
LEN(b_id) BETWEEN 2 AND 50
AND b_id LIKE '[A-Z]%'
AND b_id NOT LIKE '%[^A-Z0-9_]%'
CONSTRAINT UQ_b_module_code UNIQUE (b_code),
CONSTRAINT CK_b_module_code CHECK (
LEN(b_code) BETWEEN 2 AND 50
AND b_code COLLATE Latin1_General_100_BIN2 LIKE '[a-z]%'
AND b_code COLLATE Latin1_General_100_BIN2 NOT LIKE '%[^a-z0-9_]%'
),
CONSTRAINT CK_b_module_type CHECK (b_type IN ('directory', 'page', 'data')),
CONSTRAINT CK_b_module_ordertype CHECK (b_ordertype IS NULL OR b_ordertype IN ('ASC', 'DESC')),
CONSTRAINT CK_b_module_canmenu CHECK (b_canmenu IN (0, 1)),
CONSTRAINT CK_b_module_canuse CHECK (b_canuse IN (0, 1)),
CONSTRAINT CK_b_module_directory CHECK (
@@ -49,7 +49,7 @@ BEGIN TRY
BEGIN
CREATE TABLE dbo.b_module_field (
b_id bigint NOT NULL,
b_module_id varchar(50) NOT NULL,
b_module_id bigint NOT NULL,
b_field varchar(50) NOT NULL,
b_name nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
@@ -85,7 +85,7 @@ BEGIN TRY
BEGIN
CREATE TABLE dbo.b_module_power (
b_id bigint NOT NULL,
b_module_id varchar(50) NOT NULL,
b_module_id bigint NOT NULL,
b_code varchar(50) NOT NULL,
b_name nvarchar(100) NOT NULL,
b_i18n varchar(150) NULL,
@@ -106,7 +106,7 @@ BEGIN TRY
CREATE TABLE dbo.b_user_module (
b_id bigint NOT NULL,
b_user_id bigint NOT NULL,
b_module_id varchar(50) NOT NULL,
b_module_id bigint NOT NULL,
b_inputuser_id bigint NOT NULL,
b_inputdatetime datetime NOT NULL CONSTRAINT DF_b_user_module_inputdatetime DEFAULT (GETDATE()),
CONSTRAINT PK_b_user_module PRIMARY KEY (b_id),
@@ -160,13 +160,16 @@ BEGIN TRY
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.b_i18n') AND name = N'IX_b_i18n_key')
CREATE INDEX IX_b_i18n_key ON dbo.b_i18n (b_key, b_locale);
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_id = 'M_SYSTEM')
INSERT INTO dbo.b_module (b_id, b_parent_id, b_name, b_i18n, b_type, b_canmenu, b_canuse, b_xh)
VALUES ('M_SYSTEM', NULL, N'系统管理', 'module.M_SYSTEM', 'directory', 1, 1, 100);
DECLARE @SystemModuleId bigint = 205000000000000011;
DECLARE @ModuleManagementId bigint = 205000000000000012;
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_id = 'M_MODULE')
INSERT INTO dbo.b_module (b_id, b_parent_id, b_name, b_i18n, b_type, b_route, b_canmenu, b_canuse, b_xh)
VALUES ('M_MODULE', 'M_SYSTEM', N'模块管理', 'module.M_MODULE', 'page', '/system/modules', 1, 1, 10);
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_code = 'm_system')
INSERT INTO dbo.b_module (b_id, b_code, b_parent_id, b_name, b_i18n, b_type, b_canmenu, b_canuse, b_xh)
VALUES (@SystemModuleId, 'm_system', NULL, N'系统管理', 'module.m_system', 'directory', 1, 1, 100);
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_code = 'm_module')
INSERT INTO dbo.b_module (b_id, b_code, b_parent_id, b_name, b_i18n, b_type, b_route, b_canmenu, b_canuse, b_xh)
VALUES (@ModuleManagementId, 'm_module', @SystemModuleId, N'模块管理', 'module.m_module', 'page', '/system/modules', 1, 1, 10);
DECLARE @Powers TABLE (b_id bigint, b_code varchar(50), b_name nvarchar(100), b_xh int);
INSERT INTO @Powers VALUES
@@ -176,11 +179,11 @@ BEGIN TRY
(205000000000000004, 'grant', N'用户授权', 40);
INSERT INTO dbo.b_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse)
SELECT p.b_id, 'M_MODULE', p.b_code, p.b_name, 'power.M_MODULE.' + p.b_code, p.b_xh, 1
SELECT p.b_id, @ModuleManagementId, p.b_code, p.b_name, 'power.m_module.' + p.b_code, p.b_xh, 1
FROM @Powers p
WHERE NOT EXISTS (
SELECT 1 FROM dbo.b_module_power target
WHERE target.b_module_id = 'M_MODULE' AND target.b_code = p.b_code
WHERE target.b_module_id = @ModuleManagementId AND target.b_code = p.b_code
);
EXEC sys.sp_set_session_context @key = N'allow_g3soft', @value = 1;
@@ -188,14 +191,14 @@ BEGIN TRY
IF @AdminId IS NULL
THROW 51000, '未找到已启用的管理员账号 g3soft,模块管理初始化已取消。', 1;
IF NOT EXISTS (SELECT 1 FROM dbo.b_user_module WHERE b_user_id = @AdminId AND b_module_id = 'M_MODULE')
IF NOT EXISTS (SELECT 1 FROM dbo.b_user_module WHERE b_user_id = @AdminId AND b_module_id = @ModuleManagementId)
INSERT INTO dbo.b_user_module (b_id, b_user_id, b_module_id, b_inputuser_id, b_inputdatetime)
VALUES (205000000000000101, @AdminId, 'M_MODULE', @AdminId, GETDATE());
VALUES (205000000000000101, @AdminId, @ModuleManagementId, @AdminId, GETDATE());
INSERT INTO dbo.b_user_power (b_id, b_user_id, b_power_id, b_inputuser_id, b_inputdatetime)
SELECT 205000000000000200 + ROW_NUMBER() OVER (ORDER BY p.b_id), @AdminId, p.b_id, @AdminId, GETDATE()
FROM dbo.b_module_power p
WHERE p.b_module_id = 'M_MODULE'
WHERE p.b_module_id = @ModuleManagementId
AND p.b_code IN ('create', 'update', 'delete', 'grant')
AND NOT EXISTS (
SELECT 1 FROM dbo.b_user_power target
@@ -0,0 +1,44 @@
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.b_module', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.b_module', N'b_orderfield') IS NOT NULL
BEGIN
EXEC sys.sp_executesql N'
ALTER TABLE dbo.b_module ALTER COLUMN b_orderfield varchar(500) NULL;
';
END;
IF OBJECT_ID(N'dbo.b_module', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.b_module', N'b_ordertype') IS NOT NULL
BEGIN
EXEC sys.sp_executesql N'
UPDATE dbo.b_module
SET b_orderfield =
CASE
WHEN NULLIF(LTRIM(RTRIM(b_orderfield)), '''') IS NULL THEN NULL
WHEN UPPER(RIGHT(LTRIM(RTRIM(b_orderfield)), 4)) = '' ASC''
OR UPPER(RIGHT(LTRIM(RTRIM(b_orderfield)), 5)) = '' DESC''
THEN LTRIM(RTRIM(b_orderfield))
WHEN UPPER(LTRIM(RTRIM(b_ordertype))) IN (''ASC'', ''DESC'')
THEN LTRIM(RTRIM(b_orderfield)) + '' '' + UPPER(LTRIM(RTRIM(b_ordertype)))
ELSE LTRIM(RTRIM(b_orderfield))
END;
';
IF OBJECT_ID(N'dbo.CK_b_module_ordertype', N'C') IS NOT NULL
ALTER TABLE dbo.b_module DROP CONSTRAINT CK_b_module_ordertype;
ALTER TABLE dbo.b_module DROP COLUMN b_ordertype;
END;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
@@ -0,0 +1,130 @@
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF EXISTS (
SELECT 1
FROM sys.columns c
JOIN sys.types t ON t.user_type_id = c.user_type_id
WHERE c.object_id = OBJECT_ID(N'dbo.b_module')
AND c.name = N'b_id'
AND t.name <> N'bigint'
)
BEGIN
CREATE TABLE #ModuleIdMap (
old_id varchar(50) NOT NULL PRIMARY KEY,
new_id bigint NOT NULL UNIQUE
);
INSERT INTO #ModuleIdMap (old_id, new_id)
SELECT
b_id,
CASE b_id
WHEN 'M_SYSTEM' THEN 205000000000000011
WHEN 'M_MODULE' THEN 205000000000000012
ELSE 206000000000000000 + ROW_NUMBER() OVER (ORDER BY b_id)
END
FROM dbo.b_module;
ALTER TABLE dbo.b_module ADD
b_new_id bigint NULL,
b_code varchar(50) NULL,
b_new_parent_id bigint NULL;
ALTER TABLE dbo.b_module_field ADD b_new_module_id bigint NULL;
ALTER TABLE dbo.b_module_power ADD b_new_module_id bigint NULL;
ALTER TABLE dbo.b_user_module ADD b_new_module_id bigint NULL;
EXEC sys.sp_executesql N'
UPDATE target
SET
b_new_id = id_map.new_id,
b_code = LOWER(target.b_id),
b_new_parent_id = parent_map.new_id
FROM dbo.b_module target
JOIN #ModuleIdMap id_map ON id_map.old_id = target.b_id
LEFT JOIN #ModuleIdMap parent_map ON parent_map.old_id = target.b_parent_id;
UPDATE target
SET b_new_module_id = id_map.new_id
FROM dbo.b_module_field target
JOIN #ModuleIdMap id_map ON id_map.old_id = target.b_module_id;
UPDATE target
SET b_new_module_id = id_map.new_id
FROM dbo.b_module_power target
JOIN #ModuleIdMap id_map ON id_map.old_id = target.b_module_id;
UPDATE target
SET b_new_module_id = id_map.new_id
FROM dbo.b_user_module target
JOIN #ModuleIdMap id_map ON id_map.old_id = target.b_module_id;
ALTER TABLE dbo.b_module ALTER COLUMN b_new_id bigint NOT NULL;
ALTER TABLE dbo.b_module ALTER COLUMN b_code varchar(50) NOT NULL;
ALTER TABLE dbo.b_module_field ALTER COLUMN b_new_module_id bigint NOT NULL;
ALTER TABLE dbo.b_module_power ALTER COLUMN b_new_module_id bigint NOT NULL;
ALTER TABLE dbo.b_user_module ALTER COLUMN b_new_module_id bigint NOT NULL;
';
ALTER TABLE dbo.b_module DROP CONSTRAINT FK_b_module_parent;
ALTER TABLE dbo.b_module_field DROP CONSTRAINT FK_b_module_field_module;
ALTER TABLE dbo.b_module_power DROP CONSTRAINT FK_b_module_power_module;
ALTER TABLE dbo.b_user_module DROP CONSTRAINT FK_b_user_module_module;
ALTER TABLE dbo.b_module_field DROP CONSTRAINT UQ_b_module_field;
ALTER TABLE dbo.b_module_power DROP CONSTRAINT UQ_b_module_power;
ALTER TABLE dbo.b_user_module DROP CONSTRAINT UQ_b_user_module;
ALTER TABLE dbo.b_module DROP CONSTRAINT CK_b_module_id;
ALTER TABLE dbo.b_module DROP CONSTRAINT PK_b_module;
DROP INDEX IX_b_module_parent ON dbo.b_module;
DROP INDEX IX_b_module_field_module ON dbo.b_module_field;
DROP INDEX IX_b_module_power_module ON dbo.b_module_power;
DROP INDEX IX_b_user_module_module ON dbo.b_user_module;
ALTER TABLE dbo.b_module_field DROP COLUMN b_module_id;
ALTER TABLE dbo.b_module_power DROP COLUMN b_module_id;
ALTER TABLE dbo.b_user_module DROP COLUMN b_module_id;
ALTER TABLE dbo.b_module DROP COLUMN b_parent_id, b_id;
EXEC sys.sp_rename N'dbo.b_module.b_new_id', N'b_id', N'COLUMN';
EXEC sys.sp_rename N'dbo.b_module.b_new_parent_id', N'b_parent_id', N'COLUMN';
EXEC sys.sp_rename N'dbo.b_module_field.b_new_module_id', N'b_module_id', N'COLUMN';
EXEC sys.sp_rename N'dbo.b_module_power.b_new_module_id', N'b_module_id', N'COLUMN';
EXEC sys.sp_rename N'dbo.b_user_module.b_new_module_id', N'b_module_id', N'COLUMN';
EXEC sys.sp_executesql N'
ALTER TABLE dbo.b_module ADD
CONSTRAINT PK_b_module PRIMARY KEY (b_id),
CONSTRAINT FK_b_module_parent FOREIGN KEY (b_parent_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_code UNIQUE (b_code),
CONSTRAINT CK_b_module_code CHECK (
LEN(b_code) BETWEEN 2 AND 50
AND b_code COLLATE Latin1_General_100_BIN2 LIKE ''[a-z]%''
AND b_code COLLATE Latin1_General_100_BIN2 NOT LIKE ''%[^a-z0-9_]%''
);
ALTER TABLE dbo.b_module_field ADD
CONSTRAINT FK_b_module_field_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_field UNIQUE (b_module_id, b_field);
ALTER TABLE dbo.b_module_power ADD
CONSTRAINT FK_b_module_power_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_module_power UNIQUE (b_module_id, b_code);
ALTER TABLE dbo.b_user_module ADD
CONSTRAINT FK_b_user_module_module FOREIGN KEY (b_module_id) REFERENCES dbo.b_module (b_id),
CONSTRAINT UQ_b_user_module UNIQUE (b_user_id, b_module_id);
CREATE INDEX IX_b_module_parent ON dbo.b_module (b_parent_id, b_xh, b_id);
CREATE INDEX IX_b_module_field_module ON dbo.b_module_field (b_module_id, b_xh, b_id);
CREATE INDEX IX_b_module_power_module ON dbo.b_module_power (b_module_id, b_xh, b_id);
CREATE INDEX IX_b_user_module_module ON dbo.b_user_module (b_module_id, b_user_id);
';
END;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
@@ -0,0 +1,137 @@
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @SystemModuleId bigint = (SELECT TOP (1) b_id FROM dbo.b_module WHERE b_code = 'm_system');
DECLARE @I18nModuleId bigint = 205000000000000013;
IF @SystemModuleId IS NULL
THROW 51000, '未找到系统管理模块 m_system,多语言管理初始化已取消。', 1;
IF NOT EXISTS (SELECT 1 FROM dbo.b_module WHERE b_code = 'm_i18n')
INSERT INTO dbo.b_module (
b_id, b_code, b_parent_id, b_name, b_i18n, b_type, b_route,
b_canmenu, b_canuse, b_xh
)
VALUES (
@I18nModuleId, 'm_i18n', @SystemModuleId, N'多语言管理', 'module.m_i18n',
'page', '/system/i18n', 1, 1, 20
);
ELSE
SET @I18nModuleId = (SELECT TOP (1) b_id FROM dbo.b_module WHERE b_code = 'm_i18n');
DECLARE @Powers TABLE (
b_id bigint,
b_code varchar(50),
b_name nvarchar(100),
b_i18n varchar(150),
b_xh int
);
INSERT INTO @Powers VALUES
(205000000000000005, 'create', N'新增', 'power.m_i18n.create', 10),
(205000000000000006, 'update', N'修改', 'power.m_i18n.update', 20),
(205000000000000007, 'delete', N'删除', 'power.m_i18n.delete', 30);
INSERT INTO dbo.b_module_power (b_id, b_module_id, b_code, b_name, b_i18n, b_xh, b_canuse)
SELECT source.b_id, @I18nModuleId, source.b_code, source.b_name, source.b_i18n, source.b_xh, 1
FROM @Powers source
WHERE NOT EXISTS (
SELECT 1
FROM dbo.b_module_power target
WHERE target.b_module_id = @I18nModuleId
AND target.b_code = source.b_code
);
EXEC sys.sp_set_session_context @key = N'allow_g3soft', @value = 1;
DECLARE @AdminId bigint = (
SELECT TOP (1) b_id
FROM dbo.b_user
WHERE b_account = N'g3soft'
AND b_canuse = 1
);
IF @AdminId IS NULL
THROW 51000, '未找到已启用的管理员账号 g3soft,多语言管理初始化已取消。', 1;
IF NOT EXISTS (
SELECT 1
FROM dbo.b_user_module
WHERE b_user_id = @AdminId
AND b_module_id = @I18nModuleId
)
INSERT INTO dbo.b_user_module (
b_id, b_user_id, b_module_id, b_inputuser_id, b_inputdatetime
)
VALUES (
205000000000000102, @AdminId, @I18nModuleId, @AdminId, GETDATE()
);
INSERT INTO dbo.b_user_power (b_id, b_user_id, b_power_id, b_inputuser_id, b_inputdatetime)
SELECT
CASE power.b_code
WHEN 'create' THEN 205000000000000211
WHEN 'update' THEN 205000000000000212
WHEN 'delete' THEN 205000000000000213
END,
@AdminId,
power.b_id,
@AdminId,
GETDATE()
FROM dbo.b_module_power power
WHERE power.b_module_id = @I18nModuleId
AND power.b_code IN ('create', 'update', 'delete')
AND NOT EXISTS (
SELECT 1
FROM dbo.b_user_power target
WHERE target.b_user_id = @AdminId
AND target.b_power_id = power.b_id
);
DECLARE @Translations TABLE (
b_id bigint,
b_key varchar(150),
b_locale varchar(20),
b_value nvarchar(500)
);
INSERT INTO @Translations VALUES
(205000000000000301, 'module.m_i18n', 'zh-CN', N'多语言管理'),
(205000000000000302, 'module.m_i18n', 'en-US', N'Language Resources'),
(205000000000000303, 'module.m_i18n', 'zh-TW', N'多語言管理'),
(205000000000000304, 'power.m_i18n.create', 'zh-CN', N'新增'),
(205000000000000305, 'power.m_i18n.create', 'en-US', N'Create'),
(205000000000000306, 'power.m_i18n.create', 'zh-TW', N'新增'),
(205000000000000307, 'power.m_i18n.update', 'zh-CN', N'修改'),
(205000000000000308, 'power.m_i18n.update', 'en-US', N'Update'),
(205000000000000309, 'power.m_i18n.update', 'zh-TW', N'修改'),
(205000000000000310, 'power.m_i18n.delete', 'zh-CN', N'删除'),
(205000000000000311, 'power.m_i18n.delete', 'en-US', N'Delete'),
(205000000000000312, 'power.m_i18n.delete', 'zh-TW', N'刪除');
INSERT INTO dbo.b_i18n (
b_id, b_key, b_locale, b_value, b_inputuser_id, b_inputdatetime,
b_updateuser_id, b_updatedatetime
)
SELECT
source.b_id, source.b_key, source.b_locale, source.b_value,
@AdminId, GETDATE(), NULL, NULL
FROM @Translations source
WHERE NOT EXISTS (
SELECT 1
FROM dbo.b_i18n target
WHERE target.b_key = source.b_key
AND target.b_locale = source.b_locale
);
EXEC sys.sp_set_session_context @key = N'allow_g3soft', @value = NULL;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
BEGIN TRY
EXEC sys.sp_set_session_context @key = N'allow_g3soft', @value = NULL;
END TRY
BEGIN CATCH
END CATCH;
THROW;
END CATCH;