From db1c3c5b3670639fd1dfc5de0fe75ce6f02f732e Mon Sep 17 00:00:00 2001 From: wang1 <844966816@qq.com> Date: 星期三, 31 五月 2023 14:40:07 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS-WEB/src/components/FormTemplate/index.vue | 811 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 769 insertions(+), 42 deletions(-) diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue index 10b6e40..38a9f73 100644 --- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue +++ b/Source/UBCS-WEB/src/components/FormTemplate/index.vue @@ -1,42 +1,769 @@ -<template> - <div> - </div> -</template> - -<script> - import { getFormTemplate } from '../../api/common'; - export default { - name: 'FormTemplate', - props: { - visible: { - type: Boolean, - default: false - }, - }, - created() { - this.getFormTemplate() - }, - data() { - return { - load: false - } - }, - methods: { - getFormTemplate() { - this.load = true - getFormTemplate({ - templateOid: '78B8C7C5-A042-0B96-FE6D-65421451782A', - codeClassifyOid: '4524E801-6CC6-92E8-1AC3-2AB9604E8F96' - }).then(res => { - console.log(res); - }).catch(err => { - console.log(err); - }) - } - } - } -</script> - -<style lang='less' scoped> - -</style> \ No newline at end of file +<template> + <el-dialog + :visible.sync="dialogVisible" + v-dialogDrag + top="0vh" + :title="title" + class="avue-dialog avue-dialog--top" + :width="dialogOptions.width" + append-to-body + v-if="dialogVisible" + > + <avue-form + v-model="form" + :option="option" + v-loading="loading" + ref="form" + :key="index" + > + <template :slot="item.prop + 'Label'" v-for="item in option.column"> + <span> + <span>{{ item.label }} </span> + <el-tooltip + v-if="item.keyAttr" + class="item" + effect="dark" + content="璇ュ睘鎬т负鍏抽敭灞炴��" + placement="top-start" + > + <i class="el-icon-star-on key_attr_icon"></i> + </el-tooltip> + <el-tooltip + v-if="item.tip" + class="item" + effect="dark" + :content="item.tip" + placement="top-start" + > + <i class="el-icon-warning"></i> + </el-tooltip> + </span> + </template> + <template :slot="item.prop + ''" v-for="item in option.column"> + <vciWebRefer v-if="item.type=='refer'" :options="item.originalItem"></vciWebRefer> + </template> + </avue-form> + <FindLike ref="findLike"></FindLike> + <div class="avue-dialog__footer" v-if="type !== 'detail'"> + <el-button @click="close()">鍙� 娑�</el-button> + <el-button @click="close()" type="primary" :loading="submitBtnLoading">纭� 瀹�</el-button> + <el-button @click="findLinkSubmit" type="primary">鐩镐技鍍忔煡璇�</el-button> + </div> + </el-dialog> +</template> + +<script> +import { getFormTemplate, executeCode, findLike } from "@/api/formTemplate"; +import { getDictionary } from "../../api/system/dict"; +import FindLike from "./FindLike.vue"; +import vciWebRefer from "../refer/vciWebRefer.vue"; +export default { + name: "FormTemplate", + components: { FindLike ,vciWebRefer}, + props: { + visible: { + type: Boolean, + default: false, + }, + disabledProp: { + type: Array, + default: () => ["id"], + }, + templateOid: { + type: String, + default: "", + }, + codeClassifyOid: { + type: String, + default: "", + }, + type: { + type: String, + default: 'add' + }, + title: { + type: String, + default: '琛ㄥ崟妯℃澘' + } + }, + data() { + return { + index: 0, + form: {}, + loading: false, + dialogOptions: { + width: "60%", + }, + option: { + emptyBtn: false, + submitBtn: false, + labelWidth: "120", + column: [], + }, + templateData: {}, + columnType: { + text: "input", + combox: "select", + truefalse: "switch", + number: "number", + textarea: "textarea", + datetime: "datetime", + date: "date", + refer:'refer' + }, + // 鍋囨暟鎹� + testItems: [ + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "id", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "浼犲�肩鐢ㄥ姛鑳�", + tooltips: "", + type: "combox", + unique: false, + verify: "", + }, + { + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "state", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: true, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鎺ュ彛绂佺敤鍔熻兘", + tooltips: "", + type: "combox", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "oldcode", + hidden: false, + keyAttr: false, + prefix: "el-icon-search", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "鏂囨湰鍚庣紑娴嬭瘯", + text: "鍓嶅悗缂�鍔熻兘", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "materialname", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: true, + selectLibFlag: "", + showField: null, + suffix: "", + text: "姝e垯鏍¢獙鍔熻兘", + tooltips: "璇疯緭鍏ユ暟瀛�", + type: "text", + unique: false, + verify: "/[0-9]/", + }, + { + comboxKey: null, + customClass: null, + data: [ + { + attributes: {}, + key: "model_type", + value: "妯″瀷", + }, + { + attributes: {}, + key: "part_type", + value: "闆朵欢", + }, + ], + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "dataSelect", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鐩存帴杩斿洖涓嬫媺", + tooltips: "", + type: "combox", + unique: false, + verify: "", + }, + { + comboxKey: "formTemplateTest", + customClass: null, + data: [], + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "dictSelect", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "瀛楀吀杩斿洖涓嬫媺", + tooltips: "", + type: "combox", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "firstfl", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鏁板瓧杈撳叆妗�", + tooltips: "", + type: "number", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "yyyy-MM-dd HH:mm:ss", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "datetime", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鏃ユ湡鏃堕棿閫夋嫨鍣�", + tooltips: "", + type: "datetime", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "time", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鏃堕棿閫夋嫨鍣�", + tooltips: "", + type: "date", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "false", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "xiaoshouwl", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "寮�鍏�", + tooltips: "", + type: "truefalse", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "鎴戞槸榛樿鍊�", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "tuhao", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "榛樿鍊煎姛鑳�", + tooltips: "鎻愮ず", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "xinghaoguige", + hidden: false, + keyAttr: true, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "灞炴�у叧閿��", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "jiliangdw", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + tip: "鎴戞槸鎻愮ず鍔熻兘", + required: false, + selectLibFlag: "", + showField: "jiliangdwname", + suffix: "", + text: "鎻愮ず鍔熻兘", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: "this.form.sum = this.form.fun1 + this.form.fun2", + extendAttrMap: null, + extendAttrString: null, + field: "fun1", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鍙傛暟1娴嬭瘯js", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: "this.form.sum = this.form.fun1 + this.form.fun2", + extendAttrMap: null, + extendAttrString: null, + field: "fun2", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + required: false, + selectLibFlag: "", + showField: "hesuanfenleiname", + suffix: "", + text: "鍙傛暟2娴嬭瘯js", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: "", + extendAttrMap: null, + extendAttrString: null, + field: "sum", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: true, + required: false, + selectLibFlag: "", + showField: "", + suffix: "", + text: "鍙傛暟1鍙傛暟2姹傚拰", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "textarea", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: false, + referConfig: null, + required: false, + selectLibFlag: "", + showField: null, + suffix: "", + text: "鏂囨湰鍩�", + tooltips: "", + type: "textarea", + unique: false, + verify: "", + }, + { + comboxKey: null, + customClass: null, + data: null, + dateFormate: "", + defaultValue: "", + displayExtension: null, + extendAttrMap: null, + extendAttrString: null, + field: "cz", + hidden: false, + keyAttr: false, + prefix: "", + readOnly: true, + referConfig: true, + required: false, + selectLibFlag: "", + showField: "depId", + suffix: "", + text: "鍙傜収", + tooltips: "", + type: "text", + unique: false, + verify: "", + }, + ], + submitBtnLoading: false + }; + }, + created() {}, + computed: { + dialogVisible: { + get() { + return this.visible; + }, + set(val) { + this.$emit("update:visible", val); + }, + }, + }, + methods: { + getFormTemplate() { + this.loading = true; + getFormTemplate({ + templateOid: this.templateOid, + codeClassifyOid: this.codeClassifyOid, + }) + .then((res) => { + if (res.status === 200) { + this.templateData = res.data; + this.templateRender(); + } + this.loading = false; + console.log(res.data); + }) + .catch((err) => { + this.loading = false; + console.log(err); + }); + }, + templateRender() { + const items = this.templateData.formDefineVO.items; + let column = []; + let dictKeys = []; + items.forEach((item) => { + // 闅愯棌琛ㄥ崟鍏冪礌 + if (item.hide) { + return; + } + if ( + item.type === "combox" && + item.comboxKey && + (!Array.isArray(item.dicData) || item.dicData.length === 0) + ) { + dictKeys.push({ dictKey: item.comboxKey, field: item.field }); + } + // 绂佺敤閮ㄥ垎灞炴�э紙澶栭儴浼犲�肩鐢ㄥ拰鍙傜収绂佺敤锛� + if (this.disabledProp.includes(item.field) || this.$utilFunc.isValuableObj(item.referConfig)) { + item.readOnly = true; + } + // 璁剧疆琛ㄥ崟鏍¢獙鐨勮鍒欙紝鏂囨湰 + let message = "璇烽�夋嫨"; + let trigger = "change"; + if (item.type === "text") { + message = "璇疯緭鍏�"; + trigger = "blur"; + } else if (item.type === "file") { + message = "璇蜂笂浼�"; + } + let columnItem = { + label: item.text, + labelslot: true, + prop: this.$utilFunc.isValuableObj(item.referConfig) ? (item.showField || item.field) : item.field, + type: this.columnType[item.type], + dicData: this.getDataList(item.type, item.data), + disabled: this.type === 'detail' ? true : item.readOnly, + prepend: this.preOrSufFixShow("text", item.prefix), + append: this.preOrSufFixShow("text", item.suffix), + prefixIcon: this.preOrSufFixShow("icon", item.prefix), + suffixIcon: this.preOrSufFixShow("icon", item.suffix), + valueFormat: item.dateFormate, + format: item.dateFormate, + keyAttr: item.keyAttr, + value: item.defaultValue, + tip: item.tip, + comboxKey: item.comboxKey, + originalItem:item, + change: () => { + this.changeFun(item.displayExtension, item.prop); + }, + span: item.type === "file" || item.type === "textarea" ? 24 : null, + click: this.clickFun(item.referConfig), + rules: [ + { + required: item.required, + message: `璇�${message}${item.text}`, + trigger, + }, + { + // 濡傛灉娌℃湁姝e垯鍒欏尮閰嶄换浣曞瓧绗� + pattern: item.verify ? item.verify : /[\s\S.]*/g, + message: item.tooltips, + trigger, + }, + ], + props: { + label: "value", + value: "key", + }, + }; + column.push(columnItem); + this.$set(this.option, "column", column); + }); + this.index++; + this.geDictData(dictKeys); + }, + changeFun(displayExtension, prop) { + // executeCode({displayExtension, data: this.form}).then(res => { + // this.form[prop] = res.data.data + // }) + }, + clickFun(referConfig) { + if (this.type === 'detail') { + return + } + }, + // 鍓嶅悗缂� + preOrSufFixShow(type, val) { + if (this.$utilFunc.isEmpty(val) && typeof val !== "string") return; + const isIcon = val.slice(0, 8) === "el-icon-"; + if ((type === "text" && !isIcon) || (type === "icon" && isIcon)) { + return val; + } + }, + // 鑾峰彇swich鍜屽凡鎷垮埌鐨勪笅鎷夋暟鎹� + getDataList(type, dicData) { + if (type === "truefalse") { + return [ + { + key: false, + value: "鍚�", + }, + { + key: true, + value: "鏄�", + }, + ]; + } else if (type === "combox") { + return dicData; + } + return []; + }, + // 鑾峰彇瀛楀吀鏁版嵁 + geDictData(dictKeys) { + dictKeys.forEach((dictObj) => { + getDictionary({ code: dictObj.dictKey }).then((res) => { + if (res.data && res.data.code === 200) { + this.option.column = this.option.column.map((item) => { + if (item.field === dictObj.field) { + let dictData = (res.data.data || []).map((itm) => { + itm.value = itm.dictValue; + itm.key = itm.dictKey; + return itm; + }); + item.dicData = dictData; + } + return item; + }); + } + }); + }); + }, + findLinkSubmit() { + this.templateData.templateVO.data = this.form + console.log(this.$refs.findLike, 'this.$refs.findLike'); + this.$refs.findLike.findLinkClick(this.templateData.templateVO) + } + }, + watch: { + visible(newV) { + if (newV) { + this.getFormTemplate(); + // this.templateRender() + } + }, + }, +}; +</script> + +<style lang="scss" scoped> +.key_attr_icon { + font-size: 24px; + position: relative; + top: 2px; + color: red; +} +// 瑙e喅swich缁勪欢涓嶅瀭鐩村眳涓殑闂 +/deep/ .el-switch { + vertical-align: baseline; +} +</style> -- Gitblit v1.9.3