king
2025-03-24 1563e2ef18b013bb7bb5781a22e7d92f40454f69
src/menu/components/card/cardsimplecomponent/index.jsx
@@ -1,7 +1,7 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Popover } from 'antd'
import { Popover, Modal, Button } from 'antd'
import { PlusOutlined, PlusSquareOutlined, EditOutlined, ArrowLeftOutlined, ArrowRightOutlined, SwapOutlined, ToolOutlined, DeleteOutlined, FontColorsOutlined } from '@ant-design/icons'
import asyncComponent from '@/utils/asyncComponent'
@@ -10,7 +10,9 @@
import { getTableSetting, getCarouselSetting } from './options'
import Utils from '@/utils/utils.js'
import MKEmitter from '@/utils/events.js'
// import './index.scss'
import './index.scss'
const { confirm } = Modal
const NormalForm = asyncIconComponent(() => import('@/components/normalform'))
const NodesWrap = asyncComponent(() => import('./node-wrap'))
@@ -30,7 +32,8 @@
  state = {
    card: null,            // 卡片信息
    formlist: null,        // 设置表单信息
    appType: sessionStorage.getItem('appType')
    appType: sessionStorage.getItem('appType'),
    timestamp: ''
  }
  /**
@@ -40,7 +43,8 @@
    const { card } = this.props
    this.setState({
      card: fromJS(card).toJS()
      card: fromJS(card).toJS(),
      timestamp: new Date().getTime() + ''
    })
  }
@@ -187,13 +191,115 @@
    this.props.updateElement(_card)
  }
  updateFields = (elements, resolve, type) => {
    const { card } = this.state
    let items = elements
    if (type === 'form') {
      items = []
      elements.forEach(item => {
        let cell = {
          uuid: Utils.getuuid(),
          eleType: 'text',
          height: 1,
          innerHeight: 21,
          prefix: item.label ? item.label + ': ' : '',
          datatype: item.field ? 'dynamic' : 'static',
          field: item.field || '',
          width: item.span || 12,
          value: '',
          style: {marginBottom: '15px', color: 'rgba(0, 0, 0, 0.85)'}
        }
        if (item.type === 'number') {
          cell.eleType = 'number'
          cell.decimal = typeof(item.decimal) === 'number' ? item.decimal : ''
        } else if (item.type === 'split') {
          cell.width = 24
          cell.prefix = ''
          cell.value = item.label || ''
          cell.style = {
            color: '#1890ff',
            marginBottom: '15px',
            borderBottomWidth: '1px',
            borderBottomColor: '#e9e9e9'
          }
        }
        items.push(cell)
      })
    }
    if (items.length === 0) {
      resolve({status: false, message: '元素不可为空!'})
      return
    }
    let _card = { ...card, elements: items }
    let _card2 = { ...card, elements: [...card.elements, ...items] }
    if (card.elements.length === 0) {
      this.setState({
        card: _card,
        timestamp: new Date().getTime() + ''
      })
      this.props.updateElement(_card)
    } else {
      const that = this
      const _modal = confirm({
        title: '卡片中已存在元素,请选择要进行的操作。',
        className: 'mk-confirm-modal',
        content: <div className="footer">
          <Button key="cancel" onClick={() => _modal.destroy()}>取消</Button>
          <Button key="replace" className="mk-border-purple" onClick={() => {
            that.setState({
              card: _card,
              timestamp: new Date().getTime() + ''
            })
            that.props.updateElement(_card)
            _modal.destroy()
          }}>替换</Button>
          <Button key="confirm" className="mk-border-green" onClick={() => {
            that.setState({
              card: _card2,
              timestamp: new Date().getTime() + ''
            })
            that.props.updateElement(_card2)
            _modal.destroy()
          }}>添加</Button>
        </div>
      })
    }
    resolve({status: true})
  }
  paste = (element, resolve) => {
    const { card } = this.state
    if (['simpleform', 'forms', 'formgroup', 'cardcell'].includes(element.copyType)) {
      if (element.copyType === 'simpleform') {
        this.updateFields(element.subcards[0].fields, resolve, 'form')
      } else if (element.copyType === 'forms') {
        this.updateFields(element.fields, resolve, 'form')
      } else if (element.copyType === 'formgroup') {
        this.updateFields(element.fields, resolve, 'form')
      } else {
        this.updateFields(element.elements, resolve)
      }
      return
    }
    let _uuid = Utils.getuuid()
    
    if (element.copyType === 'action') {
      element.eleType = 'button'
      element.width = element.width || element.width === 0 ? element.width : 12
    }
    element.uuid = _uuid
@@ -207,12 +313,12 @@
  render() {
    const { cards } = this.props
    const { card } = this.state
    const { card, timestamp } = this.state
    let _style = {...card.style}
    if (cards.type === 'carousel') {
      _style.height = cards.style.height
      _style.height = cards.wrap.height
    }
    let control = true
@@ -223,34 +329,32 @@
    _style = resetStyle(_style)
    return (
      <div className="ant-col ant-col-24">
        <div className="card-item" style={_style}>
          <CardCellComponent cards={cards} cardCell={card} elements={card.elements} updateElement={this.updateCard}/>
          <div className="card-control">
            <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
              <div className="mk-popover-control">
                <PlusOutlined className="plus" title="添加元素" onClick={this.addElement}/>
                <PlusSquareOutlined className="plus" title="添加按钮" onClick={this.addButton}/>
                {cards.type !== 'timeline' ? <NormalForm title="卡片设置" width={800} update={this.updateSetting} getForms={this.getSettingForms}>
                  <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
                </NormalForm> : <NodesWrap card={card} updateMenus={this.updateNodes}/>}
                {cards.type !== 'timeline' ? <CopyComponent type="cardcell" card={card}/> : null}
                <PasteController options={['action', 'customCardElement']} updateConfig={this.paste} />
                <FontColorsOutlined className="style" title="调整样式" onClick={this.changeStyle}/>
                {control ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
                  <div className="mk-popover-control">
                    <ArrowLeftOutlined className="plus" title="前移" onClick={() => this.props.move(card, 'left')} />
                    <ArrowRightOutlined className="close" title="后移" onClick={() => this.props.move(card, 'right')} />
                  </div>
                } trigger="hover" getPopupContainer={() => document.getElementById(card.uuid + 'swap')}>
                  <SwapOutlined id={card.uuid + 'swap'}/>
                </Popover> : null}
                {control ? <DeleteOutlined className="close" title="删除卡片" onClick={() => this.props.deleteElement(card)} /> : null}
              </div>
            } trigger="hover">
              <ToolOutlined/>
            </Popover>
          </div>
      <div className="card-item" style={_style}>
        <CardCellComponent cards={cards} cardCell={card} timestamp={timestamp} elements={card.elements} updateElement={this.updateCard}/>
        <div className="card-control">
          <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
            <div className="mk-popover-control">
              <PlusOutlined className="plus" title="添加元素" onClick={this.addElement}/>
              <PlusSquareOutlined className="plus" title="添加按钮" onClick={this.addButton}/>
              {cards.type !== 'timeline' ? <NormalForm title="卡片设置" width={800} update={this.updateSetting} getForms={this.getSettingForms}>
                <EditOutlined style={{color: '#1890ff'}} title="编辑"/>
              </NormalForm> : <NodesWrap card={card} updateMenus={this.updateNodes}/>}
              {cards.type !== 'timeline' ? <CopyComponent type="cardcell" card={card}/> : null}
              <PasteController options={['action', 'customCardElement', 'simpleform', 'forms', 'formgroup', 'cardcell']} updateConfig={this.paste} />
              <FontColorsOutlined className="style" title="调整样式" onClick={this.changeStyle}/>
              {control ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
                <div className="mk-popover-control">
                  <ArrowLeftOutlined className="plus" title="前移" onClick={() => this.props.move(card, 'left')} />
                  <ArrowRightOutlined className="close" title="后移" onClick={() => this.props.move(card, 'right')} />
                </div>
              } trigger="hover" getPopupContainer={() => document.getElementById(card.uuid + 'swap')}>
                <SwapOutlined id={card.uuid + 'swap'}/>
              </Popover> : null}
              {control ? <DeleteOutlined className="close" title="删除卡片" onClick={() => this.props.deleteElement(card)} /> : null}
            </div>
          } trigger="hover">
            <ToolOutlined/>
          </Popover>
        </div>
      </div>
    )