From 53aba8b956fd7cbc1246006f17dc402f5e8c4ab2 Mon Sep 17 00:00:00 2001 From: ZhangAo Date: Tue, 1 Sep 2026 17:32:43 +0800 Subject: [PATCH] 20260901173242 --- code/fms/FMS新系统核心表结构设计.md | 2 + ..._add_group_colspan_and_drop_edit_check.sql | 34 ++ .../migrations/100_initialize_fms_new.sql | 2 +- .../fms/fms-vue/src/components/FpsMonitor.vue | 19 + .../src/components/captcha/SliderCaptcha.vue | 306 +++++++++++++ .../src/components/ui/form/FormGroup.vue | 164 +++++++ .../src/components/ui/form/form-item.vue | 13 +- .../src/components/ui/form/form-utils.js | 28 ++ .../fms-vue/src/components/ui/form/form.vue | 38 +- .../fms-vue/src/components/ui/form/index.scss | 12 +- code/fms/fms-vue/src/components/ui/index.js | 2 + code/fms/fms-vue/src/theme/tokens.css | 1 - code/fms/fms-vue/src/utils/tree.js | 135 ++++++ code/fms/fms-vue/src/views/login/index.vue | 397 ++++++++++++----- .../module-management/ModuleBasicPanel.vue | 135 +++--- .../module-management/ModuleI18nPanel.vue | 262 ++++++++++- .../design-editor/FormDesignEditor.vue | 183 ++------ .../common/useStructureEditing.js | 2 + .../design-editor/form/FormPreview.vue | 157 +++++++ .../views/system/module-management/index.vue | 406 +++--------------- code/test/vue-vben-admin | 1 + 21 files changed, 1595 insertions(+), 704 deletions(-) create mode 100644 code/fms/fms-api/config/migrations/042_add_group_colspan_and_drop_edit_check.sql create mode 100644 code/fms/fms-vue/src/components/captcha/SliderCaptcha.vue create mode 100644 code/fms/fms-vue/src/components/ui/form/FormGroup.vue create mode 100644 code/fms/fms-vue/src/components/ui/form/form-utils.js create mode 100644 code/fms/fms-vue/src/views/system/module-management/components/design-editor/form/FormPreview.vue create mode 160000 code/test/vue-vben-admin diff --git a/code/fms/FMS新系统核心表结构设计.md b/code/fms/FMS新系统核心表结构设计.md index 3461277f..86ebbcbe 100644 --- a/code/fms/FMS新系统核心表结构设计.md +++ b/code/fms/FMS新系统核心表结构设计.md @@ -192,6 +192,8 @@ create table s_field_group ( b_parent_id bigint null, -- 父分组(分组树) b_title nvarchar(100) not null, -- 分组标题 b_i18n varchar(150) null, -- 标题多语言 key + b_layout_direction varchar(10) null, -- 分组内字段排列方向(vertical/horizontal) + b_colspan int not null default 48, -- 分组在外层 48 宫格中的占格数(默认 48 独占一行) b_xh int not null default 0, -- 分组排序 b_canuse int not null default 1, -- 是否启用(停用整组隐藏) constraint pk_s_field_group primary key (b_id), diff --git a/code/fms/fms-api/config/migrations/042_add_group_colspan_and_drop_edit_check.sql b/code/fms/fms-api/config/migrations/042_add_group_colspan_and_drop_edit_check.sql new file mode 100644 index 00000000..39bd8083 --- /dev/null +++ b/code/fms/fms-api/config/migrations/042_add_group_colspan_and_drop_edit_check.sql @@ -0,0 +1,34 @@ +/* + 表单设计器分组宽度持久化: + 1. s_field_group.b_colspan —— 分组在外层 48 宫格中的占格数(默认 48 独占一行)。 + 与 s_field_edit.b_colspan 同义(栅格占格数),仅进制不同:分组 48 宫格、字段 24 宫格。 + 不加 CHECK 约束(与前端钳制逻辑一致,边界由应用层保证)。 + 2. 删除 s_field_edit 的 CK_s_field_edit_colspan CHECK 约束(b_colspan BETWEEN 1 AND 24), + 放开栅格宽度的数据库层限制,校验统一交由前端与应用层。 + 可重复执行:列与约束均通过存在性判断避免重复。 +*/ +SET NOCOUNT ON; + +-- 1. s_field_group.b_colspan +IF NOT EXISTS ( + SELECT 1 + FROM sys.columns + WHERE object_id = OBJECT_ID(N'dbo.s_field_group') + AND name = N'b_colspan' +) +BEGIN + ALTER TABLE dbo.s_field_group + ADD b_colspan int NOT NULL CONSTRAINT DF_s_field_group_colspan DEFAULT (48); +END; + +-- 2. 删除 s_field_edit 的 CK_s_field_edit_colspan CHECK 约束 +IF EXISTS ( + SELECT 1 + FROM sys.check_constraints + WHERE parent_object_id = OBJECT_ID(N'dbo.s_field_edit') + AND name = N'CK_s_field_edit_colspan' +) +BEGIN + ALTER TABLE dbo.s_field_edit + DROP CONSTRAINT CK_s_field_edit_colspan; +END; diff --git a/code/fms/fms-api/config/migrations/100_initialize_fms_new.sql b/code/fms/fms-api/config/migrations/100_initialize_fms_new.sql index 79f9d8b1..f3974a1c 100644 --- a/code/fms/fms-api/config/migrations/100_initialize_fms_new.sql +++ b/code/fms/fms-api/config/migrations/100_initialize_fms_new.sql @@ -133,6 +133,7 @@ BEGIN b_title nvarchar(100) NOT NULL, b_i18n varchar(150) NULL, b_layout_direction varchar(10) NULL CONSTRAINT DF_s_field_group_layout_direction DEFAULT ('vertical'), + b_colspan int NOT NULL CONSTRAINT DF_s_field_group_colspan DEFAULT (48), b_xh int NOT NULL CONSTRAINT DF_s_field_group_xh DEFAULT (0), b_canuse int NOT NULL CONSTRAINT DF_s_field_group_canuse DEFAULT (1), CONSTRAINT PK_s_field_group PRIMARY KEY (b_id), @@ -178,7 +179,6 @@ BEGIN b_xh int NOT NULL CONSTRAINT DF_s_field_edit_xh DEFAULT (0), CONSTRAINT PK_s_field_edit PRIMARY KEY (b_id), CONSTRAINT UQ_s_field_edit_field UNIQUE (b_module_id, b_field_id), - CONSTRAINT CK_s_field_edit_colspan CHECK (b_colspan BETWEEN 1 AND 24), CONSTRAINT CK_s_field_edit_height CHECK (b_height IS NULL OR (b_height BETWEEN 64 AND 480)) ); CREATE INDEX IX_s_field_edit_order ON dbo.s_field_edit (b_xh, b_id); diff --git a/code/fms/fms-vue/src/components/FpsMonitor.vue b/code/fms/fms-vue/src/components/FpsMonitor.vue index 4c4e8f5f..b266472a 100644 --- a/code/fms/fms-vue/src/components/FpsMonitor.vue +++ b/code/fms/fms-vue/src/components/FpsMonitor.vue @@ -100,6 +100,23 @@ const rootEl = ref(null) const pos = ref(null) let dragStart = null // { pointerX, pointerY, originX, originY, width, height } +/* ---------- 双击隐藏(也可由父级通过 ref 调 show/hide 控制显隐) ---------- */ +const visible = ref(true) + +function onDblClick() { + visible.value = false +} + +function show() { + visible.value = true +} + +function hide() { + visible.value = false +} + +defineExpose({ show, hide }) + function onPointerDown(e) { // 重置按钮的点击不触发拖拽 if (e.target.closest('.fps-monitor__reset')) return @@ -148,6 +165,7 @@ onBeforeUnmount(() => {