king
2025-02-06 d1cd5af5adb53e91efdd278328e1b6f8ad834fb5
src/menu/components/share/pastecomponent/index.jsx
@@ -1,13 +1,16 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { fromJS } from 'immutable'
import { Icon, Modal, notification } from 'antd'
import { Modal, notification } from 'antd'
import { SnippetsOutlined } from '@ant-design/icons'
import Utils from '@/utils/utils.js'
import MKEmitter from '@/utils/events.js'
import MenuUtils from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import './index.scss'
// import './index.scss'
const { confirm } = Modal
const PasteForm = asyncComponent(() => import('@/templates/zshare/pasteform'))
class PasteController extends Component {
@@ -20,25 +23,16 @@
    visible: false
  }
  handleMenuClick = () => {
    this.setState({visible: true})
  }
  resetconfig = (item, copyBtns, config) => {
  resetconfig = (item, config) => {
    let _uuid = Utils.getuuid()
    if (item.OpenType === 'popview') {
      let _cell = fromJS(item).toJS()
      _cell.$originUuid = _cell.uuid
      _cell.uuid = _uuid
      copyBtns.set(_uuid, _cell)
    }
    if (item.uuid) {
      item.uuid = _uuid
    }
    if (item.copyType === 'cardcell' && config.subtype === 'datacard') {
    if (item.copyType === 'action') {
      MenuUtils.resetBtn(item, _uuid)
    } else if (item.copyType === 'cardcell' && config.subtype === 'datacard') {
      item.setting = item.setting || {}
      item.$cardType = 'extendCard'
      item.setting.width = item.setting.width || 6
@@ -49,6 +43,10 @@
            cell.datatype = 'static'
          }
          cell.uuid = Utils.getuuid()
          if (cell.eleType === 'button') {
            MenuUtils.resetBtn(cell, _uuid)
          }
          return cell
        })
      }
@@ -58,6 +56,10 @@
            cell.datatype = 'static'
          }
          cell.uuid = Utils.getuuid()
          if (cell.eleType === 'button') {
            MenuUtils.resetBtn(cell, _uuid)
          }
          return cell
        })
      }
@@ -66,61 +68,54 @@
      item.setting.width = item.setting.width || 6
      delete item.$cardType
      if (config.type === 'carousel') {
        delete item.setting.linkbtn
        delete item.backElements
      }
      if (item.elements) {
        item.elements = item.elements.map(cell => {
          cell.uuid = Utils.getuuid()
          if (cell.eleType === 'button') {
            MenuUtils.resetBtn(cell, _uuid)
          }
          return cell
        })
      }
      if (item.backElements) {
        item.backElements = item.backElements.map(cell => {
          cell.uuid = Utils.getuuid()
          if (cell.eleType === 'button') {
            MenuUtils.resetBtn(cell, _uuid)
          }
          return cell
        })
      }
    } else if (item.copyType === 'cols') {
      let loopCol = (col) => {
        col.subcols = col.subcols.map(c => {
          c.uuid = Utils.getuuid()
      let loopCol = (cols) => {
        return cols.map(col => {
          col.uuid = Utils.getuuid()
          if (c.type === 'colspan' && c.subcols) {
            c = loopCol(c)
          } else if (c.type === 'custom' && c.elements) {
            c.elements = c.elements.map(cell => {
          if (col.type === 'action') {
            col.type = 'custom'
          }
          if (col.type === 'colspan' && col.subcols) {
            col.subcols = loopCol(col.subcols)
          } else if (col.type === 'custom' && col.elements) {
            col.elements = col.elements.map(cell => {
              cell.uuid = Utils.getuuid()
              if (cell.eleType === 'button') {
                MenuUtils.resetBtn(cell, _uuid)
              }
              return cell
            })
          }
          return c
          return col
        })
        return col
      }
      item.cols = item.cols.map(_item => {
        _item.uuid = Utils.getuuid()
        if (_item.type === 'colspan' && _item.subcols) {
          _item = loopCol(_item)
        } else if (_item.type === 'custom' && _item.elements) {
          _item.elements = _item.elements.map(cell => {
            cell.uuid = Utils.getuuid()
            return cell
          })
        } else if (_item.type === 'action' && _item.elements) {
          _item.elements = _item.elements.map(cell => {
            let _uuid = Utils.getuuid()
            if (cell.OpenType === 'popview') {
              let _cell = fromJS(cell).toJS()
              _cell.$originUuid = _cell.uuid
              _cell.uuid = _uuid
              copyBtns.set(_uuid, _cell)
            }
            cell.uuid = _uuid
            return cell
          })
        }
        return _item
      })
      item.cols = loopCol(item.cols)
    }
    return item
@@ -129,43 +124,43 @@
  pasteSubmit = () => {
    const { options } = this.props
    this.pasteFormRef.handleConfirm().then(res => {
      if (!options.includes(res.copyType)) {
        notification.warning({ top: 92, message: '配置信息格式错误!', duration: 5 })
        return
      }
      let type = res.copyType
      let config = fromJS(this.props.config).toJS()
      let copyBtns = new Map()
      res = this.resetconfig(res, copyBtns, config)
      delete res.copyType
      copyBtns = [...copyBtns.values()]
      if (copyBtns.length > 0) {
        MKEmitter.emit('copyButtons', copyBtns)
      if (!this.props.config) {
        this.props.updateConfig(res)
        this.setState({visible: false})
        return
      }
      if (config.type === 'form' && config.subtype === 'stepform') {
      if (res.copyType === 'editcols') {
        res.copyType = 'cols'
      }
      let type = res.copyType
      let config = fromJS(this.props.config).toJS()
      res = this.resetconfig(res, config)
      delete res.copyType
      if (config.type === 'form') {
        this.props.updateConfig(res)
        this.setState({visible: false})
        return
      } else if (type === 'action') {
        config.action = config.action || []
        config.action = config.action.filter(item => !item.origin)
        if (res.style) {
          delete res.style.width
          delete res.style.float
        }
        if (['line', 'bar', 'scatter'].includes(config.type) && !['excelOut', 'excelIn'].includes(res.OpenType)) {
          notification.warning({ top: 92, message: '图表中不支持此类按钮!', duration: 5 })
          return
        }
        MKEmitter.emit('addButton', config.uuid, res)
      } else if (type === 'search' || type === 'form') {
        config.search = config.search || []
        config.search = config.search.filter(item => !item.origin)
        let keys = config.search.map(item => item.field.toLowerCase())
        let keys = config.search.map(item => item.field ? item.field.toLowerCase() : '')
        if (type === 'form') {
          if (['number', 'switch', 'textarea', 'fileupload', 'hint', 'color', 'funcvar'].includes(res.type)) {
@@ -179,16 +174,21 @@
          }
        }
        this.setState({visible: false})
        if (res.field && keys.includes(res.field.toLowerCase())) {
          notification.warning({
            top: 92,
            message: '搜索字段已存在!',
            duration: 5
          confirm({
            title: '搜索字段已存在!',
            okText: '知道了',
            cancelText: '替换',
            onOk() {},
            onCancel() {
              MKEmitter.emit('plusSearch', config.uuid, res, 'replace')
            }
          })
          return
        } else {
          MKEmitter.emit('plusSearch', config.uuid, res, 'simple')
        }
        config.search.push(res)
        return
      } else if (type === 'cardcell') {
        config.subcards.push(res)
      } else if (type === 'menucell') {
@@ -196,16 +196,32 @@
      } else if (type === 'cols') {
        config.cols = config.cols.filter(col => !col.origin)
        let keys = config.cols.map(col => (col.field || '$empty'))
        res.cols.forEach(col => {
          if (!keys.includes(col.field)) {
            config.cols.push(col)
        if ((config.subtype === 'normaltable' || config.subtype === 'editable') && res.cols.length === 1) {
          config.cols.push(...res.cols)
        } else {
          let keys = config.cols.map(col => (col.field || '$empty'))
          let cols = []
          res.cols.forEach(col => {
            if (!col.field || !keys.includes(col.field)) {
              cols.push(col)
            }
          })
          if (cols.length === 0) {
            notification.warning({
              top: 92,
              message: '显示列已存在!',
              duration: 5
            })
            return
          } else {
            config.cols.push(...cols)
          }
        })
        }
      }
      this.props.updateConfig(config)
      this.props.updateConfig(config, type)
      this.setState({visible: false})
      notification.success({
@@ -221,7 +237,7 @@
    return (
      <div style={{display: 'inline-block'}}>
        <Icon type="snippets" style={{color: 'purple'}} onClick={() => {this.setState({visible: true})}} />
        <SnippetsOutlined style={{color: 'purple'}} onClick={() => {this.setState({visible: true})}} />
        <Modal
          title="粘贴"
          visible={visible}