From c34bcb0a3054bdab29fbaff17e587c19d7b5de28 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 16 九月 2020 23:39:28 +0800 Subject: [PATCH] 2020-09-16 --- src/templates/modalconfig/dragelement/card.jsx | 119 +++++++++++++++++++++++++++++++---------------------------- 1 files changed, 62 insertions(+), 57 deletions(-) diff --git a/src/templates/modalconfig/dragelement/card.jsx b/src/templates/modalconfig/dragelement/card.jsx index d1fda91..e7436ea 100644 --- a/src/templates/modalconfig/dragelement/card.jsx +++ b/src/templates/modalconfig/dragelement/card.jsx @@ -1,36 +1,33 @@ import React from 'react' import { useDrag, useDrop } from 'react-dnd' -import { Icon, Select, DatePicker, Input, InputNumber, Button } from 'antd' +import { Icon, Select, DatePicker, Input, InputNumber, Button, Popover } from 'antd' import moment from 'moment' -import ItemTypes from './itemtypes' import './index.scss' const { MonthPicker } = DatePicker const { TextArea } = Input -const Card = ({ id, card, cols, moveCard, findCard, editCard, closeCard, hasDrop }) => { +const Card = ({ id, card, cols, moveCard, findCard, editCard, closeCard, copyCard, hasDrop }) => { const originalIndex = findCard(id).index const [{ isDragging }, drag] = useDrag({ - item: { type: ItemTypes.form, id, originalIndex }, + item: { type: 'form', id, originalIndex }, collect: monitor => ({ isDragging: monitor.isDragging(), }), }) const [, drop] = useDrop({ - accept: ItemTypes.form, + accept: 'form', canDrop: () => true, - drop: (item) => { - if (!item.hasOwnProperty('originalIndex')) { + drop: ({ id: draggedId, originalIndex }) => { + if (originalIndex === undefined) { hasDrop(card) + } else if (draggedId) { + if (draggedId !== id) { + const { index: overIndex } = findCard(id) + moveCard(draggedId, overIndex) + } } - }, - hover({ id: draggedId }) { - if (!draggedId) return - if (draggedId !== id) { - const { index: overIndex } = findCard(id) - moveCard(draggedId, overIndex) - } - }, + } }) const opacity = isDragging ? 0 : 1 @@ -40,6 +37,10 @@ const close = () => { closeCard(id) + } + + const copy = () => { + copyCard(id) } let selectval = '' @@ -64,53 +65,57 @@ } else if (cols === '3') { labelCol = 'ant-col-cuslabel' wrapCol = 'ant-col-cuswrap' + } else if (cols === '4') { + labelCol = 'ant-col-sm-2' + wrapCol = 'ant-col-sm-22' } } + let formItem = null + if (card.type === 'text') { + formItem = (<Input style={{marginTop: '4px'}} defaultValue={card.initval} />) + } else if (card.type === 'number') { + formItem = (<InputNumber defaultValue={card.initval} precision={card.decimal} />) + } else if (card.type === 'multiselect' || card.type === 'select' || card.type === 'link' || card.type === 'color') { + formItem = (<Select defaultValue={selectval}></Select>) + } else if (card.type === 'date') { + formItem = (<DatePicker defaultValue={card.initval ? moment().subtract(card.initval, 'days') : null} />) + } else if (card.type === 'datemonth') { + formItem = (<MonthPicker defaultValue={card.initval ? moment().subtract(card.initval, 'month') : null} />) + } else if (card.type === 'datetime') { + formItem = (<DatePicker showTime defaultValue={card.initval ? moment().subtract(card.initval, 'days') : null} />) + } else if (card.type === 'textarea') { + formItem = (<TextArea defaultValue={card.initval} autosize={{ minRows: 2, maxRows: 6 }} />) + } else if (card.type === 'fileupload') { + formItem = (<Button style={{marginTop: '3px'}}><Icon type="upload" /> 鐐瑰嚮涓婁紶 </Button>) + } else if (card.type === 'funcvar') { + formItem = (<Input style={{marginTop: '4px'}} defaultValue={card.linkfield} />) + } else if (card.type === 'linkMain') { + formItem = (<Input style={{marginTop: '4px'}} />) + } + return ( - <div className="page-card" style={{ opacity: opacity}}> - <div ref={node => drag(drop(node))}> - {<div className="ant-row ant-form-item"> - <div className={'ant-col ant-form-item-label ant-col-xs-24 ' + labelCol}> - <label title={card.label}>{card.label}</label> - </div> - <div className={'ant-col ant-form-item-control-wrapper ant-col-xs-24 ' + wrapCol}> - {card.type === 'text' && - <Input style={{marginTop: '4px'}} defaultValue={card.initval} /> - } - {card.type === 'number' && - <InputNumber defaultValue={card.initval} precision={card.decimal} /> - } - {(card.type === 'multiselect' || card.type === 'select' || card.type === 'link') && - <Select defaultValue={selectval}></Select> - } - {card.type === 'date' && - <DatePicker defaultValue={card.initval ? moment().subtract(card.initval, 'days') : null} /> - } - {card.type === 'datemonth' ? - <MonthPicker defaultValue={card.initval ? moment().subtract(card.initval, 'month') : null} /> : null - } - {card.type === 'datetime' && - <DatePicker showTime defaultValue={card.initval ? moment().subtract(card.initval, 'days') : null} /> - } - {card.type === 'textarea' && - <TextArea autosize={{ minRows: 2, maxRows: 6 }} /> - } - {card.type === 'fileupload' && - <Button> - <Icon type="upload" /> 鐐瑰嚮涓婁紶 - </Button> - } - {card.type === 'funcvar' && - <Input style={{marginTop: '4px'}} defaultValue={card.linkfield} /> - } - <div className="input-mask"></div> - </div> - </div>} + <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ + <div className="mk-popover-control"> + <Icon className="edit" type="edit" onClick={edit} /> + <Icon className="copy" type="copy" onClick={copy} /> + <Icon className="close" type="close" onClick={close} /> </div> - <Icon className="edit" type="edit" onClick={edit} /> - <Icon className="edit close" type="close" onClick={close} /> - </div> + } trigger="hover"> + <div className="page-card" style={{ opacity: opacity}}> + <div ref={node => drag(drop(node))}> + {<div className="ant-row ant-form-item"> + <div className={'ant-col ant-form-item-label ant-col-xs-24 ' + labelCol}> + <label title={card.label}>{card.label}</label> + </div> + <div className={'ant-col ant-form-item-control-wrapper ant-col-xs-24 ' + wrapCol}> + {formItem} + <div className="input-mask"></div> + </div> + </div>} + </div> + </div> + </Popover> ) } export default Card -- Gitblit v1.8.0