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/DataAuthDialog.vue | 149 ++++++++++++++++++++++++++++++------------------- 1 files changed, 91 insertions(+), 58 deletions(-) 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; } -- Gitblit v1.9.3