ipms-sjy-ui/src/components/DiyEditor/util.ts

121 lines
2.8 KiB
TypeScript
Raw Normal View History

2023-10-29 22:03:24 +08:00
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'
// 页面装修组件
2023-10-29 22:03:24 +08:00
export interface DiyComponent<T> {
// 组件唯一标识
2023-10-29 22:03:24 +08:00
id: string
// 组件名称
2023-10-29 22:03:24 +08:00
name: string
// 组件图标
2023-10-29 22:03:24 +08:00
icon: string
// 组件属性
2023-10-29 22:03:24 +08:00
property: T
}
// 页面装修组件库
2023-10-29 22:03:24 +08:00
export interface DiyComponentLibrary {
// 组件库名称
2023-10-29 22:03:24 +08:00
name: string
// 是否展开
2023-10-29 22:03:24 +08:00
extended: boolean
// 组件列表
2023-10-29 22:03:24 +08:00
components: string[]
}
2023-11-04 22:06:40 +08:00
// 组件样式
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
}
2023-10-29 22:03:24 +08:00
// 页面配置
export interface PageConfig {
// 页面属性
page: PageConfigProperty
// 顶部导航栏属性
navigationBar: NavigationBarProperty
// 底部导航菜单属性
2023-11-05 12:40:32 +08:00
tabBar?: TabBarProperty
2023-10-29 22:03:24 +08:00
// 页面组件列表
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',
'GridNavigation',
'ListNavigation',
'Divider',
'TitleBar'
]
},
{ name: '图文组件', extended: true, components: ['ImageBar', 'Carousel'] },
{ name: '商品组件', extended: true, components: ['ProductCard'] },
{
name: '会员组件',
extended: true,
components: ['UserCard', 'OrderCard', 'WalletCard', 'CouponCard']
},
{ name: '营销组件', extended: true, components: ['Combination', 'Seckill', 'Point', 'Coupon'] }
] as DiyComponentLibrary[]