From c7414c3cc93649479119d51b230c4b8e36884ca7 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 23 七月 2021 18:18:55 +0800
Subject: [PATCH] 2021-07-23

---
 src/views/rolemanage/index.jsx |  211 ++++++++++++++++++++++++----------------------------
 1 files changed, 96 insertions(+), 115 deletions(-)

diff --git a/src/views/rolemanage/index.jsx b/src/views/rolemanage/index.jsx
index 0603de2..acadb50 100644
--- a/src/views/rolemanage/index.jsx
+++ b/src/views/rolemanage/index.jsx
@@ -1,6 +1,6 @@
 import React, {Component} from 'react'
-// import { fromJS } from 'immutable'
-import { Spin, notification, Button, Table, Modal, ConfigProvider, Tree } from 'antd'
+import { fromJS } from 'immutable'
+import { Spin, notification, Button, Table, Modal, ConfigProvider, Tree, Input, Empty } from 'antd'
 import moment from 'moment'
 // import md5 from 'md5'
 import enUS from 'antd/es/locale/en_US'
@@ -14,7 +14,7 @@
 const { confirm } = Modal
 const { TreeNode } = Tree
 // const { Paragraph } = Typography
-// const { Search } = Input
+const { Search } = Input
 
 const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
 const Header = asyncComponent(() => import('./header'))
@@ -47,109 +47,14 @@
     confirmLoading: false,
     targetKeys: [],
     trees: [],
-    expandedKeys: []
+    expandedKeys: [],
+    searchkey: ''
   }
 
   UNSAFE_componentWillMount() {
     let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
 
-    let expandedKeys = []
-    const data = [
-      {
-        key: Utils.getuuid(),
-        title: '瀵艰埅鏍�',
-        children: [
-          {
-            key: Utils.getuuid(),
-            title: '閲囪喘',
-            children: [
-              {
-                key: Utils.getuuid(),
-                title: '閲囪喘涓氬姟',
-                children: [
-                  {
-                    key: Utils.getuuid(),
-                    title: '閲囪喘鍗曠鐞�'
-                  },
-                  {
-                    key: Utils.getuuid(),
-                    title: '濮斿閲囪喘'
-                  }
-                ]
-              },
-              {
-                key: Utils.getuuid(),
-                title: '涓绘暟鎹�'
-              }
-            ]
-          },
-          {
-            key: Utils.getuuid(),
-            title: '搴撳瓨',
-            children: [
-              {
-                key: Utils.getuuid(),
-                title: '搴撳瓨绠$悊',
-                children: [
-                  {
-                    key: Utils.getuuid(),
-                    title: '鏀惰揣绠$悊'
-                  },
-                  {
-                    key: Utils.getuuid(),
-                    title: '閿�閫�鏀惰揣'
-                  },
-                  {
-                    key: Utils.getuuid(),
-                    title: '鍙戣揣閫氱煡鍗�'
-                  }
-                ]
-              }
-            ]
-          },
-          {
-            key: Utils.getuuid(),
-            title: '鎶ヨ〃',
-            children: [
-              {
-                key: Utils.getuuid(),
-                title: '鎶ヨ〃鏌ヨ',
-                children: [
-                  {
-                    key: Utils.getuuid(),
-                    title: '閲囪喘鏌ヨ'
-                  },
-                  {
-                    key: Utils.getuuid(),
-                    title: '搴撳瓨鏌ヨ'
-                  },
-                  {
-                    key: Utils.getuuid(),
-                    title: '鍑哄簱鏌ヨ'
-                  }
-                ]
-              }
-            ]
-          }
-        ]
-      },
-      {
-        key: Utils.getuuid(),
-        title: '棣栭〉001'
-      },
-      {
-        key: Utils.getuuid(),
-        title: '渚涘簲鍟�'
-      }
-    ]
-
-    if (data[0]) {
-      expandedKeys.push(data[0].key)
-      if (data[0].children && data[0].children[0]) {
-        expandedKeys.push(data[0].children[0].key)
-      }
-    }
-    this.setState({app: param, trees: data, expandedKeys}, () => {
+    this.setState({app: param}, () => {
       this.getMenuList()
       this.getThawMenulist()
     })
@@ -185,7 +90,25 @@
       if (result.status) {
         this.setState({
           loading: false,
-          menulist: result.menus
+          menulist: result.menus.map(item => {
+            item.nodes = ''
+            item.type = 'view'
+            if (item.menus_rolelist) {
+              try {
+                let pageParam = JSON.parse(window.decodeURIComponent(window.atob(item.menus_rolelist)))
+                item.nodes = pageParam
+                if (pageParam.type === 'navbar') {
+                  item.type = 'navbar'
+                }
+              } catch {
+                item.nodes = ''
+              }
+            }
+            
+            return item
+          })
+        }, () => {
+          this.initMenutree()
         })
       } else {
         this.setState({
@@ -197,6 +120,63 @@
           duration: 5
         })
       }
+    })
+  }
+
+  initMenutree = () => {
+    const { menulist } = this.state
+
+    let navbars = []
+    let map = new Map()
+
+    fromJS(menulist).toJS().forEach(menu => {
+      if (!menu.nodes) return
+      
+      if (menu.type === 'navbar') {
+        navbars.push(menu.nodes)
+      } else {
+        map.set(menu.MenuID, menu.nodes)
+      }
+    })
+
+    let data = []
+
+    if (navbars.length === 0) {
+      data = [...map.values()]
+    } else {
+      let reset = (m) => {
+        return m.map(n => {
+          if (n.children && n.children.length > 0) {
+            n.children = reset(n.children)
+          } else if (map.has(n.key)) {
+            let p = map.get(n.key)
+            if (p.children && p.children.length > 0) {
+              n.children = reset(p.children)
+            }
+            map.delete(n.key)
+          }
+          return n
+        })
+      }
+
+      data = reset(navbars)
+      data = [...data, ...map.values()]
+    }
+
+    let expandedKeys = []
+
+    if (data[0]) {
+      expandedKeys.push(data[0].key)
+      if (data[0].children && data[0].children[0]) {
+        expandedKeys.push(data[0].children[0].key)
+        if (data[0].children[0].children && data[0].children[0].children[0]) {
+          expandedKeys.push(data[0].children[0].children[0].key)
+        }
+      }
+    }
+
+    this.setState({trees: [], expandedKeys: []}, () => {
+      this.setState({trees: data, expandedKeys})
     })
   }
 
@@ -318,13 +298,6 @@
     })
   }
 
-  onDragEnter = info => {
-    // expandedKeys 闇�瑕佸彈鎺ф椂璁剧疆
-    // this.setState({
-    //   expandedKeys: info.expandedKeys,
-    // });
-  }
-
   onDrop = info => {
     const dropKey = info.node.props.eventKey;
     const dragKey = info.dragNode.props.eventKey;
@@ -396,10 +369,11 @@
   }
 
   initTree = () => {
+    const _this = this
     confirm({
       content: '鍒濆鍖栦細鏍规嵁鑿滃崟閲嶇疆鏉冮檺鏍戯紝纭畾鎵ц鍚楋紵',
       onOk() {
-        
+        _this.initMenutree()
       },
       onCancel() {}
     })
@@ -426,7 +400,12 @@
   }
 
   render () {
-    const { app, loading, columns, menulist, trees } = this.state
+    const { app, loading, columns, menulist, trees, searchkey } = this.state
+    let _menulist = menulist
+
+    if (searchkey) {
+      _menulist = _menulist.filter(item => item.MenuName.toLowerCase().indexOf(searchkey.toLowerCase()) > -1)
+    }
 
     return (
       <div className="mk-role-manage">
@@ -442,11 +421,12 @@
               <div className="app-table">
                 <div className="app-action">
                   <Button className="mk-green" onClick={() => this.setState({ visible: true, targetKeys: [] })}>瑙e喕鑿滃崟</Button>
+                  <Search placeholder="缁煎悎鎼滅储" onSearch={value => this.setState({ searchkey: value })} enterButton />
                 </div>
                 <Table
                   rowKey="MenuID"
                   columns={columns}
-                  dataSource={menulist}
+                  dataSource={_menulist}
                   pagination={false}
                 />
               </div>
@@ -457,17 +437,18 @@
                 <Button className="mk-purple" onClick={this.syncTree}>鍚屾</Button>
                 <Button className="mk-green save" onClick={this.saveTree}>淇濆瓨</Button>
               </div>
-              <Tree
+              {trees.length ? <Tree
                 className="draggable-tree"
                 defaultExpandedKeys={this.state.expandedKeys}
                 // showLine
                 draggable
                 blockNode
-                onDragEnter={this.onDragEnter}
                 onDrop={this.onDrop}
               >
                 {this.renderNode(trees)}
-              </Tree>
+              </Tree> : <div className="empty">
+                <Empty />
+              </div>}
             </div>
           </div>
           <Modal

--
Gitblit v1.8.0