From 0943f51b2ecb9e2a456ea9ee9245d52f98c78177 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 18 一月 2024 17:02:51 +0800
Subject: [PATCH] 数据授权整合代码

---
 Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue |   35 +++++++-
 Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue |    1 
 Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue     |  149 ++++++++++++++++++++++--------------
 3 files changed, 120 insertions(+), 65 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
index 36c9fe1..7024c51 100644
--- a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
+++ b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
@@ -176,7 +176,8 @@
                 });
                 this.classifyAuthData.push(item);
                 this.addIndex = this.classifyAuthData.length - 1; //娣诲姞琛屼笅鏍囩瓑浜巆lassifyAuthData鐨勯暱搴�-1
-                this.roleHandlerMethods(authData.roleId, 'create', this.addIndex)
+                this.roleHandlerMethods(authData.roleId, 'create', index)
+                console.log('index', index)
               })
             }
           });
@@ -200,16 +201,33 @@
         const filteredItems = this.classifyAuthButton.filter(item => {
           return !res.data.data.find(x => x.id === item.id);
         });
-
+        console.log('绂佺敤鎸夐挳',filteredItems)
+        console.log('涓嶇鐢ㄦ寜閽�',res.data.data)
         //鎷胯〃鏍煎垪澶村惊鐜拰娌℃湁瀵瑰簲鐨勫睘鎬ц繘琛屾瘮杈�
         this.classifyAuthHeader.forEach((item) => {
-          if (filteredItems.some(x => x.id === item.prop)) {
+          const isMatched = filteredItems.some(x => x.id === item.prop);
+          if (isMatched) {
             this.$nextTick(() => {
-              if (this.classifyAuthData[index] !== undefined && this.classifyAuthData[index] !== null) {
+              if (this.classifyAuthData[index]) {
+                Object.keys(this.classifyAuthData[index]).forEach((key) => {
+
+                    if (this.classifyAuthData[index].classify_view) {
+                      this.$set(this.classifyAuthData[index], item.code, true);
+                    } else {
+                      this.classifyAuthData[index][item.code] = false;
+                    }
+                    // console.log(item.code)
+                    // this.$set(this.classifyAuthData[index], item.code, true);
+
+                });
+              }
+            })
+          } else {
+            this.$nextTick(() => {
+              if (this.classifyAuthData[index]) {
                 Object.keys(this.classifyAuthData[index]).forEach((key) => {
                   if (item.prop === key) {
-                    // this.classifyAuthData[index] = Object.assign({}, this.classifyAuthData[index], {[key]: undefined});
-                    this.$set(this.classifyAuthData[index], item.code, true);
+                    this.$set(this.classifyAuthData[index], item.code, false);
                   }
                 });
               }
@@ -221,9 +239,11 @@
         this.classifyAuthData.forEach((classkey, classIndex) => {
           if (classkey.classify_view) {
             this.$set(this.classifyAuthData[classIndex], 'allDisabled', true)
+          } else {
+            this.classifyAuthData[classIndex].allDisabled = false;
           }
         });
-        console.log(this.classifyAuthData)
+        console.log('classifyAuthData',this.classifyAuthData)
         //寮哄埗鍒锋柊琛ㄦ牸
         this.itemKey = uuidv4();
       })
@@ -358,6 +378,7 @@
           roleId: item.roleData,
           classifyId: this.classifyData.oid,
           buttonIds: itemButtonList.join(","),
+          authType: "classify_auth",
         }
         form.push(data);
       });
diff --git a/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue
index ed964a5..d4a3eec 100644
--- a/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue
+++ b/Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue
@@ -40,7 +40,7 @@
             v-if="item.type === 'select'"
             slot="prepend"
             v-model="row[item.prop]"
-            @change="roleChange"
+            @change="roleChange(row.roleData,row)"
           >
             <el-option
               v-for="optionItem in roleList"
@@ -59,17 +59,18 @@
           </el-input>
           <el-checkbox
             v-if="item.type === 'checkbox'"
-            v-model="row[item.prop]">
+            v-model="row[item.prop]"
+            :disabled="row.allDisabled ? true :row[item.code]">
           </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 +78,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 {
@@ -92,6 +93,9 @@
       type: "Boolean",
       default: false,
     },
+    TreeNode:{
+      type:Object
+    }
   },
   data() {
     return {
@@ -158,25 +162,25 @@
             this.roleList = res.data.data.records;
           });
           // 鑾峰彇璇ュ垎绫讳笅宸叉巿鏉冪殑鍒嗙被鎺堟潈淇℃伅
-          getClassifyAuthList({classifyId: this.classifyData.oid,authType: "data_auth"}).then(res => {
+          getClassifyAuthList({classifyId: this.classifyData.oid, authType: "data_auth"}).then(res => {
             //console.log(res.data.data);
             let authDatas = res.data.data;
             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; //娣诲姞琛屼笅鏍囩瓑浜巆lassifyAuthData鐨勯暱搴�-1
-                // this.roleHandlerMethods(authData.roleId, 'create', this.addIndex)
+                this.roleHandlerMethods(authData.roleId, 'create', index)
               })
             }
           });
@@ -190,65 +194,94 @@
   created() {
   },
   methods: {
-    roleHandlerMethods(id, type, index) {
-      if (this.classifyAuthData.length < 0) {
-        return;
-      }
-
-      getButtonsByRoleId({roleId: id, 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});
-                    this.$set(this.classifyAuthData[index], item.code, true);
-                  }
-                });
-              }
-            })
-          }
-        });
-
-        //娣诲姞 鈥滄煡鐪嬪叏閮ㄧ鐢ㄦ潯浠垛��
-        this.classifyAuthData.forEach((classkey, classIndex) => {
-          if (classkey.classify_view) {
-            this.$set(this.classifyAuthData[classIndex], 'allDisabled', true)
-          }
-        });
-
-        //寮哄埗鍒锋柊琛ㄦ牸
-        this.itemKey = uuidv4();
-      })
-    },
     // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
       this.$emit('update:visible', false);
       this.classifyAuthData = [];
     },
+    roleHandlerMethods(id, type, index) {
+      if (this.classifyAuthData.length === 0) {
+        return;
+      }
+      //filteredItems 鏈巿鏉冩暟缁�
+      getButtonsByRoleId({roleId: id, code: this.TreeNode.id}).then(res => {
+        const filteredItems = this.classifyAuthButton.filter(item =>
+          !res.data.data.some(x => x.id === item.id)
+        );
+        //鍜岃〃鏍煎垪杩涜瀵规瘮
+        this.classifyAuthHeader.forEach(item => {
+          const isMatched = filteredItems.some(x => x.id === item.prop);
+          this.$nextTick(() => {
+            if (this.classifyAuthData[index] && item.prop in this.classifyAuthData[index]) {
+              if (isMatched) {
+                this.$set(this.classifyAuthData[index], item.code, this.classifyAuthData[index].classify_view);
+              } else {
+                this.$set(this.classifyAuthData[index], item.code, false);
+              }
+            }
+          });
+        });
+        //娣诲姞鈥樻煡鐪嬧�欑鐢�
+        this.classifyAuthData.forEach((classkey, classIndex) => {
+          if (classkey.classify_view) {
+            this.$set(this.classifyAuthData[classIndex], 'allDisabled', true);
+          } else {
+            this.$set(this.classifyAuthData[classIndex], 'allDisabled', false);
+          }
+        });
+        //寮哄埗鍒锋柊琛ㄦ牸
+        this.itemKey = uuidv4();
+      });
+    },
     // 瑙掕壊鏀瑰彉鏃�
-    roleChange(roleId){
-      console.log(roleId);
+    async roleChange(row, currentRow) {
+      try {
+        this.currentRow = currentRow;
+        const res = await getButtonsByRoleId({roleId: row, code: this.TreeNode.id});
 
+        const filteredItems = this.classifyAuthButton.filter(item => {
+          return !res.data.data.find(x => x.id === item.id);
+        });
+
+        this.classifyAuthHeader.forEach(item => {
+          const isMatched = filteredItems.some(x => x.id === item.prop);
+          this.$nextTick(() => {
+            if (currentRow) {
+              if (isMatched) {
+                Object.keys(currentRow).forEach(key => {
+                  currentRow[item.code] = item.prop === key ? false : true;
+                  if (!currentRow.classify_view) {
+                    currentRow.allDisabled = false;
+                  }
+                });
+              } else {
+                Object.keys(currentRow).forEach(key => {
+                  currentRow[item.code] = item.prop === key ? true : false;
+                  if (!currentRow.classify_view) {
+                    currentRow.allDisabled = false;
+                  }
+                });
+              }
+            }
+            this.itemKey = uuidv4(); // 寮哄埗鍒锋柊琛ㄦ牸
+          });
+        });
+      } catch (error) {
+        console.error(error);
+      }
     },
     // 澧炲姞琛�
     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,
-        uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d
-
+        uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d,
+        index: this.addIndex,
       }
       //灏嗘寜閽缃繘鍘�
       this.classifyAuthButton.forEach(data => {
@@ -256,7 +289,7 @@
       })
       //console.log(item)
       this.classifyAuthData.push(item)
-      // console.log(this.classifyAuthData);
+      this.roleHandlerMethods(this.roleList[0].id, 'add', this.addIndex)
     },
     // 鍒犻櫎琛�
     subClassifyAuth() {
@@ -346,8 +379,8 @@
       })
     },
     // 鍏ㄩ�夋寜閽�
-    selectAllButton(){
-      if(this.selectList.length!==1){
+    selectAllButton() {
+      if (this.selectList.length !== 1) {
         this.$message.warning("璇峰彧閫夋嫨涓�琛岄渶瑕佸叏閫夌殑鎸夐挳鐨勬暟鎹锛�");
         return;
       }
diff --git a/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue b/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
index 256f7d7..b605db7 100644
--- a/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
+++ b/Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue
@@ -124,6 +124,7 @@
         <data-auth-dialog
           :classifyData="classifyData"
           :visible.sync="dataAuthVisible"
+          :TreeNode="TreeEditObj"
         ></data-auth-dialog>
       </basic-container>
     </el-aside>

--
Gitblit v1.9.3