From 5c42597980cb22fbea72519a90eb871c87ccfe41 Mon Sep 17 00:00:00 2001 From: xy <271556543@qq.com> Date: Thu, 19 Dec 2024 17:50:05 +0800 Subject: [PATCH] 1 --- src/utils/formBuilder.js | 42 ++++++++++++++++++++++++++--------- src/views/flow/MobileForm.vue | 8 ++++++- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/utils/formBuilder.js b/src/utils/formBuilder.js index 7c8776b..20daf97 100644 --- a/src/utils/formBuilder.js +++ b/src/utils/formBuilder.js @@ -15,7 +15,7 @@ import { flowList } from "@/api/flow"; * @param {Boolean} pReadable * @return {VNode} 主表单包含el-form-item 子表单表单组件 **/ -export default function formBuilder(device, info, h, row, pWrite = false,pReadable = false) { +export default function formBuilder(device, info, h, row, pWrite = false,pReadable = false,pname) { let formItem; //下拉选项 let options = []; @@ -1002,6 +1002,12 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab } if (device === "mobile") { if (info._writeable || pWrite) { + let myRules = [] + if (row && this.subRules && this.subRules[`${pname}_rules`] && this.subRules[`${pname}_rules`][info.name]) { + myRules = this.subRules[`${pname}_rules`][info.name] + } else { + myRules = this.rules[info.name] + } switch (info.type) { case "text": formItem = h(formBuilderMap(device).get(info.type), { @@ -1011,8 +1017,19 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab value: row ? row[info.name] : this.form[info.name], clearable: true, placeholder: info.help_text, - rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + rules: myRules.map(rule => { + if (rule.hasOwnProperty('required')) { + return rule + } else if (rule.hasOwnProperty('pattern')) { + return { + pattern: rule.pattern, + message: rule.message + } + } else { + return rule + } + }), + required: !!myRules?.find(j => j.required) }, attrs: { placeholder: info.help_text, @@ -1037,7 +1054,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { placeholder: info.help_text, @@ -1063,7 +1080,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { placeholder: info.help_text, @@ -1089,7 +1106,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { for: info.name @@ -1119,7 +1136,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { for: info.name @@ -1154,7 +1171,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { for: info.name @@ -1180,7 +1197,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab props: { title: info.label, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { for: info.name @@ -1342,7 +1359,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab clearable: true, placeholder: info.help_text, rules: this.rules[info.name], - required: !!this.rules[info.name]?.find(j => j.required) + required: !!myRules?.find(j => j.required) }, attrs: { for: info.name @@ -1420,7 +1437,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab h( "van-form", { - ref: "vanForm", + ref: "subVanForm-"+sIndex, props: { "scroll-to-error": true, }, @@ -1438,6 +1455,8 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab h, sForm, info._writeable, + null, + info.name ) ) ), @@ -1576,6 +1595,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab h( "van-form", { + ref: "subVanForm", props: { "scroll-to-error": true, }, diff --git a/src/views/flow/MobileForm.vue b/src/views/flow/MobileForm.vue index 9b10921..104e091 100644 --- a/src/views/flow/MobileForm.vue +++ b/src/views/flow/MobileForm.vue @@ -108,10 +108,16 @@ export default { getToken, async validate() { const $vanForm = this.$refs['vanForm'] - console.log($vanForm) if ($vanForm) { const res = await $vanForm.validate() } + let subFormName = this.fields.filter(i => i.type === 'relation').map(i => i.name) + for (let i = 0;i < subFormName.length;i++) { + const $subVanForm = this.$refs[`subVanForm-${i}`] + if ($subVanForm) { + await $subVanForm.validate() + } + } }, }, computed: {},