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/businessTypeQuery/formDialog.vue |  283 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 162 insertions(+), 121 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue
index 696107f..c67930c 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue
@@ -1,23 +1,23 @@
 <template>
   <el-dialog v-dialogDrag
+             :append-to-body="true"
+             :close-on-click-modal="false"
+             :destroy-on-close="true"
              :title="dialog.title"
              :visible.sync="dialog.showDialog"
-             width="1620px"
-             :append-to-body="true"
              class="avue-dialog"
-             :destroy-on-close="true"
-             :close-on-click-modal="false"
+             width="1620px"
              @close="cancelDialog">
     <div style="min-height: 665px;max-height: 85vh;padding-bottom: 50px;">
-      <basic-form key="linkQueryForm" style="margin-bottom: 0"
-                  ref="form"
-                  :span="4"
-                  :formItems="formItems"
+      <basic-form key="businessQueryForm" ref="form"
                   :formData="form"
+                  :formItems="formItems"
+                  :span="4"
+                  style="margin-bottom: 0"
                   @getFormData="getFormData">
       </basic-form>
-      <avue-crud  ref="crud" title="璁剧疆鎺掑簭"
-                  :data="orderInfoList" :option="crudOption">
+      <avue-crud ref="crud" :data="orderInfoList"
+                 :option="crudOption" title="璁剧疆鎺掑簭">
         <template slot="menuLeft" slot-scope="scope">
           <el-button icon="el-icon-plus" size="small" type="primary" @click="addRow">鍒涘缓</el-button>
         </template>
@@ -27,17 +27,17 @@
         </template>
       </avue-crud>
       <el-dialog v-dialogDrag
-                 title="鍒涘缓"
-                 :visible.sync="crudDialog.showDialog"
-                 width="500px"
                  :append-to-body="true"
-                 class="avue-dialog"
-                 :destroy-on-close="true"
                  :close-on-click-modal="false"
+                 :destroy-on-close="true"
+                 :visible.sync="crudDialog.showDialog"
+                 class="avue-dialog"
+                 title="鍒涘缓"
+                 width="500px"
                  @close="crudDialog.showDialog=false">
-        <avue-form ref="tableForm" :option="tableFormOption" v-model="tableForm"></avue-form>
+        <avue-form ref="tableForm" v-model="tableForm" :option="tableFormOption"></avue-form>
         <div class="dialog-footer avue-dialog__footer">
-          <el-button type="primary" plain size="small" @click="rowSave" >淇� 瀛�</el-button>
+          <el-button plain size="small" type="primary" @click="rowSave">淇� 瀛�</el-button>
         </div>
       </el-dialog>
       <el-container style="margin-top: 10px;">
@@ -46,43 +46,66 @@
             <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" @node-drag-end="handleDragEnd">
+              <avue-select v-model="businessQueryDefineForm" :dic="businessQueryDefineDic" class="el-input--small"
+                           placeholder="璇烽�夋嫨鍐呭" style="width: 245px;" type="tree"
+                           @change="businessQueryDefineChange"></avue-select>
+              <avue-tree :data="businessTreeData" :option="treeOption" style="width:335px;height: 268px"
+                         @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
               </avue-tree>
             </div>
           </fieldset>
         </el-aside>
         <el-main>
-          <fieldset style="margin: 0 10px">
+          <fieldset style="margin: 0 0 0 10px">
             <legend>&nbsp;鏌ヨ鏉′欢&nbsp;</legend>
             <form-query-dialog ref="formQuery"
-                               style="height: 300px;"
+                               :levelFlag.sync="form.levelFlag"
                                :queryCondition="queryCondition"
                                :queryTree="queryTree"
-                               :levelFlag.sync="form.levelFlag"
+                               :searchColumn="searchColumn"
+                               style="height: 300px;"
+                               @queryHandler="queryHandler"
             ></form-query-dialog>
           </fieldset>
         </el-main>
       </el-container>
     </div>
     <div class="dialog-footer avue-dialog__footer">
-      <el-button type="primary" plain size="small" @click="submitDialog" >淇� 瀛�</el-button>
+      <el-button size="small" type="primary" @click="submitDialog">淇� 瀛�</el-button>
       <el-button size="small" @click="cancelDialog">鍙� 娑�</el-button>
     </div>
   </el-dialog>
 </template>
 
 <script>
-import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
-import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
+import {btmSave, getBizTypeQTDs, getCriteriaBtm} from "@/api/queryTemplate/businessTypeQuery";
 import basicOption from "@/util/basic-option";
 import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
-import formQueryDialog from "./formQueryDialog.vue";
+import formQueryDialog from "@/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue";
+
 export default {
   name: "formDialog",
-  components:{formQueryDialog},
-  data(){
+  components: {formQueryDialog},
+  data() {
     return {
+      searchColumn: [
+        {
+          label: 'OID',
+          prop: 'OID',
+        },
+        {
+          label: 'REVISIONOID',
+          prop: 'REVISIONOID'
+        },
+        {
+          label: 'NAMEOID',
+          prop: 'NAMEOID'
+        },
+        {
+          label: 'BTMNAME',
+          prop: 'BTMNAME'
+        }
+      ],
       dialog: {
         showDialog: false,
         title: "鍒涘缓",
@@ -96,22 +119,22 @@
         submitTxt: "淇濆瓨",
         submitIcon: "el-icon-check",
       },
-      formItems:[{
+      formItems: [{
         label: '鏌ヨ妯℃澘鍚嶇О',
         prop: 'qtName',
         type: 'input',
-        span:5,
+        span: 5,
         rules: [{
           required: true,
           message: "璇疯緭鍏ユ煡璇㈡ā鏉垮悕绉�",
           trigger: "blur"
         }]
       }],
-      form:{
-        btmName:'',
+      form: {
+        btmName: '',
         qtName: '',
-        levelFlag:0,//0:鏅�氭煡璇㈡ā鏉�; 1:楂樼骇鏌ヨ妯℃澘"
-        queryTemplate:{}
+        levelFlag: 0,//0:鏅�氭煡璇㈡ā鏉�; 1:楂樼骇鏌ヨ妯℃澘"
+        queryTemplate: {}
       },
       //宸叉湁鎺掑簭鍒楄〃閰嶇疆
       crudOption: {
@@ -127,32 +150,39 @@
           prop: 'orderField'
         }, {
           label: '鎺掑簭鏂瑰紡',
-          prop: 'orderMode'
+          prop: 'orderMode',
+          formatter: function (row, value) {
+            if (row.orderMode == 'ASC') {
+              return '鍗囧簭'
+            } else {
+              return '闄嶅簭'
+            }
+          }
         }, {
           label: '浼樺厛绾�',
           prop: 'level'
         }]
       },
       //宸叉湁鎺掑簭
-      orderInfoList:[],
+      orderInfoList: [],
       //璁剧疆鎺掑簭寮圭獥琛ㄥ崟鏁版嵁
-      tableForm:{
-        orderField:'',
-        orderMode:'ASC',
-        level:''
+      tableForm: {
+        orderField: '',
+        orderMode: 'ASC',
+        level: ''
       },
       //璁剧疆鎺掑簭寮圭獥鎵�鏈夊彲鎺掑簭瀛楁
-      orderFieldList:[],
+      orderFieldList: [],
       //璁剧疆鎺掑簭寮圭獥琛ㄥ崟閰嶇疆
       tableFormOption: {
         menuBtn: false,
         submitBtn: false,
         emptyBtn: false,
-        span:24,
+        span: 24,
         column: [{
           label: '鎺掑簭瀛楁',
           prop: 'orderField',
-          type:'select',
+          type: 'select',
           props: {
             label: 'id',
             value: 'id'
@@ -178,7 +208,7 @@
           label: '浼樺厛绾�',
           prop: 'level',
           type: 'number',
-          min:1,
+          min: 1,
           rules: [{
             required: true,
             message: "璇疯緭鍏ヤ紭鍏堢骇",
@@ -186,31 +216,35 @@
           }]
         }]
       },
-      treeOption:{
-        defaultExpandAll:true,
+      treeOption: {
+        defaultExpandAll: true,
         menu: false,
         addBtn: false,
-        filter:false,
+        filter: false,
         draggable: true,
         allowDrop: () => {
           return false;
         },
-        allowDrag: () => {
+        allowDrag: (dropNode) => {
           return true;
         },
+        props: {
+          label: 'name',
+          value: 'name',
+          children: 'attrs'
+        }
       },
-      businessQueryDefineForm:'',//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑鍊�
-      businessQueryDefineDic:[],//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟涓嬫媺鏁版嵁
+      businessQueryDefineForm: '',//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑鍊�
+      businessQueryDefineDic: [],//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟涓嬫媺鏁版嵁
       //涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑椤瑰睘鎬�
       businessTreeData: [],
       //楂樼骇鏌ヨ鏉′欢
-      queryTree:{},
+      queryTree: {},
       //鏅�氭煡璇㈡潯浠�
-      queryCondition:[],
+      queryCondition: [],
     };
   },
-  watch: {
-  },
+  watch: {},
   methods: {
     openDialog(btmName, title, mode, data) {
       this.dialog.title = title;
@@ -221,24 +255,25 @@
       if (data.selectData) {
         this.selectData = data.selectData;
         this.form.qtName = this.selectData.qtName;
-        this.form.level = this.selectData.queryTemplate.level;
         if (data.selectData.queryTemplate.orderInfoList && data.selectData.queryTemplate.orderInfoList.length > 0) {
           this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//宸叉湁鎺掑簭
         }
-        this.queryCondition=this.selectData.queryTemplate.condition;
-        this.queryTree=this.selectData.tree;
-        this.form.levelFlag=this.selectData.levelFlag;
+        this.queryCondition = this.selectData.queryTemplate.condition;
+        this.queryTree = this.selectData.tree;
+        this.form.levelFlag = this.selectData.levelFlag;
       } else {
         this.selectData = {};
         this.orderInfoList = [];
-        this.queryCondition=[];
-        this.queryTree={
-          connector:'骞朵笖',
-          child:[]
+        this.queryCondition = [];
+        this.queryTree = {
+          connector: '骞朵笖',
+          child: []
         };
       }
       this.dialog.showDialog = true;
-      this.getTemp(data.treeData.label, true)
+      this.treeOption.defaultExpandedKeys = [data.treeData.label]
+      this.getTemp(data.treeData.label)
+      this.getAllAttr();
     },
     cancelDialog() {
       this.dialog.loading = false;
@@ -247,26 +282,26 @@
         this.form = {
           btmName: '',
           qtName: '',
-          levelFlag:0,
+          levelFlag: 0,
           queryTemplate: {}
         };
-        this.orderInfoList =[];
-        this.businessQueryDefineForm='';
-        this.linkQueryDefineForm='';
+        this.orderInfoList = [];
+        this.businessQueryDefineForm = '';
+        this.linkQueryDefineForm = '';
         this.$refs.form.clearValidate();
       });
     },
     submitDialog() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          const formData=this.initFormData();
+          const formData = this.initFormData();
           console.log(formData)
-          linkSave(formData).then(res => {
+          btmSave(formData).then(res => {
             if (res.data.success) {
               this.$message.success("淇濆瓨鎴愬姛");
               this.cancelDialog();
               this.$emit("refresh");
-            }else {
+            } else {
               this.$refs.form.clearValidate();
             }
           });
@@ -281,21 +316,13 @@
         qtName: this.form.qtName,
         levelFlag: this.form.levelFlag,
         queryTemplate: {
-          clauseList: ['*'],
-          direction: this.form.direction,
-          id: this.form.qtName,
-          linkType: this.form.btmName,
           orderInfoList: this.orderInfoList,
-          recReturnMode: 1,//閫掑綊杩斿洖鏁版嵁妯″紡:1锛歊ECRETURNMODE_FLAT, 2锛歊ECRETURNMODE_FILTER
-          rightFlag: true,
-          secretFlag: true,
-          type: 'link',
-          version: this.form.version
         }
       }
       if (formData.levelFlag == 1) {
         //楂樼骇
         let that = this;
+
         function initValue(nodeChild) {
           let children = [];
           if (nodeChild) {
@@ -334,36 +361,34 @@
     },
     // 琛屽垹闄�
     rowDeleteHandler(data) {
-      this.orderInfoList.splice(data.index,1);
+      this.orderInfoList.splice(data.index, 1);
       this.orderFieldList.unshift({
         id: data.row.orderField
       });
-      this.tableFormOption.column[0].dicData= this.orderFieldList
+      this.$refs.tableForm.updateDic('orderField',this.orderFieldList);
     },
     //鑾峰彇鎺掑簭璁剧疆涓墍鏈夋帓搴忓瓧娈�
     getAllAttr() {
-      getAllOrderbyAttributeByLink({
-        name: this.treeData.label,
-        btmType: this.form.btmType,
-        direction: this.form.direction
+      getBizTypeQTDs({
+        btmName: this.treeData.label
       }).then(res => {
         const orderInfoStr = JSON.stringify(this.orderInfoList);
         const dicData = [];
         res.data.data.forEach(item => {
-          if (orderInfoStr.indexOf('"orderField":"' + item + '"') == -1) {
-            dicData.push({id: item});
+          if (orderInfoStr.indexOf('"orderField":"' + item.id + '"') == -1) {
+            dicData.push(item);
           }
         })
-        this.tableFormOption.column[0].dicData=dicData;
-        this.orderFieldList=dicData;
+        this.tableFormOption.column[0].dicData = dicData;
+        this.orderFieldList = dicData;
       })
     },
     //鎺掑簭璁剧疆淇濆瓨
     rowSave() {
       this.$refs.tableForm.validate((valid) => {
-        if(valid){
+        if (valid) {
           this.orderInfoList.push(JSON.parse(JSON.stringify(this.tableForm)));
-          this.crudDialog.showDialog=false;
+          this.crudDialog.showDialog = false;
           const orderInfoStr = JSON.stringify(this.orderInfoList);
           const dicData = [];
           this.orderFieldList.forEach(item => {
@@ -371,9 +396,9 @@
               dicData.push(item);
             }
           })
-          this.tableFormOption.column[0].dicData=dicData;
-          this.orderFieldList=dicData;
-          this.tableForm= {
+          this.tableFormOption.column[0].dicData = dicData;
+          this.orderFieldList = dicData;
+          this.tableForm = {
             orderField: '',
             orderMode: 'ASC',
             level: ''
@@ -382,60 +407,76 @@
       })
     },
     //鑾峰彇鏌ヨ妯℃澘瀹氫箟涓嬫媺
-    getTemp(btmName,linkFlag) {
+    getTemp(btmName) {
       if (btmName) {
-        queryTemplateListByAttr({btmName: btmName}).then(res => {
+        queryTemplateListByAttr({btmName: btmName, linkFlag: false}).then(res => {
           const data = res.data.data.map(item => {
-            item.label = item.name + '-' + (item.linkTypeName || item.btmName);
+            item.label = item.name + '-' + item.btmName;
             item.value = item.name;
             return item;
           });
-            this.businessQueryDefineDic=data;
-            data.length>0 && (this.businessQueryDefineForm= data[0].value);
-
+          this.businessQueryDefineDic = data;
+          data.length > 0 && (this.businessQueryDefineForm = data[0].value);
         })
       }
     },
     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)});
+      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) {
+    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();
+          getCriteriaBtm(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 === "REVISIONOID" || attr.attrName === "BTMNAME" || attr.attrName === "NAMEOID"
+                );
+
+                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