From 4d6b9f8a2d7b316633e43b489eae9ada949c07b5 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 10 九月 2024 10:18:08 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/views/rolemanage/index.jsx |  180 +++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 107 insertions(+), 73 deletions(-)

diff --git a/src/views/rolemanage/index.jsx b/src/views/rolemanage/index.jsx
index e246e2b..2fdc6e4 100644
--- a/src/views/rolemanage/index.jsx
+++ b/src/views/rolemanage/index.jsx
@@ -1,10 +1,9 @@
 import React, {Component} from 'react'
 import { fromJS } from 'immutable'
-import { Spin, notification, Button, Table, Modal, ConfigProvider, Tree, Input, Empty } from 'antd'
+import { Spin, notification, Button, Table, Modal, Tree, Input, Empty } from 'antd'
 import moment from 'moment'
 import md5 from 'md5'
-import zhCN from 'antd/es/locale/zh_CN'
-import { ApiOutlined } from '@ant-design/icons'
+import { ApiOutlined, SoundOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
@@ -23,13 +22,14 @@
     app: null,
     loading: false,
     menulist: [],
+    sortType: '',
     columns: [
       {
         title: '鑿滃崟鍚嶇О', dataIndex: 'MenuName', key: 'MenuName', align: 'center', render: (text, record) => {
-          if (record.extra) {
+          if (record.extra || this.state.appKeys.includes(record.MenuID)) {
             return <span style={{color: '#1890ff'}}>{text}</span>
-          } else if (record.interfaces === 'true') {
-            return <span><ApiOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" />{text}</span>
+          } else if (record.interfaces === 'true' || record.msg === 'true') {
+            return <span>{record.interfaces === 'true' ? <ApiOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{record.msg === 'true' ? <SoundOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓彂閫佷簡娑堟伅" /> : null}{text}</span>
           }
           return text
         }
@@ -38,11 +38,19 @@
         title: '鑿滃崟鍙傛暟', dataIndex: 'MenuNo', key: 'MenuNo', align: 'center'
       },
       {
+        title: '淇敼鏃堕棿', dataIndex: 'modifydate', key: 'modifydate', align: 'center', sorter: true, render: (text, record) => {
+          if (window.GLOB.upStatus && record.up_action === 'Y') {
+            return <span style={{color: 'orange'}}>{text}</span>
+          }
+          return text
+        }
+      },
+      {
         title: '鎿嶄綔',
         key: 'action',
         align: 'center',
         render: (text, record) => (
-          <div>
+          <div style={{minWidth: '125px'}}>
             {record.type !== 'none' ?
               <Button type="link" onClick={() => this.deleteMenu(record)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button> :
               <Button type="link" onClick={() => {
@@ -66,7 +74,8 @@
     trees: null,
     expandedKeys: [],
     searchkey: '',
-    appViewList: []
+    appViewList: [],
+    appKeys: []
   }
 
   oriTrees = null
@@ -74,6 +83,10 @@
   UNSAFE_componentWillMount() {
     document.body.className = ''
     let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
+
+    if (param.lang) {
+      sessionStorage.setItem('lang', param.lang)
+    }
 
     this.setState({app: param}, () => {
       this.getTreeList()
@@ -106,7 +119,9 @@
         })
         return
       }
-      this.setState({appViewList: result.data || []})
+
+      let data = result.data || []
+      this.setState({appViewList: data, appKeys: data.map(item => item.keys_id)})
     })
   }
 
@@ -142,6 +157,7 @@
               let pageParam = JSON.parse(window.decodeURIComponent(window.atob(item.menus_rolelist)))
               item.nodes = pageParam
               item.interfaces = pageParam.interfaces || 'false'
+              item.msg = pageParam.msg || 'false'
               
               if (pageParam.type) {
                 item.type = pageParam.type
@@ -370,7 +386,8 @@
       ParentID: 'mk_app',
       TypeCharOne: app.kei_no,
       typename: app.typename,
-      lang: app.lang
+      lang: app.lang,
+      TYPE: 30
     }).then(res => {
       if (res.status) {
         this.setState({
@@ -393,7 +410,7 @@
 
   deleteMenu = (record) => {
     const { app, appViewList } = this.state
-    const _this = this
+    const that = this
 
     let param = {
       func: 'sPC_MainMenu_Del',
@@ -406,7 +423,7 @@
     let _param = {
       func: 's_kei_link_keyids_addupt',
       BID: app.ID,
-      exec_type: 'y',
+      exec_type: 'x',
       LText: ''
     }
 
@@ -415,7 +432,7 @@
     if (appViewList.length !== _appViewList.length) {
       _param.LText = _appViewList.map(item => `select '${item.keys_id}','${item.keys_type}','${item.kei_no}','${item.appkey}','${item.bid}','${sessionStorage.getItem('CloudUserID')}','${item.remark}'`)
       _param.LText = _param.LText.join(' union all ')
-      _param.LText = Utils.formatOptions(_param.LText)
+      _param.LText = Utils.formatOptions(_param.LText, 'x')
   
       _param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       _param.secretkey = Utils.encrypt('', _param.timestamp)
@@ -434,7 +451,7 @@
                 message: '鎿嶄綔鎴愬姛锛�',
                 duration: 3
               })
-              _this.getMenuList(true)
+              that.getMenuList(true)
 
               if (_param) {
                 Api.getCloudConfig(_param).then(res => {
@@ -445,7 +462,7 @@
                       duration: 5
                     })
                   } else {
-                    _this.setState({appViewList: _appViewList})
+                    that.setState({appViewList: _appViewList})
                   }
                 })
               }
@@ -666,12 +683,12 @@
   }
 
   initTree = () => {
-    const _this = this
+    const that = this
     confirm({
       content: '鏉冮檺鏍戜細閲嶆柊鐢熸垚锛岀‘瀹氭墽琛屽悧锛�',
       onOk() {
         return new Promise(resolve => {
-          _this.getMenuList(true, resolve)
+          that.getMenuList(true, resolve)
         })
       },
       onCancel() {}
@@ -679,13 +696,13 @@
   }
 
   syncTree = () => {
-    const _this = this
+    const that = this
 
     confirm({
       content: '鍚屾浼氭牴鎹彍鍗曞垹闄ゆ垨鏂板鑺傜偣锛岀‘瀹氭墽琛屽悧锛�',
       onOk() {
         return new Promise(resolve => {
-          _this.syncMenutree(resolve)
+          that.syncMenutree(resolve)
         })
       },
       onCancel() {}
@@ -694,7 +711,7 @@
 
   saveTree = () => {
     // const { trees } = this.state
-    const _this = this
+    const that = this
 
     // if (!trees || trees.length === 0) {
     //   notification.warning({
@@ -709,7 +726,7 @@
       content: '纭畾鎵ц鍚楋紵',
       onOk() {
         return new Promise(resolve => {
-          _this.execSave(resolve)
+          that.execSave(resolve)
         })
       },
       onCancel() {}
@@ -878,70 +895,87 @@
     window.open(window.location.href.replace(/#.+/ig, `#/${route}/${window.btoa(window.encodeURIComponent(JSON.stringify({...app, MenuID: item.MenuID, type: 'app'})))}`))
   }
 
+  changeTable = (pagination, filters, sorter) => {
+    this.setState({sortType: sorter.order || ''})
+  }
+
   render () {
-    const { app, loading, columns, menulist, trees, searchkey } = this.state
-    let _menulist = menulist
+    const { app, loading, columns, menulist, trees, searchkey, sortType } = this.state
+    let _menulist = fromJS(menulist).toJS()
 
     if (searchkey) {
       _menulist = _menulist.filter(item => item.MenuName.toLowerCase().indexOf(searchkey.toLowerCase()) > -1)
     }
 
+    if (sortType === 'ascend') {
+      _menulist.sort((a, b) => {
+        if (a.modifydate > b.modifydate) return 1
+        if (a.modifydate < b.modifydate) return -1
+        return 0
+      })
+    } else if (sortType === 'descend') {
+      _menulist.sort((a, b) => {
+        if (a.modifydate < b.modifydate) return 1
+        if (a.modifydate > b.modifydate) return -1
+        return 0
+      })
+    }
+
     return (
       <div className="mk-role-manage">
-        <ConfigProvider locale={zhCN}>
-          <Header app={app} />
-          {loading ?
-            <div className="loading-mask">
-              <Spin size="large" />
-            </div> : null
-          }
-          <div className="view-wrap">
-            <div className="left-view">
-              <div className="app-table">
-                <div className="app-action">
-                  <Button className="mk-green" onClick={this.triggerThaw}>瑙e喕鑿滃崟</Button>
-                  <Search placeholder="缁煎悎鎼滅储" onSearch={value => this.setState({ searchkey: value })} enterButton />
-                </div>
-                <Table
-                  rowKey="MenuID"
-                  columns={columns}
-                  dataSource={_menulist}
-                  pagination={false}
-                />
-              </div>
-            </div>
-            <div className="right-view">
+        <Header app={app} />
+        {loading ?
+          <div className="loading-mask">
+            <Spin size="large" />
+          </div> : null
+        }
+        <div className="view-wrap">
+          <div className="left-view">
+            <div className="app-table">
               <div className="app-action">
-                <Button className="mk-primary" onClick={this.initTree}>閲嶇疆</Button>
-                {/* <Button className="mk-purple" onClick={this.syncTree}>鍚屾</Button> */}
-                <Button className="mk-green save" onClick={this.saveTree}>淇濆瓨</Button>
+                <Button className="mk-green" onClick={this.triggerThaw}>瑙e喕鑿滃崟</Button>
+                <Search placeholder="缁煎悎鎼滅储" onSearch={value => this.setState({ searchkey: value })} enterButton />
               </div>
-              {trees && trees.length ? <Tree
-                className="draggable-tree"
-                defaultExpandedKeys={this.state.expandedKeys}
-                // showLine
-                draggable
-                blockNode
-                onDrop={this.onDrop}
-              >
-                {this.renderNode(trees)}
-              </Tree> : <div className="empty">
-                <Empty />
-              </div>}
+              <Table
+                rowKey="MenuID"
+                columns={columns}
+                dataSource={_menulist}
+                pagination={false}
+                onChange={this.changeTable}
+              />
             </div>
           </div>
-          <Modal
-            title="瑙i櫎鍐荤粨"
-            visible={this.state.visible}
-            width={600}
-            onOk={this.thawSubmit}
-            confirmLoading={this.state.confirmLoading}
-            onCancel={() => this.setState({visible: false, targetKeys: []})}
-            destroyOnClose
-          >
-            <TransferForm onChange={(vals) => this.setState({targetKeys: vals})} menulist={this.state.thawmenulist}/>
-          </Modal>
-        </ConfigProvider>
+          <div className="right-view">
+            <div className="app-action">
+              <Button className="mk-primary" onClick={this.initTree}>閲嶇疆</Button>
+              {/* <Button className="mk-purple" onClick={this.syncTree}>鍚屾</Button> */}
+              <Button className="mk-green save" onClick={this.saveTree}>淇濆瓨</Button>
+            </div>
+            {trees && trees.length ? <Tree
+              className="draggable-tree"
+              defaultExpandedKeys={this.state.expandedKeys}
+              // showLine
+              draggable
+              blockNode
+              onDrop={this.onDrop}
+            >
+              {this.renderNode(trees)}
+            </Tree> : <div className="empty">
+              <Empty />
+            </div>}
+          </div>
+        </div>
+        <Modal
+          title="瑙i櫎鍐荤粨"
+          visible={this.state.visible}
+          width={600}
+          onOk={this.thawSubmit}
+          confirmLoading={this.state.confirmLoading}
+          onCancel={() => this.setState({visible: false, targetKeys: []})}
+          destroyOnClose
+        >
+          <TransferForm onChange={(vals) => this.setState({targetKeys: vals})} menulist={this.state.thawmenulist}/>
+        </Modal>
       </div>
     )
   }

--
Gitblit v1.8.0