diff --git a/src/components/DiyEditor/components/ComponentContainerProperty.vue b/src/components/DiyEditor/components/ComponentContainerProperty.vue index 25119a5b6..5d18785a9 100644 --- a/src/components/DiyEditor/components/ComponentContainerProperty.vue +++ b/src/components/DiyEditor/components/ComponentContainerProperty.vue @@ -51,7 +51,8 @@ diff --git a/src/components/DiyEditor/components/mobile/CouponCard/property.vue b/src/components/DiyEditor/components/mobile/CouponCard/property.vue index 4f69000bb..5d151bf94 100644 --- a/src/components/DiyEditor/components/mobile/CouponCard/property.vue +++ b/src/components/DiyEditor/components/mobile/CouponCard/property.vue @@ -73,7 +73,7 @@ diff --git a/src/components/DiyEditor/components/mobile/HotZone/property.vue b/src/components/DiyEditor/components/mobile/HotZone/property.vue index 495cbdce4..65892f857 100644 --- a/src/components/DiyEditor/components/mobile/HotZone/property.vue +++ b/src/components/DiyEditor/components/mobile/HotZone/property.vue @@ -20,7 +20,7 @@ diff --git a/src/components/DiyEditor/components/mobile/MagicCube/property.vue b/src/components/DiyEditor/components/mobile/MagicCube/property.vue index fe938e5b4..dee3117b0 100644 --- a/src/components/DiyEditor/components/mobile/MagicCube/property.vue +++ b/src/components/DiyEditor/components/mobile/MagicCube/property.vue @@ -56,7 +56,7 @@ diff --git a/src/components/DiyEditor/components/mobile/MenuList/property.vue b/src/components/DiyEditor/components/mobile/MenuList/property.vue index a5fb4603d..b665b320c 100644 --- a/src/components/DiyEditor/components/mobile/MenuList/property.vue +++ b/src/components/DiyEditor/components/mobile/MenuList/property.vue @@ -28,7 +28,7 @@ diff --git a/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue b/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue index fbae83c2a..3dd3f7c39 100644 --- a/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue +++ b/src/components/DiyEditor/components/mobile/MenuSwiper/property.vue @@ -58,7 +58,7 @@ diff --git a/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue b/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue index f6176d239..2494e0691 100644 --- a/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue +++ b/src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue @@ -64,7 +64,7 @@ diff --git a/src/components/DiyEditor/components/mobile/PageConfig/property.vue b/src/components/DiyEditor/components/mobile/PageConfig/property.vue index 278bc9408..d8f51d268 100644 --- a/src/components/DiyEditor/components/mobile/PageConfig/property.vue +++ b/src/components/DiyEditor/components/mobile/PageConfig/property.vue @@ -20,7 +20,7 @@ diff --git a/src/components/DiyEditor/components/mobile/Popover/property.vue b/src/components/DiyEditor/components/mobile/Popover/property.vue index 2dd43519b..21be46efd 100644 --- a/src/components/DiyEditor/components/mobile/Popover/property.vue +++ b/src/components/DiyEditor/components/mobile/Popover/property.vue @@ -25,14 +25,14 @@ diff --git a/src/components/DiyEditor/components/mobile/ProductCard/property.vue b/src/components/DiyEditor/components/mobile/ProductCard/property.vue index 110c8be9c..91846e664 100644 --- a/src/components/DiyEditor/components/mobile/ProductCard/property.vue +++ b/src/components/DiyEditor/components/mobile/ProductCard/property.vue @@ -135,7 +135,7 @@ diff --git a/src/components/DiyEditor/components/mobile/ProductList/property.vue b/src/components/DiyEditor/components/mobile/ProductList/property.vue index 894687c23..d7a5a7cd7 100644 --- a/src/components/DiyEditor/components/mobile/ProductList/property.vue +++ b/src/components/DiyEditor/components/mobile/ProductList/property.vue @@ -85,7 +85,7 @@ diff --git a/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue b/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue index c3bcb21bc..10c5840e0 100644 --- a/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue +++ b/src/components/DiyEditor/components/mobile/PromotionArticle/property.vue @@ -25,7 +25,7 @@ diff --git a/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue b/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue index 61287590c..594c10bcd 100644 --- a/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue +++ b/src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue @@ -140,7 +140,7 @@ diff --git a/src/components/DiyEditor/components/mobile/TabBar/property.vue b/src/components/DiyEditor/components/mobile/TabBar/property.vue index d1da142bb..e43501214 100644 --- a/src/components/DiyEditor/components/mobile/TabBar/property.vue +++ b/src/components/DiyEditor/components/mobile/TabBar/property.vue @@ -80,13 +80,13 @@ diff --git a/src/components/DiyEditor/components/mobile/UserCoupon/property.vue b/src/components/DiyEditor/components/mobile/UserCoupon/property.vue index f902e04ee..221cc90a3 100644 --- a/src/components/DiyEditor/components/mobile/UserCoupon/property.vue +++ b/src/components/DiyEditor/components/mobile/UserCoupon/property.vue @@ -4,14 +4,14 @@ diff --git a/src/components/DiyEditor/components/mobile/UserOrder/property.vue b/src/components/DiyEditor/components/mobile/UserOrder/property.vue index 42df74104..d315db6a1 100644 --- a/src/components/DiyEditor/components/mobile/UserOrder/property.vue +++ b/src/components/DiyEditor/components/mobile/UserOrder/property.vue @@ -4,14 +4,14 @@ diff --git a/src/components/DiyEditor/components/mobile/UserWallet/property.vue b/src/components/DiyEditor/components/mobile/UserWallet/property.vue index 549367e35..e0ac83e44 100644 --- a/src/components/DiyEditor/components/mobile/UserWallet/property.vue +++ b/src/components/DiyEditor/components/mobile/UserWallet/property.vue @@ -4,14 +4,14 @@ diff --git a/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue b/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue index 7598543b2..1c3deec6e 100644 --- a/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue +++ b/src/components/DiyEditor/components/mobile/VideoPlayer/property.vue @@ -42,14 +42,14 @@ diff --git a/src/components/DiyEditor/index.vue b/src/components/DiyEditor/index.vue index 643cc50a6..27d3fc110 100644 --- a/src/components/DiyEditor/index.vue +++ b/src/components/DiyEditor/index.vue @@ -110,7 +110,7 @@ @@ -121,7 +121,7 @@ props.modelValue, () => { - const modelValue = isString(props.modelValue) - ? (JSON.parse(props.modelValue) as PageConfig) - : props.modelValue - pageConfigComponent.value.property = modelValue?.page || PAGE_CONFIG_COMPONENT.property + const modelValue = + isString(props.modelValue) && !isEmpty(props.modelValue) + ? (JSON.parse(props.modelValue) as PageConfig) + : props.modelValue + pageConfigComponent.value.property = + (typeof modelValue !== 'string' && modelValue?.page) || PAGE_CONFIG_COMPONENT.property navigationBarComponent.value.property = - modelValue?.navigationBar || NAVIGATION_BAR_COMPONENT.property - tabBarComponent.value.property = modelValue?.tabBar || TAB_BAR_COMPONENT.property + (typeof modelValue !== 'string' && modelValue?.navigationBar) || + NAVIGATION_BAR_COMPONENT.property + tabBarComponent.value.property = + (typeof modelValue !== 'string' && modelValue?.tabBar) || TAB_BAR_COMPONENT.property // 查找对应的页面组件 - pageComponents.value = (modelValue?.components || []).map((item) => { - const component = componentConfigs[item.id] - return { ...component, property: item.property } - }) + pageComponents.value = ((typeof modelValue !== 'string' && modelValue?.components) || []).map( + (item) => { + const component = componentConfigs[item.id] + return { ...component, property: item.property } + } + ) }, { immediate: true } ) +/** 选择组件修改其属性后更新它的配置 */ +watch( + selectedComponent, + (val: any) => { + if (!val || selectedComponentIndex.value === -1) { + return + } + pageComponents.value[selectedComponentIndex.value] = selectedComponent.value! + }, + { deep: true } +) + // 保存 const handleSave = () => { // 发送保存通知 diff --git a/src/components/DiyEditor/util.ts b/src/components/DiyEditor/util.ts index fac26e75e..b6febb970 100644 --- a/src/components/DiyEditor/util.ts +++ b/src/components/DiyEditor/util.ts @@ -1,4 +1,3 @@ -import { ref, Ref } from 'vue' import { PageConfigProperty } from '@/components/DiyEditor/components/mobile/PageConfig/config' import { NavigationBarProperty } from '@/components/DiyEditor/components/mobile/NavigationBar/config' import { TabBarProperty } from '@/components/DiyEditor/components/mobile/TabBar/config' @@ -78,34 +77,6 @@ export interface PageConfig { // 页面组件,只保留组件ID,组件属性 export interface PageComponent extends Pick, 'id' | 'property'> {} -// 属性表单监听 -export function usePropertyForm(modelValue: T, emit: Function): { formData: Ref } { - const formData = ref() - // 监听属性数据变动 - watch( - () => modelValue, - () => { - formData.value = modelValue - }, - { - deep: true, - immediate: true - } - ) - // 监听表单数据变动 - watch( - () => formData.value, - () => { - emit('update:modelValue', formData.value) - }, - { - deep: true - } - ) - - return { formData } as { formData: Ref } -} - // 页面组件库 export const PAGE_LIBS = [ { diff --git a/src/components/Draggable/index.vue b/src/components/Draggable/index.vue index 3d7906b96..bd153a4f5 100644 --- a/src/components/Draggable/index.vue +++ b/src/components/Draggable/index.vue @@ -13,9 +13,16 @@ class="mb-4px flex flex-col gap-4px border border-gray-2 border-rounded rounded border-solid p-8px" > -
+
- + // 拖拽组件 import VueDraggable from 'vuedraggable' -import { usePropertyForm } from '@/components/DiyEditor/util' +import { useVModel } from '@vueuse/core' import { any, array } from 'vue-types' import { propTypes } from '@/utils/propTypes' import { cloneDeep } from 'lodash-es' @@ -66,7 +73,7 @@ const props = defineProps({ }) // 定义事件 const emit = defineEmits(['update:modelValue']) -const { formData } = usePropertyForm(props.modelValue, emit) +const formData = useVModel(props, 'modelValue', emit) // 处理添加 const handleAdd = () => formData.value.push(cloneDeep(props.emptyItem || {})) diff --git a/src/components/InputWithColor/index.vue b/src/components/InputWithColor/index.vue index 2bc531727..1311a5594 100644 --- a/src/components/InputWithColor/index.vue +++ b/src/components/InputWithColor/index.vue @@ -1,7 +1,7 @@ @@ -9,6 +9,7 @@