From f6b79ea09a05435deee8cb988af1ebab1b37f2fb Mon Sep 17 00:00:00 2001 From: oneao Date: Tue, 28 Jul 2026 22:54:43 +0800 Subject: [PATCH] 20260728225443 --- .../config/migrations/000_reset_metadata.sql | 37 +- .../config/migrations/001_add_i18n_type.sql | 4 +- .../007_remove_check_constraints.sql | 20 + .../fms-vue/src/components/FmsMemoInput.vue | 2 - .../fms-module-list/FmsModuleListPage.vue | 389 +++++++++++++-- .../fms-module-list/FmsModuleTable.vue | 34 +- .../fms-module-list/FmsQueryControl.vue | 27 + .../fms-module-list/FmsQueryToolbar.vue | 47 +- .../fms-module-list/moduleListUtils.js | 89 +++- .../fms-module-list/useModuleList.js | 390 --------------- .../src/components/fms-table/FmsTable.vue | 15 +- .../src/layouts/components/AppSidebar.vue | 50 +- .../src/layouts/components/AppTabs.vue | 17 +- .../src/layouts/components/AppToolbar.vue | 95 +++- code/fms/fms-vue/src/stores/app.js | 85 +++- code/fms/fms-vue/src/stores/permissions.js | 1 + code/fms/fms-vue/src/utils/i18n.js | 10 - .../components/FieldGroupManager.vue | 39 +- .../components/I18nQuickSetModal.vue | 61 +-- .../components/ModuleBasicPanel.vue | 26 +- .../components/ModuleEditConfigPanel.vue | 75 +-- .../components/ModuleFieldsPanel.vue | 72 ++- .../components/ModuleI18nPanel.vue | 137 +++-- .../components/ModuleListConfigPanel.vue | 41 +- .../components/ModulePowersPanel.vue | 48 +- .../components/ModuleQueryConfigPanel.vue | 28 +- .../src/views/module-management/index.vue | 333 +++++++------ .../src/views/system/i18n-type/index.vue | 468 ++++++++---------- code/fms/新数据库结构.md | 17 +- code/fms/模块管理实施计划.md | 4 +- 30 files changed, 1541 insertions(+), 1120 deletions(-) create mode 100644 code/fms/fms-api/config/migrations/007_remove_check_constraints.sql delete mode 100644 code/fms/fms-vue/src/components/fms-module-list/useModuleList.js diff --git a/code/fms/fms-api/config/migrations/000_reset_metadata.sql b/code/fms/fms-api/config/migrations/000_reset_metadata.sql index 25855415..8aec291f 100644 --- a/code/fms/fms-api/config/migrations/000_reset_metadata.sql +++ b/code/fms/fms-api/config/migrations/000_reset_metadata.sql @@ -60,18 +60,7 @@ GO b_canuse int NOT NULL CONSTRAINT DF_s_module_canuse DEFAULT (1), b_xh int NOT NULL CONSTRAINT DF_s_module_xh DEFAULT (0), CONSTRAINT PK_s_module PRIMARY KEY (b_id), - CONSTRAINT UQ_s_module_code UNIQUE (b_code), - CONSTRAINT CK_s_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_s_module_type CHECK (b_module_type IN ('directory', 'page', 'data')), - CONSTRAINT CK_s_module_canmenu CHECK (b_canmenu IN (0, 1)), - CONSTRAINT CK_s_module_canuse CHECK (b_canuse IN (0, 1)), - CONSTRAINT CK_s_module_directory CHECK (b_module_type <> 'directory' OR (b_route IS NULL AND b_viewtable IS NULL AND b_savetable IS NULL)), - CONSTRAINT CK_s_module_page CHECK (b_module_type <> 'page' OR b_route IS NOT NULL), - CONSTRAINT CK_s_module_data CHECK (b_module_type <> 'data' OR (b_canmenu = 0 AND b_route IS NULL)) + CONSTRAINT UQ_s_module_code UNIQUE (b_code) ); CREATE UNIQUE INDEX UX_s_module_route ON dbo.s_module (b_route) WHERE b_route IS NOT NULL; CREATE INDEX IX_s_module_parent ON dbo.s_module (b_parent_id, b_xh, b_id); @@ -87,10 +76,7 @@ GO b_options nvarchar(max) NULL, b_canuse int NOT NULL CONSTRAINT DF_s_module_field_canuse DEFAULT (1), CONSTRAINT PK_s_module_field PRIMARY KEY (b_id), - CONSTRAINT UQ_s_module_field UNIQUE (b_module_id, b_field), - CONSTRAINT CK_s_module_field_type CHECK (b_type IN ('input', 'textarea', 'number', 'money', 'date', 'datetime', 'switch', 'select')), - CONSTRAINT CK_s_module_field_canuse CHECK (b_canuse IN (0, 1)), - CONSTRAINT CK_s_module_field_options CHECK (b_options IS NULL OR ISJSON(b_options) = 1) + CONSTRAINT UQ_s_module_field UNIQUE (b_module_id, b_field) ); CREATE INDEX IX_s_module_field_module ON dbo.s_module_field (b_module_id, b_canuse, b_id); @@ -102,8 +88,7 @@ GO b_i18n varchar(150) NULL, b_xh int NOT NULL CONSTRAINT DF_s_module_field_group_xh DEFAULT (0), b_canuse int NOT NULL CONSTRAINT DF_s_module_field_group_canuse DEFAULT (1), - CONSTRAINT PK_s_module_field_group PRIMARY KEY (b_id), - CONSTRAINT CK_s_module_field_group_canuse CHECK (b_canuse IN (0, 1)) + CONSTRAINT PK_s_module_field_group PRIMARY KEY (b_id) ); CREATE INDEX IX_s_module_field_group_module ON dbo.s_module_field_group (b_module_id, b_canuse, b_xh, b_id); @@ -116,9 +101,7 @@ GO b_visible int NOT NULL CONSTRAINT DF_s_module_field_list_visible DEFAULT (1), b_xh int NOT NULL CONSTRAINT DF_s_module_field_list_xh DEFAULT (0), b_width int NULL, - CONSTRAINT PK_s_module_field_list PRIMARY KEY (b_id), - CONSTRAINT CK_s_module_field_list_visible CHECK (b_visible IN (0, 1)), - CONSTRAINT CK_s_module_field_list_width CHECK (b_width IS NULL OR b_width > 0) + CONSTRAINT PK_s_module_field_list PRIMARY KEY (b_id) ); CREATE UNIQUE INDEX UX_s_module_field_list_field ON dbo.s_module_field_list (b_module_id, b_field_id) WHERE b_field_id IS NOT NULL; CREATE INDEX IX_s_module_field_list_tree ON dbo.s_module_field_list (b_module_id, b_group_id, b_xh, b_id); @@ -133,10 +116,7 @@ GO b_group_id bigint NULL, b_xh int NOT NULL CONSTRAINT DF_s_module_field_edit_xh DEFAULT (0), CONSTRAINT PK_s_module_field_edit PRIMARY KEY (b_id), - CONSTRAINT UQ_s_module_field_edit UNIQUE (b_module_id, b_field_id), - CONSTRAINT CK_s_module_field_edit_required CHECK (b_required IN (0, 1)), - CONSTRAINT CK_s_module_field_edit_readonly CHECK (b_readonly IN (0, 1)), - CONSTRAINT CK_s_module_field_edit_disabled CHECK (b_disabled IN (0, 1)) + CONSTRAINT UQ_s_module_field_edit UNIQUE (b_module_id, b_field_id) ); CREATE INDEX IX_s_module_field_edit_module ON dbo.s_module_field_edit (b_module_id, b_xh, b_id); @@ -150,9 +130,7 @@ GO b_xh int NOT NULL CONSTRAINT DF_s_module_field_query_xh DEFAULT (0), b_canuse int NOT NULL CONSTRAINT DF_s_module_field_query_canuse DEFAULT (1), CONSTRAINT PK_s_module_field_query PRIMARY KEY (b_id), - CONSTRAINT UQ_s_module_field_query UNIQUE (b_module_id, b_field_id), - CONSTRAINT CK_s_module_field_query_operator CHECK (b_operator IN ('=', 'like', 'between', 'in')), - CONSTRAINT CK_s_module_field_query_canuse CHECK (b_canuse IN (0, 1)) + CONSTRAINT UQ_s_module_field_query UNIQUE (b_module_id, b_field_id) ); CREATE INDEX IX_s_module_field_query_module ON dbo.s_module_field_query (b_module_id, b_canuse, b_xh, b_id); @@ -165,8 +143,7 @@ GO b_xh int NOT NULL CONSTRAINT DF_s_module_power_xh DEFAULT (0), b_canuse int NOT NULL CONSTRAINT DF_s_module_power_canuse DEFAULT (1), CONSTRAINT PK_s_module_power PRIMARY KEY (b_id), - CONSTRAINT UQ_s_module_power UNIQUE (b_module_id, b_code), - CONSTRAINT CK_s_module_power_canuse CHECK (b_canuse IN (0, 1)) + CONSTRAINT UQ_s_module_power UNIQUE (b_module_id, b_code) ); CREATE TABLE dbo.b_user_module ( diff --git a/code/fms/fms-api/config/migrations/001_add_i18n_type.sql b/code/fms/fms-api/config/migrations/001_add_i18n_type.sql index c047217d..58108c8b 100644 --- a/code/fms/fms-api/config/migrations/001_add_i18n_type.sql +++ b/code/fms/fms-api/config/migrations/001_add_i18n_type.sql @@ -34,9 +34,7 @@ BEGIN TRANSACTION; b_default int NOT NULL CONSTRAINT DF_b_i18n_type_default DEFAULT (0), b_xh int NOT NULL CONSTRAINT DF_b_i18n_type_xh DEFAULT (0), CONSTRAINT PK_b_i18n_type PRIMARY KEY (b_id), - CONSTRAINT UQ_b_i18n_type_code UNIQUE (b_code), - CONSTRAINT CK_b_i18n_type_canuse CHECK (b_canuse IN (0, 1)), - CONSTRAINT CK_b_i18n_type_default CHECK (b_default IN (0, 1)) + CONSTRAINT UQ_b_i18n_type_code UNIQUE (b_code) ); CREATE INDEX IX_b_i18n_type_xh ON dbo.b_i18n_type (b_xh, b_id); diff --git a/code/fms/fms-api/config/migrations/007_remove_check_constraints.sql b/code/fms/fms-api/config/migrations/007_remove_check_constraints.sql new file mode 100644 index 00000000..20891938 --- /dev/null +++ b/code/fms/fms-api/config/migrations/007_remove_check_constraints.sql @@ -0,0 +1,20 @@ +/* 删除数据库中的 CHECK 约束。 */ +DECLARE @Sql nvarchar(max) = N''; + +SELECT @Sql = @Sql + + N'ALTER TABLE ' + + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + N'.' + + QUOTENAME(OBJECT_NAME(parent_object_id)) + + N' DROP CONSTRAINT ' + QUOTENAME(name) + N';' +FROM sys.check_constraints; + +IF @Sql <> N'' + EXEC sys.sp_executesql @Sql; + +/* 将旧的 switch 字段类型统一改为 checkbox。 */ +IF OBJECT_ID(N'dbo.s_module_field', N'U') IS NOT NULL +BEGIN + UPDATE dbo.s_module_field + SET b_type = 'checkbox' + WHERE b_type = 'switch'; +END; diff --git a/code/fms/fms-vue/src/components/FmsMemoInput.vue b/code/fms/fms-vue/src/components/FmsMemoInput.vue index c45f6ac2..9455c274 100644 --- a/code/fms/fms-vue/src/components/FmsMemoInput.vue +++ b/code/fms/fms-vue/src/components/FmsMemoInput.vue @@ -7,7 +7,6 @@ const props = defineProps({ modelValue: { type: String, default: "" }, disabled: { type: Boolean, default: false }, readonly: { type: Boolean, default: false }, - allowClear: { type: Boolean, default: true }, maxlength: { type: Number, default: undefined }, popupWidth: { type: [Number, String], default: 420 }, popupHeight: { type: [Number, String], default: 180 }, @@ -139,7 +138,6 @@ onBeforeUnmount(() => document.removeEventListener("pointerdown", onDocumentPoin :value="modelValue" :disabled="disabled" :readonly="readonly" - :allow-clear="allowClear" :maxlength="maxlength" @update:value="updateValue" @change="onInputChange" diff --git a/code/fms/fms-vue/src/components/fms-module-list/FmsModuleListPage.vue b/code/fms/fms-vue/src/components/fms-module-list/FmsModuleListPage.vue index 5b55ba35..90d48878 100644 --- a/code/fms/fms-vue/src/components/fms-module-list/FmsModuleListPage.vue +++ b/code/fms/fms-vue/src/components/fms-module-list/FmsModuleListPage.vue @@ -1,15 +1,26 @@