You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.7 KiB

<template>
<div class="container">
<el-card shadow="always">
<template #header>
<p>{{ config.customModel ? config.customModel.name : '办理' }}</p>
</template>
<template>
<div class="form-container">
<template v-if="device === 'desktop'">
<DesktopForm :device="device" :sub-form="subConfig" :info="fields" :original-form="form"></DesktopForm>
</template>
<template v-else>
<MobileForm :device="device" :info="fields"></MobileForm>
</template>
</div>
</template>
</el-card>
</div>
</template>
<script>
import DesktopForm from "./DesktopForm.vue";
import MobileForm from "./MobileForm.vue";
import { preConfig } from "@/api/flow"
export default {
components: {
DesktopForm,
MobileForm
},
data() {
return {
info: [],
config: {},
subConfig: new Map(),
form: {},
fileList: {}
}
},
methods: {
generateForm(object,fields) {
fields.forEach(field => {
if(field.type === 'relation') {
object[field.name] = [{}]
this.generateForm(object[field.name][0], this.subConfig.get(field.sub_custom_model_id)?.customModel?.fields)
} else {
object[field.name] = ""
}
})
},
async getConfig() {
const loading = this.$loading({
lock: true,
text: '拼命加载中',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.8)'
});
try {
const res = await preConfig(this.$route.query.id)
const { fields } = res?.customModel;
let subFormRequest = []
const getSubForm = (id) => {
subFormRequest.push(preConfig(id))
}
fields.forEach(field => {
if(field.sub_custom_model_id) {
getSubForm(field.sub_custom_model_id)
}
})
const subConfigs = await Promise.all(subFormRequest)
subConfigs.forEach(sub => {
if(sub.customModel?.id) {
this.subConfig.set(sub.customModel?.id, sub)
}
})
this.config = res;
this.generateForm(this.form, fields)
this.form = Object.assign({},this.form)
loading.close()
} catch (err) {
console.error(err)
this.$message.error("配置失败")
loading.close()
}
}
},
computed: {
device() {
return this.$store.state.app.device
},
fields() {
return this.config?.customModel?.fields || []
}
},
created() {
this.getConfig()
}
}
</script>
<style scoped lang="scss">
::v-deep .el-card__header {
}
.container {
padding: 20px;
}
.form-container {
}
@media (max-width: 768px) {
.container {
padding: 10px;
}
}
</style>