From b1193b909e5e15f78783f72eb21959a52128e973 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Tue, 26 May 2026 20:59:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=A0=B7=E5=BC=8F=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=99=A8=20StyleSetter=20=E6=94=AF=E6=8C=81=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E5=AF=B9=E6=AF=94=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Index.vue 透传 lastValues/isCompare 给各分类子组件,并冒泡 addDiffCount - pro 下 6 个分类组件接受新 props 并向 MContainer 传递 - Layout/Border 同时将新 props 传递给内部 Box/Border 组件 - components/Border.vue 接受新 props 并冒泡 MContainer 的 addDiffCount - components/Box.vue 接受 props 以保持接口一致 - 补充单元测试覆盖透传与事件冒泡 --- .../editor/src/fields/StyleSetter/Index.vue | 6 ++ .../fields/StyleSetter/components/Border.vue | 16 ++++- .../src/fields/StyleSetter/components/Box.vue | 2 + .../src/fields/StyleSetter/pro/Background.vue | 16 ++++- .../src/fields/StyleSetter/pro/Border.vue | 26 ++++++- .../src/fields/StyleSetter/pro/Font.vue | 16 ++++- .../src/fields/StyleSetter/pro/Layout.vue | 18 ++++- .../src/fields/StyleSetter/pro/Position.vue | 16 ++++- .../src/fields/StyleSetter/pro/Transform.vue | 16 ++++- .../unit/fields/StyleSetter/Index.spec.ts | 48 ++++++++++++- .../unit/fields/StyleSetter/Layout.spec.ts | 42 ++++++++++- .../unit/fields/StyleSetter/Position.spec.ts | 27 ++++++- .../StyleSetter/components/Border.spec.ts | 25 ++++++- .../tests/unit/fields/StyleSetter/pro.spec.ts | 72 +++++++++++++++++-- 14 files changed, 324 insertions(+), 22 deletions(-) diff --git a/packages/editor/src/fields/StyleSetter/Index.vue b/packages/editor/src/fields/StyleSetter/Index.vue index e3fab9c2..13aa759a 100644 --- a/packages/editor/src/fields/StyleSetter/Index.vue +++ b/packages/editor/src/fields/StyleSetter/Index.vue @@ -7,9 +7,12 @@ v-if="item.component" :is="item.component" :values="model[name]" + :last-values="lastValues?.[name]" + :is-compare="isCompare" :size="size" :disabled="disabled" @change="change" + @add-diff-count="onAddDiffCount" > @@ -36,6 +39,7 @@ const props = defineProps>(); const emit = defineEmits<{ change: [v: any, eventData: ContainerChangeEventData]; + addDiffCount: []; }>(); const list = [ @@ -82,4 +86,6 @@ const change = (v: any, eventData: ContainerChangeEventData) => { }); emit('change', v, eventData); }; + +const onAddDiffCount = () => emit('addDiffCount'); diff --git a/packages/editor/src/fields/StyleSetter/components/Border.vue b/packages/editor/src/fields/StyleSetter/components/Border.vue index 6b7e4b52..85842a9b 100644 --- a/packages/editor/src/fields/StyleSetter/components/Border.vue +++ b/packages/editor/src/fields/StyleSetter/components/Border.vue @@ -30,7 +30,16 @@
- +
@@ -86,11 +95,14 @@ const selectDirection = (d?: string) => (direction.value = d || ''); const emit = defineEmits<{ change: [v: StyleSchema, eventData: ContainerChangeEventData]; + addDiffCount: []; }>(); withDefaults( defineProps<{ model: FormValue; + lastValues?: FormValue; + isCompare?: boolean; disabled?: boolean; size?: 'large' | 'default' | 'small'; }>(), @@ -104,4 +116,6 @@ const change = (value: StyleSchema, eventData: ContainerChangeEventData) => { }); }); }; + +const onAddDiffCount = () => emit('addDiffCount'); diff --git a/packages/editor/src/fields/StyleSetter/components/Box.vue b/packages/editor/src/fields/StyleSetter/components/Box.vue index 396fd591..c3c20bd3 100644 --- a/packages/editor/src/fields/StyleSetter/components/Box.vue +++ b/packages/editor/src/fields/StyleSetter/components/Box.vue @@ -64,6 +64,8 @@ withDefaults( disabled?: boolean; size?: 'large' | 'default' | 'small'; model: FormValue; + lastValues?: FormValue; + isCompare?: boolean; }>(), {}, ); diff --git a/packages/editor/src/fields/StyleSetter/pro/Background.vue b/packages/editor/src/fields/StyleSetter/pro/Background.vue index 51050221..601dfa6b 100644 --- a/packages/editor/src/fields/StyleSetter/pro/Background.vue +++ b/packages/editor/src/fields/StyleSetter/pro/Background.vue @@ -1,5 +1,14 @@ diff --git a/packages/editor/src/fields/StyleSetter/pro/Border.vue b/packages/editor/src/fields/StyleSetter/pro/Border.vue index cd336381..b7b7c17f 100644 --- a/packages/editor/src/fields/StyleSetter/pro/Border.vue +++ b/packages/editor/src/fields/StyleSetter/pro/Border.vue @@ -1,6 +1,23 @@ diff --git a/packages/editor/src/fields/StyleSetter/pro/Font.vue b/packages/editor/src/fields/StyleSetter/pro/Font.vue index d5d9e42e..d3174693 100644 --- a/packages/editor/src/fields/StyleSetter/pro/Font.vue +++ b/packages/editor/src/fields/StyleSetter/pro/Font.vue @@ -1,5 +1,14 @@ diff --git a/packages/editor/src/fields/StyleSetter/pro/Layout.vue b/packages/editor/src/fields/StyleSetter/pro/Layout.vue index 69d4de8c..7d97849e 100644 --- a/packages/editor/src/fields/StyleSetter/pro/Layout.vue +++ b/packages/editor/src/fields/StyleSetter/pro/Layout.vue @@ -1,8 +1,19 @@