From b1b2cc5ffe950a5a84d50aa43cc77d21674405db Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 18 一月 2024 19:55:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS-WEB/src/api/docking/data.js | 2 Source/UBCS-WEB/src/api/docking/task.js | 2 Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue | 145 ++++++++++++++++++++-------- Source/UBCS-WEB/src/components/Theme/ThemeClassifyTrees.vue | 1 Source/UBCS-WEB/src/components/Theme/DataAuthDialog.vue | 117 +++++++++++++++++++---- Source/UBCS-WEB/vue.config.js | 9 + 6 files changed, 206 insertions(+), 70 deletions(-) diff --git a/Source/UBCS-WEB/src/api/docking/data.js b/Source/UBCS-WEB/src/api/docking/data.js index 1093124..c89ac5c 100644 --- a/Source/UBCS-WEB/src/api/docking/data.js +++ b/Source/UBCS-WEB/src/api/docking/data.js @@ -1,6 +1,6 @@ import request from '@/router/axios'; -export const getDataList = (page, limit, params) => { +export const getDataList = (page, limit,sort,order, params) => { return request({ url: '/api/ubcs-code/dockingManagement/gridDockingData', method: 'get', diff --git a/Source/UBCS-WEB/src/api/docking/task.js b/Source/UBCS-WEB/src/api/docking/task.js index c2dc99a..e425196 100644 --- a/Source/UBCS-WEB/src/api/docking/task.js +++ b/Source/UBCS-WEB/src/api/docking/task.js @@ -1,6 +1,6 @@ import request from '@/router/axios'; -export const getTaskList = (page, limit, params) => { +export const getTaskList = (page, limit,sort,order, params) => { return request({ url: '/api/ubcs-code/dockingManagement/gridDockingTask', method: 'get', diff --git a/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue b/Source/UBCS-WEB/src/components/Theme/ClassifyAuthDialog.vue index 3baa5c7..7024c51 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,11 +175,11 @@ 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', index) + console.log('index', index) }) } - this.roleHandlerMethods('', 'create', 0) }); }); } @@ -195,39 +192,97 @@ }, 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); + }); + console.log('绂佺敤鎸夐挳',filteredItems) + console.log('涓嶇鐢ㄦ寜閽�',res.data.data) + //鎷胯〃鏍煎垪澶村惊鐜拰娌℃湁瀵瑰簲鐨勫睘鎬ц繘琛屾瘮杈� + this.classifyAuthHeader.forEach((item) => { + const isMatched = filteredItems.some(x => x.id === item.prop); + if (isMatched) { + this.$nextTick(() => { + 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.$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.classifyAuthData[classIndex].allDisabled = false; + } + }); + console.log('classifyAuthData',this.classifyAuthData) + //寮哄埗鍒锋柊琛ㄦ牸 + 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 +295,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 +309,7 @@ }) //console.log(item) this.classifyAuthData.push(item); - this.roleHandlerMethods('', 'add', this.addIndex) + this.roleHandlerMethods(this.roleList[0].id, 'add', this.addIndex) }, // 鍒犻櫎琛� subClassifyAuth() { @@ -322,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 66d686c..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 { @@ -108,6 +112,9 @@ roleList: [], //褰撳墠閫変腑鐨勮〃鏍艰 selectList: [], + itemKey: '', + addIndex: Number, + currentRow: {} }; }, watch: { @@ -139,6 +146,7 @@ let columnItem = { label: item.name, prop: item.id, + code: item.code, type: "checkbox", width: 180, }; @@ -154,23 +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', index) }) } }); @@ -189,22 +199,89 @@ 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 => { @@ -212,7 +289,7 @@ }) //console.log(item) this.classifyAuthData.push(item) - // console.log(this.classifyAuthData); + this.roleHandlerMethods(this.roleList[0].id, 'add', this.addIndex) }, // 鍒犻櫎琛� subClassifyAuth() { @@ -302,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> diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js index 88122e0..76553ee 100644 --- a/Source/UBCS-WEB/vue.config.js +++ b/Source/UBCS-WEB/vue.config.js @@ -26,12 +26,13 @@ proxy: { '/api': { //鏈湴鏈嶅姟鎺ュ彛鍦板潃 - target: 'http://127.0.0.1:37000', + // target: 'http://127.0.0.1:37000', // target: 'http://192.168.1.51:37000', - // target: 'http://dev.vci-tech.com:37000', + target: 'http://dev.vci-tech.com:37000', //yxc - // target: 'http:// 192.168.0.100:37000', - // target: 'http://192.168.0.105:37000', + // target: 'http:// 192.168.43.131:37000', + //ldc + // target: 'http://192.168.0.100:37000', // target: 'http://192.168.0.103:37000', // target: 'http://192.168.1.63:37000', // target: 'http://192.168.3.7:37000', -- Gitblit v1.9.3