From 268be11f39b248920a76568135f8b7b6c4fa9e52 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 13 三月 2020 16:37:22 +0800 Subject: [PATCH] 2020-03-13 --- src/tabviews/rolemanage/index.jsx | 132 +++++++++++++++++++++++++++++++++++-------- 1 files changed, 106 insertions(+), 26 deletions(-) diff --git a/src/tabviews/rolemanage/index.jsx b/src/tabviews/rolemanage/index.jsx index d34b705..a123a32 100644 --- a/src/tabviews/rolemanage/index.jsx +++ b/src/tabviews/rolemanage/index.jsx @@ -12,7 +12,9 @@ const { Search } = Input const { TabPane } = Tabs const { TreeNode, DirectoryTree } = Tree -let _checkedKeys = null +let checkedKeysMap = null +let linkMap = null +let selectMap = null export default class RoleManage extends Component { static propTpyes = { @@ -72,7 +74,8 @@ return { title: item.MenuName, key: item.MenuID, - children: [] + children: [], + selected: true } }) }, () => { @@ -107,19 +110,15 @@ } if (tabKey === '') { - let _mainMenuKeys = mainMenus.map(menu => menu.key) - - _checkedKeys = [] - let _checkMainKeys = [] // 閫変腑鐨勪竴绾ц彍鍗曪紝闇�鍒ゆ柇鏄惁鍚湁瀛愯彍鍗� let _initCheckKeys = [] // 鍒濆閫変腑鐨勮彍鍗昳d + checkedKeysMap = new Map() + linkMap = new Map() + selectMap = new Map() + result.data.forEach(item => { if (item.Selected !== 'true') return - if (!_mainMenuKeys.includes(item.MenuID)) { - _checkedKeys.push(item.MenuID) - } else { - _checkMainKeys.push(item.MenuID) - } + checkedKeysMap.set(item.MenuID, true) _initCheckKeys.push(item.MenuID) }) @@ -131,18 +130,12 @@ this.getOpenNode(_tree[0], _openKeys) } - _tree.forEach(item => { - if (_checkMainKeys.includes(item.key) && !item.children) { - _checkedKeys.push(item.key) - } - }) - _state.menuTrees = _tree _state.initCheckKeys = _initCheckKeys - _state.checkedKeys = _checkedKeys + _state.checkedKeys = Array.from(checkedKeysMap.keys()) _state.menuOpenKeys = _openKeys } else { - _tree = this.getTree(JSON.parse(JSON.stringify(mainMenus)), result.data) + _tree = this.getSelectTree(JSON.parse(JSON.stringify(mainMenus)), result.data) _tree = _tree.filter(node => node.children) if (_tree[0]) { @@ -179,12 +172,14 @@ parents.forEach(parent => { parent.children = [] - options.forEach((option, index) => { + options.forEach(option => { if (option.ParentID === parent.key) { parent.children.push({ title: option.MenuName, key: option.MenuID, - selected: option.Selected === 'true' + selected: parent.selected && option.Selected === 'true', + addSelf: option.OnlySelf === 'true', + tabs: option.Tabs }) } }) @@ -192,11 +187,75 @@ if (parent.children.length === 0) { parent.children = null - } else { - if (_checkedKeys && parent.selected) { - _checkedKeys = _checkedKeys.filter(key => key !== parent.key) + if (parent.tabs) { + let _uuid = Utils.getuuid() + linkMap.set(_uuid, parent.key) + + if (parent.selected) { + checkedKeysMap.set(_uuid, true) + checkedKeysMap.delete(parent.key) + + selectMap.set(_uuid, parent.key) + } + + parent.key = _uuid } + } else { + if (parent.selected) { + checkedKeysMap.delete(parent.key) + } + if (parent.addSelf) { + let _uuid = Utils.getuuid() + linkMap.set(_uuid, parent.key) + + if (parent.selected) { + checkedKeysMap.set(_uuid, true) + } + + parent.children.unshift({ + title: parent.title + '(浠呴〉闈�)', + key: _uuid, + }) + } + + if (parent.tabs) { + let _uuid = Utils.getuuid() + linkMap.set(_uuid, parent.key) + + if (parent.selected) { + selectMap.set(_uuid, parent.key) + } + + parent.key = _uuid + } + parent.children = this.getTree(parent.children, options) + } + }) + + return parents + } + + getSelectTree = (parents, options) => { + parents.forEach(parent => { + parent.children = [] + + options.forEach(option => { + if (option.ParentID === parent.key) { + parent.children.push({ + title: option.MenuName, + key: option.MenuID, + tabs: option.Tabs + }) + } + }) + + + parent.key = Utils.getuuid() + if (parent.children.length === 0) { + parent.children = null + } else { + parent.children = this.getSelectTree(parent.children, options) } }) @@ -234,7 +293,6 @@ } onCheck = (checkedKeys, info) => { - console.log(checkedKeys) this.setState({ checkedKeys: checkedKeys, halfCheckedKeys: info.halfCheckedKeys, @@ -262,7 +320,24 @@ if (initCheckKeys) { _keys = initCheckKeys } else { - _keys = checkedKeys.concat(halfCheckedKeys) + let _cKeys = checkedKeys.concat(halfCheckedKeys) + _cKeys.forEach(key => { + if (linkMap.has(key)) { + _keys.push(linkMap.get(key)) + } else { + _keys.push(key) + } + }) + _cKeys = new Map(_cKeys.map(key => [key, true])) + _keys = new Map(_keys.map(key => [key, true])) + + Array.from(selectMap.keys()).forEach(key => { + if (!_cKeys.has(key)) { + _keys.delete(selectMap.get(key)) + } + }) + + _keys = Array.from(_keys.keys()) } let _LText = _keys.map(key => `select '${key}' as MenuID`) @@ -288,8 +363,13 @@ }) this.setState({ submitloading: false, + menuTrees: null, + checkedKeys: [], + menuOpenKeys: [], selectMenuTrees: null, selectMenuOpenKeys: [] + }, () => { + this.getAllMenuList() }) } else { notification.warning({ -- Gitblit v1.8.0