From 9c67a9d48ec6a71e2d4edf11fae3f5e802a97bff Mon Sep 17 00:00:00 2001 From: wangting <675591594@qq.com> Date: 星期二, 19 十一月 2024 16:35:30 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue | 410 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 324 insertions(+), 86 deletions(-) diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue index cabe032..26cf5bf 100644 --- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue +++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue @@ -30,12 +30,15 @@ <div style="display: flex;justify-content: center"> <span style="display: flex;align-items: center; margin-right: 5px;"> <p class="tableTopLabel">鍚嶇О锛�</p> - <el-input v-model="topForm.viName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input> + <el-input v-model="topForm.viName" placeholder="璇疯緭鍏ュ悕绉�" size="mini"></el-input> </span> <span style="display: flex;align-items: center; margin-right: 5px;"> <p class="tableTopLabel">鏌ヨ妯℃澘鍚嶇О锛�</p> - <el-input v-model="form.itemQtName" placeholder="璇疯緭鍏ユ煡璇㈡ā鏉垮悕绉�" size="mini"></el-input> + <el-select v-model="form.itemQtName" placeholder="璇烽�夋嫨鏌ヨ妯℃澘" size="mini"> + <el-option v-for="(item,index) in searchQtNameList" :key="index" :label="item.qtName" + :value="item.qtName"></el-option> + </el-select> </span> <span style="display: flex;align-items: center; margin-right: 5px;"> @@ -72,28 +75,25 @@ <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;" type="primary"></el-button> </div> - <el-input v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'" v-model="item.value" - :placeholder="item.text" - :rows="2" - type="textarea"> + :placeholder="item.text"> </el-input> - - <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" - :min="1"></el-input-number> + <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" :min="1" + size="mini"></el-input-number> <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�" show-password></el-input> <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio> <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox> <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'" - v-model="item.value" :disabled="true" placeholder="璇烽�夋嫨" size="mini"> + v-model="item.value" :disabled="false" placeholder="璇烽�夋嫨" size="mini"> </el-select> <el-date-picker v-if="item.itemType === 'date' || item.itemType === 'datetime'" v-model="item.value" :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'" + class="formItemMargin" type="date"> </el-date-picker> @@ -105,6 +105,7 @@ step: '00:15', end: '18:30' }" + class="formItemMargin" placeholder="閫夋嫨鏃堕棿"> </el-time-select> <el-button v-if="item.itemType === 'file'" @@ -129,7 +130,8 @@ </el-button> <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addCustomClickHandler">娣诲姞鑷畾涔夌粍浠� </el-button> - <el-button icon="el-icon-zoom-in" plain size="small" type="primary" @click="checkViewHandler" >棰勮</el-button> + <el-button icon="el-icon-zoom-in" plain size="small" type="primary" @click="checkViewHandler">棰勮 + </el-button> </div> </basic-container> </el-main> @@ -138,15 +140,20 @@ <basic-container> <div style="height: 660px; overflow-y: auto;padding-right: 10px"> <h3>璁剧疆</h3> + <h4 style="color: red">灞炴�ц缃俊鎭悗闇�鍗曞嚮鍙充笅瑙掑簲鐢ㄦ寜閽繘琛屽簲鐢�</h4> <el-form ref="form" :model="form" :rules="rules" label-position="left" label-width="85px"> <el-row style="border-bottom: 1px solid #878585;padding-bottom: 10px"> <el-col :span="24"> <el-form-item label="浣跨敤瀛楁"> - <div style="display: flex"> + <div style="display: flex;align-items: center"> <el-input v-model="form.text" :readonly="true" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input> - <el-checkbox v-model="form.itemIsEditable" style="margin-left: 5px; margin-right: 5px">鍙 + <el-checkbox v-model="form.itemIsEditable" false-label="0" + style="margin-left: 5px; margin-right: 5px" + true-label="1">鍙 </el-checkbox> - <el-checkbox v-model="form.itemIsRequired" style="margin-left: 5px;margin-right: 0px">蹇呭~ + <el-checkbox v-model="form.itemIsRequired" false-label="0" + style="margin-left: 5px;margin-right: 0px" + true-label="1">蹇呭~ </el-checkbox> </div> </el-form-item> @@ -240,7 +247,9 @@ <el-form-item label="鏉冮檺鎺у埗"> <div style="display: flex;align-items: center"> <el-input v-model="form.itemRight" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input> - <el-button plain size="mini" style="margin-left: 3px" type="success">閫夋嫨</el-button> + <el-button plain size="mini" style="margin-left: 3px" type="success" @click="authClickHandler"> + 閫夋嫨 + </el-button> </div> </el-form-item> </el-col> @@ -513,10 +522,12 @@ </el-col> <el-col :span="24"> - <el-form-item label="鏉冮檺鎺у埗"> + <el-form-item label="灞炴�ф潈闄�"> <div style="display: flex;align-items: center"> <el-input v-model="customForm.itemRight" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input> - <el-button plain size="mini" style="margin-left: 3px" type="success">閫夋嫨</el-button> + <el-button plain size="mini" style="margin-left: 3px" type="success" @click="customAuthClickHandler"> + 閫夋嫨 + </el-button> </div> </el-form-item> </el-col> @@ -668,88 +679,140 @@ <el-button type="primary" @click="customSaveHandler">纭� 瀹�</el-button> </span> </el-dialog> + <!-- 娣诲姞鑷畾涔夌粍浠堕�夋嫨灞炴�ф睜灞炴�у璇濇 --> + <el-dialog + v-dialogDrag + :visible.sync="customAttrVisible" + append-to-body="true" + class="avue-dialog" + title="閫夋嫨灞炴��" + width="50%"> + <avue-crud + ref="userCrud" + :data="customAttrData" + :option="customAttrOption" + :page.sync="page" + :table-loading="customAttrLoading" + @row-click="customAttrRowClickHandler" + > + </avue-crud> + <span slot="footer" class="dialog-footer"> + <el-button @click="customAttrVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="customAttrSaveHandler">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 棰勮 --> <el-dialog v-dialogDrag :visible.sync="checkViewVisible" append-to-body="true" class="avue-dialog" title="棰勮" - width="80%"> - <el-form ref="form" :model="form" :rules="rules" label-width="100px"> - <el-row> - <el-col v-for="(item,index) in formList" :key="index" :span="topForm.columnNumber"> - <el-form-item :class="['hiddenLabel', { 'active-border': activeItem.text === item.text }]" - :label="item.itemName + '锛�'" - style="padding-left: 5px" @click.native="formItemClick(item,index)"> - <el-input - v-if="item.itemType === 'text' || + width="60%"> + <div style="height: 600px"> + <el-form ref="form" :model="form" :rules="rules" label-width="100px"> + <el-row> + <el-col v-for="(item,index) in formList" :key="index" :span="topForm.columnNumber"> + <el-form-item :label="item.itemName + '锛�'" style="padding-left: 5px"> + <el-input + v-if="item.itemType === 'text' || item.itemType === 'custom' || item.itemType === 'customform'|| item.itemType === 'hidden' || item.itemType === 'specialCharacter'" - v-model="item.value" :placeholder="item.text" - size="mini"></el-input> + v-model="item.value" :placeholder="item.text" + size="mini"></el-input> - <div v-if="item.itemType === 'textbtn'" style="display: flex;align-items: center"> - <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input> - <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;" - type="primary"></el-button> - </div> + <div v-if="item.itemType === 'textbtn'" style="display: flex;align-items: center"> + <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input> + <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;" + type="primary"></el-button> + </div> - <el-input - v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'" - v-model="item.value" - :placeholder="item.text" - :rows="2" - type="textarea"> - </el-input> + <el-input + v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'" + v-model="item.value" + :placeholder="item.text"> + </el-input> - <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" - :min="1"></el-input-number> - <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�" - show-password></el-input> - <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio> - <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox> - <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'" - v-model="item.value" :disabled="true" placeholder="璇烽�夋嫨" size="mini"> - </el-select> - <el-date-picker - v-if="item.itemType === 'date' || item.itemType === 'datetime'" - v-model="item.value" - :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'" - type="date"> - </el-date-picker> + <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" :min="1" + size="mini"></el-input-number> + <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�" + show-password></el-input> + <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio> + <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox> + <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'" + v-model="item.value" placeholder="璇烽�夋嫨" size="mini"> + <el-option v-for="(i,k) in item.itemKeyValueList" :key="l" :label="i.value" + :value="i.key"></el-option> + </el-select> + <el-date-picker + v-if="item.itemType === 'date' || item.itemType === 'datetime'" + v-model="item.value" + :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'" + type="date"> + </el-date-picker> - <el-time-select - v-if="item.itemType === 'time'" - v-model="item.value" - :picker-options="{ + <el-time-select + v-if="item.itemType === 'time'" + v-model="item.value" + :picker-options="{ start: '08:30', step: '00:15', end: '18:30' }" - placeholder="閫夋嫨鏃堕棿"> - </el-time-select> - <el-button v-if="item.itemType === 'file'" - v-model="item.value" plain size="mini" type="primary"> - 涓婁紶鏂囦欢 - </el-button> - <el-button v-if="item.itemType === 'multiFile'" - v-model="item.value" plain size="mini" type="primary"> - 澶氭枃浠朵笂浼� - </el-button> + placeholder="閫夋嫨鏃堕棿"> + </el-time-select> + <el-button v-if="item.itemType === 'file'" + v-model="item.value" plain size="mini" type="primary"> + 涓婁紶鏂囦欢 + </el-button> + <el-button v-if="item.itemType === 'multiFile'" + v-model="item.value" plain size="mini" type="primary"> + 澶氭枃浠朵笂浼� + </el-button> - </el-form-item> - </el-col> - </el-row> - </el-form> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + </el-dialog> + + <el-dialog + v-dialogDrag + :visible.sync="authVisible" + append-to-body="true" + class="avue-dialog" + title="鏉冮檺鎺у埗-浜哄憳鍒楄〃" + width="60%" + @close="authDialogClose"> + <div style="height: 650px"> + <div style="height: 600px;"> + <avue-tree :key="refresh" ref="authTree" v-model="treeAuthForm" :data="treeAuthData" :option="treeAuthOption" + @check-change="treeAuthCheckChange"> + <span slot-scope="{ node, data }" class="el-tree-node__label"> + <span style="font-size: 15px"> + <i class="el-icon-s-promotion"></i> + {{ (node || {}).label }} + </span> + </span> + </avue-tree> + </div> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="authDialogClose">鍙� 娑�</el-button> + <el-button type="primary" @click="authDialogSaveHandler">纭� 瀹�</el-button> + </span> </el-dialog> </el-dialog> </template> <script> -import {getTreeAttributes, savePortalVI} from "@/api/UI/formDefine/api"; +import {getObjTypeQTs, getTreeAttributes, savePortalVI, refPersonOrgTree} from "@/api/UI/formDefine/api"; +import {gridAttribute} from "@/api/modeling/attributePool/api"; import func from "@/util/func"; +import basicOption from "@/util/basic-option"; export default { name: "formDialog", @@ -771,6 +834,87 @@ }, data() { return { + authType: 'default', + refresh: Math.random(), + treeAuthOption: { + multiple: true, + height: 'auto', + menu: false, + addBtn: false, + defaultExpandAll: true, + lazy: true, + props: { + label: 'text', + value: 'oid', + children: 'childNodes', + }, + treeLoad: (node, resolve) => { + // console.log(node); + const params = { + 'conditionMap[dataType]': node.data.data, + 'conditionMap[parentId]': node.data.data, + 'conditionMap[orgType]': 'all' + } + refPersonOrgTree(node.level === 0 ? {} : params).then(res => { + resolve(res.data.treeData.map(item => { + return { + ...item, + id: item.id, + name: item.name, + leaf: item.leaf + } + })) + }) + } + }, + treeAuthData: [], + treeAuthForm: {}, + authVisible: false, + searchQtNameList: [], + customAttrRow: {}, + customAttrOption: { + ...basicOption, + calcHeight: -60, + addBtn: false, + editBtn: false, + delBtn: false, + menu: false, + refreshBtn: false, + highlightCurrentRow: true, + selection: false, + column: [ + { + label: '灞炴�у悕', + prop: 'id', + sortable: true, + }, + { + label: '鏍囩', + prop: 'name', + sortable: true, + }, + { + label: '绫诲瀷', + prop: 'attributeDataTypeText', + sortable: true, + width: 100 + }, + { + label: '榛樿鍊�', + prop: 'defaultValue', + sortable: true, + width: 120 + }, + { + label: '鎻忚堪', + prop: 'description', + overHidden: true, + }, + ] + }, + customAttrData: [], + customAttrLoading: false, + customAttrVisible: false, checkViewVisible: false, optionObj: { optionName: '', @@ -954,6 +1098,7 @@ this.treeLoading = false; } }) + this.getSearchSelectList(); }, // 寮�濮嬫嫋鎷芥爲鑺傜偣浜嬩欢 @@ -969,8 +1114,13 @@ const params = { text: data.text, oid: data.oid, - itemType: 'text' + itemType: 'text', + itemName: data.data.name, + itemCols: "1", + itemIsEditable:"0", + itemIsRequired:"0", } + console.log(data); const isDuplicate = this.formList.some(item => item.text === data.text); if (isDuplicate) { @@ -985,9 +1135,9 @@ this.activeItem = item; this.activeItemIndex = index; this.form = {...item}; - - // console.log(item,index); this.topForm.position = index += 1; + // this.$forceUpdate(); + console.log(this.form); }, // 璁剧疆鏄剧ず琛屾暟 @@ -1055,7 +1205,7 @@ this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�'); return; } - this.formList = this.formList.filter(item => item.text != this.activeItem.text); + this.formList = this.formList.filter(item => item.text !== this.activeItem.text); this.activeItem = {}; this.form = {}; }, @@ -1139,11 +1289,11 @@ // 淇濆瓨鎸夐挳 saveClickHandler() { if (!this.topForm.viName) { - this.$message.error('鍚嶇О涓嶈兘涓虹┖'); + this.$message.error('琛ㄥ崟鍚嶇О涓嶈兘涓虹┖'); return; } if (this.formList.length <= 0) { - this.$message.error('椤甸潰涓嶈兘涓虹┖'); + this.$message.error('椤甸潰瀹氫箟涓嶈兘涓虹┖'); return; } this.formList = this.formList.map(item => { @@ -1161,7 +1311,7 @@ viType: 1, // 瑙嗗浘绫诲瀷 viTypeText: "琛ㄥ崟", // 瑙嗗浘涓枃鍚嶇О prm: { - formQtName: '', // 鏌ヨ妯℃澘鍚嶇О + formQtName: this.form.qtName, // 鏌ヨ妯℃澘鍚嶇О showCols: this.topForm.showColumn, prmItemList: this.formList }, @@ -1171,6 +1321,7 @@ this.$message.success(res.data.obj); this.visible = false; this.closeDialog(); + this.$emit('updataTable'); } }) // this.visible = false; @@ -1184,9 +1335,7 @@ } if (!this.form.text) { this.$message.error('璇峰湪鍙充晶閫夋嫨鏁版嵁鍚庤繘琛屾搷浣滐紒'); - return; } - }, // 鑷畾涔夌粍浠朵慨鏀规樉绀虹被鍨� @@ -1207,7 +1356,7 @@ return; } const status = this.formList.some(item => item.text === this.customForm.text); - if(status){ + if (status) { this.$message.error('璇锋鏌ユ槸鍚︽坊鍔犵浉鍚岄」'); return; } @@ -1238,27 +1387,112 @@ this.customForm.itemListTable = this.customForm.itemListTxt = this.customForm.itemListVal = this.customForm.itemStyle = ""; }, + // 鑷畾涔夎〃鍗曚娇鐢ㄥ瓧娈佃〃鏍艰鐐瑰嚮 + customAttrRowClickHandler(row) { + this.customAttrRow = row; + }, + // 鑷畾涔夎〃鍗曚娇鐢ㄥ瓧娈甸�夋嫨 customTextHandler() { + this.customAttrVisible = true; + this.customAttrLoading = true + gridAttribute().then(res => { + const data = res.data.data; + this.customAttrData = data; + this.customAttrLoading = false; + }).catch(err => { + this.$message.error(err) + }); + }, + // 鑷畾涔夎〃鍗曚娇鐢ㄥ瓧娈典繚瀛� + customAttrSaveHandler() { + if (func.isEmptyObject(this.customAttrRow)) { + this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屼繚瀛�'); + return; + } + // console.log(this.customAttrRow) + this.customForm.text = this.customAttrRow.id; + this.customAttrVisible = false; }, // 鍙充晶琛ㄥ崟搴旂敤鎸夐挳 asideFormHandler() { - if(!this.form.text){ + if (!this.form.text) { this.$message.error('璇锋坊鍔犱竴鏉℃暟鎹繘琛屼繚瀛橈紒'); return; } + + this.formList = this.formList.map(item => item.text === this.form.text ? this.form : item ); + console.log(this.formList); this.$message.success('搴旂敤鎴愬姛'); }, // 棰勮鎸夐挳 - checkViewHandler(){ + checkViewHandler() { this.checkViewVisible = true; + }, + + // 鏌ヨ妯℃澘涓嬫媺鎺ュ彛鏌ヨ + getSearchSelectList() { + getObjTypeQTs({btName: this.treeRadio === '0' ? this.TreeNodeRow.id : this.TreeNodeRow.name}).then(res => { + this.searchQtNameList = res.data.data; + }) + }, + + // 鏉冮檺閫夋嫨鎸夐挳 + authClickHandler() { + this.authVisible = true; + }, + + // 鑷畾涔夎〃鍗曢�夋嫨鏉冮檺 + customAuthClickHandler() { + this.authVisible = true; + this.authType = 'attr'; + }, + + // 鏉冮檺鏍戝璇濇鍏抽棴 + authDialogClose() { + this.authVisible = false; + this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍� + }, + + // 鏉冮檺鎺у埗淇濆瓨 + authDialogSaveHandler() { + const filterList = ['root', 'user', 'role', 'department'] + const data = this.$refs.authTree.getCheckedNodes().filter(item => !filterList.includes(item.oid)); + if (!data || data.length <= 0) { + this.$message.error('璇锋鏌ユ槸鍚﹀嬀閫夊瓙鑺傜偣'); + return; + } + + const resultMap = {}; + + data.forEach(item => { + const key = item.parentBtmName; + if (!resultMap[key]) { + resultMap[key] = []; // 鍒濆鍖栨暟缁� + } + resultMap[key].push(item.parentBtmName === 'user' ? item.data.userName : item.data.name); + }); + + // 缁勮瀛楃涓� + const resultString = Object.entries(resultMap).map(([key, oids]) => { + return `${key}=${oids.join(',')}`; // 鐢� , 杩炴帴鍚屼竴绫诲瀷鐨� oid + }).join('&&'); // 鏈�鍚庣敤 && 杩炴帴涓嶅悓绫诲瀷 + + // console.log(resultString); + if (this.authType === 'attr') { + this.customForm.itemRight = resultString; + } else { + this.form.itemRight = resultString; + } + // this.form.itemRight = resultString; + this.authDialogClose(); } } @@ -1299,4 +1533,8 @@ font-size: 14px } +.formItemMargin { + margin: 10px 0 10px 0; +} + </style> -- Gitblit v1.9.3