From cbeffcc0902631909c0373f274752a97ddaf2d4e Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期六, 06 八月 2022 01:41:54 +0800
Subject: [PATCH] 2022-08-06

---
 src/components/header/index.jsx |  206 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 143 insertions(+), 63 deletions(-)

diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 22d4bf1..afbac7f 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -4,16 +4,17 @@
 import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
 import moment from 'moment'
-import { Dropdown, Menu, Icon, Modal, Form, notification, Switch, Input } from 'antd'
+import { Dropdown, Menu, Modal, Form, notification, Switch, Input } from 'antd'
+import { SearchOutlined, DownOutlined, MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons'
 
 import {
   toggleCollapse,
-  modifyMenuTree,
   modifyMainMenu,
   initActionPermission,
   initMenuPermission,
   logout
 } from '@/store/action'
+import asyncComponent from '@/utils/asyncSpinComponent'
 import Api from '@/api'
 import MKEmitter from '@/utils/events.js'
 import options from '@/store/options.js'
@@ -21,12 +22,12 @@
 import enUS from '@/locales/en-US/main.js'
 import Utils from '@/utils/utils.js'
 import avatar from '@/assets/img/avatar.jpg'
-import Resetpwd from './resetpwd'
-import LoginForm from './loginform'
 import './index.scss'
 
 const { confirm } = Modal
 const { Search } = Input
+const Resetpwd = asyncComponent(() => import('./resetpwd'))
+const LoginForm = asyncComponent(() => import('./loginform'))
 
 class Header extends Component {
   static propTpyes = {
@@ -37,8 +38,10 @@
     visible: false, // 淇敼瀵嗙爜妯℃�佹
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     confirmLoading: false,
-    userName: sessionStorage.getItem('User_Name'),
+    userName: '',
+    fullName: '',
     logourl: window.GLOB.mainlogo,
+    appVersion: window.GLOB.appVersion,
     loginVisible: false,
     loginLoading: false,
     avatar: Utils.getrealurl(sessionStorage.getItem('avatar')),
@@ -64,6 +67,8 @@
   }
 
   resetPwdSubmit = () => {
+    if (!this.formRef) return
+
     this.formRef.handleConfirm().then(res => {
       this.setState({
         confirmLoading: true
@@ -87,9 +92,14 @@
         if (result.status) {
           notification.success({
             top: 92,
-            message: this.state.dict['main.password.resetsuccess'],
+            message: '淇敼鎴愬姛锛岃閲嶆柊鐧诲綍銆�',
             duration: 2
           })
+          setTimeout(() => {
+            sessionStorage.clear()
+            this.props.logout()
+            this.props.history.replace('/login')
+          }, 2000)
         } else {
           notification.warning({
             top: 92,
@@ -136,31 +146,33 @@
     // 鑾峰彇瑙掕壊鏉冮檺
     let roledefer = new Promise(resolve => {
       // edition_type 鎺ュ彛鐗堟湰鎺у埗 ''銆�'Y'銆�'A'
-      Api.getSystemConfig({
-        func: 's_Get_TrdMenu_Role',
-        edition_type: 'A',
-        pro_sys: window.GLOB.systemType === 'production' ? 'Y' : ''
-      }).then(result => {
-        let _permAction = {loaded: true} // 鎸夐挳鏉冮檺
-
-        if (result && result.status) {
-          if (result.UserRoles_Menu) {
-            result.UserRoles_Menu.forEach(menu => {
-              if (!menu.MenuID) return
-              _permAction[menu.MenuID] = true
+      setTimeout(() => {
+        Api.getSystemConfig({
+          func: 's_Get_TrdMenu_Role',
+          edition_type: 'A',
+          pro_sys: window.GLOB.systemType === 'production' ? 'Y' : ''
+        }).then(result => {
+          let _permAction = {loaded: true} // 鎸夐挳鏉冮檺
+  
+          if (result && result.status) {
+            if (result.UserRoles_Menu) {
+              result.UserRoles_Menu.forEach(menu => {
+                if (!menu.MenuID) return
+                _permAction[menu.MenuID] = true
+              })
+            }
+          } else if (result) {
+            notification.error({
+              top: 92,
+              message: result.message,
+              duration: 10
             })
           }
-        } else if (result) {
-          notification.error({
-            top: 92,
-            message: result.message,
-            duration: 10
-          })
-        }
-
-        this.props.initActionPermission(_permAction)
-        resolve()
-      })
+  
+          this.props.initActionPermission(_permAction)
+          resolve()
+        })
+      }, 50)
     })
 
     // 鑾峰彇涓昏彍鍗曞弬鏁�
@@ -180,10 +192,19 @@
 
         const { menulist, thdMenuList } = this.getMenulist(result)
 
+        let systems = []
+        if ((options.sysType === 'local' || options.sysType === 'SSO') && result.sys_list) {
+          systems = result.sys_list
+
+          if (options.sysType === 'local' && window.GLOB.systemType !== 'production' && systems.length > 10) {
+            systems.length = 10
+          }
+        }
+
         this.setState({
           menulist,
           thdMenuList,
-          systems: window.GLOB.systemType === 'production' || options.sysType === 'SSO' ? (result.sys_list || []) : []
+          systems: systems
         })
         
         let mainMenu = menulist[0] || ''
@@ -210,7 +231,6 @@
           sessionStorage.removeItem('ThirdMenu')
         }
 
-        this.props.modifyMenuTree(menulist)
         this.props.modifyMainMenu(mainMenu)
         this.props.initMenuPermission([...thdMenuList, {MenuID: 'home_page_id', EasyCode: '', MenuName: 'home', type: 'CustomPage'}])
 
@@ -374,17 +394,38 @@
       sessionStorage.setItem('dataM', sessionStorage.getItem('cloudDataM'))
       sessionStorage.setItem('isEditState', 'true')
 
+      this.props.modifyMainMenu(null)
+
       this.props.history.replace('/design')
     }
   }
 
   loginSubmit = () => {
+    if (!this.loginRef) return
+
     this.setState({
       loginLoading: true
     })
+
     this.loginRef.handleConfirm().then(param => {
       Api.getusermsg(param.username, param.password, true).then(res => {
         if (res.status) {
+          this.setState({
+            loginLoading: false
+          })
+
+          if (res.modifydate) {
+            let s = (new Date().getTime() - new Date(res.modifydate).getTime()) / (1000 * 24 * 60 * 60)
+            if (!isNaN(s) && s > 90) {
+              Modal.warning({
+                width: 520,
+                title: <span>绯荤粺妫�娴嬪埌鎮ㄧ殑璐︽埛瀛樺湪椋庨櫓锛岃鍙婃椂鍒�<a target="_blank" rel="noopener noreferrer" href="https://cloud.mk9h.cn/admin/index.html">浜戜腑蹇�</a>淇敼瀵嗙爜锛�</span>,
+                okText: '鐭ラ亾浜�'
+              })
+              return
+            }
+          }
+
           sessionStorage.setItem('CloudUserID', res.UserID)
           sessionStorage.setItem('CloudLoginUID', res.LoginUID)
           sessionStorage.setItem('CloudUserName', res.UserName)
@@ -397,8 +438,14 @@
           sessionStorage.setItem('dataM', res.dataM ? 'true' : '')
           sessionStorage.setItem('isEditState', 'true')
 
-          this.setSystemFuncs()
+          if (param.remember) {
+            let _url = window.location.href.split('#')[0] + 'cloud'
 
+            localStorage.setItem(_url, window.btoa(window.encodeURIComponent(JSON.stringify({time: new Date().getTime(), username: param.username, password: param.password}))))
+          }
+
+          this.setSystemFuncs()
+          this.props.modifyMainMenu(null)
           this.props.history.replace('/design')
         } else {
           if (res.message.indexOf('瀵嗙爜閿欒') > -1) {
@@ -430,7 +477,6 @@
             message: result.message,
             duration: 10
           })
-          return
         } else if (result.func_detail && result.func_detail.length > 0) {
           this.writeFuncs(result.func_detail)
         }
@@ -535,18 +581,40 @@
       url = url + '/'
     }
 
-    let href = url + 'index.html#/ssologin/' + window.btoa(window.encodeURIComponent(JSON.stringify({
-      UserID: sessionStorage.getItem('UserID'),
-      LoginUID: sessionStorage.getItem('LoginUID'),
-      User_Name: sessionStorage.getItem('User_Name'),
-      Full_Name: sessionStorage.getItem('Full_Name'),
-      avatar: sessionStorage.getItem('avatar'),
-      dataM: system.dataM ? 'true' : '',
-      debug: system.debug || '',
-      role_id: system.role_id || ''
-    })))
+    let key = Utils.getuuid()
 
-    window.open(href)
+    let _param = {
+      func: 'webapi_scan_binding_key',
+      binding_type: 'mk',
+      scan_type: 'toggle',
+      scan_appkey: system.scan_appkey,
+      id: key
+    }
+
+    Api.getSystemConfig(_param).then(res => {
+      if (!res.status) {
+        notification.warning({
+          top: 92,
+          message: res.message,
+          duration: 5
+        })
+      } else if (res.thd_party_appid && res.thd_party_member_id && res.thd_party_openid) {
+        let href = url + 'admin/index.html#/ssologin/' + window.btoa(window.encodeURIComponent(JSON.stringify({
+          appid: res.thd_party_appid,
+          memberId: res.thd_party_member_id,
+          openid: res.thd_party_openid,
+          key: key
+        })))
+
+        window.open(href)
+      } else {
+        notification.warning({
+          top: 92,
+          message: '淇℃伅缂哄け锛岃鑱旂郴绠$悊鍛橈紒',
+          duration: 5
+        })
+      }
+    })
   }
 
   dropdownMenuChange = (visible) => {
@@ -563,14 +631,15 @@
   UNSAFE_componentWillMount () {
     // 缁勪欢鍔犺浇鏃讹紝鑾峰彇鑿滃崟鏁版嵁
     this.getRolesMenu()
-  }
 
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    if (!is(fromJS(this.props.menuTree), fromJS(nextProps.menuTree)) && !is(fromJS(this.state.menulist), fromJS(nextProps.menuTree))) {
-      this.setState({
-        menulist: nextProps.menuTree
-      })
+    let fullName = sessionStorage.getItem('Full_Name') || ''
+    let userName = sessionStorage.getItem('User_Name') || ''
+
+    if (fullName.toLowerCase() === userName.toLowerCase()) {
+      userName = ''
     }
+
+    this.setState({fullName, userName})
   }
 
   componentDidMount () {
@@ -578,6 +647,12 @@
     setTimeout(() => {
       Api.getAppVersion().then(() => {}, () => {})
     }, 1000)
+    // Api.genericInterface({
+    //   func: 's_get_fcc_account_data',
+    //   fcc_date: '2022-03-01',
+    //   search_type: ''
+    // }).then(res => {
+    // })
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -599,7 +674,7 @@
       let url = `${ssodomain}/doc/index.html#?appkey=${window.GLOB.appkey}&LoginUID=${sessionStorage.getItem('LoginUID')}`
       window.open(url)
     } else if (options.sysType === 'SSO' || options.sysType === 'cloud') {
-      window.open(`${window.location.href.replace(/\/index.html(.*)|\/#(.*)/ig, '')}/doc/index.html#?appkey=${window.GLOB.appkey}&LoginUID=${sessionStorage.getItem('LoginUID')}`)
+      window.open(`${window.location.href.replace(/\/admin(.*)|\/index.html(.*)|\/#(.*)/ig, '')}/doc/index.html#?appkey=${window.GLOB.appkey}&LoginUID=${sessionStorage.getItem('LoginUID')}`)
     }
   }
 
@@ -629,14 +704,14 @@
 
   verup = () => {
     confirm({
-      title: '鐗堟湰鍗囩骇',
+      title: '椤甸潰鏇存柊',
       content: '閲嶆柊鍔犺浇搴旂敤淇℃伅',
       onOk() {
         return new Promise(resolve => {
           if (!window.GLOB.WebSql && !window.GLOB.IndexDB) {
             notification.warning({
               top: 92,
-              message: '鍗囩骇澶辫触锛岃鍒锋柊椤甸潰閲嶈瘯锛�',
+              message: '鏇存柊澶辫触锛岃鍒锋柊椤甸潰閲嶈瘯锛�',
               duration: 2
             })
             resolve()
@@ -645,7 +720,7 @@
             setTimeout(() => {
               notification.success({
                 top: 92,
-                message: '鍗囩骇鎴愬姛锛�',
+                message: '鏇存柊鎴愬姛锛�',
                 duration: 2
               })
               resolve()
@@ -657,10 +732,15 @@
     })
   }
 
+  about = () => {
+    Modal.success({
+      title: '绯荤粺鐗堟湰v' + this.state.appVersion
+    })
+  }
 
   render () {
     const { mainMenu, collapse } = this.props
-    const { thdMenuList, searchkey, debug, menulist, navBar, menuType } = this.state
+    const { thdMenuList, searchkey, debug, menulist, navBar, menuType, appVersion } = this.state
 
     const menu = (
       <Menu className="header-dropdown">
@@ -676,8 +756,11 @@
         </Menu.SubMenu> : null}
         <Menu.Item key="doc" onClick={this.gotoDoc}>{this.state.dict['main.doc']}</Menu.Item>
         <Menu.Item key="verup" onClick={this.verup}>
-          鐗堟湰鍗囩骇
+          椤甸潰鏇存柊
         </Menu.Item>
+        {appVersion ? <Menu.Item key="version" onClick={this.about}>
+          鍏充簬
+        </Menu.Item> : null}
         <Menu.Item key="logout" onClick={this.logout}>{this.state.dict['main.logout']}</Menu.Item>
       </Menu>
     )
@@ -686,7 +769,7 @@
       <header className="header-container ant-menu-dark" id="main-header-container">
         <div className={'header-logo ' + (collapse && navBar !== 'topmenu' ? 'collapse' : '')}><img src={this.state.logourl} alt=""/></div>
         <div className={'header-collapse ' + (collapse && navBar !== 'topmenu' ? 'collapse' : '')}>
-          {navBar !== 'topmenu' ? <Icon type={collapse ? 'menu-unfold' : 'menu-fold'} onClick={this.handleCollapse}/> : null}
+          {navBar !== 'topmenu' ? (collapse ? <MenuUnfoldOutlined onClick={this.handleCollapse}/> : <MenuFoldOutlined onClick={this.handleCollapse}/>) : null}
         </div>
         {/* 姝e父鑿滃崟 */}
         {navBar !== 'topmenu' && menulist ?
@@ -786,7 +869,7 @@
           <div>
             <img src={this.state.avatar || avatar} alt=""/>
             <span>
-              <span className="username">{this.state.userName}</span> <Icon type="down" />
+              <span className="username"><span>{this.state.fullName}</span>{this.state.userName ? <span>{this.state.userName}</span> : null}</span> <DownOutlined />
             </span>
           </div>
         </Dropdown>
@@ -823,7 +906,7 @@
               </div>
             </div>
           } trigger={['click']} className="search-menu" placement="bottomRight" onVisibleChange={this.dropdownMenuChange}>
-            <Icon className="search-menu" type="search" />
+            <SearchOutlined className="search-menu" />
           </Dropdown> : null
         }
         {/* 淇敼瀵嗙爜 */}
@@ -857,16 +940,13 @@
 const mapStateToProps = (state) => {
   return {
     collapse: state.collapse,
-    menuTree: state.menuTree,
-    mainMenu: state.mainMenu,
-    permAction: state.permAction,
+    mainMenu: state.mainMenu
   }
 }
 
 const mapDispatchToProps = (dispatch) => {
   return {
     toggleCollapse: (collapse) => dispatch(toggleCollapse(collapse)),
-    modifyMenuTree: (menuTree) => dispatch(modifyMenuTree(menuTree)),
     modifyMainMenu: (mainMenu) => dispatch(modifyMainMenu(mainMenu)),
     initActionPermission: (permAction) => dispatch(initActionPermission(permAction)),
     initMenuPermission: (permMenus) => dispatch(initMenuPermission(permMenus)),

--
Gitblit v1.8.0