| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 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'// 页面装修组件export interface DiyComponent<T> {  // 组件唯一标识  id: string  // 组件名称  name: string  // 组件图标  icon: string  // 组件属性  property: T}// 页面装修组件库export interface DiyComponentLibrary {  // 组件库名称  name: string  // 是否展开  extended: boolean  // 组件列表  components: string[]}// 组件样式export interface ComponentStyle {  // 背景类型  bgType: 'color' | 'img'  // 背景颜色  bgColor: string  // 背景图片  bgImg: string  // 外边距  margin: number  marginTop: number  marginRight: number  marginBottom: number  marginLeft: number  // 内边距  padding: number  paddingTop: number  paddingRight: number  paddingBottom: number  paddingLeft: number  // 边框圆角  borderRadius: number  borderTopLeftRadius: number  borderTopRightRadius: number  borderBottomRightRadius: number  borderBottomLeftRadius: number}// 页面配置export interface PageConfig {  // 页面属性  page: PageConfigProperty  // 顶部导航栏属性  navigationBar: NavigationBarProperty  // 底部导航菜单属性  tabBar?: TabBarProperty  // 页面组件列表  components: PageComponent[]}// 页面组件,只保留组件ID,组件属性export interface PageComponent extends Pick<DiyComponent<any>, 'id' | 'property'> {}// 属性表单监听export function usePropertyForm<T>(modelValue: T, emit: Function): { formData: Ref<T> } {  const formData = ref<T>()  // 监听属性数据变动  watch(    () => modelValue,    () => {      formData.value = modelValue    },    {      deep: true,      immediate: true    }  )  // 监听表单数据变动  watch(    () => formData.value,    () => {      emit('update:modelValue', formData.value)    },    {      deep: true    }  )  return { formData }}// 页面组件库export const PAGE_LIBS = [  {    name: '基础组件',    extended: true,    components: ['SearchBar', 'NoticeBar', 'MenuSwiper', 'MenuGrid', 'MenuList']  },  {    name: '图文组件',    extended: true,    components: ['ImageBar', 'Carousel', 'TitleBar', 'VideoPlayer', 'Divider', 'MagicCube']  },  { name: '商品组件', extended: true, components: ['ProductCard', 'ProductList'] },  {    name: '会员组件',    extended: true,    components: ['UserCard', 'UserOrder', 'UserWallet', 'UserCoupon']  },  {    name: '营销组件',    extended: true,    components: ['CombinationCard', 'SeckillCard', 'PointCard', 'CouponCard']  }] as DiyComponentLibrary[]
 |