From 89fb1308d92e10a27cf8f91f4dd766eb38976e12 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 26 十一月 2020 21:56:42 +0800 Subject: [PATCH] 2020-11-26 --- src/templates/formtabconfig/dragelement/index.jsx | 101 ++++++++++++++++++++++++++------------------------ 1 files changed, 53 insertions(+), 48 deletions(-) diff --git a/src/templates/formtabconfig/dragelement/index.jsx b/src/templates/formtabconfig/dragelement/index.jsx index 83ca042..9776ef4 100644 --- a/src/templates/formtabconfig/dragelement/index.jsx +++ b/src/templates/formtabconfig/dragelement/index.jsx @@ -1,24 +1,30 @@ import React, { useState } from 'react' import { useDrop } from 'react-dnd' import update from 'immutability-helper' +import { is, fromJS } from 'immutable' 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, groupId, setting, placeholder, handleList, handleMenu, deleteMenu, copyElement, profileMenu }) => { - let target = null +const Container = ({list, type, groupId, setting, placeholder, handleList, handleMenu, deleteMenu, profileMenu }) => { const [cards, setCards] = useState(list) const moveCard = (id, atIndex) => { const { card, index } = findCard(id) + + if (!card) return + const _cards = update(cards, { $splice: [[index, 1], [atIndex, 0, card]] }) - setCards(_cards) if (type === 'action') { handleList(type, _cards) } else { handleList(type, _cards, null, groupId) } + } + + if (!is(fromJS(cards), fromJS(list))) { + setCards(list) } const findCard = id => { @@ -33,6 +39,36 @@ const { card } = findCard(id) handleMenu(card) } + + const copyCard = id => { + const { card } = findCard(id) + + let _card = JSON.parse(JSON.stringify(card)) + + _card.originUuid = _card.uuid + _card.uuid = Utils.getuuid() + _card.iscopy = true + _card.focus = true + + // 澶嶅埗鍒板壀鍒囨澘 + let oInput = document.createElement('input') + let val = JSON.parse(JSON.stringify(_card)) + val.copyType = 'form' + val.uuid = Utils.getuuid() + + delete val.originUuid + delete val.iscopy + + oInput.value = window.btoa(window.encodeURIComponent(JSON.stringify(val))) + document.body.appendChild(oInput) + oInput.select() + document.execCommand('Copy') + oInput.className = 'oInput' + oInput.style.display = 'none' + document.body.removeChild(oInput) + + handleMenu(_card) + } const profileCard = id => { const { card } = findCard(id) @@ -42,22 +78,6 @@ const delCard = id => { const { card } = findCard(id) deleteMenu({card: card, type: type}) - } - - const copyCard = id => { - const { card } = findCard(id) - let copycard = JSON.parse(JSON.stringify(card)) - copycard.uuid = Utils.getuuid() - copycard.origin = false - copycard.label = copycard.label + '(copy)' - - copycard.originCard = card - - copyElement(copycard) - } - - const hasDrop = (item) => { - target = item } const [, drop] = useDrop({ @@ -95,60 +115,46 @@ newcard.type = item.subType newcard.resourceType = '0' newcard.options = [] - newcard.dataSource = '' newcard.setAll = 'false' - newcard.linkField = '' - newcard.valueField = '' - newcard.valueText = '' - newcard.orderBy = '' newcard.orderType = 'asc' newcard.match = _match newcard.display = 'dropdown' } else if (item.type === 'action') { newcard.label = 'button' - newcard.innerFunc = '' - newcard.outerFunc = '' - newcard.sql = '' - newcard.sqlType = '' newcard.Ot = 'requiredSgl' newcard.OpenType = item.subType newcard.tabType = 'SubTable' newcard.linkTab = '' - newcard.icon = '' newcard.class = 'default' newcard.intertype = 'inner' - newcard.interface = '' - newcard.method = 'POST' newcard.position = 'toolbar' newcard.execSuccess = 'grid' newcard.execError = 'never' newcard.popClose = 'never' newcard.errorTime = 15 - newcard.callbackFunc = '' - newcard.pageTemplate = '' - newcard.url = '' newcard.verify = null } - let targetId = cards.length > 0 ? cards[cards.length - 1].uuid : 0 - if (target) { - targetId = target.uuid + let targetId = '' + + if (item.dropTargetId) { + targetId = item.dropTargetId + delete item.dropTargetId + } else if (cards.length > 0) { + targetId = cards[cards.length - 1].uuid } const { index: overIndex } = findCard(`${targetId}`) - let targetIndex = overIndex + const _cards = update(cards, { $splice: [[overIndex + 1, 0, newcard]] }) - targetIndex++ - - const _cards = update(cards, { $splice: [[targetIndex, 0, newcard]] }) - setCards(_cards) handleList(type, _cards, newcard, groupId) - target = null } }) + + let _width = (setting && setting.width) || 100 return ( - <div ref={drop} className="ant-row"> + <div ref={drop} className="ant-row" style={type === 'search' ? {margin: '0 auto', width: _width + '%'} : {}}> {type === 'action' && cards.map(card => ( <Card key={card.uuid} @@ -158,24 +164,23 @@ moveCard={moveCard} editCard={editCard} delCard={delCard} - copyCard={copyCard} profileCard={profileCard} findCard={findCard} - hasDrop={hasDrop} /> ))} {type === 'search' && cards.map(card => ( - <Col key={card.uuid} span={24 / setting.cols}> + <Col key={card.uuid} span={card.type !== 'textarea' ? 24 / setting.cols : 24}> <Card id={card.uuid} key={card.uuid} type={type} card={card} + cols={setting.cols} moveCard={moveCard} editCard={editCard} delCard={delCard} + copyCard={copyCard} findCard={findCard} - hasDrop={hasDrop} /> </Col> ))} -- Gitblit v1.8.0