|
@@ -17,8 +17,17 @@ const formData = computed(() => {
|
|
|
if (['upload', 'image-upload'].includes(item.type) && !Array.isArray(props.formData[item.name])) {
|
|
if (['upload', 'image-upload'].includes(item.type) && !Array.isArray(props.formData[item.name])) {
|
|
|
props.formData[item.name] = props.formData[item.name]
|
|
props.formData[item.name] = props.formData[item.name]
|
|
|
.split(',')
|
|
.split(',')
|
|
|
- .filter((item: any) => item)
|
|
|
|
|
- .map((item: any) => ({ url: item.props?.oss ?? config.oss ? config.ossHost + item : item }))
|
|
|
|
|
|
|
+ .filter((item: string) => item)
|
|
|
|
|
+ .map((item: string) => ({ url: config.oss ? config.ossHost + item : item }))
|
|
|
|
|
+ } else if (item.type === 'file-upload' && typeof props.formData[item.name] === 'string') {
|
|
|
|
|
+ try {
|
|
|
|
|
+ props.formData[item.name] = JSON.parse(props.formData[item.name] || '[]').map((item: any) => ({
|
|
|
|
|
+ url: config.oss ? config.ossHost + item.url : item.url,
|
|
|
|
|
+ name: item.name
|
|
|
|
|
+ }))
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ props.formData[item.name] = []
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
return props.formData
|
|
return props.formData
|
|
@@ -30,7 +39,16 @@ const formData = computed(() => {
|
|
|
if (!item.notFormItem || !notFormItem.includes(item.type)) {
|
|
if (!item.notFormItem || !notFormItem.includes(item.type)) {
|
|
|
// 将上传的值改成数组
|
|
// 将上传的值改成数组
|
|
|
if (['upload', 'image-upload'].includes(item.type) && !Array.isArray(item.value)) {
|
|
if (['upload', 'image-upload'].includes(item.type) && !Array.isArray(item.value)) {
|
|
|
- item.value = item.value?.split(',').filter((item: any) => item) || []
|
|
|
|
|
|
|
+ item.value = item.value?.split(',').filter((item: string) => item) || []
|
|
|
|
|
+ } else if (item.type === 'file-upload' && typeof item.value === 'string') {
|
|
|
|
|
+ try {
|
|
|
|
|
+ item.value = JSON.parse(item.value || '[]').map((item: any) => ({
|
|
|
|
|
+ url: config.oss ? config.ossHost + item.url : item.url,
|
|
|
|
|
+ name: item.name
|
|
|
|
|
+ }))
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ item.value = []
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
// 避免修改当前表单项value重置其他表单项的value
|
|
// 避免修改当前表单项value重置其他表单项的value
|
|
|
res[item.name] = res[item.name] !== undefined && item.value !== undefined ? res[item.name] : item.value
|
|
res[item.name] = res[item.name] !== undefined && item.value !== undefined ? res[item.name] : item.value
|
|
@@ -43,18 +61,17 @@ const formData = computed(() => {
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+const formItems = computed(() => {
|
|
|
|
|
+ return props.formConfig.formItems.filter(item => !item.hidden)
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
// 构造表单容器插槽
|
|
// 构造表单容器插槽
|
|
|
buildContainerSlots(props.formConfig.formItems)
|
|
buildContainerSlots(props.formConfig.formItems)
|
|
|
</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"
|
|
|
|
|
- v-show="!item.hidden"
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ <el-col :span="item.span || formConfig.span || 12" v-for="(item, index) in formItems" :key="index">
|
|
|
<component
|
|
<component
|
|
|
:is="'el-' + item.type"
|
|
:is="'el-' + item.type"
|
|
|
v-if="containerTypes.includes(item.type)"
|
|
v-if="containerTypes.includes(item.type)"
|