From 59ff9baa407775998954f271f7ed2cde8db01a26 Mon Sep 17 00:00:00 2001
From: wangting <wangting@vci-tech.com>
Date: 星期二, 14 一月 2025 17:06:05 +0800
Subject: [PATCH] 查询模板下拉框数据联动,排序列表与创建表单排序字段数据联动

---
 Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue |  250 +++++++++++++++++++++++++++++--------------------
 1 files changed, 148 insertions(+), 102 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
index 27fbae3..f49918d 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
@@ -2,7 +2,7 @@
   <el-dialog v-dialogDrag
              :title="dialog.title"
              :visible.sync="dialog.showDialog"
-             width="1620px"
+             width="1650px"
              :append-to-body="true"
              class="avue-dialog"
              :destroy-on-close="true"
@@ -46,8 +46,8 @@
             <legend>&nbsp;閾炬帴绫诲瀷鍊欓�夋潯浠�&nbsp;</legend>
             <div>
               鏌ヨ妯℃澘瀹氫箟
-              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="璇烽�夋嫨鍐呭" type="tree" :dic="linkQueryDefineDic" style="width:240px"></avue-select>
-              <avue-tree style="height: 265px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
+              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="璇烽�夋嫨鍐呭" type="tree" :dic="linkQueryDefineDic" style="width:245px"></avue-select>
+              <avue-tree style="width:335px;height: 268px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
               </avue-tree>
             </div>
           </fieldset>
@@ -60,6 +60,8 @@
                                :queryCondition="queryCondition"
                                :queryTree="queryTree"
                                :levelFlag.sync="form.levelFlag"
+                               :searchColumn="searchColumn"
+                               @queryHandler="queryHandler"
             ></form-query-dialog>
           </fieldset>
         </el-main>
@@ -68,8 +70,8 @@
             <legend>&nbsp;涓氬姟绫诲瀷鍊欓�夋潯浠�&nbsp;</legend>
             <div>
               鏌ヨ妯℃澘瀹氫箟
-              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="璇烽�夋嫨鍐呭" type="tree" :dic="businessQueryDefineDic" style="width: 240px;"></avue-select>
-              <avue-tree style="height: 265px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart">
+              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="璇烽�夋嫨鍐呭" type="tree" :dic="businessQueryDefineDic" style="width: 245px;"></avue-select>
+              <avue-tree style="width:335px;height: 268px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
               </avue-tree>
             </div>
           </fieldset>
@@ -77,7 +79,7 @@
       </el-container>
     </div>
     <div class="dialog-footer avue-dialog__footer">
-      <el-button type="primary" plain size="small" @click="submitDialog" >淇� 瀛�</el-button>
+      <el-button type="primary" size="small" @click="submitDialog" >淇� 瀛�</el-button>
       <el-button size="small" @click="cancelDialog">鍙� 娑�</el-button>
     </div>
   </el-dialog>
@@ -85,7 +87,7 @@
 
 <script>
 import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
-import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
+import {linkSave,getCriteria} from "@/api/queryTemplate/linkTypeQuery";
 import basicOption from "@/util/basic-option";
 import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
 import formQueryDialog from "./formQueryDialog.vue";
@@ -94,24 +96,35 @@
   components:{formQueryDialog},
   data(){
     return {
+      searchColumn: [
+        {
+          label: 'OID',
+          prop: 'OID',
+        },
+        {
+          label: 'CREATOR',
+          prop: 'CREATOR'
+        },
+        {
+          label: 'CREATETIME',
+          prop: 'CREATETIME'
+        },
+      ],
       dialog: {
         showDialog: false,
         title: "鍒涘缓",
-        submitTxt: "淇濆瓨",
-        submitIcon: "el-icon-check",
         loading: false,
         type: "add",
       },
       crudDialog: {
         showDialog: false,
-        submitTxt: "淇濆瓨",
-        submitIcon: "el-icon-check",
       },
       formItems:[{
         label: '鏌ヨ妯℃澘鍚嶇О',
         prop: 'qtName',
         type: 'input',
-        span:5,
+        span:4.5,
+        labelWidth: 110,
         rules: [{
           required: true,
           message: "璇疯緭鍏ユ煡璇㈡ā鏉垮悕绉�",
@@ -122,26 +135,49 @@
         prop: 'direction',
         type: 'radio',
         value:'positive',
-        labelWidth:70,
-        span: 3,
+        labelWidth:80,
+        span: 3.5,
         dicData: [{
           label: '姝e悜',
           value: 'positive'
         }, {
           label: '鍙嶅悜',
           value: 'opposite'
-        }]
+        }],
+        control: (val, form) => {
+          const dicData=this.getDicData(val);
+          this.form.btmType=dicData[0].value
+          return {
+            btmType: {
+              dicData: dicData
+            }
+          };
+        }
       },{
         label: '涓氬姟绫诲瀷',
         prop: 'btmType',
         type: 'select',
         labelWidth:110,
-        dicData: []
+        clearable:false,
+        rules: [{
+          required: true,
+          message: "璇烽�夋嫨涓氬姟绫诲瀷",
+          trigger: "blur"
+        }],
+        dicData: [],
+        change: ({ value, column, item, dic }) => {
+          this.form.btmType=value;
+          if(value){
+            this.getAllAttr();
+            this.getTemp(value,false);
+          }
+        },
       }, {
         label: '鐗堟湰鐗堟',
         prop: 'version',
         type: 'select',
-        span:5,
+        span:4,
+        labelWidth:110,
         dicData: [{
           label: '褰撳墠鐗堟湰褰撳墠鐗堟',
           value: 1
@@ -160,7 +196,7 @@
         label: '鏌ヨ鏄惁鏈変笅绾�',
         prop: 'queryISLeaf',
         type: 'switch',
-        labelWidth:140,
+        labelWidth:150,
         dicData: [ {
           label: '鍚�',
           value: false
@@ -173,7 +209,7 @@
         label: '瀛愯妭鐐瑰眰娆℃暟',
         prop: 'level',
         type: 'number',
-        span:3,
+        labelWidth:130,
         value:1
       }],
       form:{
@@ -183,7 +219,7 @@
         queryTemplate:{}
       },
       //宸叉湁鎺掑簭鍒楄〃閰嶇疆
-      crudOption: {
+        crudOption: {
         ...basicOption,
         addBtn: false,
         editBtn: false,
@@ -196,7 +232,14 @@
           prop: 'orderField'
         }, {
           label: '鎺掑簭鏂瑰紡',
-          prop: 'orderMode'
+          prop: 'orderMode',
+          formatter:function (row, value) {
+            if (row.orderMode == 'ASC') {
+              return '鍗囧簭'
+            }else{
+              return '闄嶅簭'
+            }
+          }
         }, {
           label: '浼樺厛绾�',
           prop: 'level'
@@ -261,12 +304,17 @@
         addBtn: false,
         filter:false,
         draggable: true,
-        allowDrop: () => {
+        allowDrop: (node) => {
           return false;
         },
-        allowDrag: () => {
+        allowDrag: (dropNode) => {
           return true;
         },
+        props:{
+          label:'name',
+          value:'name',
+          children:'attrs'
+        }
       },
       linkQueryDefineForm:'',//閾炬帴绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑鍊�
       linkQueryDefineDic:[],//閾炬帴绫诲瀷鏌ヨ妯℃澘瀹氫箟涓嬫媺鏁版嵁
@@ -283,54 +331,7 @@
 
     };
   },
-  watch: {
-    //鏂瑰悜
-    'form.direction': {
-      handler(val) {
-        if(val=='positive'){
-          //姝e悜
-          const dicData=this.treeData.btmItemsTo.map(item=>{
-            return {
-              label: item,
-              value: item
-            }
-          })
-          dicData.push({
-            label: '鎵�鏈夌被鍨�',
-            value: '*'
-          })
-          this.$refs.form.updateDic('btmType', dicData);
-          this.form.btmType=dicData[0].value
-          this.getAllAttr();
-        }else if(val=='opposite'){
-          //鍙嶅悜
-          const dicData=this.treeData.btmItemsFrom.map(item=>{
-            return {
-              label: item,
-              value: item
-            }
-          })
-          dicData.push({
-            label: '鎵�鏈夌被鍨�',
-            value: '*'
-          })
-          this.$refs.form.updateDic('btmType', dicData);
-          this.form.btmType=dicData[0].value
-          this.getAllAttr();
-        }
-      },
-      immediate: true,
-    },
-    //涓氬姟绫诲瀷
-    'form.btmType': {
-      handler(val) {
-        if(val && val!='*'){
-          this.getTemp(val,false);
-        }
-      },
-      immediate: true,
-    }
-  },
+  watch: {},
   methods: {
     openDialog(btmName, title, mode, data) {
       this.dialog.title = title;
@@ -352,7 +353,11 @@
         this.queryCondition=this.selectData.queryTemplate.condition;
         this.queryTree=this.selectData.tree;
         this.form.levelFlag=this.selectData.levelFlag;
+
+        const dicData=this.getDicData(this.form.direction);
+        this.formItems[2].dicData=dicData;
       } else {
+        this.form.direction='positive';
         this.selectData = {};
         this.orderInfoList = [];
         this.queryCondition=[];
@@ -360,9 +365,39 @@
           connector:'骞朵笖',
           child:[]
         };
+        const dicData=this.getDicData(this.form.direction);
+        this.formItems[2].dicData=dicData;
+        this.form.btmType=dicData[0].value;
       }
       this.dialog.showDialog = true;
+      this.treeOption.defaultExpandedKeys=[data.treeData.label]
       this.getTemp(data.treeData.label, true)
+    },
+    //鑾峰彇涓氬姟绫诲瀷涓嬫媺鏁版嵁
+    getDicData(directionVal){
+      let dicData=[];
+      if(directionVal=='positive'){
+        //姝e悜
+        dicData=this.treeData.btmItemsTo.map(item=>{
+          return {
+            label: item,
+            value: item
+          }
+        })
+      }else if(directionVal=='opposite'){
+        //鍙嶅悜
+        dicData=this.treeData.btmItemsFrom.map(item=>{
+          return {
+            label: item,
+            value: item
+          }
+        })
+      }
+      dicData.push({
+        label: '鎵�鏈夌被鍨�',
+        value: '*'
+      })
+      return dicData;
     },
     cancelDialog() {
       this.dialog.loading = false;
@@ -463,7 +498,7 @@
       this.orderFieldList.unshift({
         id: data.row.orderField
       });
-      this.tableFormOption.column[0].dicData= this.orderFieldList
+      this.$refs.tableForm.updateDic('orderField',this.orderFieldList);
     },
     //鑾峰彇鎺掑簭璁剧疆涓墍鏈夋帓搴忓瓧娈�
     getAllAttr() {
@@ -509,7 +544,7 @@
     //鑾峰彇鏌ヨ妯℃澘瀹氫箟涓嬫媺
     getTemp(btmName,linkFlag) {
       if (btmName) {
-        queryTemplateListByAttr({btmName: btmName, linkFlag: linkFlag,direction:this.form.direction}).then(res => {
+        queryTemplateListByAttr({btmName: btmName, linkFlag: linkFlag,direction:linkFlag?null:this.form.direction}).then(res => {
           const data = res.data.data.map(item => {
             item.label = item.name + '-' + (item.linkTypeName || item.btmName);
             item.value = item.name;
@@ -527,55 +562,66 @@
     },
     linkQueryDefineChange(data) {
       if (data.value) {
-        const childData = data.item.attrs.map(item => {
-          return {
-            label: item.name,
-            value: item.name,
-            atttributes:item
-          };
-        });
-        this.linkTreeData = [{
-          label: data.value,
-          value: data.value,
-          children: childData
-        }]
+        this.linkTreeData = [ data.item]
       }
     },
     businessQueryDefineChange(data) {
       if (data.value) {
-        const childData = data.item.attrs.map(item => {
-          return {
-            label: item.name,
-            value: item.name,
-            atttributes:item
-          };
-        });
-        this.businessTreeData = [{
-          label: data.value,
-          value: data.value,
-          children: childData
-        }]
+        this.businessTreeData = [ data.item]
       }
     },
     // 寮�濮嬫嫋鎷芥爲鑺傜偣浜嬩欢
     handleDragStart(node, ev) {
       // 浣跨敤 setData 鏂规硶璁剧疆鏁版嵁
       ev.dataTransfer.setData('item', JSON.stringify(node.data));
+      if(this.form.levelFlag==1){
+        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-start', ev,{node:this.$refs.formQuery.initItem(node)});
+      }
     },
     handleDragEnd(draggingNode,endNode,position,ev){
+      if(this.form.levelFlag==1) {
+        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-end', ev);
+      }
+    },
+    //鏌ヨ
+    queryHandler(){
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.$refs.formQuery.queryResultDialog.loading=true;
+          const formData=this.initFormData();
+          getCriteria(formData).then(res => {
+            if (res.data.success) {
+              const data = res.data.data;
+              const result = data.map(item => {
+                const filteredAttrs = item.hisAttrValList.filter(attr =>
+                  attr.attrName === "OID" || attr.attrName === "CREATOR" || attr.attrName === "CREATETIME"
+                );
 
-    }
+                const newObj = filteredAttrs.reduce((acc, attr) => {
+                  acc[attr.attrName] = attr.attrVal;
+                  return acc;
+                }, {});
+
+                return newObj;
+              });
+
+              this.$refs.formQuery.resultData = result;
+              this.$refs.formQuery.queryResultDialog.showDialog = true;
+              this.$refs.formQuery.queryResultDialog.loading = false;
+            }
+          });
+        } else {
+          return false;
+        }
+      });
+    },
   },
 }
 </script>
 
 <style scoped>
 fieldset {
-  border-radius: 5px;
-  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
   padding: 10px 6px;
-  box-sizing: border-box;
   margin: 0;
   border: 1px solid #EBEEF5;
 }

--
Gitblit v1.9.3