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