king
2021-08-26 966ff7fb84181f0fa86a56569a8492453c3ae80a
src/menu/components/tabs/antv-tabs/index.jsx
@@ -10,14 +10,15 @@
import { resetStyle } from '@/utils/utils-custom.js'
import MenuUtils from '@/utils/utils-custom.js'
import Utils from '@/utils/utils.js'
import getTabForm from './options'
import zhCN from '@/locales/zh-CN/model.js'
import enUS from '@/locales/en-US/model.js'
import './index.scss'
const SettingComponent = asyncIconComponent(() => import('../tabsetting'))
const NormalForm = asyncIconComponent(() => import('@/components/normalform'))
const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
const PasteController = asyncIconComponent(() => import('@/menu/pastecontroller'))
const TabLabelComponent = asyncComponent(() => import('../tablabelform'))
const TabComponents = asyncComponent(() => import('../tabcomponents'))
const { TabPane } = Tabs
@@ -35,7 +36,7 @@
    appType: sessionStorage.getItem('appType'),
    tabs: null,
    editab: null,
    labelvisible: false
    defaultActiveKey: ''
  }
  UNSAFE_componentWillMount () {
@@ -60,11 +61,13 @@
        ]
      }
      this.setState({
        defaultActiveKey: _tabs.subtabs[0].uuid,
        tabs: _tabs
      })
      this.props.updateConfig(_tabs)
    } else {
      this.setState({
        defaultActiveKey: window.GLOB.TabsMap.get(tabs.uuid) || '',
        tabs: fromJS(tabs).toJS()
      })
    }
@@ -187,63 +190,6 @@
    this.props.updateConfig(tabs)
  }
  tabAdd = (e) => {
    const { tabs } = this.state
    e.stopPropagation()
    this.setState({
      editab: {
        uuid: '',
        parentId: tabs.uuid,
        floor: tabs.floor,
        label: '',
        icon: '',
        components: []
      },
      labelvisible: true
    })
  }
  editTab = (tab) => {
    this.setState({
      editab: tab,
      labelvisible: true
    })
  }
  tabLabelSubmit = () => {
    let tabs = fromJS(this.state.tabs).toJS()
    let editab = fromJS(this.state.editab).toJS()
    this.tabLabelRef.handleConfirm().then(res => {
      editab.label = res.label
      editab.icon = res.icon
      editab.hasSearch = res.hasSearch || ''
      editab.blacklist = res.blacklist
      if (editab.uuid) {
        tabs.subtabs = tabs.subtabs.map(t => {
          if (t.uuid === editab.uuid) {
            return editab
          } else {
            return t
          }
        })
      } else {
        editab.uuid = Utils.getuuid()
        tabs.subtabs.push(editab)
      }
      this.setState({
        editab: null,
        labelvisible: false,
        tabs
      })
      this.props.updateConfig(tabs)
    })
  }
  delTab = (tab) => {
    let tabs = fromJS(this.state.tabs).toJS()
    const _this = this
@@ -345,18 +291,76 @@
    }
  }
  getTabForms = (tab) => {
    const { tabs } = this.state
    if (!tab) {
      tab = {
        uuid: '',
        parentId: tabs.uuid,
        floor: tabs.floor,
        label: '',
        icon: '',
        components: []
      }
    }
    this.setState({
      editab: tab
    })
    return getTabForm(tab, tabs.setting)
  }
  updateTab = (res) => {
    let tabs = fromJS(this.state.tabs).toJS()
    let editab = fromJS(this.state.editab).toJS()
    editab.label = res.label
    editab.icon = res.icon
    editab.hasSearch = res.hasSearch || ''
    editab.blacklist = res.blacklist
    if (editab.uuid) {
      tabs.subtabs = tabs.subtabs.map(t => {
        if (t.uuid === editab.uuid) {
          return editab
        } else {
          return t
        }
      })
    } else {
      editab.uuid = Utils.getuuid()
      tabs.subtabs.push(editab)
    }
    this.setState({
      editab: null,
      tabs
    })
    this.props.updateConfig(tabs)
  }
  onChange = (key) => {
    const { tabs } = this.state
    window.GLOB.TabsMap.set(tabs.uuid, key)
  }
  render() {
    const { tabs, dict, labelvisible, editab, appType } = this.state
    const { tabs, appType, defaultActiveKey } = this.state
    let _style = resetStyle(tabs.style)
    return (
      <div className={'menu-tabs-edit-box ' + tabs.setting.display} style={_style} onClick={this.clickComponent} id={tabs.uuid}>
        <DraggableTabs tabPosition={tabs.setting.position} type={tabs.setting.tabStyle} tabsMove={this.moveSwitch}>
        <DraggableTabs defaultActiveKey={defaultActiveKey} tabPosition={tabs.setting.position} type={tabs.setting.tabStyle} tabsMove={this.moveSwitch} onChange={this.onChange}>
          {tabs.subtabs.map(tab => (
            <TabPane tab={
              <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
                <div className="mk-popover-control">
                  <Icon className="edit" title="edit" type="edit" onClick={() => this.editTab(tab)} />
                  <NormalForm title="标签编辑" width={600} update={this.updateTab} getForms={() => this.getTabForms(tab)}>
                    <Icon type="edit" style={{color: '#1890ff'}} title="编辑"/>
                  </NormalForm>
                  <PasteController type="tab" Tab={tab} insert={this.insert} />
                  <Icon className="close" title="delete" type="close" onClick={() => this.delTab(tab)} />
                </div>
@@ -372,7 +376,9 @@
        </DraggableTabs>
        <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
          <div className="mk-popover-control">
            <Icon className="plus" title="添加标签" type="plus" onClick={this.tabAdd} />
            <NormalForm title="添加标签" width={600} update={this.updateTab} getForms={() => this.getTabForms()}>
              <Icon type="plus" className="plus" title="添加标签"/>
            </NormalForm>
            <SettingComponent config={tabs} updateConfig={this.updateComponent} />
            <CopyComponent type="tabs" card={tabs}/>
            <Icon className="style" title="调整样式" onClick={this.changeStyle} type="font-colors" />
@@ -381,25 +387,6 @@
        } trigger="hover">
          <Icon type="tool" />
        </Popover>
        <Modal
          wrapClassName="popview-modal"
          title={'标签编辑'}
          visible={labelvisible}
          width={600}
          maskClosable={false}
          okText={dict['model.submit']}
          onOk={this.tabLabelSubmit}
          onCancel={() => { this.setState({ labelvisible: false }) }}
          destroyOnClose
        >
          <TabLabelComponent
            dict={dict}
            tab={editab}
            setting={tabs.setting}
            inputSubmit={this.tabLabelSubmit}
            wrappedComponentRef={(inst) => this.tabLabelRef = inst}
          />
        </Modal>
      </div>
    )
  }