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