From 74c6981a42abb606710cf2967438fb252b9865b9 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 11 Mar 2022 20:55:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20role=20perm=20?= =?UTF-8?q?=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/users/Role/RoleDetail/RoleInfo.vue | 44 ++++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/src/views/users/Role/RoleDetail/RoleInfo.vue b/src/views/users/Role/RoleDetail/RoleInfo.vue index 123571d4f..ffe264c00 100644 --- a/src/views/users/Role/RoleDetail/RoleInfo.vue +++ b/src/views/users/Role/RoleDetail/RoleInfo.vue @@ -60,22 +60,19 @@ export default { enable: false }, callback: { - onCheck(event, treeId, treeNode) { + onCheck: _.debounce((event, treeId, treeNode) => { // 选择后,更新按钮可用 vm.$nextTick(() => { vm.isDisabled = false }) vm.checkActionDeps(treeNode) - vm.checkSpecDeps(treeNode, treeNode) - }, - beforeCheck(treeId, treeNode) { - // vm.checkSpecDeps(treeNode) + vm.checkSpecDeps() + }, 200), + beforeCheck: (treeId, treeNode) => { return true } } }, - viewPermMapper: [ - ], nodesDeps: { 'view_console': ['rbac.view_console'], 'view_audit': ['rbac.view_audit'], @@ -84,7 +81,9 @@ export default { 'users.invite_user': [ 'users.match_user', 'rbac.add_orgrolebinding', 'rbac.change_orgrolebinding', 'rbac.view_orgrolebinding', 'rbac.view_orgrole' - ] + ], + 'assets.view_asset': ['assets.view_node'], + 'assets': ['assets.domain'] } } }, @@ -199,27 +198,18 @@ export default { ztree.checkNode(viewNode, true) } }, - checkSpecDeps(node, by) { - this.$log.debug('Check node deps: ', node.name, node.title) - const id = node.title - const deps = this.nodesDeps[id] - const parent = node.getParentNode() + checkSpecDeps() { + const ztree = this.$refs.tree.zTree + const depsId = ztree.getCheckedNodes().filter(i => { + return !!this.nodesDeps[i.title] + }).reduce((result, v) => { + return [...result, ...this.nodesDeps[v.title]] + }, []) + this.$log.debug('Select nodes should try: ', depsId) - if (parent) { - this.$log.debug('Not has parent, exit check') - this.checkSpecDeps(parent, by) - } - - if (!deps) { - return - } - const nodeStatus = node.getCheckStatus() - const checked = nodeStatus.checked || nodeStatus.half - for (const i of deps) { + for (const i of depsId) { const depNode = this.ztree.getNodeByParam('title', i) - if (checked) { - this.ztree.checkNode(depNode, true) - } + this.ztree.checkNode(depNode, true) } },