king
2020-02-16 5088d267c69e87673c85ba302dd9dc62c9da4951
src/components/tabview/index.jsx
@@ -32,47 +32,46 @@
  }
  state = {
    selectedTabId: '', // 当前选中tab页面
    tabviews: null, // 标签集
    iFrameHeight: 0,
    dict: (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') ? mzhCN : menUS,
    locale: (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS
  }
  handleTabview (menu) {
  handleTabview (e, menu) {
    e.stopPropagation()
    // 关闭tab页,重新选择显示页
    let tabs = JSON.parse(JSON.stringify(this.props.tabviews))
    let tabs = JSON.parse(JSON.stringify(this.state.tabviews))
    tabs = tabs.filter(tab => {
      if (tab.MenuID === this.state.selectedTabId) {
        tab.selected = true
      } else {
        tab.selected = false
      }
      return tab.MenuID !== menu.MenuID
    })
    
    if (menu.MenuID === this.state.selectedTabId) {
    if (menu.selected) {
      tabs[0] && (tabs[0].selected = true)
    }
    this.props.modifyTabview(tabs)
  }
  changeTab (menu) {
  changeTab (e, menu) {
    e.stopPropagation()
    // 窗口切换
    this.setState({
      selectedTabId: menu.MenuID
    })
    let tabs = JSON.parse(JSON.stringify(this.props.tabviews))
    let tabs = JSON.parse(JSON.stringify(this.state.tabviews))
    tabs = tabs.map(tab => {
      tab.selected = false
      if (tab.MenuID === menu.MenuID) {
        tab.selected = true
      } else {
        tab.selected = false
      }
      return tab
    })
    this.setState({
      tabviews: tabs
    })
    this.props.modifyTabview(tabs)
    this.resetWindow(menu)
  }
  selectcomponent (view) {
@@ -129,6 +128,9 @@
    } else {
      moment.locale('en')
    }
    this.setState({
      tabviews: this.props.tabviews
    })
  }
  componentDidMount () {
@@ -147,11 +149,11 @@
  }
  UNSAFE_componentWillReceiveProps (nextProps) {
    if (nextProps.tabviews && !is(fromJS(this.props.tabviews), fromJS(nextProps.tabviews))) {
    if (nextProps.tabviews && !is(fromJS(this.state.tabviews), fromJS(nextProps.tabviews))) {
      // tab窗口页增加或删除
      if (nextProps.tabviews.length > this.props.tabviews.length) {
      if (nextProps.tabviews.length > this.state.tabviews.length) {
        // 查看新tab页需要组件是否加载
        let MenuIDs = this.props.tabviews.map(tab => {return tab.MenuID})
        let MenuIDs = this.state.tabviews.map(tab => {return tab.MenuID})
        let newtab = nextProps.tabviews.filter(tab => !MenuIDs.includes(tab.MenuID))[0]
        if (!Comps.Home && newtab.type === 'Home') {
          Comps.Home = asyncComponent(() => import('@/tabviews/home'))
@@ -170,36 +172,44 @@
        }
      }
      // 设置选中窗口
      let view = nextProps.tabviews.filter(tab => tab.selected)[0]
      // 保存修改标签集
      this.setState({
        selectedTabId: view ? view.MenuID : ''
        tabviews: nextProps.tabviews
      })
      this.resetWindow(view)
      let node = document.getElementById('root').parentNode.parentNode
      if (node) {
        node.scrollTop = 0
      }
    }
  }
  shouldComponentUpdate(nextProps, nextState) {
    return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
  }
  // shouldComponentUpdate(nextProps, nextState) {
  //   return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
  // }
  render () {
    const { tabviews } = this.state
    let view = tabviews.filter(tab => tab.selected)[0]
    this.resetWindow(view)
    let selectedTabId = view ? view.MenuID : ''
    return (
      <section className={'flex-container content-box' + (this.props.collapse ? ' collapsed' : '')}>
        <ConfigProvider locale={this.state.locale}>
          <div className="content-header">
            {this.props.tabviews && this.props.tabviews.length > 0 &&
              <Tabs activeKey={this.state.selectedTabId}>
                {this.props.tabviews.map(view => {
            {tabviews && tabviews.length > 0 &&
              <Tabs activeKey={selectedTabId}>
                {tabviews.map(view => {
                  return (
                    <Tabs.TabPane
                      className="test"
                      tab={
                        <span className="tab-control">
                          <span className="tab-name" onClick={() => {this.changeTab(view)}}>
                          <span className="tab-name" onClick={(e) => {this.changeTab(e, view)}}>
                            {view.MenuName}
                          </span>
                          {view.type !== 'Home' ? <Icon type="close" onClick={() => {this.handleTabview(view)}}/> : null}
                          {view.type !== 'Home' ? <Icon type="close" onClick={(e) => {this.handleTabview(e, view)}}/> : null}
                        </span>
                      }
                      key={view.MenuID}