10 changed files with 370 additions and 26 deletions
-
22src/components/customerOrg/customerOrgTree.vue
-
17src/components/menuPage/MenuPageEdit.vue
-
240src/components/menuPage/MenuPageSet.vue
-
1src/router/index.js
-
14src/store/index.js
-
5src/utlis/tree.js
-
2src/views/Home.vue
-
2src/views/menuPage/menuPage.vue
-
57src/views/user-list/Role.vue
-
36src/views/user-list/UserList.vue
@ -0,0 +1,240 @@ |
|||
<template> |
|||
<div> |
|||
<div style="margin:2px 2px 5px 2px;display: flex;justify-content:space-between;"> |
|||
<div> |
|||
<el-input placeholder="输入关键字进行过滤" v-model="filterText" size="small" /> |
|||
</div> |
|||
<div v-show="isRole"> |
|||
<el-button @click="btnSubmit" size="small">提交</el-button> |
|||
</div> |
|||
</div> |
|||
<div style="overflow: scroll;height:600px;"> |
|||
<el-tree :data="menuInfoView" :props="customerOrg.treeprops" |
|||
node-key="id" :filter-node-method="filterNode" show-checkbox |
|||
default-expand-all |
|||
:default-expanded-keys="customerOrg.defaultExpandedKeys" |
|||
@check-change="handleCheckChange" highlight-current ref="customerOrgTree"/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import { mapState, mapMutations } from "vuex"; |
|||
import { getapi, postapi, putapi, deletapi } from "@/api/api"; |
|||
import { tcdate,arrayExistObj } from "../../utlis/proFunc"; |
|||
import { getTreeNode, getTreeAllChildIdsByNode, getTreeAllChildIdsById, getTreePids } from "../../utlis/tree"; |
|||
|
|||
|
|||
export default { |
|||
components: {}, |
|||
props:["params"], // params = { opra: role/user 用户/角色, idVal: roleId/userId} |
|||
data() { |
|||
return { |
|||
menuInfoView:[], //显示菜单 |
|||
menuInfoSet:[], //设置菜单 |
|||
checkedKeys:[], //勾选的菜单节点ID |
|||
filterText:'' |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState(["window", "dataTransOpts", "customerOrg" ]), |
|||
|
|||
// 是否角色 |
|||
isRole(){ |
|||
let ret = true |
|||
if(this.params && this.params.opra == "user"){ |
|||
ret = false |
|||
} |
|||
return ret |
|||
}, |
|||
|
|||
}, |
|||
|
|||
//创建组件后 |
|||
created() { |
|||
}, |
|||
|
|||
//挂载组件完成 |
|||
mounted() { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations(["setData"]), |
|||
|
|||
// 初始化数据,获取菜单列表树信息 及角色的授权菜单 |
|||
initData(roleOrUser_Id) { |
|||
getapi("/api/app/menuinfo/getmenuinfotreelist").then((res) => { |
|||
if(res.code != -1){ |
|||
this.menuInfoView = res.data |
|||
tcdate(this.menuInfoView); |
|||
// 如果不是角色,则不允许编辑权限 |
|||
if(!this.isRole){ |
|||
this.setTreeDisabled(this.menuInfoView,"treeChildren") |
|||
} |
|||
if(this.isRole){ |
|||
return getapi(`/api/app/rolemenuinfo/getrolemenuinfolist?RoleId=${roleOrUser_Id}`) // |
|||
}else{ |
|||
return getapi(`/api/app/menuinfo/getmymenuinfolistinuser?UserId=${roleOrUser_Id}`) |
|||
} |
|||
} |
|||
}).then(res =>{ |
|||
if(res && res.code != -1){ |
|||
// 勾选赋值 |
|||
this.menuInfoSet = res.data |
|||
this.setCheckedKeys() |
|||
} |
|||
}).catch(err =>{ |
|||
console.log(err) |
|||
}); |
|||
}, |
|||
|
|||
// 用户只允查看权限,暂不允许修权限 |
|||
setTreeDisabled(tree,childrenNodeName){ |
|||
tree.forEach(e => { |
|||
e.disabled = true |
|||
if(e[childrenNodeName]) this.setTreeDisabled(e[childrenNodeName],childrenNodeName) |
|||
}); |
|||
}, |
|||
|
|||
// 初始设置菜单勾选 |
|||
setCheckedKeys(){ |
|||
this.checkedKeys = [] |
|||
if(!this.isRole){ |
|||
this.menuInfoSet.forEach(e => { |
|||
e.menuInfoId = e.id |
|||
}); |
|||
} |
|||
this.menuInfoSet.forEach(e => { |
|||
// 无下级节点时,勾选;有下级节点时,所有下级节点全部勾选时,才勾选 |
|||
let node = getTreeNode(this.menuInfoView, "treeChildren", "id", e.menuInfoId) |
|||
if(node.treeChildren){ |
|||
//获取所有下级节点值 |
|||
let menuInfoIds = getTreeAllChildIdsByNode(node, "treeChildren", "id") |
|||
let count = 0 |
|||
menuInfoIds.forEach(item => { |
|||
let lfind = arrayExistObj(this.menuInfoSet,"menuInfoId",item) |
|||
if(lfind > -1) count++ |
|||
}); |
|||
if(menuInfoIds.length == count) this.checkedKeys.push(e.menuInfoId) |
|||
}else{ |
|||
this.checkedKeys.push(e.menuInfoId) |
|||
} |
|||
}); |
|||
this.$refs["customerOrgTree"].setCheckedKeys(this.checkedKeys); |
|||
}, |
|||
|
|||
//提交按钮(保存角色权限) |
|||
btnSubmit(){ |
|||
let body = { |
|||
roleId:this.dataTransOpts.tableS.adp_roles.id, |
|||
menuInfoIds:[] |
|||
} |
|||
|
|||
this.menuInfoSet.forEach(e => { |
|||
if(e.menuInfoId) body.menuInfoIds.push(e.menuInfoId) |
|||
}); |
|||
|
|||
|
|||
postapi('/api/app/rolemenuinfo/setrolemenuinfo',body).then(res =>{ |
|||
if(res.code != -1){ |
|||
console.log('操作成功!') |
|||
} |
|||
}) |
|||
|
|||
}, |
|||
|
|||
//勾选节点 |
|||
handleCheckChange(data, checked, indeterminate) { |
|||
console.log('data, checked, indeterminate,this.menuInfoSet',data, checked, indeterminate,this.menuInfoSet); |
|||
let lfind = 0,count = 0 |
|||
if(checked){ |
|||
// 获取所有上级节点 |
|||
let pids = getTreePids(this.menuInfoView, "treeChildren", "parentId", "id", data.id) |
|||
pids.push(data.id) //添加自身节点 |
|||
pids.forEach(e => { |
|||
if(e){ |
|||
lfind = arrayExistObj(this.menuInfoSet,'menuInfoId',e) |
|||
if(lfind == -1) this.menuInfoSet.push({ menuInfoId:e }) |
|||
} |
|||
}); |
|||
}else if(!indeterminate){ |
|||
// 取消授权时 |
|||
lfind = arrayExistObj(this.menuInfoSet,'menuInfoId',data.id) |
|||
if(lfind > -1) this.menuInfoSet.splice(lfind,1) |
|||
// 如果有下级节点,则取消所有下级节点的授权 |
|||
// let node = getTreeNode(this.menuInfoView, "treeChildren", "id", data.id) |
|||
// if(node.treeChildren){ |
|||
// let childs = getTreeAllChildIdsByNode(node, "treeChildren", "id") |
|||
// childs.forEach(id => { |
|||
// lfind = arrayExistObj(this.menuInfoSet,'menuInfoId',id) |
|||
// if(lfind > -1) this.menuInfoSet.splice(lfind,1) |
|||
// }); |
|||
// } |
|||
|
|||
// 所有平级节点都被取消时,上级节点也应取消 |
|||
let parentIds = getTreePids(this.menuInfoView, "treeChildren", "parentId", "id", data.id) |
|||
parentIds.forEach(e => { |
|||
if(e){ |
|||
let pNode = getTreeNode(this.menuInfoView, "treeChildren", "id", e) |
|||
count = pNode["treeChildren"].length |
|||
pNode["treeChildren"].forEach(item => { |
|||
lfind = arrayExistObj(this.menuInfoSet,'menuInfoId',item.id) |
|||
if(lfind == -1) count-- |
|||
}); |
|||
if(count == 0){ |
|||
lfind = arrayExistObj(this.menuInfoSet,'menuInfoId',e) |
|||
if(lfind > -1) this.menuInfoSet.splice(lfind,1) |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
console.log('this.menuInfoSet',this.menuInfoSet) |
|||
}, |
|||
|
|||
//树过滤 |
|||
filterNode(value, data) { |
|||
//console.log(value,data) |
|||
if (!value) return true; |
|||
return data['displayName'].indexOf(value) !== -1 || data['simpleCode'].indexOf(value.toUpperCase()) !== -1; |
|||
} |
|||
}, |
|||
|
|||
watch: { |
|||
// 刷新菜单 |
|||
"dataTransOpts.refresh.role_menu_info.M":{ |
|||
immediate:true, |
|||
handler(newVal, oldVal) { |
|||
let roleOrUser_Id |
|||
if(this.isRole){ |
|||
roleOrUser_Id = this.dataTransOpts.tableS.adp_roles.id |
|||
}else{ |
|||
roleOrUser_Id = this.dataTransOpts.tableS.adp_users.id |
|||
} |
|||
console.log(`watch ${this.isRole ? '角色':'用户'} 权限 newVal:${newVal} oldVal:${oldVal} registerCheckId: ${roleOrUser_Id}`); |
|||
|
|||
this.initData(roleOrUser_Id) |
|||
} |
|||
}, |
|||
|
|||
"customerOrg.treeCurrentNodekey"(newVal,oldVal){ |
|||
//console.log('watch:customerOrg.treeCurrentNodekey',newVal,oldVal) |
|||
if(newVal && newVal != oldVal){ |
|||
this.$nextTick(() => { |
|||
this.$refs['customerOrgTree'].setCurrentKey(newVal); |
|||
}) |
|||
} |
|||
}, |
|||
|
|||
"filterText"(newVal,oldVal){ //过滤菜单 |
|||
this.$refs['customerOrgTree'].filter(newVal); |
|||
} |
|||
}, |
|||
|
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
@import "../../assets/css/global.css"; |
|||
@import "../../assets/css/global_table.css"; |
|||
|
|||
</style> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue