From b3547d1c531e479021219fda5df153a11b9b52a3 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 31 八月 2020 17:28:09 +0800 Subject: [PATCH] 2020-08-31 --- src/templates/sharecomponent/tabscomponent/index.jsx | 105 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 80 insertions(+), 25 deletions(-) diff --git a/src/templates/sharecomponent/tabscomponent/index.jsx b/src/templates/sharecomponent/tabscomponent/index.jsx index 69bf3e2..901b1b0 100644 --- a/src/templates/sharecomponent/tabscomponent/index.jsx +++ b/src/templates/sharecomponent/tabscomponent/index.jsx @@ -1,6 +1,6 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { fromJS } from 'immutable' +import { is, fromJS } from 'immutable' import { Icon, Tooltip, Modal, notification } from 'antd' import Utils from '@/utils/utils.js' @@ -14,10 +14,8 @@ const { confirm } = Modal -// **鎮茶鑰呭線寰�姝g‘锛屼箰瑙傝�呭線寰�鎴愬姛 class TablesComponent extends Component { static propTpyes = { - type: PropTypes.string, // 鑿滃崟绫诲瀷 tabs: PropTypes.array, // 鏍囩缁� config: PropTypes.object, // 椤甸潰閰嶇疆 setSubConfig: PropTypes.func, // 瀛愭爣绛鹃厤缃� @@ -25,10 +23,11 @@ } state = { - dict: (!localStorage.getItem('lang') || localStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS, + dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, tabgroups: [], // 鏍囩缁� card: [], // 缂栬緫鏍囩 group: [], // 缂栬緫缁� + levels: null, // 鏍戝舰椤甸潰鐨勬爣绛剧骇鍒叧鑱� visible: false // 妯℃�佹鎺у埗 } @@ -41,6 +40,17 @@ this.setState({ tabgroups: fromJS(config.tabgroups).toJS() }) + } + + /** + * @description 鏍囩缁勫彉鍖栨椂锛屾洿鏂版爣绛� + */ + UNSAFE_componentWillReceiveProps (nextProps) { + const { tabgroups } = this.state + + if (!is(fromJS(nextProps.config.tabgroups), fromJS(this.props.config.tabgroups)) && !is(fromJS(nextProps.config.tabgroups), fromJS(tabgroups))) { + this.setState({tabgroups: fromJS(nextProps.config.tabgroups).toJS()}) + } } /** @@ -63,8 +73,9 @@ this.setState({tabgroups: _tabgroups}) this.handleTab(card, _group) } else { - this.setState({tabgroups: _tabgroups}) - this.props.updatetabs({...config, tabgroups: _tabgroups}) + this.setState({tabgroups: _tabgroups}, () => { + this.props.updatetabs({...config, tabgroups: _tabgroups}) + }) } } @@ -72,22 +83,28 @@ * @description 鏍囩缂栬緫锛岀瓫閫夊彲閫夌殑涓嬬骇鏍囩涓庡凡鍏宠仈鐨勪笅绾ф爣绛� */ handleTab = (card, _group) => { + const { config } = this.props let tabgroups = fromJS(this.state.tabgroups).toJS() let menus = [ {value: '', text: '绌�'}, - {value: 'mainTable', text: this.props.type === 'main' ? '涓昏〃' : '涓绘暟鎹�'} + {value: 'mainTable', text: '涓昏〃'} ] let equalTabs = [] let supMenu = card.supMenu || '' let equalTab = card.equalTab || [] let isuptab = true let equalTabIds = [] + let levels = {} - tabgroups.forEach((group, i) => { + tabgroups.forEach(group => { if (group.uuid === _group.uuid) { isuptab = false group.sublist.forEach(tab => { // 鍙叧鑱旂殑鍚岀骇鏍囩 + if (tab.level || tab.level === 0) { + levels[tab.uuid] = tab.level + } + if (tab.uuid === card.uuid) return equalTabIds.push(tab.uuid) @@ -95,6 +112,10 @@ }) } else if (isuptab) { group.sublist.forEach(tab => { + if (tab.level || tab.level === 0) { + levels[tab.uuid] = tab.level + } + menus.push({ value: tab.uuid, text: tab.label @@ -111,11 +132,16 @@ equalTab = equalTab.filter(tabId => equalTabIds.includes(tabId)) } + if (config.Template !== 'TreePage') { + levels = null + } + this.setState({ visible: true, card: card, + levels: levels, group: _group, - formlist: getTabForm(card, supMenu, menus, equalTab, equalTabs, this.props.type) + formlist: getTabForm(card, supMenu, menus, equalTab, equalTabs, config.Template) }) } @@ -165,13 +191,28 @@ return _group }) + // 鏇存柊涓庝箣鍏宠仈鐨勬爣绛炬樉绀虹骇鍒� + if (config.Template === 'TreePage' && res.level !== card.level) { + tabgroups = tabgroups.map(_group => { + _group.sublist = _group.sublist.map(item => { + if (item.supMenu === res.uuid) { + item.level = res.level + } + + return item + }) + return _group + }) + } + this.setState({ card: null, group: null, tabgroups: tabgroups, visible: false + }, () => { + this.props.updatetabs({...config, tabgroups: tabgroups}) }) - this.props.updatetabs({...config, tabgroups: tabgroups}) }) } @@ -185,8 +226,6 @@ confirm({ content: `纭畾鍒犻櫎<<${card.label}>>鍚楋紵`, - okText: this.state.dict['model.confirm'], - cancelText: this.state.dict['header.cancel'], onOk() { tabgroups = tabgroups.map(_group => { if (_group.uuid === group.uuid) { @@ -195,10 +234,22 @@ return _group }) + // 娓呴櫎涓庝箣鍏宠仈鏍囩鐨勪笂绾ф爣绛捐缃� + tabgroups = tabgroups.map(_group => { + _group.sublist = _group.sublist.map(item => { + if (item.supMenu === card.uuid) { + item.supMenu = '' + } + return item + }) + return _group + }) + _this.setState({ tabgroups: tabgroups + }, () => { + _this.props.updatetabs({...config, tabgroups: tabgroups}) }) - _this.props.updatetabs({...config, tabgroups: tabgroups}, [card]) }, onCancel() {} }) @@ -214,8 +265,6 @@ confirm({ content: `纭畾鏂板缓鏍囩缁勫悧锛焋, - okText: this.state.dict['model.confirm'], - cancelText: this.state.dict['header.cancel'], onOk() { if (_tabgroups.length === 1) { _tabgroups.forEach(group => { @@ -230,8 +279,9 @@ _this.setState({ tabgroups: _tabgroups + }, () => { + _this.props.updatetabs({...config, tabgroups: _tabgroups}) }) - _this.props.updatetabs({...config, tabgroups: _tabgroups}) }, onCancel() {} }) @@ -247,16 +297,14 @@ confirm({ content: `纭畾鍒犻櫎鏍囩缁勫悧锛焋, - okText: this.state.dict['model.confirm'], - cancelText: this.state.dict['header.cancel'], onOk() { - _tabgroups = _tabgroups.filter(_group => _group.uuid !== group.uuid) _this.setState({ tabgroups: _tabgroups + }, () => { + _this.props.updatetabs({...config, tabgroups: _tabgroups}, group.sublist) }) - _this.props.updatetabs({...config, tabgroups: _tabgroups}, group.sublist) }, onCancel() {} }) @@ -277,8 +325,9 @@ this.setState({ tabgroups: _tabgroups + }, () => { + this.props.updatetabs({...config, tabgroups: _tabgroups}) }) - this.props.updatetabs({...config, tabgroups: _tabgroups}) notification.success({ top: 92, @@ -309,8 +358,9 @@ group: null, tabgroups: _tabgroups, visible: false + }, () => { + this.props.updatetabs({...config, tabgroups: _tabgroups}) }) - this.props.updatetabs({...config, tabgroups: _tabgroups}) } else { this.setState({ card: null, @@ -318,6 +368,10 @@ visible: false }) } + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) } /** @@ -352,13 +406,13 @@ handleMenu={(card) => this.handleTab(card, group)} deleteMenu={(card) => this.deleteElement(card, group)} doubleClickCard={this.props.setSubConfig} - placeholder={this.state.dict['header.form.tab.placeholder']} + placeholder={dict['form.required.add'] + dict['model.form.tab']} /> </div>) })} {/* 鏍囩缂栬緫 */} <Modal - title={this.state.dict['header.modal.tabs.edit']} + title={dict['header.modal.tabs.edit']} visible={visible} width={750} maskClosable={false} @@ -367,9 +421,10 @@ destroyOnClose > <TabForm - dict={this.state.dict} + dict={dict} card={this.state.card} tabs={this.props.tabs} + levels={this.state.levels} formlist={this.state.formlist} inputSubmit={this.handleSubmit} wrappedComponentRef={(inst) => this.tabsFormRef = inst} -- Gitblit v1.8.0