|
|
@@ -17,6 +17,7 @@
|
|
|
spellcheck="false"
|
|
|
:type="schema?.slots ? 'text' : 'textarea'"
|
|
|
:rows="1"
|
|
|
+ resize="none"
|
|
|
v-bind="schema?.componentProps"
|
|
|
>
|
|
|
<template #prefix>
|
|
|
@@ -108,81 +109,97 @@
|
|
|
</el-collapse>
|
|
|
|
|
|
<!-- 样式配置 -->
|
|
|
- <el-card v-if="isStyle" :header="schema.label" body-class="p-8px!" class="mb-12px">
|
|
|
- <!-- 模块 -->
|
|
|
- <!-- <StylePart v-if="schema.valueType === 'part'" v-model="value" /> -->
|
|
|
- <!-- 背景 -->
|
|
|
- <StyleBackground
|
|
|
- v-if="schema.valueType === 'background'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 边框 -->
|
|
|
- <StyleBorder
|
|
|
- v-if="schema.valueType === 'border'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 字体 -->
|
|
|
- <StyleFont
|
|
|
- v-if="schema.valueType === 'font'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 外边距 -->
|
|
|
- <StyleMargin
|
|
|
- v-if="schema.valueType === 'margin'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 内边距 -->
|
|
|
- <StylePadding
|
|
|
- v-if="schema.valueType === 'padding'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 阴影 -->
|
|
|
- <StyleShadow
|
|
|
- v-if="schema.valueType === 'shadow'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 间距 -->
|
|
|
- <StyleSpace
|
|
|
- v-if="schema.valueType === 'spacer'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 线段 -->
|
|
|
- <StyleLine
|
|
|
- v-if="schema.valueType === 'line'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 外边框 -->
|
|
|
- <StyleOutline
|
|
|
- v-if="schema.valueType === 'outline'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 图像样式 -->
|
|
|
- <StyleImage
|
|
|
- v-if="schema.valueType === 'imageStyle'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 变换样式 -->
|
|
|
- <StyleTransform
|
|
|
- v-if="schema.valueType === 'transform'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
- <!-- 动画样式 -->
|
|
|
- <StyleAnimation
|
|
|
- v-if="schema.valueType === 'animation'"
|
|
|
- v-model="value"
|
|
|
- v-bind="schema?.componentProps"
|
|
|
- />
|
|
|
+ <el-card
|
|
|
+ v-if="isStyle"
|
|
|
+ :body-class="value ? 'p-8px!' : 'hidden'"
|
|
|
+ :header-class="value ? '' : 'border-b-none!'"
|
|
|
+ class="mb-12px"
|
|
|
+ >
|
|
|
+ <template #header>
|
|
|
+ <div class="flex items-center justify-between">
|
|
|
+ <span>{{ schema.label }}</span>
|
|
|
+ <el-checkbox
|
|
|
+ :model-value="!!value"
|
|
|
+ @change="(val) => $emit('changeStateStyle', schema?.field!, val ? 'add' : 'delete')"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-if="value">
|
|
|
+ <!-- 模块 -->
|
|
|
+ <!-- <StylePart v-if="schema.valueType === 'part'" v-model="value" /> -->
|
|
|
+ <!-- 背景 -->
|
|
|
+ <StyleBackground
|
|
|
+ v-if="schema.valueType === 'background'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 边框 -->
|
|
|
+ <StyleBorder
|
|
|
+ v-if="schema.valueType === 'border'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 字体 -->
|
|
|
+ <StyleFont
|
|
|
+ v-if="schema.valueType === 'font'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 外边距 -->
|
|
|
+ <StyleMargin
|
|
|
+ v-if="schema.valueType === 'margin'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 内边距 -->
|
|
|
+ <StylePadding
|
|
|
+ v-if="schema.valueType === 'padding'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 阴影 -->
|
|
|
+ <StyleShadow
|
|
|
+ v-if="schema.valueType === 'shadow'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 间距 -->
|
|
|
+ <StyleSpace
|
|
|
+ v-if="schema.valueType === 'spacer'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 线段 -->
|
|
|
+ <StyleLine
|
|
|
+ v-if="schema.valueType === 'line'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 外边框 -->
|
|
|
+ <StyleOutline
|
|
|
+ v-if="schema.valueType === 'outline'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 图像样式 -->
|
|
|
+ <StyleImage
|
|
|
+ v-if="schema.valueType === 'imageStyle'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 变换样式 -->
|
|
|
+ <StyleTransform
|
|
|
+ v-if="schema.valueType === 'transform'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ <!-- 动画样式 -->
|
|
|
+ <StyleAnimation
|
|
|
+ v-if="schema.valueType === 'animation'"
|
|
|
+ v-model="value"
|
|
|
+ v-bind="schema?.componentProps"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
</el-card>
|
|
|
|
|
|
<!-- 自定义渲染 -->
|
|
|
@@ -227,9 +244,13 @@ defineOptions({
|
|
|
name: 'CusFormItem'
|
|
|
})
|
|
|
|
|
|
+const emit = defineEmits<{
|
|
|
+ changeStateStyle: [field: string, type: 'add' | 'delete']
|
|
|
+}>()
|
|
|
+
|
|
|
const props = defineProps<{
|
|
|
schema: ComponentSchema
|
|
|
- formData: Record<string, any>
|
|
|
+ formData?: Record<string, any>
|
|
|
// 控件数据,补充额外数据
|
|
|
widgetData?: Record<string, any>
|
|
|
}>()
|
|
|
@@ -243,7 +264,7 @@ const value = computed({
|
|
|
},
|
|
|
set(val) {
|
|
|
const { schema } = props
|
|
|
- if (schema.field) {
|
|
|
+ if (schema.field && props.formData) {
|
|
|
set(props.formData, schema.field, val)
|
|
|
}
|
|
|
// 触发change事件
|