From 8d7721c95cc004e3af1493b6289ace05658bb967 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 16 一月 2024 21:59:20 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue |   86 ++++++++++++++++++++++++++++++++-----------
 1 files changed, 64 insertions(+), 22 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
index 2f17451..3baa5c7 100644
--- a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
+++ b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
@@ -8,6 +8,7 @@
     title="鍒嗙被鎺堟潈"
     top="-45px" @close="closeDialog">
     <el-table
+      :key="itemKey"
       ref="dataTable"
       v-loading="isLoading"
       :data="classifyAuthData"
@@ -40,7 +41,7 @@
             v-if="item.type === 'select'"
             slot="prepend"
             v-model="row[item.prop]"
-            @change="roleChange"
+            @change="selectChange(row.roleData,row)"
           >
             <el-option
               v-for="optionItem in roleList"
@@ -59,17 +60,18 @@
           </el-input>
           <el-checkbox
             v-if="item.type === 'checkbox'"
-            v-model="row[item.prop]">
+            v-model="row[item.prop]"
+            :disabled="row.allDisabled ? true :typeof row[item.prop] == 'undefined' || typeof row[item.prop] == null">
           </el-checkbox>
         </template>
       </el-table-column>
     </el-table>
     <div slot="footer" class="dialog-footer">
-      <el-button type="info" plain @click="selectAllButton">鎸夐挳鍏ㄩ��</el-button>
-      <el-button class="el-icon-plus" type="success" plain @click="addClassifyAuth"></el-button>
-      <el-button class="el-icon-minus" type="warning" plain @click="subClassifyAuth"></el-button>
-      <el-button type="primary" plain @click="submit">鎻� 浜�</el-button>
-      <el-button type="danger" plain @click="isShowDialog = false">鍏� 闂�</el-button>
+      <el-button plain type="info" @click="selectAllButton">鎸夐挳鍏ㄩ��</el-button>
+      <el-button class="el-icon-plus" plain type="success" @click="addClassifyAuth"></el-button>
+      <el-button class="el-icon-minus" plain type="warning" @click="subClassifyAuth"></el-button>
+      <el-button plain type="primary" @click="submit">鎻� 浜�</el-button>
+      <el-button plain type="danger" @click="isShowDialog = false">鍏� 闂�</el-button>
     </div>
   </el-dialog>
 </template>
@@ -77,7 +79,7 @@
 <script>
 import {getButtonByParentCode} from "@/api/system/menu"
 import {getPage} from "@/api/system/role"
-import {saveOrUpdate, getClassifyAuthList} from "@/api/system/classifyAuth"
+import {saveOrUpdate, getClassifyAuthList, getButtonsByRoleId} from "@/api/system/classifyAuth"
 import {v4 as uuidv4} from 'uuid';
 
 export default {
@@ -108,6 +110,9 @@
       roleList: [],
       //褰撳墠閫変腑鐨勮〃鏍艰
       selectList: [],
+      itemKey: '',
+      viewStatus: false,
+      addIndex: Number,
     };
   },
   watch: {
@@ -139,12 +144,13 @@
               let columnItem = {
                 label: item.name,
                 prop: item.id,
+                code: item.code,
                 type: "checkbox",
                 width: 180,
               };
               tempData.push(columnItem);
             })
-            this.classifyAuthHeader = tempData
+            this.classifyAuthHeader = tempData;
             resolve();
           }).catch(err => {
             reject(err)
@@ -154,25 +160,29 @@
             this.roleList = res.data.data.records;
           });
           // 鑾峰彇璇ュ垎绫讳笅宸叉巿鏉冪殑鍒嗙被鎺堟潈淇℃伅
-          getClassifyAuthList({classifyId: this.classifyData.oid}).then(res => {
+          getClassifyAuthList({classifyId: this.classifyData.oid, authType: "classify_auth"}).then(res => {
             //console.log(res.data.data);
             let authDatas = res.data.data;
+            console.log('authDatas', authDatas)
             if (authDatas.length > 0) {
-              authDatas.forEach(authData => {
+              authDatas.forEach((authData,index) => {
                 let item = {
                   oid: authData.oid,
                   roleData: authData.roleId,
                   classifyItem: this.classifyData.label,
+                  index:index,
                   uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d
                 }
                 //灏嗘寜閽缃繘鍘�
                 authData.buttonIdList.forEach(data => {
                   Vue.set(item, data, true);
                 });
-                //console.log(item)
                 this.classifyAuthData.push(item);
+                this.addIndex = this.classifyAuthData.length -1 ;
+                // console.log('classifyAuthData', this.classifyAuthData)
               })
             }
+            this.roleHandlerMethods('', 'create', 0)
           });
         });
       }
@@ -184,25 +194,57 @@
   created() {
   },
   methods: {
+    roleHandlerMethods(id, type, index) {
+      if (this.classifyAuthData.length > 0) {
+        let roleButtonId = type === 'select' ? id : this.classifyAuthData[0].roleData;
+        getButtonsByRoleId({roleId: roleButtonId, code: 'classifyTree'}).then(res => {
+          // 鎵惧埌this.classifyAuthButton涓病鏈夊搴旂殑灞炴��
+          const filteredItems = this.classifyAuthButton.filter(item => {
+            return !res.data.data.find(x => x.id === item.id);
+          });
+
+          this.classifyAuthHeader.forEach((item) => {
+            if (filteredItems.some(x => x.id === item.prop)) {
+              this.$nextTick(() => {
+
+                if(this.classifyAuthData[index] !== undefined && this.classifyAuthData[index] !== null){
+                  Object.keys(this.classifyAuthData[index]).forEach((key) => {
+                    if (item.prop === key) {
+                      this.classifyAuthData[index] = Object.assign({}, this.classifyAuthData[index], { [key]: undefined });
+                      if (item.code === "classify_view") {
+                        this.$set(this.classifyAuthData[index],'allDisabled',true)
+                      }
+                    }
+                  });
+                }
+                // console.log('classifyAuthData', this.classifyAuthData)
+                // console.log('item', item.prop)
+                this.itemKey = uuidv4();
+              })
+            }
+          });
+        })
+      }
+    },
+    selectChange(row,index) {
+      this.roleHandlerMethods(row, 'select',index.index);
+    },
     // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
       this.$emit('update:visible', false);
       this.classifyAuthData = [];
     },
-    // 瑙掕壊鏀瑰彉鏃�
-    roleChange(roleId){
-      console.log(roleId);
-      
-    },
     // 澧炲姞琛�
     addClassifyAuth() {
-      if(this.roleList.length<=0){
+      if (this.roleList.length <= 0) {
         this.$message.warning("褰撳墠绉熸埛涓嶅瓨鍦ㄨ鑹蹭俊鎭紒");
         return;
       }
+      this.addIndex++;
       let item = {
         roleData: this.roleList[0].id,
         classifyItem: this.classifyData.label,
+        index:this.addIndex,
         uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d
       }
       //灏嗘寜閽缃繘鍘�
@@ -210,8 +252,8 @@
         Vue.set(item, data.id, false);
       })
       //console.log(item)
-      this.classifyAuthData.push(item)
-      // console.log(this.classifyAuthData);
+      this.classifyAuthData.push(item);
+      this.roleHandlerMethods('', 'add', this.addIndex)
     },
     // 鍒犻櫎琛�
     subClassifyAuth() {
@@ -300,8 +342,8 @@
       })
     },
     // 鍏ㄩ�夋寜閽�
-    selectAllButton(){
-      if(this.selectList.length!==1){
+    selectAllButton() {
+      if (this.selectList.length !== 1) {
         this.$message.warning("璇峰彧閫夋嫨涓�琛岄渶瑕佸叏閫夌殑鎸夐挳鐨勬暟鎹锛�");
         return;
       }

--
Gitblit v1.9.3