king
2024-03-29 deb2536eaaa559d6c8ec94f81afb94b6c7806b4d
src/components/tabview/index.jsx
@@ -1,7 +1,7 @@
import React, {Component} from 'react'
import { fromJS } from 'immutable'
import {Tabs, BackTop, notification} from 'antd'
import { RedoOutlined, CloseOutlined } from '@ant-design/icons'
import { Tabs, BackTop, notification, Modal } from 'antd'
import { RedoOutlined, CloseOutlined, LoadingOutlined } from '@ant-design/icons'
import moment from 'moment'
import 'moment/locale/zh-cn'
@@ -25,8 +25,10 @@
  state = {
    activeId: '',
    tabviews: [],
    iFrameHeight: 0,
    visible: false
  }
  reloading = false
  UNSAFE_componentWillMount () {
    if (!window.GLOB.mkHS) {
@@ -44,6 +46,10 @@
  componentDidMount () {
    MKEmitter.addListener('modifyTabs', this.modifyTabs)
    MKEmitter.addListener('closeTabView', this.closeTabView)
    if (window.GLOB.forcedUpdate) {
      MKEmitter.addListener('reloadTabs', this.reloadTabs)
    }
  }
  /**
@@ -54,6 +60,7 @@
      return
    }
    MKEmitter.removeListener('modifyTabs', this.modifyTabs)
    MKEmitter.removeListener('reloadTabs', this.reloadTabs)
    MKEmitter.removeListener('closeTabView', this.closeTabView)
  }
@@ -143,6 +150,53 @@
    } else {
      MKEmitter.emit('reloadMenuView', menu.MenuID)
    }
  }
  reloadTabs = () => {
    if (this.reloading) return
    this.reloading = true
    let time = new Date().getTime()
    this.setState({visible: true})
    Api.getAppVersion(true).then((list) => {
      let _time = new Date().getTime()
      let delay = _time - time
      delay = delay < 3000 ? 3000 - delay : 0
      setTimeout(() => {
        this.setState({visible: false})
        this.reloading = false
        Modal.success({
          title: '更新成功。',
        })
        if (list && list.length) {
          let _tabIds = this.state.tabviews.map(item => item.MenuID)
          list.forEach((m, i) => {
            if (_tabIds.includes(m)) {
              setTimeout(() => {
                MKEmitter.emit('reloadMenuView', m)
              }, i * 20)
            }
          })
        }
      }, delay)
    }, (message) => {
      let _time = new Date().getTime()
      let delay = _time - time
      delay = delay < 3000 ? 3000 - delay : 0
      setTimeout(() => {
        this.setState({visible: false})
        this.reloading = false
        Modal.error({
          title: message || '系统配置更新失败!',
        })
      }, delay)
    })
  }
  modifyTabs = (tab, fixed) => {
@@ -236,7 +290,7 @@
  }
  render () {
    const { tabviews, activeId } = this.state
    const { tabviews, activeId, visible } = this.state
    return (
      <section id="mk-tabgroup-wrap" className="mk-tabview-wrap">
@@ -273,6 +327,21 @@
            </Tabs>
          }
        </div>
        <Modal
          visible={visible}
          width={400}
          closable={false}
          centered={true}
          footer={null}
          destroyOnClose
        >
          <div className="mk-menus-update">
            <div className="tip">
              系统更新中,请稍后
            </div>
            <LoadingOutlined />
          </div>
        </Modal>
      </section>
    )
  }