| | |
| | | import { useDrop } from 'react-dnd' |
| | | import { is, fromJS } from 'immutable' |
| | | import update from 'immutability-helper' |
| | | import { Icon } from 'antd' |
| | | import { Popover } from 'antd' |
| | | import { EditOutlined } from '@ant-design/icons' |
| | | import Utils from '@/utils/utils.js' |
| | | import Card from './card' |
| | | import './index.scss' |
| | | |
| | | const Container = ({list, setting, gridBtn, showfield, placeholder, handleList, handleMenu, handleGridBtn, deleteMenu, markMenu }) => { |
| | | let target = null |
| | | |
| | | const Container = ({list, setting, gridBtn, showfield, handleList, handleMenu, handleGridBtn, deleteMenu, markMenu }) => { |
| | | const [cards, setCards] = useState(list) |
| | | const moveCard = (id, atIndex) => { |
| | | const { card, index } = findCard(id) |
| | |
| | | |
| | | const editCard = id => { |
| | | const { card } = findCard(id) |
| | | |
| | | delete card.focus // 兼容早期的合并列 |
| | | |
| | | handleMenu(card) |
| | |
| | | const markCard = id => { |
| | | const { card } = findCard(id) |
| | | markMenu(card) |
| | | } |
| | | |
| | | const hasDrop = (item) => { |
| | | target = item |
| | | } |
| | | |
| | | const [, drop] = useDrop({ |
| | |
| | | newcard.contrastType = 'static' |
| | | newcard.IsSort = 'true' |
| | | newcard.type = item.subType |
| | | newcard.Width = 120 |
| | | newcard.Width = item.subType === 'number' ? 80 : 120 |
| | | if (item.subType === 'colspan') { |
| | | newcard.sublist = [] |
| | | newcard.subfield = [] |
| | |
| | | newcard.order = 'vertical' |
| | | } |
| | | |
| | | 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 |
| | | |
| | | targetIndex++ |
| | | |
| | | const _cards = update(cards, { $splice: [[targetIndex, 0, newcard]] }) |
| | | const _cards = update(cards, { $splice: [[overIndex + 1, 0, newcard]] }) |
| | | |
| | | handleList(_cards, newcard) |
| | | target = null |
| | | } |
| | | }) |
| | | |
| | |
| | | {i === 0 && column.length > 0 && setting.tableType === 'radio' ? |
| | | <div className="page-card" style={{flex: 60}}></div> : null |
| | | } |
| | | {i === 0 && gridBtn && gridBtn.display && gridBtn.position === 'left' ? |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <EditOutlined className="edit" onClick={handleGridBtn}/> |
| | | </div> |
| | | } trigger="hover"> |
| | | <div className="page-card" style={{flex: gridBtn.Width}}> |
| | | <div style={{cursor: 'default'}}> |
| | | <span className="ant-table-header-column"> |
| | | <div className="ant-table-column-sorters" title={gridBtn.label} style={{textAlign: gridBtn.Align}}> |
| | | <span className="ant-table-column-title">{gridBtn.label}</span> |
| | | </div> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </Popover> : null |
| | | } |
| | | {column.map(card => ( |
| | | <Card |
| | | key={card.uuid} |
| | |
| | | delCard={delCard} |
| | | markCard={markCard} |
| | | findCard={findCard} |
| | | hasDrop={hasDrop} |
| | | /> |
| | | ))} |
| | | {i === (columns.length - 1) && gridBtn && gridBtn.display ? |
| | | <div className="page-card" style={{flex: gridBtn.Width}}> |
| | | <div style={{cursor: 'default'}}> |
| | | <span className="ant-table-header-column"> |
| | | <div className="ant-table-column-sorters" title={gridBtn.label} style={{textAlign: gridBtn.Align}}> |
| | | <span className="ant-table-column-title">{gridBtn.label}</span> |
| | | </div> |
| | | </span> |
| | | {i === (columns.length - 1) && gridBtn && gridBtn.display && gridBtn.position !== 'left' ? |
| | | <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ |
| | | <div className="mk-popover-control"> |
| | | <EditOutlined className="edit" onClick={handleGridBtn}/> |
| | | </div> |
| | | <Icon className="edit" type="edit" onClick={handleGridBtn}/> |
| | | </div> : null |
| | | } trigger="hover"> |
| | | <div className="page-card" style={{flex: gridBtn.Width}}> |
| | | <div style={{cursor: 'default'}}> |
| | | <span className="ant-table-header-column"> |
| | | <div className="ant-table-column-sorters" title={gridBtn.label} style={{textAlign: gridBtn.Align}}> |
| | | <span className="ant-table-column-title">{gridBtn.label}</span> |
| | | </div> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </Popover> : null |
| | | } |
| | | </div> |
| | | ))} |
| | | |
| | | {cards.length === 0 ? |
| | | <div className="common-drawarea-placeholder"> |
| | | {placeholder} |
| | | 请添加显示列 |
| | | </div> : null |
| | | } |
| | | </div> |