king
2023-07-16 1f5c6ac307a134dfa45b64c5723f2481ead9f213
src/menu/components/form/tab-form/index.jsx
@@ -9,7 +9,7 @@
import asyncComponent from '@/utils/asyncComponent'
import asyncIconComponent from '@/utils/asyncIconComponent'
import { getModalForm } from '@/templates/zshare/formconfig'
import { resetStyle, getTables } from '@/utils/utils-custom.js'
import { resetStyle, getTables, checkComponent } from '@/utils/utils-custom.js'
import MKEmitter from '@/utils/events.js'
import Utils from '@/utils/utils.js'
import getWrapForm from '../step-form/options'
@@ -151,19 +151,9 @@
      if (supModule === 'empty') {
        supModule = ''
      }
      let columns = card.columns.map(c => c.field)
      if (card.setting.interType === 'system' && card.setting.execute !== 'false' && !card.setting.dataresource) {
        card.errors.push({ level: 0, detail: '未设置数据源!'})
      } else if (card.setting.interType === 'system' && card.setting.execute === 'false' && card.scripts.filter(script => script.status !== 'false').length === 0) {
        card.errors.push({ level: 0, detail: '数据源中无可用脚本!'})
      } else if (!card.setting.primaryKey) {
        card.errors.push({ level: 0, detail: '未设置主键!'})
      } else if (!columns.includes(card.setting.primaryKey)) {
        card.errors.push({ level: 0, detail: '主键已失效!'})
      } else if (!card.setting.supModule) {
        card.errors.push({ level: 0, detail: '未设置上级组件!'})
      }
      card.$c_ds = true
      card.errors = checkComponent(card)
      if (card.errors.length === 0) {
        card.$tables = getTables(card)
@@ -461,6 +451,8 @@
        index = i
      }
      if (!item.field) return
      if (['text', 'number', 'textarea', 'color'].includes(item.type) && _item.field !== item.field) {
        _inputfields.push({
          field: item.field,
@@ -474,25 +466,28 @@
        })
      }
      if (item.type === 'switch') {
      if (item.type === 'switch' || item.type === 'check') {
        _linksupFields.push({
          field: item.field,
          label: item.label
        })
      }
      
      if (!['select', 'link', 'radio', 'checkcard'].includes(item.type)) return
      if (item.type === 'checkcard' && item.multiple === 'true') return // 选项卡多选
      if (item.field && !uniq.has(item.field)) {
      if (!['select', 'link', 'radio', 'checkcard', 'multiselect'].includes(item.type)) return
      _linksupFields.push({
        field: item.field,
        label: item.label
      })
      if (item.type === 'multiselect' || (item.type === 'checkcard' && item.multiple === 'true')) return
      if (!uniq.has(item.field)) {
        uniq.set(item.field, true)
        _linkableFields.push({
          field: item.field,
          label: item.label + '-表单'
        })
        _linksupFields.push({
          field: item.field,
          label: item.label
        })
      }
    })
@@ -549,6 +544,8 @@
        if (item.uuid !== res.uuid && res.field && item.field && item.field.toLowerCase() === res.field.toLowerCase()) {
          fieldrepet = true
        }
        delete item.focus
        if (item.uuid === res.uuid) {
          if (item.style) {
@@ -624,56 +621,25 @@
    if (res.subtype === 'simpleform') {
      res = res.subcards[0]
    }
    if (res.subButton) {
      let card = fromJS(this.state.card).toJS()
      res.uuid = Utils.getuuid()
      res.sort = card.subcards.length + 1
    let card = fromJS(this.state.card).toJS()
      res.fields.forEach(item => {
        item.uuid = Utils.getuuid()
      })
    res.uuid = Utils.getuuid()
    res.sort = card.subcards.length + 1
      delete res.prevButton
      delete res.nextButton
      card.subcards.push(res)
      this.setState({
        group: res
      })
      this.updateComponent(card)
      notification.success({
        top: 92,
        message: '粘贴成功!',
        duration: 2
      })
      return
    }
    let _config = fromJS(this.state.group).toJS()
    let fieldrepet = false // 字段重复
    _config.fields.forEach(item => {
      if (res.field && item.field && item.field.toLowerCase() === res.field.toLowerCase()) {
        fieldrepet = true
      }
    res.fields.forEach(item => {
      item.uuid = Utils.getuuid()
    })
    if (fieldrepet) {
      notification.warning({
        top: 92,
        message: '字段已存在!',
        duration: 10
      })
      return
    }
    _config.fields.push(res)
    delete res.prevButton
    delete res.nextButton
    this.updateGroup(_config)
    this.handleForm(res)
    card.subcards.push(res)
    this.setState({
      group: res
    })
    this.updateComponent(card)
    notification.success({
      top: 92,
@@ -724,58 +690,12 @@
    })
  }
  parseForm = (g, res) => {
    let _group = fromJS(g).toJS()
    let _confirm = false
    if (res.copyType === 'form') {
      let fieldrepet = false // 字段重复
      res.uuid = Utils.getuuid()
      _group.fields.forEach(item => {
        if (res.field && item.field && item.field.toLowerCase() === res.field.toLowerCase()) {
          fieldrepet = true
        }
      })
      if (fieldrepet) {
        notification.warning({
          top: 92,
          message: '字段已存在!',
          duration: 10
        })
        return
      }
      _group.fields.push(res)
    } else {
      if (_group.fields.length > 0) {
        _confirm = true
      }
      _group.fields = res.fields.map(item => {
        item.uuid = Utils.getuuid()
        return item
      })
    }
    if (_confirm) {
      let that = this
      confirm({
        title: '确定替换表单吗?',
        content: '原表单将删除。',
        onOk() {
          that.updateForms(_group)
        },
        onCancel() {}
      })
    } else {
      this.updateForms(_group)
    }
  }
  updateForms = (_group) => {
  parseForm = (g, forms) => {
    const { group } = this.state
    let card = fromJS(this.state.card).toJS()
    let _group = fromJS(g).toJS()
    _group.fields = forms
    card.subcards = card.subcards.map(item => {
      if (item.uuid === _group.uuid) {
@@ -822,7 +742,7 @@
              <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
            </NormalForm>
            <CopyComponent type="tabform" card={card}/>
            <PasteComponent config={card} options={['form', 'formgroup', 'simpleform']} updateConfig={this.pasteForm} />
            <PasteComponent config={card} options={['formgroup', 'simpleform']} updateConfig={this.pasteForm} />
            <FontColorsOutlined className="style" title="调整样式" onClick={this.changeStyle}/>
            <UserComponent config={card}/>
            <DeleteOutlined className="close" title="删除组件" onClick={() => this.props.deletecomponent(card.uuid)} />
@@ -874,7 +794,7 @@
          <div className="center">
            <div className="title" onDoubleClick={() => {
              let oInput = document.createElement('input')
              oInput.value = card.uuid
              oInput.value = 'anchor' + card.uuid
              document.body.appendChild(oInput)
              oInput.select()
              document.execCommand('Copy')
@@ -894,6 +814,7 @@
        </div>
        <Modal
          title="编辑"
          wrapClassName="mk-scroll-modal"
          visible={this.state.visible}
          width={950}
          maskClosable={false}