From c95918fb0fffb61b1117fbf4cd429e291b9594d0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 17 九月 2021 01:02:34 +0800
Subject: [PATCH] 2021-09-17

---
 src/components/tabview/index.jsx |  195 ++++++++++++++++++++----------------------------
 1 files changed, 80 insertions(+), 115 deletions(-)

diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index d12aba8..9cb3e0d 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -1,12 +1,12 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import {connect} from 'react-redux'
-import { is, fromJS } from 'immutable'
+import { fromJS } from 'immutable'
 import {Tabs, Icon, BackTop, notification} from 'antd'
 import moment from 'moment'
 import 'moment/locale/zh-cn'
 
-import { modifyTabview, toggleIsiframe, initActionPermission } from '@/store/action'
+import { toggleIsiframe, initActionPermission } from '@/store/action'
 import asyncComponent from '@/utils/asyncLoadComponent'
 import NotFount from '@/components/404'
 import options from '@/store/options.js'
@@ -38,49 +38,21 @@
 
 class TabViews extends Component {
   static propTpyes = {
-    collapse: PropTypes.bool,
-    tabviews: PropTypes.array // 鏍囩椤垫暟缁�
+    collapse: PropTypes.bool
   }
 
   state = {
     activeId: '',
-    // tabviews: [{
-    //   MenuID: 'home_page_id',
-    //   MenuName: '棣栭〉',
-    //   selected: true,
-    //   type: 'Home'
-    // }], // 鏍囩闆�
     tabviews: null, // 鏍囩闆�
     iFrameHeight: 0,
     dict: sessionStorage.getItem('lang') !== 'en-US' ? mzhCN : menUS,
   }
 
   // 鍏抽棴tab椤碉紝閲嶆柊閫夋嫨鏄剧ず椤�
-  handleTabview = (e, menu, index) => {
-    e.stopPropagation()
-    let tabs = fromJS(this.state.tabviews).toJS()
-    tabs = tabs.filter(tab => {
-      return tab.MenuID !== menu.MenuID
-    })
-    
-    if (menu.selected && tabs[index - 1]) {
-      tabs[index - 1].selected = true
-      this.setState({
-        activeId: tabs[index - 1].MenuID || ''
-      })
-
-      if (this.props.isiframe) {
-        this.props.toggleIsiframe(false)
-      }
-    }
-
-    this.props.modifyTabview(tabs)
-  }
-
-  // 鍏抽棴tab椤碉紝閲嶆柊閫夋嫨鏄剧ず椤�
   closeTabView = (id) => {
     let tabs = fromJS(this.state.tabviews).toJS()
-    let index = 0
+    let index = -1
+
     tabs = tabs.filter((tab, i) => {
       if (tab.MenuID === id) {
         index = i
@@ -90,18 +62,28 @@
       }
     })
     
-    if (tabs[index - 1]) {
-      tabs[index - 1].selected = true
+    if (index > -1) {
+      let activeId = ''
+      if (index > 0) {
+        activeId = tabs[index - 1].MenuID || ''
+      } else if (tabs[index]) {
+        activeId = tabs[index].MenuID || ''
+      }
+
       this.setState({
-        activeId: tabs[index - 1].MenuID || ''
+        activeId,
+        tabviews: tabs
       })
 
       if (this.props.isiframe) {
         this.props.toggleIsiframe(false)
       }
-    }
 
-    this.props.modifyTabview(tabs)
+      let node = document.getElementById('root').parentNode.parentNode
+      if (node) {
+        node.scrollTop = 0
+      }
+    }
   }
 
   refreshTabview = (e, menu) => {
@@ -156,47 +138,58 @@
     }
   }
 
-  // modifyTabs = (tab, type) => {
+  modifyTabs = (tab, type) => {
+    const { tabviews } = this.state
 
-  // }
+    if (type === 'plus') {
+      if (tabviews.findIndex(item => item.MenuID === tab.MenuID) > -1) {
+        let _tabs = tabviews.filter(item => item.MenuID !== tab.MenuID)
+        this.setState({
+          tabviews: _tabs
+        }, () => {
+          this.setState({
+            tabviews: [..._tabs, tab],
+            activeId: tab.MenuID
+          })
+        })
+      } else {
+        this.setState({
+          tabviews: [...tabviews, tab],
+          activeId: tab.MenuID
+        })
+      }
+    } else if (type === 'replace') {
+      this.setState({
+        tabviews: tab ? [tab] : [],
+        activeId: tab ? tab.MenuID : ''
+      })
+    }
+
+    let node = document.getElementById('root').parentNode.parentNode
+    if (node) {
+      node.scrollTop = 0
+    }
+  }
 
   changeTab = (e, menu) => {
     e.stopPropagation()
     // 绐楀彛鍒囨崲
-    let tabs = fromJS(this.state.tabviews).toJS()
-    tabs = tabs.map(tab => {
-      tab.selected = false
+    let _isiframe = this.props.isiframe
+    if (menu.type === 'iframe') {
+      _isiframe = true
+    } else {
+      _isiframe = false
+    }
 
-      if (tab.MenuID === menu.MenuID) {
-        tab.selected = true
-      }
-
-      return tab
-    })
-
-    if (menu) {
-      let _isiframe = this.props.isiframe
-      if (menu.type === 'iframe') {
-        _isiframe = true
-      } else {
-        _isiframe = false
-      }
-
-      if (_isiframe !== this.props.isiframe) {
-        this.props.toggleIsiframe(_isiframe)
-      }
+    if (_isiframe !== this.props.isiframe) {
+      this.props.toggleIsiframe(_isiframe)
     }
     
     this.setState({
-      tabviews: tabs,
       activeId: menu.MenuID || ''
     }, () => {
-      if (menu.MenuID) {
-        MKEmitter.emit('resetActiveMenu', menu.MenuID)
-      }
+      MKEmitter.emit('resetActiveMenu', menu.MenuID || '')
     })
-
-    this.props.modifyTabview(tabs)
   }
 
   selectcomponent = (view) => {
@@ -236,57 +229,31 @@
     } else {
       moment.locale('en')
     }
-    this.setState({
-      tabviews: this.props.tabviews
-    })
+
+    if (sessionStorage.getItem('isEditState') !== 'true') {
+      this.setState({
+        activeId: 'home_page_id',
+        tabviews: [{
+          MenuID: 'home_page_id',
+          MenuName: '棣栭〉',
+          type: 'Home'
+        }]
+      })
+    } else {
+      this.setState({
+        activeId: '',
+        tabviews: []
+      })
+    }
   }
 
   componentDidMount () {
-    if (sessionStorage.getItem('isEditState') !== 'true') {
-      let home = {
-        MenuID: 'home_page_id',
-        MenuName: '棣栭〉',
-        selected: true,
-        type: 'Home'
-      }
-      this.props.modifyTabview([home])
-    }
-    // MKEmitter.addListener('modifyTabs', this.modifyTabs)
+    MKEmitter.addListener('modifyTabs', this.modifyTabs)
     MKEmitter.addListener('closeTabView', this.closeTabView)
   }
 
   UNSAFE_componentWillReceiveProps (nextProps) {
-    if (nextProps.tabviews && !is(fromJS(this.state.tabviews), fromJS(nextProps.tabviews))) {
-      let view = nextProps.tabviews.filter(tab => tab.selected)[0]
-
-      // 绐楀彛鍦╥frame涓庢櫘閫氶〉闈㈠垏鎹㈡椂锛屼慨鏀瑰乏渚ц彍鍗曟爮鏍峰紡
-      let activeId = ''
-      if (view) {
-        let _isiframe = this.props.isiframe
-        if (view.type === 'iframe') {
-          _isiframe = true
-        } else {
-          _isiframe = false
-        }
-  
-        if (_isiframe !== this.props.isiframe) {
-          this.props.toggleIsiframe(_isiframe)
-        }
-
-        activeId = view.MenuID
-      }
-
-      // 淇濆瓨淇敼鏍囩闆�
-      this.setState({
-        tabviews: nextProps.tabviews,
-        activeId
-      })
-
-      let node = document.getElementById('root').parentNode.parentNode
-      if (node) {
-        node.scrollTop = 0
-      }
-    }
+    
   }
 
   /**
@@ -296,7 +263,7 @@
     this.setState = () => {
       return
     }
-    // MKEmitter.removeListener('modifyTabs', this.modifyTabs)
+    MKEmitter.removeListener('modifyTabs', this.modifyTabs)
     MKEmitter.removeListener('closeTabView', this.closeTabView)
   }
 
@@ -318,7 +285,7 @@
                           {view.MenuName}
                         </span>
                         {view.type !== 'Home' ?
-                          <Icon type="close" onClick={(e) => {this.handleTabview(e, view, index)}}/> : null
+                          <Icon type="close" onClick={(e) => {e.stopPropagation();this.closeTabView(view.MenuID)}}/> : null
                         }
                       </span>
                     }
@@ -346,7 +313,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    tabviews: state.tabviews,
     collapse: state.collapse,
     isiframe: state.isiframe
   }
@@ -354,7 +320,6 @@
 
 const mapDispatchToProps = (dispatch) => {
   return {
-    modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews)),
     initActionPermission: (permAction) => dispatch(initActionPermission(permAction)),
     toggleIsiframe: (isiframe) => dispatch(toggleIsiframe(isiframe))
   }

--
Gitblit v1.8.0