|
|
@@ -14,14 +14,39 @@ const formData = computed(() => {
|
|
|
const res = props.formData
|
|
|
props.formConfig?.formItems.forEach(item => {
|
|
|
item.group.forEach(element => {
|
|
|
- // 避免修改当前表单项value重置其他表单项的value
|
|
|
- res[element.name] =
|
|
|
- res[element.name] !== undefined && element.value !== undefined ? res[element.name] : element.value
|
|
|
+ if (element.type !== 'form-tabs') {
|
|
|
+ if (!element.notFormItem) {
|
|
|
+ // 避免修改当前表单项value重置其他表单项的value
|
|
|
+ res[element.name] =
|
|
|
+ res[element.name] !== undefined && element.value !== undefined ? res[element.name] : element.value
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ element.children?.forEach(tab => {
|
|
|
+ tab.children?.forEach(child => {
|
|
|
+ res[child.name] =
|
|
|
+ res[child.name] !== undefined && child.value !== undefined ? res[child.name] : child.value
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
})
|
|
|
})
|
|
|
return res
|
|
|
}
|
|
|
})
|
|
|
+
|
|
|
+// 构造formTabs插槽
|
|
|
+props.formConfig.formItems.forEach(item => {
|
|
|
+ item.group.forEach(child => {
|
|
|
+ if (child.type === 'form-tabs') {
|
|
|
+ child.slots = []
|
|
|
+ child.children?.forEach(tab => {
|
|
|
+ tab.children?.forEach((child: any) => {
|
|
|
+ Array.prototype.push.apply(child.slots, child.slots)
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
@@ -34,13 +59,33 @@ const formData = computed(() => {
|
|
|
>
|
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="sub.span || formConfig.span || 12" v-for="(sub, key) in item.group" :key="key">
|
|
|
- <el-form-item :label="sub.label" :rules="sub.rules" :prop="sub.name">
|
|
|
+ <el-form-tabs
|
|
|
+ v-if="sub.type === 'form-tabs'"
|
|
|
+ v-model="sub.value"
|
|
|
+ v-bind="sub.props"
|
|
|
+ :tabs="sub.children"
|
|
|
+ :formData="formData"
|
|
|
+ :formConfig="formConfig"
|
|
|
+ v-on="sub.events || {}"
|
|
|
+ >
|
|
|
+ <template #[slot.alias]="slotProps" v-for="slot in sub.slots" :key="slot.alias">
|
|
|
+ <slot :name="slot.alias" v-bind="slotProps"></slot>
|
|
|
+ </template>
|
|
|
+ </el-form-tabs>
|
|
|
+ <el-form-item :label="sub.label" :rules="sub.rules" :prop="sub.name" v-else>
|
|
|
<form-comp :item="sub" v-model="formData[sub.name]">
|
|
|
<template #[slot.alias]="slotProps" v-for="slot in sub.slots" :key="slot.alias">
|
|
|
<slot :name="slot.alias" v-bind="slotProps"></slot>
|
|
|
</template>
|
|
|
</form-comp>
|
|
|
</el-form-item>
|
|
|
+ <!-- <el-form-item :label="sub.label" :rules="sub.rules" :prop="sub.name">
|
|
|
+ <form-comp :item="sub" v-model="formData[sub.name]">
|
|
|
+ <template #[slot.alias]="slotProps" v-for="slot in sub.slots" :key="slot.alias">
|
|
|
+ <slot :name="slot.alias" v-bind="slotProps"></slot>
|
|
|
+ </template>
|
|
|
+ </form-comp>
|
|
|
+ </el-form-item> -->
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-card>
|