From 8b9effb98612ee8a00d76d639a5733d12e9ecce6 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 13 十一月 2019 22:09:35 +0800 Subject: [PATCH] 2019-11-13 --- src/components/sidemenu/comtableconfig/dragelement/index.jsx | 75 +++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+), 1 deletions(-) diff --git a/src/components/sidemenu/comtableconfig/dragelement/index.jsx b/src/components/sidemenu/comtableconfig/dragelement/index.jsx index 7b0e33a..0201b40 100644 --- a/src/components/sidemenu/comtableconfig/dragelement/index.jsx +++ b/src/components/sidemenu/comtableconfig/dragelement/index.jsx @@ -2,11 +2,13 @@ import { useDrop } from 'react-dnd' import update from 'immutability-helper' import { Col } from 'antd' +import Utils from '@/utils/utils.js' import Card from './card' import ItemTypes from './itemtypes' import './index.scss' const Container = ({list, type, handleList, handleMenu }) => { + let target = null const [cards, setCards] = useState(list) const moveCard = (id, atIndex) => { const { card, index } = findCard(id) @@ -27,7 +29,75 @@ const { card } = findCard(id) handleMenu(card) } - const [, drop] = useDrop({ accept: ItemTypes[type] }) + + const hasDrop = (item) => { + target = item + } + + const [, drop] = useDrop({ + accept: ItemTypes[type], + drop(item) { + if (item.hasOwnProperty('originalIndex')) { + return + } + let newcard = {} + if (item.type === 'search') { + newcard.uuid = Utils.getuuid() + newcard.label = 'fieldName' + newcard.field = 'field' + newcard.initval = '' + newcard.type = item.subType + if (item.subType === 'select') { + newcard.resourceType = 0 + newcard.options = [] + newcard.dataSource = '' + } + } else if (item.type === 'action') { + newcard.uuid = Utils.getuuid() + newcard.label = 'button' + newcard.func = '' + newcard.Ot = 'notRequired' + newcard.OpenType = item.subType + newcard.icon = 'plus' + newcard.class = 'green' + } else if (item.type === 'columns') { + newcard.uuid = Utils.getuuid() + newcard.Align = 'left' + newcard.label = 'fieldName' + newcard.field = 'field' + newcard.Hide = 'false' + newcard.IsSort = item.subType + newcard.Width = 120 + } + + let indexes = cards.map(car => {return car.id}) + let newid = 0 + while (indexes.includes(newid)) { + newid++ + } + newcard.id = newid + + let targetId = indexes.length > 0 ? indexes[indexes.length - 1] : 0 + if (target) { + targetId = target.id + } + + const { index: overIndex } = findCard(`${targetId}`) + let targetIndex = overIndex + if (!target) { + targetIndex++ + } + if (targetIndex < 0) { + targetIndex = 0 + } + + const _cards = update(cards, { $splice: [[targetIndex, 0, newcard]] }) + setCards(_cards) + handleList({[type]: _cards}) + target = null + } + }) + // const [, drop] = useDrop({ accept: ItemTypes[type] }) return ( <div ref={drop} className="ant-row" style={type === 'columns' ? {display: 'flex'} : {}}> {type === 'action' && cards.map(card => ( @@ -39,6 +109,7 @@ moveCard={moveCard} editCard={editCard} findCard={findCard} + hasDrop={hasDrop} /> ))} {type === 'search' && cards.map(card => ( @@ -51,6 +122,7 @@ moveCard={moveCard} editCard={editCard} findCard={findCard} + hasDrop={hasDrop} /> </Col> ))} @@ -67,6 +139,7 @@ moveCard={moveCard} editCard={editCard} findCard={findCard} + hasDrop={hasDrop} /> ))} </div> -- Gitblit v1.8.0