From d1d59913384ce70d30ae9f98b4c79a976611e9ad Mon Sep 17 00:00:00 2001 From: wangting <675591594@qq.com> Date: 星期三, 10 四月 2024 15:54:21 +0800 Subject: [PATCH] 路径解析 --- Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue | 255 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 246 insertions(+), 9 deletions(-) diff --git a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue index 3e7b477..3104d06 100644 --- a/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue +++ b/Source/ProjectWeb/src/components/dynamic-components/dynamic-form.vue @@ -1,5 +1,5 @@ <template> - <div class="UI-dynamic" :id="'UI-dynamic-'+areasName+componentVO.oid"> + <div :id="'UI-dynamic-'+areasName+componentVO.oid" class="UI-dynamic"> <avue-form v-model="form" :option="option"> <template v-for="item in slotData" :slot="item.prop + 'Label'"> <span> @@ -16,15 +16,58 @@ </span> </template> <template slot="menuForm"> - <dynamic-button type="form" :butttonList="componentVO.buttons" @buttonClick="buttonClick"></dynamic-button> + <dynamic-button :butttonList="componentVO.buttons" type="form" @buttonClick="buttonClick"></dynamic-button> + </template> + + <template v-for="item in slotData" :slot="item.prop + ''"> + <vciWebRefer v-if="item.type == 'refer'" + :key="item.prop" + :ref="'referFormRef'+item.prop" + :data-key="item.prop" + :disabled="item.disabled || false" + :display="item.display || true" + :referConfig="item.referConfig || {}" + :reloadFormKey="(item.referConfig.useFormKey && item.referConfig.formValues && item.referConfig.formValues[item.referConfig.useFormKey]) || ''" + :text="item.referConfig.showProp" + :value="item.prop || item.value" + referType="master" + @setReferValue="setReferValue"> + + </vciWebRefer> + <quill-editor ref="customQuillEditor" v-model="content" :options="editorOption" class="editor"> + </quill-editor> </template> </avue-form> </div> </template> <script> +import vciWebRefer from '@/components/refer/vciWebRefer' +import VciWebRefer from "@/components/refer/vciWebRefer"; +import {verifyNull, verifySlash} from "@/util/validate"; + +const toolbarOptions = [ + ['bold', 'italic', 'underline', 'strike'], // toggled buttons + ['blockquote', 'code-block'], + + [{'header': 1}, {'header': 2}], // custom button values + [{'list': 'ordered'}, {'list': 'bullet'}], + [{'script': 'sub'}, {'script': 'super'}], // superscript/subscript + [{'indent': '-1'}, {'indent': '+1'}], // outdent/indent + [{'direction': 'rtl'}], // text direction + + [{'size': ['small', false, 'large', 'huge']}], // custom dropdown + [{'header': [1, 2, 3, 4, 5, 6, false]}], + + [{'color': []}, {'background': []}], // dropdown with defaults from theme + [{'font': []}], + [{'align': []}], + ['link', 'image', 'video'], + ['clean'] // remove formatting button +]; export default { name: "dynamic-form", + components: {VciWebRefer}, props: { componentVO: { type: Object, @@ -39,22 +82,64 @@ default: '' }, sourceData: { - //鑿滃崟婧愭暟鎹垨鑰呭脊绐楁椂鎸夐挳鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁 + //鎵�灞炲尯鍩熺殑涓婁竴鍖哄煙閫変腑鏁版嵁 type: Object, default: {} + }, + dataStore: { + //寮圭獥鏃舵寜閽墍灞炲尯鍩熼�変腑鏁版嵁 + type: Array, + default: [] }, paramVOS: { type: Object, default: {} }, + isShow: { + //鎵�鍦ㄥ尯鍩熸槸鍚﹀凡鏄剧ず锛岄拡瀵箃ab鍜宑ollapse + type: Boolean, + default: true + }, }, data() { return { form: {}, + content: '', + editorOption: { + placeholder: '浣犳兂璇翠粈涔堬紵', + modules: { + imageResize: { + displayStyles: { + backgroundColor: 'black', + border: 'none', + color: 'white' + }, + modules: ['Resize', 'DisplaySize', 'Toolbar'] + }, + toolbar: { + container: toolbarOptions, // 宸ュ叿鏍� + handlers: { + 'image': function (value) { + if (value) { + document.querySelector('#quillEditorQiniu .avatar-uploader input').click() + } else { + this.quill.format('image', false); + } + }, + 'video': function (value) { + if (value) { + document.querySelector('#quillEditorQiniu .avatar-uploader input').click() + } else { + this.quill.format('video', false); + } + }, + } + } + } + } } }, mounted() { - // console.log('componentVO--',this.componentVO.tableDefineVO.cols[0]) }, computed: { option() { @@ -62,11 +147,49 @@ submitBtn: false, emptyBtn: false, height: 300, - column: this.formColumn(this.componentVO.tableDefineVO.cols[0]) + column: this.getColumnData() } }, slotData() { - return this.formColumn(this.componentVO.tableDefineVO.cols[0]) + return this.getColumnData() + } + }, + watch: { + slotData: { + handler(newV) { + this.getDictList(newV) + }, + immediate: true, + }, + form: { + handler(val) { + if (val) { + if (Array.isArray(val)) { // 妫�鏌� val 鏄惁涓烘暟缁� + for (let code of val) { + if ( + code.type == "refer" && + code.referConfig && + code.referConfig.useFormKey + ) { + code.referConfig.formValues = val; + // code.referConfigTemp.options = code.referConfig; + } + } + } else if (typeof val === 'object') { // 妫�鏌� val 鏄惁涓哄璞� + // 杩唬瀵硅薄鐨勯�昏緫 + } + this.$emit("input", val); + } + }, + deep: true, + immediate: true, + }, + sourceData: { + handler(newval) { + //婧愭暟鎹湁鍙樺寲鏃跺彉鏇村綋鍓嶅尯鍩熸暟鎹� + console.log(this.areasName); + console.log(newval); + } } }, methods: { @@ -75,31 +198,145 @@ return formList.map(item => { const typeValue = item.type === 'text' ? 'input' : item.type === 'combox' ? 'select' : item.type; + const focusFunc = item.type === 'refer' ? (i) => { + + } : undefined; + + return { label: item.text, prop: item.field, type: typeValue, + labelWidth: item.text.length >= 6 ? 115 : 90, value: item.defaultValue, - dicData: item.type === 'combox' ? item.dicData : null, + dicData: item.type === 'combox' ? item.dicData : item.dicUrl, readonly: item.readOnly, disabled: item.disabled, + display: !item.hidden, labelSuffix: item.suffix, suffixIcon: item.prefix, placeholder: item.placeholder, clearable: item.clearable, tip: item.tooltips, keyAttr: item.keyAttr, + focus: focusFunc, + referConfig: item.referConfig, rules: [{ required: item.required, message: `璇疯緭鍏�${item.text}!`, trigger: "blur" }] - } - }) + }; + }); }, + + //鏁版嵁鍒ょ┖ + getColumnData() { + if (this.componentVO && this.componentVO.formDefineVO && this.componentVO.formDefineVO.items && this.componentVO.formDefineVO.items.length > 0) { + return this.formColumn(this.componentVO.formDefineVO.items) + } else { + return null; + } + }, + buttonClick(item) { console.log(item.id) }, + async getDictList(val) { + for (let code of val) { + if (!verifyNull(code.dictData) && code.type == "select") { + if ( + verifySlash(code.dictCode) && + Object.prototype.hasOwnProperty.call(code, "dictCode") + ) { + const res = await getlistByCode(code.dictCode); + if (res.success) { + const dic = res.data; + code.dictData = dic.map((d) => { + return { + label: d.name, + key: d.code, + value: d.id, + }; + }); + } + } else { + this.getDicts(code.dictCode) + .then((res) => { + if (res.success) { + const dic = res.obj.datas; + code.dictData = dic.map((d) => { + return { + label: d.name, + key: d.code, + value: d.code, + }; + }); + } + }) + .catch(() => { + this.$message.error(` 鏁版嵁瀛楀吀${code.dictCode}閿欒`); + }); + } + } + if (code.type == "refer") { + if (code.referConfig && code.referConfig.useFormKey) { + if (verifyNull(code.referConfig.formValuesKey)) { + code.referConfig.formValuesKey = "form"; + } + code.referConfig.formValues = this[code.referConfig.formValuesKey]; + } + code.referConfigTemp = { + title: code.label, + showProp: + code.showProp || code.referConfig.showProp || code.prop + "Name", + prop: code.prop, + propMap: code.propMap || {}, + placeholder: code.placeholder + ? code.placeholder + : ` 璇烽�夋嫨` + code.label, + options: code.referConfig, + }; + } + } + this.formTemplateData = val; + }, + setReferValue(data) { + if (data && data.prop) { + this.form[data.prop] = data.value || ""; + this.form[data.showProp] = data.text || ""; + if (data.propMap) { + //璇存槑闇�瑕佹槧灏� + for (let key in data.propMap) { + let mapFields = data.propMap[key].split(","); + let value = []; + data.rawData.forEach((_item) => { + var temp; + if (!_item.extendData) { + _item.extendData = {}; + } + if (mapFields.length == 1) { + var mapField = mapFields[0]; + temp = _item[mapField] || _item["extendData"][mapField]; + } else { + //鏈夊涓� + var mutiTemp = []; + mapFields.forEach((_itemField) => { + mutiTemp.push( + _item[_itemField] || _item["extendData"][_itemField] + ); + }); + temp = mutiTemp.join(" "); + } + if (temp != null && temp != "") { + value.push(temp); + } + }); + this.form[key] = value.join(","); + } + } + } + }, } } </script> -- Gitblit v1.9.3