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

---
 src/tabviews/rolemanage/index.jsx |  670 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 525 insertions(+), 145 deletions(-)

diff --git a/src/tabviews/rolemanage/index.jsx b/src/tabviews/rolemanage/index.jsx
index 99b8022..f334a5c 100644
--- a/src/tabviews/rolemanage/index.jsx
+++ b/src/tabviews/rolemanage/index.jsx
@@ -1,7 +1,8 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Card, Col, Row, Icon, Menu, notification, Spin, Input, Tabs, Button, Tree, Empty } from 'antd'
+import { Card, Col, Row, Icon, Menu, notification, Spin, Input, Tabs, Button, Tree, Empty, Select } from 'antd'
+import md5 from 'md5'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
@@ -20,14 +21,16 @@
 export default class RoleManage extends Component {
   static propTpyes = {
     MenuNo: PropTypes.string, // 鑿滃崟鍙傛暟
-    MenuID: PropTypes.string // 鑿滃崟Id
+    MenuID: PropTypes.string  // 鑿滃崟Id
   }
 
   state = {
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     loading: true,
     loadingTree: false,
+    loadingAppTree: false,
     roleList: null,
+    filterRoleList: [],
     selectRoleId: '',
     mainMenus: null,
     menuTrees: null,
@@ -36,9 +39,17 @@
     selectMenuTrees: null,
     selectMenuOpenKeys: [],
     primarykey: '',
-    tabKey: '',
     submitloading: false,
-    initCheckKeys: null
+    initCheckKeys: null,
+    activeKey: 'manage',
+    appTrees: null,
+    appCheckedKeys: [],
+    appOpenKeys: [],
+    applist: [],
+    selectApp: null,
+    selectSubApp: null,
+    selectAppTrees: null,
+    selectAppOpenKeys: [],
   }
 
   /**
@@ -52,7 +63,8 @@
 
     if (result.status) {
       this.setState({
-        roleList: result.data
+        roleList: result.data,
+        filterRoleList: result.data || []
       })
     } else {
       notification.warning({
@@ -61,6 +73,35 @@
         duration: 5
       })
     }
+  }
+
+  getAppList = () => {
+    let param = {
+      func: 's_get_kei'
+    }
+
+    Api.getCloudConfig(param).then(result => {
+      if (result.status) {
+        let applist = result.data.map(item => {
+          item.sublist = item.data_detail || []
+          item.sublist = item.sublist.map(cell => {
+            cell.ID = cell.d_id
+            return cell
+          })
+
+          return item
+        })
+        let selectApp = applist[0] || null
+
+        this.setState({ applist, selectApp })
+      } else {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+      }
+    })
   }
 
   /**
@@ -103,12 +144,12 @@
    * @description 鑾峰彇鎵�鏈夎彍鍗曡妭鐐癸紝褰㈡垚鏉冮檺鏍�
    */
   getAllMenuList = async () => {
-    const { selectRoleId, mainMenus, tabKey } = this.state
+    const { selectRoleId, mainMenus } = this.state
 
     let param = {
       func: 's_rolemenu_get_FunMenu',
       RoleID: selectRoleId,
-      SelectedType: tabKey
+      SelectedType: ''
     }
 
     let result = await Api.getSystemConfig(param)
@@ -153,61 +194,147 @@
    * @description 閫夋嫨瑙掕壊涓斿瓨鍦ㄦ潈闄愭爲鏃讹紝鑾峰彇宸插垎閰嶇粨鏋�
    */
   getSelectMenuList = async () => {
-    const { selectRoleId, menuTrees, tabKey } = this.state
-    if (!menuTrees) return
+    const { selectRoleId, menuTrees, activeKey } = this.state
+    if (!menuTrees || !selectRoleId || activeKey !== 'manage') return
 
     let param = {
       func: 's_rolemenu_get_Menulist',
       RoleID: selectRoleId
     }
 
+    this.setState({
+      loadingTree: true
+    })
+
     let result = await Api.getSystemConfig(param)
 
     if (result.status) {
       let _openKeys = []
 
-      if (tabKey === '') {
-        let _initKeys = result.data.map(item => item.MenuID)
-        _initKeys = Array.from(new Set(_initKeys))
+      let _initKeys = result.data.map(item => item.MenuID)
+      _initKeys = Array.from(new Set(_initKeys))
 
-        selectMap = new Map()
-        this.getCheckedKeys(fromJS(menuTrees).toJS(), _initKeys)
+      selectMap = new Map()
+      this.getCheckedKeys(fromJS(menuTrees).toJS(), _initKeys)
 
-        if (menuTrees[0]) {
-          if (menuTrees[0].key === 'PC' && menuTrees[0].children) {
-            this.getOpenNode(menuTrees[0].children[0], _openKeys)
-          } else {
-            this.getOpenNode(menuTrees[0], _openKeys)
-          }
+      if (menuTrees[0]) {
+        if (menuTrees[0].key === 'PC' && menuTrees[0].children) {
+          this.getOpenNode(menuTrees[0].children[0], _openKeys)
+        } else {
+          this.getOpenNode(menuTrees[0], _openKeys)
         }
-
-        this.setState({
-          loadingTree: false,
-          initCheckKeys: _initKeys,
-          checkedKeys: Array.from(selectMap.keys()),
-          menuOpenKeys: _openKeys
-        })
-      } else {
-        let Keys = result.data.map(item => item.MenuID)
-        let _tree = this.getSelectTree(fromJS(menuTrees).toJS(), Keys)
-
-        if (_tree[0]) {
-          if (_tree[0].key === 'PC' && _tree[0].children) {
-            this.getOpenNode(_tree[0].children[0], _openKeys)
-          } else {
-            this.getOpenNode(_tree[0], _openKeys)
-          }
-        }
-
-        this.setState({
-          loadingTree: false,
-          selectMenuTrees: _tree,
-          selectMenuOpenKeys: _openKeys
-        })
       }
+
+      let _openkeys = []
+      let Keys = result.data.map(item => item.MenuID)
+      let _tree = this.getSelectTree(fromJS(menuTrees).toJS(), Keys)
+
+      if (_tree[0]) {
+        if (_tree[0].key === 'PC' && _tree[0].children) {
+          this.getOpenNode(_tree[0].children[0], _openkeys)
+        } else {
+          this.getOpenNode(_tree[0], _openkeys)
+        }
+      }
+
+      this.setState({
+        loadingTree: false,
+        initCheckKeys: _initKeys,
+        checkedKeys: Array.from(selectMap.keys()),
+        menuOpenKeys: _openKeys,
+        selectMenuTrees: _tree,
+        selectMenuOpenKeys: _openkeys
+      })
     } else {
       this.setState({
         loadingTree: false
+      })
+      notification.warning({
+        top: 92,
+        message: result.message,
+        duration: 5
+      })
+    }
+  }
+
+  /**
+   * @description 閫夋嫨瑙掕壊涓斿瓨鍦ㄦ潈闄愭爲鏃讹紝鑾峰彇宸插垎閰嶇粨鏋�
+   */
+  getSelectAppNodeList = async () => {
+    const { selectRoleId, selectSubApp, selectApp, appTrees, activeKey } = this.state
+
+    if (!appTrees || !selectRoleId || activeKey !== 'app' || !selectSubApp || !selectApp) return
+
+    let param = {
+      func: 's_rolemenu_get_Menulist',
+      RoleID: selectRoleId,
+      TypeCharOne: selectApp.kei_no,
+      typename: selectSubApp.typename,
+      lang: selectSubApp.lang
+    }
+
+    this.setState({
+      loadingAppTree: true
+    })
+
+    let result = await Api.getSystemConfig(param)
+
+    if (result.status) {
+      let _initKeys = result.data.map(item => item.MenuID)
+      _initKeys = Array.from(new Set(_initKeys))
+      let _checkedKeys = []
+
+      let getCheckedKeys = (parents) => {
+        parents.forEach(item => {
+          if (_initKeys.includes(item.key)) {
+            if (item.children && item.children.length > 0) {
+              getCheckedKeys(item.children)
+            } else {
+              _checkedKeys.push(item.key)
+            }
+          }
+        })
+      }
+
+      getCheckedKeys(appTrees)
+
+      let _openKeys = []
+      let getOpenNode = (parentNode) => {
+        if (parentNode && parentNode.children && parentNode.children.length > 0) {
+          _openKeys.push(parentNode.key)
+          parentNode.children.forEach(node => {
+            getOpenNode(node)
+          })
+        }
+      }
+      getOpenNode(appTrees[0])
+
+      let Keys = result.data.map(item => item.MenuID)
+      let _tree = this.getSelectTree(fromJS(appTrees).toJS(), Keys)
+
+
+      let _openkeys = []
+      let _getOpenNode = (parentNode) => {
+        if (parentNode && parentNode.children && parentNode.children.length > 0) {
+          _openkeys.push(parentNode.key)
+          parentNode.children.forEach(node => {
+            _getOpenNode(node)
+          })
+        }
+      }
+      _getOpenNode(_tree[0])
+
+      this.setState({
+        loadingAppTree: false,
+        appInitCheckKeys: _initKeys,
+        appCheckedKeys: _checkedKeys,
+        appOpenKeys: _openKeys,
+        selectAppTrees: _tree,
+        selectAppOpenKeys: _openkeys
+      })
+    } else {
+      this.setState({
+        loadingAppTree: false
       })
       notification.warning({
         top: 92,
@@ -334,10 +461,10 @@
     if (selectRoleId === role.RoleID) return
 
     this.setState({
-      selectRoleId: role.RoleID,
-      loadingTree: true
+      selectRoleId: role.RoleID
     }, () => {
       this.getSelectMenuList()
+      this.getSelectAppNodeList()
     })
   }
 
@@ -369,23 +496,13 @@
   }
 
   /**
-   * @description 宸插垎閰嶄笌鏈垎閰嶅垏鎹�
+   * @description 鑺傜偣閫夋嫨浜嬩欢
    */
-  changeTab = (key) => {
-    const { selectRoleId } = this.state
-
+  onAppCheck = (checkedKeys, info) => {
     this.setState({
-      tabKey: key === 'selected' ? key : '',
-      loadingTree: true
-    }, () => {
-      if (selectRoleId) {
-        this.getSelectMenuList()
-      } else {
-        this.setState({
-          selectMenuTrees: [],
-          loadingTree: false
-        })
-      }
+      appCheckedKeys: checkedKeys,
+      appHalfCheckedKeys: info.halfCheckedKeys,
+      appInitCheckKeys: null
     })
   }
 
@@ -429,36 +546,88 @@
 
     Api.getSystemConfig(param).then(result => {
       if (result.status) {
-        if (!window.GLOB.mainSystemApi) {
-          notification.success({
-            top: 92,
-            message: '淇濆瓨鎴愬姛',
-            duration: 2
-          })
-          this.setState({
-            submitloading: false,
-            loadingTree: true
-          }, () => {
-            this.getSelectMenuList()
-          })
-        } else {
+        notification.success({
+          top: 92,
+          message: '淇濆瓨鎴愬姛',
+          duration: 2
+        })
+        this.setState({
+          submitloading: false
+        }, () => {
+          this.getSelectMenuList()
+        })
+        if (window.GLOB.mainSystemApi) {
           Api.getLocalConfig(localParam).then(res => {
-            if (res.status) {
-              notification.success({
+            if (!res.status) {
+              notification.warning({
                 top: 92,
-                message: '淇濆瓨鎴愬姛',
-                duration: 2
+                message: res.message,
+                duration: 5
               })
-              this.setState({
-                submitloading: false,
-                loadingTree: true
-              }, () => {
-                this.getSelectMenuList()
-              })
-            } else {
-              this.setState({
-                submitloading: false
-              })
+            }
+          })
+        }
+      } else {
+        this.setState({
+          submitloading: false
+        })
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+      }
+    })
+  }
+
+  /**
+   * @description 鎻愪氦宸查�夌殑鏉冮檺
+   */
+  appRoleSubmit = () => {
+    const { selectApp, selectSubApp, appCheckedKeys, appHalfCheckedKeys, selectRoleId, appInitCheckKeys } = this.state
+
+    let _keys = []
+
+    if (appInitCheckKeys) {
+      _keys = appInitCheckKeys
+    } else {
+      _keys = appCheckedKeys.concat(appHalfCheckedKeys)
+    }
+
+    let param = {
+      func: 's_rolemenu_sub',
+      RoleID: selectRoleId,
+      TypeCharOne: selectApp.kei_no,
+      typename: selectSubApp.typename,
+      lang: selectSubApp.lang,
+      RoleMenu: _keys.map(key => {
+        return {MenuID: key}
+      })
+    }
+
+    let localParam = fromJS(param).toJS()
+    localParam.func = 's_rolemenu_sub_local'
+
+    this.setState({
+      submitloading: true
+    })
+
+    Api.getSystemConfig(param).then(result => {
+      if (result.status) {
+        notification.success({
+          top: 92,
+          message: '淇濆瓨鎴愬姛',
+          duration: 2
+        })
+        this.setState({
+          submitloading: false
+        }, () => {
+          this.getSelectAppNodeList()
+        })
+        
+        if (window.GLOB.mainSystemApi) {
+          Api.getLocalConfig(localParam).then(res => {
+            if (!res.status) {
               notification.warning({
                 top: 92,
                 message: res.message,
@@ -489,25 +658,168 @@
       loading: true,
       loadingTree: false,
       roleList: null,
+      filterRoleList: [],
       selectRoleId: '',
       mainMenus: null,
       menuTrees: null,
       checkedKeys: [],
+      appCheckedKeys: [],
       menuOpenKeys: [],
       selectMenuTrees: null,
       selectMenuOpenKeys: [],
       primarykey: '',
-      tabKey: '',
       submitloading: false,
-      initCheckKeys: null
+      initCheckKeys: null,
+      appInitCheckKeys: null,
+      activeKey: 'manage',
+      appTrees: null,
+      appOpenKeys: [],
+      applist: [],
+      selectApp: null,
+      selectSubApp: null,
+      selectAppTrees: null,
+      selectAppOpenKeys: []
     })
     this.getRoleList()
     this.getMainMenuList()
+    this.getAppList()
+  }
+
+  filterRole = () => {
+    const { primarykey, roleList } = this.state
+
+    let _roleList  = []
+
+    if (roleList && roleList.length > 0) {
+      _roleList = roleList.filter(role => role.RoleName.toLowerCase().indexOf(primarykey.toLowerCase()) >= 0)
+    }
+
+    this.setState({filterRoleList: _roleList})
+  }
+
+  getTreeList = () => {
+    const { selectApp, selectSubApp } = this.state
+    let param = {
+      func: 's_get_menus_roles_tree',
+      typecharone: selectApp.kei_no,
+      lang: selectSubApp.lang
+    }
+
+    param.upid = md5(window.GLOB.appkey + selectApp.kei_no + selectSubApp.typename + selectSubApp.lang)
+
+    this.setState({loadingAppTree: true})
+
+    Api.getCloudConfig(param).then(result => {
+      if (result.status) {
+        if (!result.data || result.data.length === 0) {
+          this.setState({loadingAppTree: false, appTrees: []})
+        } else {
+          this.initTrees(result.data)
+        }
+      } else {
+        this.setState({loadingAppTree: false, appTrees: []})
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+      }
+    })
+  }
+
+  initTrees = (data) => {
+    let trees = []
+    let map = new Map()
+    let _data = data.sort((a, b) => {
+      return a.sort - b.sort
+    })
+
+    _data.forEach(menu => {
+      if (menu.ParentID === 'top') {
+        trees.push({
+          key: menu.MenuID,
+          title: menu.MenuName,
+          children: []
+        })
+      } else {
+        map.set(menu.MenuID, menu)
+      }
+    })
+
+    let reset = (m) => {
+      return m.map(n => {
+        [...map.keys()].forEach(key => {
+          if (map.get(key).ParentID === n.key) {
+            let c = map.get(key)
+            n.children.push({
+              key: c.MenuID,
+              title: c.MenuName,
+              children: []
+            })
+            map.delete(key)
+          }
+        })
+        if (n.children.length > 0) {
+          n.children = reset(n.children)
+        }
+        return n
+      })
+    }
+
+    trees = reset(trees)
+
+    let expandedKeys = this.getExpandedKeys(trees, 0, [])
+
+    this.setState({loadingAppTree: false, appTrees: trees, appOpenKeys: expandedKeys}, () => {
+      this.getSelectAppNodeList()
+    })
+  }
+
+  getExpandedKeys = (trees, i, keys) => {
+    if (i >= 3 || !trees[0]) return keys
+
+    keys.push(trees[0].key)
+
+    i++
+
+    if (trees[0].children && trees[0].children.length > 0) {
+      keys = this.getExpandedKeys(trees[0].children, i, keys)
+    }
+
+    return keys
+  }
+
+  changeType = (val) => {
+    this.setState({
+      activeKey: val
+    }, () => {
+      this.getSelectMenuList()
+      this.getSelectAppNodeList()
+    })
+  }
+
+  changeApp = (val) => {
+    const { applist } = this.state
+
+    let app = applist.filter(item => item.ID === val)[0]
+
+    this.setState({selectApp: app, selectSubApp: null})
+  }
+  
+  changeSubApp = (val) => {
+    const { selectApp } = this.state
+
+    let subapp = selectApp.sublist.filter(item => item.ID === val)[0]
+
+    this.setState({selectSubApp: subapp}, () => {
+      this.getTreeList()
+    })
   }
 
   UNSAFE_componentWillMount () {
     this.getRoleList()
     this.getMainMenuList()
+    this.getAppList()
   }
 
   componentDidMount () {
@@ -529,66 +841,134 @@
   }
 
   render() {
-    const { roleList, loading, loadingTree, primarykey, menuTrees, checkedKeys, menuOpenKeys, selectMenuTrees, tabKey, selectRoleId, selectMenuOpenKeys, submitloading } = this.state
-
-    let _roleList  = []
-
-    if (roleList && roleList.length > 0) {
-      _roleList = roleList.filter(role => role.RoleName.toLowerCase().indexOf(primarykey.toLowerCase()) >= 0)
-    }
+    const { activeKey, filterRoleList, applist, selectApp, selectSubApp, loading, loadingTree, loadingAppTree, primarykey, menuTrees, appTrees, checkedKeys, appCheckedKeys, menuOpenKeys, selectMenuTrees, selectAppTrees, selectRoleId, selectMenuOpenKeys, selectAppOpenKeys, submitloading, appOpenKeys } = this.state
 
     return (
       <div className="rolemanage">
         {loading && <Spin size="large" />}
-        <Row gutter={16}>
-          <Col span={5}>
-            <Card
-              className="role-list"
-              title={
-                <span className="role-title">
-                  <Icon type="bank" />
-                  <span className="title">{this.state.dict['main.role.title']}</span>
-                  <Search placeholder="" onSearch={value => this.setState({primarykey: value})} />
-                </span>
-              }
-              bordered={false}
-            >
-              <Menu
-                onClick={this.handleClick}
-                mode="inline"
-              >
-                {_roleList.map((role, index) =>
-                  <Menu.Item key={index} onClick={() => this.changeRole(role)}>{role.RoleName}</Menu.Item>
-                )}
-              </Menu>
-            </Card>
-          </Col>
-          <Col span={19}>
-            <Tabs defaultActiveKey="all" tabBarExtraContent={!tabKey && selectRoleId ? <Button type="primary" loading={submitloading} onClick={this.roleSubmit}>鎻愪氦</Button> : null} onChange={this.changeTab}>
-              <TabPane tab="鑿滃崟鍒楄〃" key="all">
-                {!loadingTree && menuTrees && menuTrees.length > 0 ? <Tree
-                  checkable
-                  selectable={false}
-                  defaultExpandedKeys={menuOpenKeys}
-                  autoExpandParent={true}
-                  onCheck={this.onCheck}
-                  checkedKeys={checkedKeys}
+        <Tabs activeKey={activeKey} type="card" onChange={this.changeType}>
+          <TabPane tab="绠$悊绯荤粺" key="manage">
+            <Row gutter={16}>
+              <Col span={5}>
+                <Card
+                  className="role-list"
+                  title={
+                    <span className="role-title">
+                      <Icon type="bank" />
+                      <span className="title">瑙掕壊</span>
+                      <Search placeholder="" value={primarykey} onChange={e => this.setState({primarykey: e.target.value})} onSearch={this.filterRole} />
+                    </span>
+                  }
+                  bordered={false}
                 >
-                  {this.renderTreeNodes(menuTrees)}
-                </Tree> : null}
-                {!loadingTree && (!menuTrees || menuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
-                {loadingTree ? <Spin className="load-tree" /> : null}
-              </TabPane>
-              <TabPane tab="宸叉巿鏉冭彍鍗�" key="selected">
-                {!loadingTree && selectMenuTrees && selectMenuTrees.length > 0 ? <DirectoryTree multiple defaultExpandedKeys={selectMenuOpenKeys}>
-                  {this.renderTreeNodes(selectMenuTrees)}
-                </DirectoryTree> : null}
-                {!loadingTree && (!selectMenuTrees || selectMenuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
-                {loadingTree ? <Spin className="load-tree" /> : null}
-              </TabPane>
-            </Tabs>
-          </Col>
-        </Row>
+                  <Menu selectedKeys={[selectRoleId]} mode="inline">
+                    {filterRoleList.map((role) =>
+                      <Menu.Item key={role.RoleID} onClick={() => this.changeRole(role)}>{role.RoleName}</Menu.Item>
+                    )}
+                  </Menu>
+                </Card>
+              </Col>
+              <Col span={19}>
+                <Tabs defaultActiveKey="all">
+                  <TabPane tab="鏉冮檺" key="all">
+                    {selectRoleId ? <Button className="submitBtn" type="primary" loading={submitloading} onClick={this.roleSubmit}>鎻愪氦</Button> : null}
+                    {!loadingTree && menuTrees && menuTrees.length > 0 ? <Tree
+                      checkable
+                      selectable={false}
+                      defaultExpandedKeys={menuOpenKeys}
+                      autoExpandParent={true}
+                      onCheck={this.onCheck}
+                      checkedKeys={checkedKeys}
+                    >
+                      {this.renderTreeNodes(menuTrees)}
+                    </Tree> : null}
+                    {!loadingTree && (!menuTrees || menuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
+                    {loadingTree ? <Spin className="load-tree" /> : null}
+                  </TabPane>
+                  <TabPane tab="宸叉巿鏉�" key="selected">
+                    {!loadingTree && selectMenuTrees && selectMenuTrees.length > 0 ? <DirectoryTree multiple defaultExpandedKeys={selectMenuOpenKeys}>
+                      {this.renderTreeNodes(selectMenuTrees)}
+                    </DirectoryTree> : null}
+                    {!loadingTree && (!selectMenuTrees || selectMenuTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
+                    {loadingTree ? <Spin className="load-tree" /> : null}
+                  </TabPane>
+                </Tabs>
+              </Col>
+            </Row>
+          </TabPane>
+          <TabPane tab="搴旂敤" key="app">
+            <div className="app-select">
+              <div className="mk-form-item">
+                <label>搴旂敤:</label>
+                <Select value={selectApp ? selectApp.ID : ''} onChange={this.changeApp}>
+                  {applist.map(option =>
+                    <Select.Option key={option.ID} value={option.ID}>{option.remark}</Select.Option>
+                  )}
+                </Select>
+              </div>
+              <div className="mk-form-item">
+                <label>瀛愬簲鐢�:</label>
+                <Select value={selectSubApp ? selectSubApp.ID : ''} onChange={this.changeSubApp}>
+                  {selectApp && selectApp.sublist.map(option =>
+                    <Select.Option key={option.ID} value={option.ID}>{`${option.typename}锛�${option.lang}锛塦}</Select.Option>
+                  )}
+                </Select>
+              </div>
+            </div>
+            <Row gutter={16}>
+              <Col span={5}>
+                <Card
+                  className="role-list"
+                  title={
+                    <span className="role-title">
+                      <Icon type="bank" />
+                      <span className="title">瑙掕壊</span>
+                      <Search placeholder="" value={primarykey} onChange={e => this.setState({primarykey: e.target.value})} onSearch={this.filterRole} />
+                    </span>
+                  }
+                  bordered={false}
+                >
+                  <Menu selectedKeys={[selectRoleId]} mode="inline">
+                    {filterRoleList.map((role) =>
+                      <Menu.Item key={role.RoleID} onClick={() => this.changeRole(role)}>{role.RoleName}</Menu.Item>
+                    )}
+                  </Menu>
+                </Card>
+              </Col>
+              <Col span={19}>
+                <Tabs defaultActiveKey="all">
+                  <TabPane tab="鏉冮檺" key="all">
+                    {selectSubApp && selectRoleId ? <Button className="submitBtn" type="primary" loading={submitloading} onClick={this.appRoleSubmit}>鎻愪氦</Button> : null}
+                    {selectSubApp ? <div>
+                      {!loadingAppTree && appTrees && appTrees.length > 0 ? <Tree
+                        checkable
+                        selectable={false}
+                        defaultExpandedKeys={appOpenKeys}
+                        autoExpandParent={true}
+                        onCheck={this.onAppCheck}
+                        checkedKeys={appCheckedKeys}
+                      >
+                        {this.renderTreeNodes(appTrees)}
+                      </Tree> : null}
+                      {!loadingAppTree && (!appTrees || appTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
+                      {loadingAppTree ? <Spin className="load-tree" /> : null}
+                    </div> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={'璇烽�夋嫨瀛愬簲鐢�'} />}
+                  </TabPane>
+                  <TabPane tab="宸叉巿鏉�" key="selected">
+                    {selectSubApp ? <div>
+                      {!loadingAppTree && selectAppTrees && selectAppTrees.length > 0 ? <DirectoryTree multiple defaultExpandedKeys={selectAppOpenKeys}>
+                        {this.renderTreeNodes(selectAppTrees)}
+                      </DirectoryTree> : null}
+                      {!loadingAppTree && (!selectAppTrees || selectAppTrees.length === 0) ? <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} /> : null}
+                      {loadingAppTree ? <Spin className="load-tree" /> : null}
+                    </div> : <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={'璇烽�夋嫨瀛愬簲鐢�'} />}
+                  </TabPane>
+                </Tabs>
+              </Col>
+            </Row>
+          </TabPane>
+        </Tabs>
+        
       </div>
     )
   }

--
Gitblit v1.8.0