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