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