From e358d69fc18870584dd2d9f531910b7838ea27d9 Mon Sep 17 00:00:00 2001
From: wangting <wangting@vci-tech.com>
Date: 星期四, 02 一月 2025 09:58:53 +0800
Subject: [PATCH] 调整行点击后的回调

---
 Source/plt-web/plt-web-ui/src/views/authority/ui/dataAuthorization/dataView.vue |  770 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 751 insertions(+), 19 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 3ee08e4..0b7cd81 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,168 @@
 <template>
-  <div style="padding: 10px 0">
-    <el-tabs tab-position="left" style="height: 100%;">
-      <el-tab-pane label="涓讳綋">
-        <fieldset>
-          <legend>&nbsp;涓婚&nbsp;</legend>
+  <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"
+                          @current-row-change="mainCurrentRowHandler"
+              >
+                <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" type="primary" size="small" @click="rightHandler" style="margin-bottom: 50px;"></el-button><br/>
+            <el-button icon="el-icon-arrow-left" type="primary" size="small" @click="leftHandler"></el-button>
+          </div>
+          <fieldset style="width: 42%">
+            <legend>&nbsp;鎺堟潈涓讳綋 </legend>
+            <div>
+              <avue-crud  ref="authCrud" :data="authData" :option="authOption" :table-loading="tableLoading"
+                @current-row-change="authCurrentRowHandler">
+              </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>
+        <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 && (form.ruleType=='1' || form.ruleType=='3')">
+            <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>
+        <fieldset :style="'width:99.5%;height: '+(height-10)+'px;margin-bottom:10px;'">
+          <legend>&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-checkbox :disabled="readOnly" key="actionCheck" :all="!readOnly" v-model="actionForm" placeholder="璇烽�夋嫨鍐呭" :dic="actionDic"></avue-checkbox>
+          </div>
+        </fieldset>
+        <fieldset v-if="0" :style="'width:99.5%;height: '+(height/2-30)+'px;'">
+          <legend>&nbsp;鍏崇郴鍜岃穬杩� </legend>
+          <div>
+            <avue-checkbox :disabled="readOnly" key="linkActionCheck" :all="!readOnly" v-model="linkactionForm" placeholder="璇烽�夋嫨鍐呭" :dic="linkactionDic"></avue-checkbox>
           </div>
         </fieldset>
       </el-tab-pane>
-      <el-tab-pane label="瀹綋">瀹綋</el-tab-pane>
-      <el-tab-pane label="鎿嶄綔">鎿嶄綔</el-tab-pane>
     </el-tabs>
+    <!-- 閫夋嫨鐢ㄦ埛绌挎妗�   -->
+    <transfer ref="usertransfer" :left-role-data="leftUserData" :right-role-data="rightUserData"
+              :transferTitle="['鏈�夋嫨鐢ㄦ埛','宸查�夋嫨鐢ㄦ埛']" title="涓讳綋娣诲姞鐢ㄦ埛"
+              @transferSend="userSendHandler">
+    </transfer>
+    <!-- 閫夋嫨鐢ㄦ埛绌挎妗�   -->
+    <transfer ref="roletransfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData"
+              :transferTitle="['鐜版湁瑙掕壊','鎷ユ湁瑙掕壊']" title="鍒嗛厤瑙掕壊"
+              @transferSend="roleSendHandler">
+    </transfer>
+    <!-- 閫夋嫨閮ㄩ棬瀵硅瘽妗�    -->
+    <el-dialog
+      v-dialogDrag
+      v-loading="departLoading"
+      :visible.sync="departVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="閫夋嫨閮ㄩ棬"
+      width="50%"
+    >
+      <avue-crud
+        ref="departCrud"
+        :data="departData"
+        :option="departOption"
+        @selection-change="selectDepartChange"
+        @row-click="rowClickDeptHandler"
+      >
+      </avue-crud>
+      <div slot="footer" class="dialog-footer">
+        <el-button size="small" type="primary" @click="saveDepartHandler">纭� 瀹�</el-button>
+        <el-button size="small" @click="departVisible = false">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
   </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";
+import {listUserByUserType, gridRoles, departmentQueryController} from "@/api/system/user/api";
+import func from "@/util/func";
+
 export default {
   name: "dataView",
+  components:{formQueryDialog},
   props: {
-    selectData: {
+    //閫変腑鐨勪笟鍔$被鍨嬭妭鐐�
+    btmNode: {
+      type: Object,
+      default: {}
+    },
+    //閫変腑琛屾暟鎹�
+    selectRow: {
       type: Object,
       default: {}
     },
@@ -29,29 +170,620 @@
       type: Boolean,
       default: false
     },
+    height: {
+      type: Number,
+      default: 400
+    },
+    actionMap:{
+      type: Object,
+      default: {}
+    }
   },
   data() {
     return {
-      data:{
-
-      }
+      leftUserData: [],  // 閫夋嫨鎴愬憳绌挎妗嗗乏渚у垵濮嬫暟鎹�
+      rightUserData: [], // 閫夋嫨鎴愬憳绌挎妗嗗彸渚у垵濮嬫暟鎹�
+      leftRoleData: [],  // 閫夋嫨瑙掕壊绌挎妗嗗乏渚у垵濮嬫暟鎹�
+      rightRoleData: [], // 閫夋嫨瑙掕壊绌挎妗嗗彸渚у垵濮嬫暟鎹�
+      departCurrenRows: [],
+      departOption: {
+        ...basicOption,
+        addBtn: false,
+        rowKey: 'oid',
+        rowParentKey: 'parentId',
+        selection: true,
+        highlightCurrentRow: true,
+        stripe: false,
+        menu: false,
+        refreshBtn: false,
+        gridBtn: false,
+        header: false,
+        column: [
+          {
+            label: '鍚嶇О',
+            prop: 'name',
+            align: 'left'
+          },
+          {
+            label: '缂栧彿',
+            prop: 'id',
+          },
+          {
+            label: '鎻忚堪',
+            prop: 'description',
+          },
+        ]
+      },
+      departData: [],//閫夋嫨閮ㄩ棬鏁版嵁
+      departLoading: false,
+      departVisible: false,
+      mainData:[],
+      mainCurrentRow:{},
+      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',
+        highlightCurrentRow:true,
+        column: [{
+          label: ' 鍒嗙被',
+          prop: 'type',
+          sortable: true,
+          width:90
+        },{
+          label: '缂栫爜',
+          prop: 'id'
+        },{
+            label: '鍚嶇О',
+            prop: 'name'
+          }]
+      },
+      authData:[],
+      authCurrentRow:{},
+      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',
+        highlightCurrentRow:true,
+        align:'left',
+        column: [{
+          label: '鍚嶇О',
+          prop: 'name'
+        }]
+      },
+      formItems:[{
+        label: '瑙勫垯鍚嶇О',
+        prop: 'ruleName',
+        type: 'input',
+        span:8,
+        labelWidth: 100,
+        disabled:this.readOnly,
+        rules: [{
+          required: true,
+          message: "璇疯緭鍏ヨ鍒欏悕绉�",
+          trigger: "blur"
+        }]
+      }, {
+        label: '瑙勫垯绫诲瀷',
+        prop: 'ruleType',
+        type: 'select',
+        span:6,
+        labelWidth:110,
+        disabled:this.readOnly,
+        dicData: [{
+          label: '鍏ㄩ儴鍏佽',
+          value: '0'
+        }, {
+          label: '鍏佽鏉冮檺',
+          value: '1',
+          disabled:true
+        }, {
+          label: '鍏ㄩ儴鎷掔粷',
+          value: '2'
+        }, {
+          label: '鎷掔粷鏉冮檺',
+          value: '3',
+          disabled:true
+        }],
+        value: '0',
+        change:function (column,value){
+          if(value=='1' || value=='3'){
+            this.form.btmName=this.btmNode.attributes.name;
+            this.form.levelFlag=0;
+            this.form.queryTemplate={};
+          }
+        }
+      }],
+      form:{
+        btmName:'',
+        qtName: '',
+        levelFlag:0,//0:鏅�氭煡璇㈡ā鏉�; 1:楂樼骇鏌ヨ妯℃澘"
+        queryTemplate:{},//瀹綋涓煡璇㈡潯浠�
+        "ID": "",//鏁版嵁鐨処D
+        "roles": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝瑙掕壊鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+        "userGroups": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝閮ㄩ棬鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+        "users": "",//鏄剧ず鍒版巿鏉冧富浣撶晫闈紝鐢ㄦ埛鍚嶇О锛屽涓娇鐢ㄩ�楀彿鍒嗛殧
+        "expToSQL": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+        "identifier": "",//涓氬姟绫诲瀷锛坱erminology锛�+涓嬪垝绾匡紙_锛�+鎿嶄綔鍖虹殑涓�鑸搷浣滅殑鎸夐挳鑻辨枃鍚嶇О锛坬uery锛�,澶氫釜鎸夐挳鐨勮瘽鏄鏉℃暟鎹笉鏄娇鐢ㄩ�楀彿鍒嗛殧
+        "isGrand": 49, //姝ゅ涓烘搷浣滃尯鐨勪竴鑸搷浣滅殑鎸夐挳鏄惁涓洪�夋嫨鎯呭喌锛屾湭閫変腑鍊间负48锛岄�変腑涓�49锛岃繖閲屾槸灏�0鍜�1杞负浜哹yte鍊硷紝鎵�浠ヤ负48锛�49
+        "lexpToSQL": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+        "lruleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+        "lseniorRuleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+        "ruleName": "",//瑙勫垯鍚嶇О
+        "ruleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+        "ruleType": "",//0鍏ㄩ儴鍏佽锛�1鍏佽鏉冮檺锛�2鍏ㄩ儴鎷掔粷锛�3鎷掔粷鏉冮檺锛岀敱浜庢殏鏃跺彧鍋氬叏閮ㄥ厑璁镐笌鍏ㄩ儴鎷掔粷锛屾墍浠ユ殏鏃跺彲浠ヤ笉鐢ㄧ
+        "seniorRuleText": "",//姝ゅ涓哄厑璁告潈闄愭垨鎷掔粷鏉冮檺闇�濉厖鐨勬暟鎹紝鏆傛椂涓嶅仛澶勭悊锛屼负绌哄瓧绗︿覆鍗冲彲
+      },
+      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:[],
+      actionForm:[],//涓�鑸搷浣滈�変腑鍊�
+      actionDic:[],//涓�鑸搷浣滈�変腑椤�
+      linkactionForm:[],//鍏崇郴鍜岃穬杩侀�変腑鍊�
+      linkactionDic:[]//鍏崇郴鍜岃穬杩侀�変腑椤�
     }
   },
   created() {
-    this.getData();
+    listUserByUserType().then(res => {
+      // 缁勮濂界┛姊鍙敤鏁版嵁
+      this.leftUserData = res.data.data.map(item => {
+        return {
+          ...item,
+          name: item.name + `(${item.id})`,
+          oid: item.oid
+        }
+      })
+      this.rightUserData = [];
+    })
+    gridRoles(1,-1).then(res => {
+      // 缁勮濂界┛姊鍙敤鏁版嵁
+      this.leftRoleData = res.data.data.map(item => {
+        return {
+          ...item,
+          name: item.name ,
+          oid: item.oid
+        }
+      })
+      this.rightRoleData = [];
+    })
+    departmentQueryController({queryAllLevel: true}).then(res => {
+      const data = res.data.treeData;
+      this.departData = this.departDtaFormAtter(data);
+    })
+  },
+  watch: {
+    actionMap:{
+      handler(val) {
+        this.actionDic=[];
+        if(val){
+          for(var i in val){
+            this.actionDic.push({
+              label:i,
+              value:val[i]
+            })
+          }
+        };
+      },
+      immediate: true,
+      deep: true
+    },
+    selectRow:{
+      handler(val,oldval) {
+        this.authData=[];
+        if(val && val.rules &&val.rules.length>0) {
+          this.form = JSON.parse(JSON.stringify(val.rules[0]));
+          //this.getTemp(true);
+          //this.getTemp(false)
+          //鏋勫缓鎺堟潈涓讳綋鏁版嵁
+          if (val.rules[0].users) {
+            val.rules[0].users.split(',').forEach((item, i) => {
+              if (item) {
+                this.authData.push({
+                  name: '{' + item + ', ' + item + ', user}'
+                })
+              }
+            })
+          }
+          if (val.rules[0].roles) {
+            val.rules[0].roles.split(',').forEach((item, i) => {
+              if (item) {
+                this.authData.push({
+                  name: '{' + item + ', ' + item + ', role}'
+                })
+              }
+            })
+          }
+          if (val.rules[0].userGroups) {
+            val.rules[0].userGroups.split(',').forEach((item, i) => {
+              if (item) {
+                this.authData.push({
+                  name: '{' + item + ', ' + item + ', userGroup}'
+                })
+              }
+            })
+          }
+          //瑙f瀽鎿嶄綔鎸夐挳閫変腑鍊�
+          if (this.actionDic.length > 0) {
+            let actionDicStr = JSON.stringify(this.actionDic);
+            val.rules.forEach(item => {
+              if (item.isGrand == 49) {
+                let identifier = item.identifier.replace(this.btmNode.attributes.name + '_', '')
+                if (actionDicStr.indexOf('"value":"'+identifier+'"}') != -1) {
+                  this.actionForm.push(identifier)
+                } else {
+                  this.linkactionForm.push(identifier);
+                }
+              }
+            })
+          }
+        }else {
+          this.form={
+            ruleName:'',
+            ruleType:'0'
+          };
+          this.actionForm=[];
+          this.linkactionForm=[];
+        }
+      },
+      immediate: true,
+      deep: true
+    },
   },
   methods: {
-    getData(){
+    //閫変腑鐢ㄦ埛
+    userHandler(){
+      this.$refs.usertransfer.visible = true;
+    },
 
-    }
+    // 閫変腑鐢ㄦ埛绌挎妗嗗洖濉�
+    userSendHandler(row) {
+      this.mainData=this.mainData.filter(item=>{
+        return item.type!='鐢ㄦ埛'
+      })
+      row.forEach((item,index)=>{
+        var addItem=this.leftUserData.find(leftitem=>leftitem.oid==item);
+        this.mainData.push({
+          type:'鐢ㄦ埛',
+          id:addItem.id,
+          name:addItem.name.split('(')[0],
+          oid:addItem.oid
+        })
+      })
+      this.rightUserData=row;
+      this.$refs.usertransfer.visible = false;
+    },
+    //閫夋嫨瑙掕壊
+    roleHandler(){
+      this.$refs.roletransfer.visible = true;
+    },
+    // 閫夋嫨瑙掕壊绌挎妗嗗洖濉�
+    roleSendHandler(row) {
+      this.mainData=this.mainData.filter(item=>{
+        return item.type!='瑙掕壊'
+      })
+      row.forEach((item,index)=>{
+        var addItem=this.leftRoleData.find(leftitem=>leftitem.oid==item);
+        this.mainData.push({
+          type:'瑙掕壊',
+          id:addItem.name,
+          name:addItem.name,
+          oid:addItem.oid
+        })
+      })
+      this.rightRoleData=row;
+      this.$refs.roletransfer.visible = false;
+    },
+    //閫夋嫨鐢ㄦ埛缁�
+    deptHandler(){
+      this.departVisible=true;
+    },
+    // 閫夋嫨閮ㄩ棬鏁版嵁杞崲
+    departDtaFormAtter(items) {
+      return items.map(item => {
+        // 杞崲褰撳墠鑺傜偣鐨勫睘鎬�
+        const formList = {
+          oid: item.oid,
+          id: item.attributes.id,
+          name: item.attributes.name,
+          description: item.attributes.description,
+          parentId: item.parentId,
+          parentName: item.parentName,
+          parentBtmName: item.parentBtmName,
+          // 濡傛灉children瀛樺湪涓斾笉涓虹┖锛屽垯閫掑綊杞崲children
+          children: item.children && item.children.length > 0 ? this.departDtaFormAtter(item.children) : undefined
+        };
+        return formList;
+      });
+    },
+    // 閫夋嫨閮ㄩ棬
+    selectDepartChange(row) {
+      this.departCurrenRows = row;
+    },
+    // 閫夋嫨閮ㄩ棬 琛屽崟閫�
+    rowClickDeptHandler(row) {
+      func.rowClickHandler(
+        row,
+        this.$refs.departCrud,
+        this.lastIndex,
+        (newIndex) => {
+          this.lastIndex = newIndex;
+        },
+        () => {
+          this.departCurrenRows = [row];
+        }
+      );
+    },
+    // 閫夋嫨閮ㄩ棬 纭畾
+    saveDepartHandler() {
+      if (this.departCurrenRows.length==0) {
+        this.$message.warning('璇烽�夋嫨閮ㄩ棬鑺傜偣锛�')
+        return;
+      }
+      this.mainData=this.mainData.filter(item=>{
+        return item.type!='鐢ㄦ埛缁�'
+      })
+      this.departCurrenRows.forEach((addItem,index)=>{
+        this.mainData.push({
+          type:'鐢ㄦ埛缁�',
+          id:addItem.id,
+          name:addItem.name,
+          oid:addItem.oid
+        })
+      })
+      this.departVisible = false;
+    },
+    //涓讳綋鍒楄〃琛岀偣鍑�
+    mainCurrentRowHandler(row){
+      this.mainCurrentRow=row;
+    },
+    //鎺堟潈涓讳綋鍒楄〃琛岀偣鍑�
+    authCurrentRowHandler(row){
+      this.authCurrentRow=row;
+    },
+    rightHandler() {
+      if(func.isEmptyObject(this.mainCurrentRow)){
+        this.$message.warning('璇烽�夋嫨鐢ㄦ埛銆佺敤鎴风粍銆佽鑹蹭俊鎭紒')
+        return;
+      }
+      let name='{' + this.mainCurrentRow.id + ', ' + this.mainCurrentRow.name + ', ';
+      if (this.mainCurrentRow.type == '鐢ㄦ埛') {
+        name+='user}';
+      } else if (this.mainCurrentRow.type == '瑙掕壊') {
+        name+='role}';
+      } else if (this.mainCurrentRow.type == '鐢ㄦ埛缁�') {
+        name+='userGroup}';
+      }
+      let canAdd = !this.authData.some(item => {
+        return item.name == name
+      })
+      if(canAdd) {
+        this.authData.push({
+          name: name
+        })
+        this.$refs.mainCrud.setCurrentRow();
+        this.mainCurrentRow={}
+      }else {
+        this.$message.warning('鎺堟潈涓讳綋淇℃伅閫夋嫨閲嶅锛�')
+      }
+    },
+    leftHandler() {
+      this.authData = this.authData.filter(item => {
+        return item.name != this.authCurrentRow.name
+      })
+    },
+    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 ,.el-checkbox{
+    margin-right: 30px;
+    margin-bottom: 10px;
+  }
+}
+div{
+  font-size: 14px;
+}
 fieldset {
   padding: 10px 6px;
-  margin: 10px 0 0 0;
+  margin: 0;
   border: 1px solid #EBEEF5;
+  overflow: auto;
 }
 </style>

--
Gitblit v1.9.3