From 4cf67af090dbed353f1ddf3bd3ba5e0f854c0020 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期四, 28 十一月 2024 12:09:05 +0800
Subject: [PATCH] 业务类型、状态池添加图标,数据授权页面

---
 Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue |  416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 399 insertions(+), 17 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue b/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue
index b2eb1c6..d12fd89 100644
--- a/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue
+++ b/Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue
@@ -1,27 +1,110 @@
 <template>
-  <div style="padding: 10px 0">
-    <el-tabs tab-position="left" :style="'height: '+height+';'">
-      <el-tab-pane label="涓讳綋">
-        <fieldset>
-          <legend>&nbsp;涓婚&nbsp;</legend>
-          <div>
-            <div v-if="!readOnly">
-              <el-button plain size="mini" type="primary" @click="userHandler">閫変腑鐢ㄦ埛</el-button>
-              <el-button plain size="mini" type="primary" @click="roleHandler">閫夋嫨瑙掕壊</el-button>
-              <el-button plain size="mini" type="primary" @click="deptHandler">閫夋嫨鐢ㄦ埛缁�</el-button>
+  <div>
+    <el-tabs tab-position="left" :style="'height: '+height+'px;'">
+      <el-tab-pane>
+        <span slot="label"><i class="el-icon-s-custom"></i> 涓讳綋</span>
+        <div v-if="!readOnly" style="margin-bottom: 10px;">
+          <el-button plain size="mini" type="primary" @click="userHandler">閫変腑鐢ㄦ埛</el-button>
+          <el-button plain size="mini" type="primary" @click="roleHandler">閫夋嫨瑙掕壊</el-button>
+          <el-button plain size="mini" type="primary" @click="deptHandler">閫夋嫨鐢ㄦ埛缁�</el-button>
+        </div>
+        <div v-if="!readOnly" style="display: flex;justify-content: space-between;align-items: center;">
+          <fieldset style="width: 48%">
+            <legend>&nbsp;涓讳綋 </legend>
+            <div>
+              <avue-crud  ref="mainCrud" :data="mainData" :option="mainOption">
+                <template #type="{ row }">
+                  <el-tag v-if="row.type=='鐢ㄦ埛'" :key="row.oid" effect="dark">{{ row.type }}</el-tag>
+                  <el-tag v-else-if="row.type=='瑙掕壊'" type="info" :key="row.oid" effect="dark">{{ row.type }}</el-tag>
+                  <el-tag v-else="row.type=='閮ㄩ棬'" type="warning" :key="row.oid" effect="dark">{{ row.type }}</el-tag>
+                </template>
+              </avue-crud>
             </div>
+          </fieldset>
+          <div style="text-align: center;">
+            <el-button icon="el-icon-arrow-right" size="mini" @click="rightHandler" style="margin-bottom: 50px;"></el-button><br/>
+            <el-button icon="el-icon-arrow-left" size="mini" @click="leftHandler"></el-button>
           </div>
-        </fieldset>
+          <fieldset style="width: 42%">
+            <legend>&nbsp;鎺堟潈涓讳綋 </legend>
+            <div>
+              <avue-crud  ref="authCrud" :data="authData" :option="authOption" :table-loading="tableLoading">
+              </avue-crud>
+            </div>
+          </fieldset>
+        </div>
+        <div v-else>
+          <fieldset style="width: 99.5%">
+            <legend>&nbsp;鎺堟潈涓讳綋 </legend>
+            <div>
+              <avue-crud  ref="authCrud" :data="authData" :option="authOption" :table-loading="tableLoading">
+              </avue-crud>
+            </div>
+          </fieldset>
+        </div>
       </el-tab-pane>
-      <el-tab-pane label="瀹綋">瀹綋</el-tab-pane>
-      <el-tab-pane label="鎿嶄綔">鎿嶄綔</el-tab-pane>
+      <el-tab-pane>
+        <span slot="label"><i class="el-icon-eleme"></i> 瀹綋</span>
+        <div>
+          <basic-form key="queryForm" style="margin-bottom: 0"
+                      ref="form"
+                      :span="8"
+                      :formItems="formItems"
+                      :formData="form"
+                      @getFormData="getFormData">
+          </basic-form>
+          <el-container v-if="!readOnly">
+            <el-aside style="width:350px">
+              <fieldset>
+                <legend>&nbsp;鍊欓�夋潯浠�&nbsp;</legend>
+                <div>
+                  <avue-radio v-model="radioForm"  :dic="radioDic" style="margin: 0 10px 5px"></avue-radio>
+                  <div v-show="radioForm==1">
+                    鏌ヨ妯℃澘瀹氫箟
+                    <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: '+(height-155)+'px;'" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
+                    </avue-tree>
+                  </div>
+                  <div v-show="radioForm==0">
+                    鏌ヨ妯℃澘瀹氫箟
+                    <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: '+(height-155)+'px;'" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
+                    </avue-tree>
+                  </div>
+                </div>
+              </fieldset>
+            </el-aside>
+            <el-main>
+              <fieldset style="margin: 0 10px">
+                <legend>&nbsp;鏌ヨ鏉′欢&nbsp;</legend>
+                <form-query-dialog ref="formQuery"
+                                   :style="'height: '+(height-100)+'px;'"
+                                   :queryCondition="queryCondition"
+                                   :queryTree="queryTree"
+                                   :levelFlag.sync="form.levelFlag"
+                                   @queryHandler="queryHandler"
+                ></form-query-dialog>
+              </fieldset>
+            </el-main>
+          </el-container>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane>
+        <span slot="label"><i class="el-icon-s-tools"></i> 鎿嶄綔</span>
+      </el-tab-pane>
     </el-tabs>
   </div>
 </template>
 
 <script>
+import basicOption from "@/util/basic-option";
+import formQueryDialog from "@/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue";
+import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
+import {getCriteria} from "@/api/queryTemplate/linkTypeQuery";
+
 export default {
   name: "dataView",
+  components:{formQueryDialog},
   props: {
     //閫変腑鐨勪笟鍔$被鍨嬭妭鐐�
     btmNode: {
@@ -38,26 +121,325 @@
       default: false
     },
     height: {
-      type: String,
-      default: '400px'
+      type: Number,
+      default: 400
     },
   },
   data() {
     return {
+      mainData:[],
+      tableLoading: false,
+      mainOption: {
+        ...basicOption,
+        header:false,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        selection: false,
+        index:false,
+        menu:false,
+        height: this.height-80,
+        tip:false,
+        size:'mini',
+        column: [{
+          label: ' 鍒嗙被',
+          prop: 'type',
+          sortable: true,
+          width:110
+        },{
+          label: '缂栫爜',
+          prop: 'id'
+        },{
+            label: '鍚嶇О',
+            prop: 'name'
+          }]
+      },
+      authData:[],
+      authOption:{
+        ...basicOption,
+        header:false,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        selection: false,
+        index:false,
+        menu:false,
+        height: this.readOnly?this.height-50:this.height-80,
+        tip:false,
+        showHeader:false,
+        size:'mini',
+        column: [{
+          label: '鍚嶇О',
+          prop: 'name'
+        }]
+      },
+      formItems:[{
+        label: '瑙勫垯鍚嶇О',
+        prop: 'qtName',
+        type: 'input',
+        span:8,
+        labelWidth: 100,
+        disabled:this.readOnly,
+        rules: [{
+          required: true,
+          message: "璇疯緭鍏ヨ鍒欏悕绉�",
+          trigger: "blur"
+        }]
+      }, {
+        label: '瑙勫垯绫诲瀷',
+        prop: 'version',
+        type: 'select',
+        span:6,
+        labelWidth:110,
+        disabled:this.readOnly,
+        dicData: [{
+          label: '鍏ㄩ儴鍏佽',
+          value: 1
+        }, {
+          label: '鍏佽鏉冮檺',
+          value: 2
+        }, {
+          label: '鍏ㄩ儴鎷掔粷',
+          value: 3
+        }, {
+          label: '鎷掔粷鏉冮檺',
+          value: 7
+        }],
+        value: 1
+      }],
+      form:{
+        btmName:'',
+        qtName: '',
+        levelFlag:0,//0:鏅�氭煡璇㈡ā鏉�; 1:楂樼骇鏌ヨ妯℃澘"
+        queryTemplate:{}
+      },
+      radioForm:0,
+      radioDic:[{
+        label:'涓氬姟绫诲瀷 ',
+        value:0
+      },{
+        label:'閾炬帴绫诲瀷',
+        value:1
+      }],
+      treeOption: {
+        defaultExpandAll: true,
+        menu: false,
+        addBtn: false,
+        filter: false,
+        draggable: true,
+        allowDrop: () => {
+          return false;
+        },
+        allowDrag: (dropNode) => {
+          if (dropNode.data.attrs && dropNode.data.attrs.length > 0) {
+            return false;
+          } else {
+            return true;
+          }
+        },
+        props: {
+          label: 'name',
+          value: 'name',
+          children: 'attrs'
+        }
+      },
+      linkQueryDefineForm:'',//閾炬帴绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑鍊�
+      linkQueryDefineDic:[],//閾炬帴绫诲瀷鏌ヨ妯℃澘瀹氫箟涓嬫媺鏁版嵁
+      //閾炬帴绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑椤瑰睘鎬�
+      linkTreeData: [],
+      businessQueryDefineForm:'',//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑鍊�
+      businessQueryDefineDic:[],//涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟涓嬫媺鏁版嵁
+      //涓氬姟绫诲瀷鏌ヨ妯℃澘瀹氫箟閫変腑椤瑰睘鎬�
+      businessTreeData: [],
+      //楂樼骇鏌ヨ鏉′欢
+      queryTree:{},
+      //鏅�氭煡璇㈡潯浠�
+      queryCondition:[],
     }
   },
   created() {
+
+  },
+  watch: {
+    data:{
+      handler(val) {
+        if(val && val.oid){
+          this.getTemp(true);
+          this.getTemp(false)
+        }
+      },
+      immediate: true,
+      deep: true
+    }
   },
   methods: {
+    //閫変腑鐢ㄦ埛
+    userHandler(){
 
+    },
+    //閫夋嫨瑙掕壊
+    roleHandler(){
+
+    },
+    //閫夋嫨鐢ㄦ埛缁�
+    deptHandler(){
+
+    },
+    initFormData() {
+      let formData = {
+        btmName: this.form.btmName,
+        qtName: this.form.qtName,
+        levelFlag: this.form.levelFlag,
+        queryTemplate: {
+          btmType: this.form.btmType,
+          clauseList: ['*'],
+          direction: this.form.direction,
+          id: this.form.qtName,
+          level: this.form.level,
+          linkType: this.form.btmName,
+          orderInfoList: this.orderInfoList,
+          queryISLeaf: this.form.queryISLeaf,
+          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) {
+            nodeChild.forEach((item, index) => {
+              if (item.label != '骞朵笖' && item.label != '鎴栬��') {
+                children.push(item.label);
+              } else {
+                children.push({
+                  connector: item.label,
+                  child: initValue(item.children)
+                })
+              }
+            })
+          }
+          return children;
+        }
+
+        let treeData = {
+          connector: this.$refs.formQuery.treeData[0].label
+        };
+        if (this.$refs.formQuery.treeData[0].children) {
+          treeData.child = initValue(this.$refs.formQuery.treeData[0].children);
+        }
+        formData.tree = treeData
+      }
+
+      formData.condition = this.$refs.formQuery.conditionList;
+
+      return formData;
+    },
+    getFormData(form) {
+      this.form = form;
+    },
+    //鑾峰彇鏌ヨ妯℃澘瀹氫箟涓嬫媺
+    getTemp(linkFlag) {
+      if (this.btmNode.attributes) {
+        queryTemplateListByAttr({btmName: this.btmNode.attributes.name, 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;
+            return item;
+          });
+          if(linkFlag){
+            this.linkQueryDefineDic=data
+            data.length>0 && (this.linkQueryDefineForm=data[0].value);
+          }else {
+            this.businessQueryDefineDic=data;
+            data.length>0 && (this.businessQueryDefineForm= data[0].value);
+          }
+        })
+      }
+    },
+    //閾炬帴绫诲瀷鏌ヨ妯℃澘鍒囨崲
+    linkQueryDefineChange(data) {
+      if (data.value) {
+        this.linkTreeData = [{
+          name: data.value,
+          attrs: data.item.attrs
+        }]
+      }
+    },
+    //涓氬姟绫诲瀷鏌ヨ妯℃澘鍒囨崲
+    businessQueryDefineChange(data) {
+      if (data.value) {
+        this.businessTreeData = [{
+          name: data.value,
+          attrs: data.item.attrs
+        }]
+      }
+    },
+    // 寮�濮嬫嫋鎷芥爲鑺傜偣浜嬩欢
+    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>
+<style lang="scss" scoped>
+::v-deep {
+  .el-radio {
+    margin-right: 30px;
+  }
+}
+div{
+  font-size: 14px;
+}
 fieldset {
   padding: 10px 6px;
-  margin: 10px 0 0 0;
+  margin: 0;
   border: 1px solid #EBEEF5;
 }
 </style>

--
Gitblit v1.9.3