xy 11 months ago
parent 484e79567b
commit 032e35e41c

@ -2,7 +2,7 @@
ENV = 'development' ENV = 'development'
# base api # base api
VUE_APP_BASE_API='https://cz-hjjc.115.langye.net' VUE_APP_BASE_API='http://cz-hjjc-test.115.langye.net'
VUE_APP_UPLOAD_API='https://cz-hjjc.115.langye.net/api/upload-file' VUE_APP_UPLOAD_API='http://cz-hjjc-test.115.langye.net/api/upload-file'
VUE_APP_PREVIEW=//view.langye.net/preview/onlinePreview VUE_APP_PREVIEW=//view.langye.net/preview/onlinePreview
VUE_APP_MODULE_NAME=oa VUE_APP_MODULE_NAME=oa

@ -16,6 +16,7 @@ import { flowList } from "@/api/flow";
* @return {VNode} 主表单包含el-form-item 子表单表单组件 * @return {VNode} 主表单包含el-form-item 子表单表单组件
**/ **/
export default function formBuilder(device, info, h, row, pWrite = false,pReadable = false,pname) { export default function formBuilder(device, info, h, row, pWrite = false,pReadable = false,pname) {
let target = row ? row : this.form
let formItem; let formItem;
//下拉选项 //下拉选项
let options = []; let options = [];
@ -183,17 +184,26 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
}); });
break; break;
case "select": case "select":
const getSelectValue = () => {
if (!!info.multiple) {
return target[info.name] ? target[info.name].toString()?.split(/,|\|/).map(i => isNaN(Number(i)) ? i : Number(i)) : []
} else {
return target[info.name]
}
}
formItem = h( formItem = h(
formBuilderMap(device).get(info.type), formBuilderMap(device).get(info.type),
{ {
props: { props: {
value: row ? row[info.name] : this.form[info.name], value: getSelectValue(),
clearable: true, clearable: true,
placeholder: info.help_text, placeholder: info.help_text,
multiple: !!info.multiple, multiple: !!info.multiple,
'multiple-limit': info.multiple, 'multiple-limit': info.multiple,
'collapse-tags': true,
filterable: true, filterable: true,
'allow-create': !!info.is_select2_tag 'allow-create': !!info.is_select2_tag,
'default-first-option': true
}, },
style: { style: {
width: "100%", width: "100%",
@ -203,9 +213,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
}, },
on: { on: {
input: (e) => { input: (e) => {
row this.$set(target, info.name, e.toString())
? this.$set(row, info.name, e)
: this.$set(this.form, info.name, e);
}, },
}, },
}, },
@ -263,6 +271,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
'limit-size': uploadSize / 1024 / 1024, // vxeupload 单位Mb 'limit-size': uploadSize / 1024 / 1024, // vxeupload 单位Mb
'limit-count': info.multiple ? 20 : 1, 'limit-count': info.multiple ? 20 : 1,
multiple: !!info.multiple, multiple: !!info.multiple,
'name-field': 'original_name',
readonly: pReadable, readonly: pReadable,
'upload-method': ({ file }) => { 'upload-method': ({ file }) => {
const formData = new FormData() const formData = new FormData()
@ -281,14 +290,21 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
row[info.name].push({ row[info.name].push({
response: response.data.data, response: response.data.data,
name: response.data.data.original_name, name: response.data.data.original_name,
url: response.data.data.url url: response.data.data.url,
original_name: response.data.data.original_name
}) })
if (row[info.name].length > (info.multiple ? 20 : 1)) {
row[info.name].shift()
}
} else { } else {
this.$message.error("上传失败") this.$message.error("上传失败")
} }
}).catch(err => { }).catch(err => {
window.$_uploading = false window.$_uploading = false
}) })
},
'remove-method': _ => {
row[info.name] = []
} }
} }
} }
@ -444,7 +460,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
formBuilderMap(device).get(info.type), formBuilderMap(device).get(info.type),
{ {
props: { props: {
value: row ? (row[info.name] ? row[info.name].toString()?.split(',').map(i => Number(i)) : []) : (this.form[info.name] ? this.form[info.name].toString()?.split(',').map(i => Number(i)) : []), value: row ? (row[info.name] ? row[info.name].toString()?.split(/,|\|/).map(i => isNaN(Number(i)) ? i : Number(i)) : []) : (this.form[info.name] ? this.form[info.name].toString()?.split(/,|\|/).map(i => Number(i)) : []),
clearable: true, clearable: true,
placeholder: info.help_text, placeholder: info.help_text,
multiple: !!info.multiple, multiple: !!info.multiple,
@ -480,7 +496,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
formBuilderMap(device).get(info.type), formBuilderMap(device).get(info.type),
{ {
props: { props: {
value: row ? row[info.name] : this.form[info.name], value: row ? (row[info.name] ? row[info.name].toString()?.split(/,|\|/).map(i => isNaN(Number(i)) ? i : Number(i)) : []) : (this.form[info.name] ? this.form[info.name].toString()?.split(/,|\|/).map(i => isNaN(Number(i)) ? i : Number(i)) : []),
clearable: true, clearable: true,
placeholder: info.help_text, placeholder: info.help_text,
multiple: true, multiple: true,
@ -495,8 +511,8 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
on: { on: {
input: (e) => { input: (e) => {
row row
? this.$set(row, info.name, e) ? this.$set(row, info.name, e.toString())
: this.$set(this.form, info.name, e); : this.$set(this.form, info.name, e.toString());
}, },
}, },
}, },
@ -685,13 +701,13 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
false, false,
); );
}, },
[subField.type === 'file' ? 'default' : false]: ({ row: myrow }) => { [['file', 'choices', 'choice', 'select', 'radio'].indexOf(subField.type) !== -1 ? 'default' : false]: ({ row: myrow }) => {
return formBuilder.bind(this)( return formBuilder.bind(this)(
device, device,
subField, subField,
h, h,
myrow, myrow,
info._writeable, false,
true, true,
); );
} }
@ -712,7 +728,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
this.form[info.name] ? moment(this.form[info.name]).format("YYYY年MM月DD日") : '' target[info.name] ? moment(target[info.name]).format("YYYY年MM月DD日") : ''
); );
break; break;
case "datetime": case "datetime":
@ -723,14 +739,31 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
this.form[info.name] ? moment(this.form[info.name]).format("YYYY年MM月DD日 HH时mm分") : '' target[info.name] ? moment(target[info.name]).format("YYYY年MM月DD日 HH时mm分") : ''
); );
break; break;
case "select": case "select":
const getDetailSelectValue = () => {
let res = ''
if (!!info.multiple) {
res = target[info.name] ? target[info.name].toString()?.split(/,|\|/).map(i => isNaN(Number(i)) ? i : Number(i)) : []
} else {
res = target[info.name]
}
if (res instanceof Array) {
return options?.filter((i) =>
typeof i === "object"
? res.indexOf(i.id) !== -1
: res.indexOf(i) !== -1
)?.map(i => typeof i === 'object' ? i.name : i)?.toString()
} else {
return res
}
}
let findValue = options.find((i) => let findValue = options.find((i) =>
typeof i === "object" typeof i === "object"
? i.id == this.form[info.name] ? i.id == target[info.name]
: i === this.form[info.name] : i === target[info.name]
); );
formItem = h( formItem = h(
"span", "span",
@ -739,13 +772,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
info.multiple ? this.form[info.name]?.toString()?.split(/,|\|/)?.map(j => { getDetailSelectValue()
return options.find((i) =>
typeof i === "object"
? i.id == j
: i === j
)?.name;
})?.toString() : typeof findValue === "object" ? findValue.name : findValue
); );
break; break;
case "choice": case "choice":
@ -756,7 +783,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
this.form[info.name]?.toString()?.split(/,|\|/).map(j => { target[info.name]?.toString()?.split(/,|\|/).map(j => {
return options.find((i) => i.id == j)?.name; return options.find((i) => i.id == j)?.name;
})?.toString() })?.toString()
); );
@ -764,8 +791,8 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
case "choices": case "choices":
let findChoicesValue = options.find((i) => let findChoicesValue = options.find((i) =>
typeof i === "object" typeof i === "object"
? i.id == this.form[info.name] ? i.id == target[info.name]
: i === this.form[info.name] : i === target[info.name]
); );
formItem = h( formItem = h(
"span", "span",
@ -774,7 +801,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
info.multiple ? this.form[info.name]?.toString()?.split(/,|\|/).map(j => { info.multiple ? target[info.name]?.toString()?.split(/,|\|/).map(j => {
return options.find((i) => return options.find((i) =>
typeof i === "object" typeof i === "object"
? i.id == j ? i.id == j
@ -802,7 +829,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
this.form[info.name]?.toString()?.split(',')?.map(j => { target[info.name]?.toString()?.split(',')?.map(j => {
let flow = this.flows[info.name]?.find((i) => let flow = this.flows[info.name]?.find((i) =>
i.id == j i.id == j
) )
@ -841,6 +868,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
); );
break; break;
case "file": case "file":
console.log(row ? row[info.name] : '')
formItem = row ? formItem = row ?
h( h(
'vxe-upload', 'vxe-upload',
@ -928,7 +956,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
color: "#333", color: "#333",
}, },
}, },
this.form[info.name] target[info.name]
); );
} }
} }
@ -1053,7 +1081,7 @@ export default function formBuilder(device, info, h, row, pWrite = false,pReadab
value: row ? row[info.name] : this.form[info.name], value: row ? row[info.name] : this.form[info.name],
clearable: true, clearable: true,
placeholder: info.help_text, placeholder: info.help_text,
rules: myRules.map(rule => { rules: myRules?.map(rule => {
if (rule.hasOwnProperty('required')) { if (rule.hasOwnProperty('required')) {
return rule return rule
} else if (rule.hasOwnProperty('pattern')) { } else if (rule.hasOwnProperty('pattern')) {

@ -273,7 +273,7 @@ export default {
props: { props: {
model: this.form, model: this.form,
"label-position": "right", "label-position": "right",
"label-width": "120px", "label-width": "140px",
rules: this.rules, rules: this.rules,
"inline-message": true, "inline-message": true,
}, },

Loading…
Cancel
Save