| | |
| | | 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 { |
| | |
| | | visible: false |
| | | } |
| | | |
| | | handleMenuClick = () => { |
| | | this.setState({visible: true}) |
| | | } |
| | | |
| | | resetconfig = (item, copyBtns) => { |
| | | 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') { |
| | | 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 |
| | | |
| | | if (item.elements) { |
| | | item.elements = item.elements.map(cell => { |
| | | if (cell.datatype === 'dynamic') { |
| | | cell.datatype = 'static' |
| | | } |
| | | cell.uuid = Utils.getuuid() |
| | | |
| | | if (cell.eleType === 'button') { |
| | | MenuUtils.resetBtn(cell, _uuid) |
| | | } |
| | | return cell |
| | | }) |
| | | } |
| | | if (item.backElements) { |
| | | item.backElements = item.backElements.map(cell => { |
| | | if (cell.datatype === 'dynamic') { |
| | | cell.datatype = 'static' |
| | | } |
| | | cell.uuid = Utils.getuuid() |
| | | |
| | | if (cell.eleType === 'button') { |
| | | MenuUtils.resetBtn(cell, _uuid) |
| | | } |
| | | return cell |
| | | }) |
| | | } |
| | | } else if (item.copyType === 'cardcell') { |
| | | item.setting = item.setting || {} |
| | | 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 |
| | |
| | | const { options } = this.props |
| | | this.pasteFormRef.handleConfirm().then(res => { |
| | | if (!options.includes(res.copyType)) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '配置信息格式错误!', |
| | | duration: 5 |
| | | }) |
| | | notification.warning({ top: 92, message: '配置信息格式错误!', duration: 5 }) |
| | | return |
| | | } |
| | | |
| | | if (!this.props.config) { |
| | | this.props.updateConfig(res) |
| | | this.setState({visible: false}) |
| | | return |
| | | } |
| | | |
| | | if (res.copyType === 'editcols') { |
| | | res.copyType = 'cols' |
| | | } |
| | | |
| | | let type = res.copyType |
| | | let config = fromJS(this.props.config).toJS() |
| | | let copyBtns = new Map() |
| | | |
| | | res = this.resetconfig(res, copyBtns) |
| | | res = this.resetconfig(res, config) |
| | | delete res.copyType |
| | | |
| | | copyBtns = [...copyBtns.values()] |
| | | |
| | | if (copyBtns.length > 0) { |
| | | MKEmitter.emit('copyButtons', copyBtns) |
| | | } |
| | | |
| | | if (type === 'action') { |
| | | config.action = config.action || [] |
| | | config.action = config.action.filter(item => !item.origin) |
| | | |
| | | if (config.type === 'form') { |
| | | this.props.updateConfig(res) |
| | | this.setState({visible: false}) |
| | | return |
| | | } else if (type === 'action') { |
| | | 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', 'checkcard', 'fileupload', 'hint', 'color', 'funcvar'].includes(res.type)) { |
| | | if (['number', 'switch', 'textarea', 'fileupload', 'hint', 'color', 'funcvar'].includes(res.type)) { |
| | | res.type = 'text' |
| | | } else if (res.type === 'radio') { |
| | | res.type = 'select' |
| | |
| | | } |
| | | } |
| | | |
| | | 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') { |
| | | config.subMenus.push(res) |
| | | } 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({ |
| | |
| | | |
| | | 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} |