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