| | |
| | | import MKEmitter from '@/utils/events.js' |
| | | import Utils from '@/utils/utils.js' |
| | | import avatar from '@/assets/img/avatar.jpg' |
| | | import wxicon from '@/assets/img/wx-icon.png' |
| | | import mkpublic from '@/assets/img/mkpublic.jpg' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | |
| | | const Resetpwd = asyncComponent(() => import('@/components/resetPassword')) |
| | | const QrCode = asyncComponent(() => import('@/components/qrcode')) |
| | | const LoginForm = asyncSpinComponent(() => import('./loginform')) |
| | | const SysIcon = asyncComponent(() => import('./sysmessage/icon')) |
| | | |
| | | class Header extends Component { |
| | | state = { |
| | |
| | | userName: '', |
| | | fullName: '', |
| | | logourl: window.GLOB.mainlogo, |
| | | wxVisible: false, |
| | | wxStep: 1, |
| | | loginVisible: false, |
| | | loginLoading: false, |
| | | avatar: Utils.getrealurl(sessionStorage.getItem('avatar')), |
| | |
| | | searchkey: '', |
| | | thdMenuList: [], |
| | | debug: sessionStorage.getItem('debug') === 'true' && window.GLOB.memberLevel > 0, |
| | | collapse: sessionStorage.getItem('collapse') === 'true' |
| | | collapse: sessionStorage.getItem('collapse') === 'true', |
| | | lang: sessionStorage.getItem('lang') || '', |
| | | dict: window.GLOB.dict |
| | | } |
| | | |
| | | UNSAFE_componentWillMount () { |
| | |
| | | componentDidMount () { |
| | | // 获取系统的版本信息,延时查询 |
| | | setTimeout(() => { |
| | | Api.getAppVersion() |
| | | if (!window.GLOB.$error) { |
| | | Api.getAppVersion() |
| | | } |
| | | }, 1000) |
| | | |
| | | // sessionStorage 跨页面共享 |
| | |
| | | if (e.key === 'getSessionStorage' && e.newValue === window.GLOB.appkey) { |
| | | localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage)) |
| | | } else if (e.key === 'getSysPermission' && e.newValue === window.GLOB.appkey) { |
| | | localStorage.setItem('sysPermissions', JSON.stringify({mkThdMenus: window.GLOB.mkThdMenus, mkActions: window.GLOB.mkActions})) |
| | | localStorage.setItem('sysPermissions', JSON.stringify({mkThdMenus: this.state.thdMenuList, mkActions: window.GLOB.mkActions})) |
| | | } else if (e.key === 'menuUpdate') { |
| | | let vals = e.newValue.split(',') |
| | | let menuId = vals[1] |
| | |
| | | } |
| | | } |
| | | }) |
| | | |
| | | if (sessionStorage.getItem('local_error')) { |
| | | try { |
| | | let param = JSON.parse(sessionStorage.getItem('local_error')) |
| | | setTimeout(() => { |
| | | Api.genericInterface({ |
| | | func: 's_special_error_note_log', |
| | | ...param |
| | | }).then(res => { |
| | | if (res.status) { |
| | | sessionStorage.removeItem('local_error') |
| | | } |
| | | }) |
| | | }, 3000) |
| | | } catch (e) { |
| | | sessionStorage.removeItem('local_error') |
| | | } |
| | | } |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | |
| | | setTimeout(() => { |
| | | sessionStorage.clear() |
| | | this.props.history.replace('/login') |
| | | window.location.reload() |
| | | }, 2000) |
| | | }) |
| | | } |
| | | |
| | | logout = () => { |
| | | const { dict } = this.state |
| | | // 退出登录 |
| | | let _this = this |
| | | let that = this |
| | | confirm({ |
| | | title: '您确定要退出吗?', |
| | | title: dict['logout_query'] || '您确定要退出吗?', |
| | | content: '', |
| | | okText: '确定', |
| | | cancelText: '取消', |
| | | okText: dict['ok'] || '确定', |
| | | cancelText: dict['cancel'] || '取消', |
| | | onOk() { |
| | | sessionStorage.clear() |
| | | _this.props.history.replace('/login') |
| | | setTimeout(() => { |
| | | that.props.history.replace('/login') |
| | | window.location.reload() |
| | | }, 100) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | |
| | | } |
| | | |
| | | window.GLOB.mainMenu = mainMenu |
| | | window.GLOB.mkThdMenus = [...thdMenuList, {MenuID: 'home_page_id', EasyCode: '', MenuName: 'home', type: 'CustomPage'}] |
| | | |
| | | thdMenuList.forEach(item => { |
| | | window.GLOB.mkThdMenus.set(item.MenuID, item) |
| | | }) |
| | | |
| | | window.GLOB.mkThdMenus.set('home_page_id', {MenuID: 'home_page_id', EasyCode: '', MenuName: 'home', type: 'CustomPage'}) |
| | | |
| | | MKEmitter.emit('mainMenuChange') |
| | | |
| | | if (_menu) { |
| | | this.openTab(_menu, 0) |
| | | } |
| | | |
| | | setTimeout(() => { |
| | | this.getwork() |
| | | }, 100) |
| | | }) |
| | | |
| | | // 获取角色权限, edition_type 接口版本控制 ''、'Y'、'A' |
| | |
| | | _permAction[menu.MenuID] = true |
| | | }) |
| | | } |
| | | } else { |
| | | } else if (!/PRIMARY KEY/ig.test(result.message)) { |
| | | notification.error({ |
| | | top: 92, |
| | | message: result.message, |
| | |
| | | window.GLOB.mkActions = _permAction |
| | | }) |
| | | }, 50) |
| | | } |
| | | |
| | | getwork = () => { |
| | | if (sessionStorage.getItem('work_grade')) return |
| | | |
| | | let param = {func: 's_get_local_my_worker_v1'} |
| | | |
| | | if (window.GLOB.forcedUpdate) { |
| | | param.s_version_up = 'true' |
| | | } |
| | | |
| | | Api.genericInterface(param).then(result => { |
| | | sessionStorage.setItem('work_grade', result.work_grade || 0) |
| | | sessionStorage.setItem('work_group', result.work_group || '') |
| | | |
| | | if (!result.status && sessionStorage.getItem('debug') === 'true') { |
| | | notification.error({ |
| | | top: 92, |
| | | message: /s_get_local_my_worker_v1/.test(result.message) ? '职员信息获取失败,请联系管理员。' : result.message, |
| | | duration: 10 |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | openTab = (menu, times) => { |
| | |
| | | |
| | | if (PageParam.OpenType === 'outpage' && PageParam.linkUrl) { |
| | | fstItem.OpenType = 'newpage' |
| | | fstItem.src = PageParam.linkUrl |
| | | fstItem.src = window.GLOB.systemType === 'production' && PageParam.linkProUrl ? PageParam.linkProUrl : PageParam.linkUrl |
| | | fstItem.src = fstItem.src.replace(/@loginuid@/ig, sessionStorage.getItem('LoginUID')) |
| | | fstItem.src = fstItem.src.replace(/@userid@/ig, sessionStorage.getItem('UserID')) |
| | | if (/#\/iframe\//.test(fstItem.src)) { |
| | | fstItem.src = fstItem.src.replace(/@loginuid@/ig, sessionStorage.getItem('LoginUID')) |
| | | fstItem.type = 'iframe' |
| | | fstItem.OpenType = 'newtab' |
| | | } |
| | |
| | | ParentNames: [fst.MenuName, snd.MenuName], |
| | | MenuNo: trd.MenuNo, |
| | | EasyCode: trd.EasyCode, |
| | | type: 'CommonTable', |
| | | type: 'CustomPage', |
| | | OpenType: 'newtab', |
| | | hidden: 'false' |
| | | } |
| | |
| | | try { |
| | | let PageParam = JSON.parse(trd.PageParam) |
| | | |
| | | trdItem.type = PageParam.Template || 'CommonTable' |
| | | trdItem.type = PageParam.Template || 'CustomPage' |
| | | trdItem.OpenType = PageParam.OpenType || 'newtab' |
| | | trdItem.hidden = PageParam.hidden || 'false' |
| | | trdItem.menuColor = PageParam.menuColor || '' |
| | | trdItem.urlFields = PageParam.urlFields || '' |
| | | |
| | | if (trdItem.type === 'NewPage') { |
| | | trdItem.OpenType = 'newpage' |
| | | trdItem.src = PageParam.url || '' |
| | | trdItem.src = window.GLOB.systemType === 'production' && PageParam.proUrl ? PageParam.proUrl : PageParam.url || '' |
| | | trdItem.src = trdItem.src.replace(/@loginuid@/ig, sessionStorage.getItem('LoginUID')) |
| | | trdItem.src = trdItem.src.replace(/@userid@/ig, sessionStorage.getItem('UserID')) |
| | | if (/#\/iframe\//.test(trdItem.src)) { |
| | | trdItem.src = trdItem.src.replace(/@loginuid@/ig, sessionStorage.getItem('LoginUID')) |
| | | trdItem.type = 'iframe' |
| | | trdItem.OpenType = 'newtab' |
| | | } |
| | |
| | | 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>, |
| | | title: <span>系统检测到您的账户存在风险,请及时到<a target="_blank" rel="noopener noreferrer" href="https://cloud.positecgroup.com/admin/index.html">云中心</a>修改密码!</span>, |
| | | okText: '知道了' |
| | | }) |
| | | return |
| | |
| | | sessionStorage.setItem('cloudDataM', res.dataM ? 'true' : '') |
| | | sessionStorage.setItem('cloudRole_id', res.role_id || '') |
| | | |
| | | let _url = window.location.href.split('#')[0] + 'cloud' |
| | | sessionStorage.setItem('CloudLogo', res.open_logo || '') |
| | | |
| | | if (param.remember) { |
| | | localStorage.setItem(_url, window.btoa(window.encodeURIComponent(JSON.stringify({time: new Date().getTime(), username: param.username, password: param.password})))) |
| | | localStorage.setItem(window.GLOB.sysSign + 'cloud', window.btoa(window.encodeURIComponent(JSON.stringify({time: new Date().getTime(), username: param.username, password: param.password})))) |
| | | } else { |
| | | localStorage.setItem(_url, window.btoa(window.encodeURIComponent(JSON.stringify({time: new Date().getTime(), username: param.username, password: ''})))) |
| | | localStorage.setItem(window.GLOB.sysSign + 'cloud', window.btoa(window.encodeURIComponent(JSON.stringify({time: new Date().getTime(), username: param.username, password: ''})))) |
| | | } |
| | | |
| | | window.GLOB.mainMenu = null |
| | |
| | | } |
| | | |
| | | verup = () => { |
| | | const { dict } = this.state |
| | | |
| | | confirm({ |
| | | title: '页面更新', |
| | | content: '重新加载应用信息', |
| | | title: dict['page_upd'] || '页面更新', |
| | | content: dict['reload_app'] || '重新加载应用信息', |
| | | okText: dict['ok'] || '确定', |
| | | cancelText: dict['cancel'] || '取消', |
| | | onOk() { |
| | | return new Promise(resolve => { |
| | | if (!window.GLOB.IndexDB) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '更新失败,请刷新页面重试!', |
| | | message: dict['exc_fail'] || '更新失败,请刷新页面重试!', |
| | | duration: 2 |
| | | }) |
| | | resolve() |
| | | } else { |
| | | Api.updateAppVersion() |
| | | Api.delCacheConfig('all') |
| | | localStorage.removeItem(window.location.href.split('#')[0] + 'AuthCode') |
| | | |
| | | setTimeout(() => { |
| | | notification.success({ |
| | | top: 92, |
| | | message: '更新成功!', |
| | | message: dict['exc_success'] || '更新成功!', |
| | | duration: 2 |
| | | }) |
| | | resolve() |
| | |
| | | |
| | | about = () => { |
| | | Modal.success({ |
| | | title: '系统版本v' + window.GLOB.appVersion |
| | | }) |
| | | } |
| | | |
| | | wxnotice = () => { |
| | | Modal.success({ |
| | | className: 'mk-wx-notice', |
| | | title: <QrCode card={{qrWidth: 320, color: '#000000'}} value={window.GLOB.baseurl + 'mob/wxnotice.html?userid=' + sessionStorage.getItem('UserID') + '&loginuid=' + sessionStorage.getItem('LoginUID')}/>, |
| | | okText: '关闭' |
| | | title: (window.GLOB.dict['sys_ver'] || '系统版本') + ' v' + window.GLOB.appVersion, |
| | | okText: window.GLOB.dict['got_it'] || '知道了', |
| | | }) |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | render () { |
| | | const { thdMenuList, searchkey, debug, menulist, collapse } = this.state |
| | | const { thdMenuList, searchkey, debug, menulist, collapse, dict } = this.state |
| | | const navBar = window.GLOB.navBar |
| | | |
| | | const menu = ( |
| | | <Menu className="header-dropdown"> |
| | | {debug && <Menu.Item key="switch"> |
| | | 编辑 |
| | | {dict['edit'] || '编辑'} |
| | | <Switch size="small" style={{marginLeft: '7px'}} checked={false} onChange={this.changeEditState} /> |
| | | </Menu.Item>} |
| | | <Menu.Item key="password" onClick={this.changePassword}>修改密码</Menu.Item> |
| | | {this.state.systems.length ? <Menu.SubMenu style={{minWidth: '110px'}} title="切换系统"> |
| | | <Menu.Item key="password" onClick={this.changePassword}>{dict['ch_pwd'] || '修改密码'}</Menu.Item> |
| | | {this.state.systems.length ? <Menu.SubMenu style={{minWidth: '110px'}} title={dict['swt_sys'] || '切换系统'}> |
| | | {this.state.systems.map((system, index) => ( |
| | | <Menu.Item style={{minWidth: '100px', lineHeight: '30px'}} key={'sub' + index} onClick={() => {this.changeSystem(system)}}> {system.AppName} </Menu.Item> |
| | | ))} |
| | | </Menu.SubMenu> : null} |
| | | <Menu.Item key="doc" onClick={this.gotoDoc}>文档中心</Menu.Item> |
| | | <Menu.Item key="doc" onClick={this.gotoDoc}>{dict['doc_center'] || '文档中心'}</Menu.Item> |
| | | <Menu.Item key="verup" onClick={this.verup}> |
| | | 页面更新 |
| | | {dict['page_upd'] || '页面更新'} |
| | | </Menu.Item> |
| | | {window.GLOB.WXNotice ? <Menu.Item key="wxnotice" onClick={this.wxnotice}> |
| | | {window.GLOB.WXNotice ? <Menu.Item key="wxnotice" onClick={() => this.setState({wxVisible: true, wxStep: 1})}> |
| | | 微信消息 |
| | | </Menu.Item> : null} |
| | | {window.GLOB.appVersion ? <Menu.Item key="version" onClick={this.about}> |
| | | 关于 |
| | | {dict['about'] || '关于'} |
| | | </Menu.Item> : null} |
| | | <Menu.Item key="logout" onClick={this.logout}>退出</Menu.Item> |
| | | <Menu.Item key="logout" onClick={this.logout}>{dict['logout'] || '退出'}</Menu.Item> |
| | | </Menu> |
| | | ) |
| | | |
| | |
| | | <div className="title" onClick={e => e.stopPropagation()}>{cell.MenuName}</div> |
| | | <div className="menu-detail"> |
| | | {cell.children && cell.children.map(m => ( |
| | | <div key={m.MenuID} title={m.MenuName} onClick={() => {this.changeVerMenu(m)}}> |
| | | <div key={m.MenuID} title={m.MenuName} style={m.menuColor ? {color: m.menuColor} : null} onClick={() => {this.changeVerMenu(m)}}> |
| | | {m.MenuName} |
| | | </div> |
| | | ))} |
| | |
| | | <SearchOutlined className="search-menu" /> |
| | | </Dropdown> : null |
| | | } |
| | | {window.GLOB.SysNotice ? <SysIcon /> : null} |
| | | {/* 头像、用户名 */} |
| | | <Dropdown className="header-setting" overlay={menu}> |
| | | <div> |
| | |
| | | </Dropdown> |
| | | {/* 编辑状态登录 */} |
| | | <Modal |
| | | title="登录开发机" |
| | | title={<span>登录开发机{this.state.lang === 'en-US' ? <span style={{color: 'red'}}>(英文)</span> : ''}</span>} |
| | | visible={this.state.loginVisible} |
| | | onOk={this.loginSubmit} |
| | | width={'430px'} |
| | |
| | | </Modal> |
| | | {/* 修改密码 */} |
| | | <Resetpwd /> |
| | | {/* 微信消息 */} |
| | | <Modal |
| | | wrapClassName="mk-wx-sms-modal" |
| | | visible={this.state.wxVisible} |
| | | title="扫码关注 接收消息" |
| | | width={400} |
| | | centered={true} |
| | | onCancel={() => this.setState({wxVisible: false})} |
| | | footer={null} |
| | | destroyOnClose |
| | | > |
| | | {this.state.wxStep !== 2 ? <div className="wx-sms-wrap"> |
| | | <img className="mk-img" src={mkpublic} alt=""/> |
| | | <div className="mk-tip"> |
| | | <span>微信扫码</span> |
| | | <span>关注公众号</span> |
| | | <span>关注公众号且授权后方可接收消息。</span> |
| | | <span onClick={() => this.setState({wxStep: 2})}>下一步</span> |
| | | </div> |
| | | </div> : <div className="wx-sms-wrap"> |
| | | <QrCode card={{qrWidth: 200, color: '#000000'}} value={window.GLOB.baseurl + 'mob/wxnotice.html?userid=' + sessionStorage.getItem('UserID') + '&loginuid=' + sessionStorage.getItem('LoginUID')}/> |
| | | <div className="tip"> |
| | | <img src={wxicon} alt=""/> |
| | | <span>微信扫码</span> |
| | | <span>获取用户授权</span> |
| | | </div> |
| | | </div>} |
| | | </Modal> |
| | | </header> |
| | | ) |
| | | } |