From 134402cea23f11760853dfb25b8a63a3554ce636 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期四, 18 一月 2024 10:59:20 +0800
Subject: [PATCH] 分类授权完善

---
 Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue |  125 +++++++++++++++++++++++++++--------------
 1 files changed, 81 insertions(+), 44 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
index 3baa5c7..902cabf 100644
--- a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
+++ b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue
@@ -16,11 +16,9 @@
       :height="tableHeight"
       border
       class="cus-table"
-      @select="handleSelection"
       @row-click="handleRowClick"
       @select-all="handleSelectionAll"
       @selection-change="handleSelectionChange"
-      @sort-change="sortChange"
     >
       <el-table-column
         type="selection"
@@ -61,7 +59,7 @@
           <el-checkbox
             v-if="item.type === 'checkbox'"
             v-model="row[item.prop]"
-            :disabled="row.allDisabled ? true :typeof row[item.prop] == 'undefined' || typeof row[item.prop] == null">
+            :disabled="row.allDisabled ? true :row[item.code]">
           </el-checkbox>
         </template>
       </el-table-column>
@@ -111,8 +109,8 @@
       //褰撳墠閫変腑鐨勮〃鏍艰
       selectList: [],
       itemKey: '',
-      viewStatus: false,
       addIndex: Number,
+      currentRow: {}
     };
   },
   watch: {
@@ -163,14 +161,13 @@
           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,index) => {
+              authDatas.forEach((authData, index) => {
                 let item = {
                   oid: authData.oid,
                   roleData: authData.roleId,
                   classifyItem: this.classifyData.label,
-                  index:index,
+                  index: index,
                   uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d
                 }
                 //灏嗘寜閽缃繘鍘�
@@ -178,12 +175,12 @@
                   Vue.set(item, data, true);
                 });
                 this.classifyAuthData.push(item);
-                this.addIndex = this.classifyAuthData.length -1 ;
-                // console.log('classifyAuthData', this.classifyAuthData)
+                this.addIndex = this.classifyAuthData.length - 1; //娣诲姞琛屼笅鏍囩瓑浜巆lassifyAuthData鐨勯暱搴�-1
+                this.roleHandlerMethods(authData.roleId, 'create', this.addIndex)
               })
             }
-            this.roleHandlerMethods('', 'create', 0)
           });
+          console.log('created', this.classifyAuthData)
         });
       }
     },
@@ -195,39 +192,78 @@
   },
   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();
-              })
-            }
-          });
-        })
+      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();
+      })
     },
-    selectChange(row,index) {
-      this.roleHandlerMethods(row, 'select',index.index);
+    async selectChange(row, currentRow) {
+      try {
+        this.currentRow = currentRow;
+        const res = await getButtonsByRoleId({roleId: row, code: 'classifyTree'});
+
+        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);
+      }
     },
     // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
@@ -240,11 +276,12 @@
         this.$message.warning("褰撳墠绉熸埛涓嶅瓨鍦ㄨ鑹蹭俊鎭紒");
         return;
       }
-      this.addIndex++;
+      console.log('this.roleList', this.roleList)
+      this.addIndex++; //鑷畾涔夌敓鎴愭坊鍔犺涓嬫爣
       let item = {
         roleData: this.roleList[0].id,
         classifyItem: this.classifyData.label,
-        index:this.addIndex,
+        index: this.addIndex,
         uuid: uuidv4(),//鐢熸垚鍞竴鐨刬d
       }
       //灏嗘寜閽缃繘鍘�
@@ -253,7 +290,7 @@
       })
       //console.log(item)
       this.classifyAuthData.push(item);
-      this.roleHandlerMethods('', 'add', this.addIndex)
+      this.roleHandlerMethods(this.roleList[0].id, 'add', this.addIndex)
     },
     // 鍒犻櫎琛�
     subClassifyAuth() {

--
Gitblit v1.9.3