From ea57d9c45a677c1875301e09ea6aa68c6d562f44 Mon Sep 17 00:00:00 2001 From: lzhe <lzhe@example.com> Date: 星期日, 07 四月 2024 18:24:42 +0800 Subject: [PATCH] 1 --- src/views/console/authority/role/index.vue | 147 +++++++++++++++++++++++++++++++++--- src/config/index.js | 4 src/views/console/authority/role/permission.vue | 59 ++++++++++++-- 3 files changed, 185 insertions(+), 25 deletions(-) diff --git a/src/config/index.js b/src/config/index.js index c3d0747..463c3d9 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -2,7 +2,7 @@ * @Author: lzhe lzhe@example.com * @Date: 2024-03-26 10:28:33 * @LastEditors: lzhe lzhe@example.com - * @LastEditTime: 2024-04-07 12:06:03 + * @LastEditTime: 2024-04-07 12:16:15 * @FilePath: /smart-web/src/config/index.js * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -39,7 +39,7 @@ //甯冨眬 榛樿锛歞efault | 閫氭爮锛歨eader | 缁忓吀锛歮enu | 鍔熻兘鍧烇細dock //dock灏嗗叧闂爣绛惧拰闈㈠寘灞戞爮 - LAYOUT: 'default', + LAYOUT: 'dock', //鑿滃崟鏄惁鎶樺彔 MENU_IS_COLLAPSE: false, diff --git a/src/views/console/authority/role/index.vue b/src/views/console/authority/role/index.vue index 0ac23d9..6531ec2 100644 --- a/src/views/console/authority/role/index.vue +++ b/src/views/console/authority/role/index.vue @@ -27,12 +27,18 @@ <el-tabs tab-position="top"> <el-tab-pane label="鑿滃崟"> <div class="treeMain"> - <el-tree ref="menu" node-key="name" :data="menu.list" :props="menu.props" show-checkbox></el-tree> + <el-tabs tab-position="left" class="demo-tabs" v-model="menuActiveName" @tab-click="menuHandleClick"> + <el-tab-pane v-for="item in menuGrantList" :label="item.title" :name="item.title"> + <el-tree v-if="showtree" :data="treeData" :props="{ label: 'title',children: 'children'}" node-key="id" show-checkbox @check-change="treeHandleCheckChange" :default-checked-keys="treeCheck" default-expand-all /> + </el-tab-pane> + </el-tabs> + <div class="roleSubmit"><el-button type="primary" :loading="submitIsSaveing" @click="roleSubmit()">淇� 瀛�</el-button></div> </div> </el-tab-pane> <el-tab-pane label="鍗$墖"> <div class="treeMain"> - <el-tree ref="grid" node-key="key" :data="grid.list" :props="grid.props" :default-checked-keys="grid.checked" show-checkbox></el-tree> + <!-- <el-tree ref="grid" node-key="key" :data="grid.list" :props="grid.props" :default-checked-keys="grid.checked" show-checkbox></el-tree> --> + 123 </div> </el-tab-pane> </el-tabs> @@ -69,6 +75,11 @@ }, data() { return { + showtree: true, + treeCheck: [], + menuActiveName: "", + treeData: [], + menuGrantList: [], total: 0, searchData: { current: 1, @@ -76,6 +87,7 @@ }, tableLiId: "", //褰撳墠瑙掕壊id isSaveing: false, + submitIsSaveing: false, userVisibleData: [], userVisible: false, roleHeaderList: [], @@ -114,12 +126,111 @@ this.getUser(); //鑾峰彇鍏ㄩ儴璐﹀彿 }, methods: { + roleSubmit() { //淇濆瓨 + var obj = { + apiScopeIds: [], + dataScopeIds: [], + menuIds: ["1519970491499069442", "1519971258746322945", "1519972116229832706", "1519972350729175041"], + roleIds: [this.tableLiId] + } + // 0: "1519970491499069442" + // 1: "1519971258746322945" + // 2: "1519972116229832706" + // 3: "1519972350729175041" + // 4: "1519972501539569666" + // 5: "1123598815738675201" + // 6: "1483632111746801666" + // 7: "1470274120439566338" + // 8: "1503966666579030018" + // 9: "1529388585562615809" + // 10: "1529365139944321026" + // this.$HTTP.post(`/api/blade-system/role/grant`,obj).then(res=> { + // this.isSaveing = false; + // if(res.code == 200) { + // this.userVisible = false; + // this.$message.success("鎿嶄綔鎴愬姛"); + // this.getBladeList(this.tableLiId); //鑾峰彇浜哄憳鍒楄〃 + // } + // }) + }, + menuHandleClick(tab, event) { + this.setTreeList(this.menuGrantList,event.target.innerText); //tree + }, + treeHandleCheckChange() { + + }, + setTreeList(arr,name) { + this.treeData = []; + arr.forEach(item=> { + if(item.title == name) { + this.treeData = item.children; + } + }) + }, + extractLastLevelIds(array) { //閫掑綊鑾峰彇children鏈�鍚庝竴绾х殑id鐨勬暟缁� + let ids = []; + for (let i = 0; i < array.length; i++) { + const obj = array[i]; + if (obj.children) { + // 閫掑綊璋冪敤浠ユ彁鍙栨洿娣卞眰绾х殑children涓殑id + ids = ids.concat(this.extractLastLevelIds(obj.children)); + } else { + // 濡傛灉娌℃湁children灞炴�э紝鍒欏亣瀹氬綋鍓嶅璞℃槸鏈�鍚庝竴绾� + if (obj.id) { + ids.push(obj.id); + } + } + } + return ids; + }, + findOverlap(array1, array2) { //鎵惧嚭涓や釜鏁扮粍閲嶅悎鐨勯儴鍒� + // 鍒涘缓涓�涓泦鍚堬紙Set锛夋潵瀛樺偍绗簩涓暟缁勪腑鐨勫厓绱狅紝浠ヤ究浜庡揩閫熸煡鎵� + const set = new Set(array2); + // 浣跨敤filter鏂规硶杩囨护鍑虹涓�涓暟缁勪腑鍦ㄩ泦鍚堜腑瀛樺湪鐨勫厓绱� + const overlap = array1.filter(item => set.has(item)); + return overlap; + }, + getSelectTree(res,id,index) {//鑾峰彇宸查�夋暟鎹� + this.$HTTP.get(`/api/blade-system/menu/role-tree-keys?roleIds=${id}`).then(resp=> { + if(res.code == 200) { + this.tableData.forEach(item=> { + item.active = false; + }) + this.tableData[index].active = true; //閫変腑 + this.showtree = false; + this.tableLiId = id; //瑙掕壊id + this.$nextTick(()=> { + this.showtree = true; + this.menuGrantList = res.data.menu.filter(item=> { //杩囨护鎺夋病鏈塩hildren鐨� + return item.children; + }); + this.menuActiveName = this.menuGrantList[0].title;//榛樿绗竴涓彍鍗� + this.setTreeList(this.menuGrantList,this.menuActiveName);//灞曠ず鏍戯紙宸︿晶鑿滃崟list锛屽乏渚ц彍鍗曞悕瀛楋級 + var lastId = [],idarr = []; + var lastId = this.extractLastLevelIds(this.menuGrantList); //鑾峰彇鏈�鍚庝竴绾d + var idarr = this.findOverlap(lastId,resp.data.menu); //鎵惧嚭涓や釜鏁扮粍閲嶅悎鐨勯儴鍒� + this.treeCheck = idarr; //鑾峰彇閫変腑鏁版嵁 + }) + } + }) + }, + getMenuGrant(row,index) { + this.$HTTP.get(`/api/blade-system/menu/grant-tree`).then(res=> { + if(res.code == 200) { + //鑾峰彇宸查�夋暟鎹� (鏍戠殑鏁版嵁锛岃鑹瞚d) + this.getSelectTree(res,row.id,index); + } + }) + }, userSubmit() { var ids = []; this.userSelection.forEach(item=> { ids.push(item.id); }) + this.isSaveing = true; + this.$HTTP.post(`/api/blade-user/${this.tableLiId}/save`,{ids}).then(res=> { + this.isSaveing = false; if(res.code == 200) { this.userVisible = false; this.$message.success("鎿嶄綔鎴愬姛"); @@ -128,7 +239,6 @@ }) }, userVisibleChange(selection) { - console.log(selection); this.userSelection = selection; }, addUser() { //娣诲姞璐﹀彿 @@ -142,10 +252,11 @@ } }) }, - getBladeList(id) { //浜哄憳鍒楄〃 - this.$HTTP.get(`/api/blade-user/${this.tableLiId}/list`).then(res=> { + getBladeList(row,index) { //浜哄憳鍒楄〃 + this.$HTTP.get(`/api/blade-user/${row.id}/list`).then(res=> { if(res.code == 200) { this.roleHeaderList = res.data; + this.getMenuGrant(row,index); //鑾峰彇tree } }) }, @@ -156,20 +267,15 @@ this.roleHeaderList[index].active = true; }, changeTabaleLi(row,index) { - this.tableData.forEach(item=> { - item.active = false; - }) - this.tableData[index].active = true; - this.tableLiId = row.id; - this.getBladeList(row.id); //鑾峰彇浜哄憳鍒楄〃 + this.getBladeList(row,index); //鑾峰彇浜哄憳鍒楄〃 }, getRoleList() { this.$HTTP.get("/api/blade-system/role/list?current=1&size=1000").then(res=> { if(res.code == 200) { res.data[0].active = true; this.tableData = res.data; - this.tableLiId = this.tableData[0].id; - this.getBladeList(this.tableData[0].id); //鑾峰彇浜哄憳鍒楄〃 + this.getBladeList(this.tableData[0],0); //榛樿绗竴涓鑹茶幏 + console.log(this.tableData[0],this.tableData[0].id) } }) }, @@ -340,4 +446,19 @@ display: inline-block; border: 1px dashed #e5e5e5; } +.treeMain { + position: relative; + margin-bottom: 60px; +} +.roleSubmit { + bottom: 0; + position: fixed; + width: 100%; + text-align: right; + right: 0; + padding-right: 20px; + padding-bottom: 12px; + background: #fff; + z-index: 11; +} </style> diff --git a/src/views/console/authority/role/permission.vue b/src/views/console/authority/role/permission.vue index 0c6f51c..f80f9f0 100644 --- a/src/views/console/authority/role/permission.vue +++ b/src/views/console/authority/role/permission.vue @@ -1,15 +1,50 @@ <template> <el-dialog title="瑙掕壊鏉冮檺璁剧疆" v-model="visible" :width="500" destroy-on-close @closed="$emit('closed')"> <el-tabs tab-position="top"> - <el-tab-pane label="鑿滃崟"> + <el-tab-pane label="鑿滃崟鏉冮檺"> <div class="treeMain"> <el-tree ref="menu" node-key="name" :data="menu.list" :props="menu.props" show-checkbox></el-tree> </div> </el-tab-pane> - <el-tab-pane label="鍗$墖"> + <el-tab-pane label="鏁版嵁鏉冮檺"> + <el-form label-width="100px" label-position="left"> + <el-form-item label="瑙勫垯绫诲瀷"> + <el-select v-model="data.dataType" placeholder="璇烽�夋嫨"> + <el-option label="鍏ㄩ儴鍙" value="1"></el-option> + <el-option label="鏈汉鍙" value="2"></el-option> + <el-option label="鎵�鍦ㄩ儴闂ㄥ彲瑙�" value="3"></el-option> + <el-option label="鎵�鍦ㄩ儴闂ㄥ強瀛愮骇鍙" value="4"></el-option> + <el-option label="閫夋嫨鐨勯儴闂ㄥ彲瑙�" value="5"></el-option> + <el-option label="鑷畾涔�" value="6"></el-option> + </el-select> + </el-form-item> + <el-form-item label="閫夋嫨閮ㄩ棬" v-show="data.dataType=='5'"> + <div class="treeMain" style="width: 100%;"> + <el-tree ref="dept" node-key="id" :data="data.list" :props="data.props" show-checkbox></el-tree> + </div> + </el-form-item> + <el-form-item label="瑙勫垯鍊�" v-show="data.dataType=='6'"> + <el-input v-model="data.rule" clearable type="textarea" :rows="6" placeholder="璇疯緭鍏ヨ嚜瀹氫箟瑙勫垯浠g爜"></el-input> + </el-form-item> + </el-form> + </el-tab-pane> + <el-tab-pane label="鎺у埗鍙版ā鍧�"> <div class="treeMain"> <el-tree ref="grid" node-key="key" :data="grid.list" :props="grid.props" :default-checked-keys="grid.checked" show-checkbox></el-tree> </div> + </el-tab-pane> + <el-tab-pane label="鎺у埗鍙�"> + <el-form label-width="100px" label-position="left"> + <el-form-item label="鎺у埗鍙拌鍥�"> + <el-select v-model="dashboard" placeholder="璇烽�夋嫨"> + <el-option v-for="item in dashboardOptions" :key="item.value" :label="item.label" :value="item.value"> + <span style="float: left">{{ item.label }}</span> + <span style="float: right; color: #8492a6; font-size: 12px">{{ item.views }}</span> + </el-option> + </el-select> + <div class="el-form-item-msg">鐢ㄤ簬鎺у埗瑙掕壊鐧诲綍鍚庢帶鍒跺彴鐨勮鍥�</div> + </el-form-item> + </el-form> </el-tab-pane> </el-tabs> <template #footer> @@ -71,9 +106,9 @@ } }, mounted() { - // this.getMenu() - // this.getDept() - // this.getGrid() + this.getMenu() + this.getDept() + this.getGrid() }, methods: { open(){ @@ -120,25 +155,29 @@ this.grid.list = [ { key: "welcome", - title: "涓绘暟鎹�", + title: "娆㈣繋", isFixed: true }, { key: "ver", - title: "閲囬泦鍒嗘瀽", + title: "鐗堟湰淇℃伅", isFixed: true }, { key: "time", - title: "鐢熶骇宸ヨ壓" + title: "鏃堕挓" }, { key: "progress", - title: "鏁板瓧鐪嬫澘" + title: "杩涘害鐜�" }, { key: "echarts", - title: "閰嶇疆涓績" + title: "瀹炴椂鏀跺叆" + }, + { + key: "about", + title: "鍏充簬椤圭洰" } ] } -- Gitblit v1.9.3