diff --git a/src/components/DiyEditor/components/ComponentContainerProperty.vue b/src/components/DiyEditor/components/ComponentContainerProperty.vue index 25119a5b..5d18785a 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 4f69000b..5d151bf9 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 495cbdce..65892f85 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 fe938e5b..dee3117b 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 a5fb4603..b665b320 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 fbae83c2..3dd3f7c3 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 f6176d23..2494e069 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 278bc940..d8f51d26 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 2dd43519..21be46ef 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 110c8be9..91846e66 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 894687c2..d7a5a7cd 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 c3bcb21b..10c5840e 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 61287590..594c10bc 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 d1da142b..e4350121 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 f902e04e..221cc90a 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 42df7410..d315db6a 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 549367e3..e0ac83e4 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 7598543b..1c3deec6 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 643cc50a..27d3fc11 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 fac26e75..b6febb97 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 3d7906b9..bd153a4f 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 2bc53172..1311a559 100644 --- a/src/components/InputWithColor/index.vue +++ b/src/components/InputWithColor/index.vue @@ -1,7 +1,7 @@ @@ -9,6 +9,7 @@