king
2025-02-05 125517c3e09320afa84a9e19a084d56c8ec3317e
src/menu/components/search/main-search/dragsearch/card.jsx
@@ -1,6 +1,6 @@
import React from 'react'
import { useDrag, useDrop } from 'react-dnd'
import { Select, DatePicker, Input, Popover, Form } from 'antd'
import { Select, Radio, DatePicker, Input, Popover, Form, Switch, Checkbox } from 'antd'
import { CopyOutlined, EditOutlined, CloseOutlined } from '@ant-design/icons'
import moment from 'moment'
@@ -23,16 +23,22 @@
  const [, drop] = useDrop({
    accept: 'search',
    canDrop: () => true,
    drop: ({ id: draggedId }) => {
      if (!draggedId || draggedId === id) return
      const { index: originIndex } = findCard(draggedId)
      if (originIndex === -1) return
    drop: (item) => {
      const { id: draggedId, originalIndex } = item
      if (originalIndex === undefined) {
        item.dropTargetId = id
      } else {
        if (!draggedId || draggedId === id) return
        const { index: originIndex } = findCard(draggedId)
        if (originIndex === -1) return
      const { index: overIndex } = findCard(id)
      moveCard(draggedId, overIndex)
        const { index: overIndex } = findCard(id)
        moveCard(draggedId, overIndex)
      }
    },
  })
  const opacity = isDragging ? 0 : 1
  const opacity = isDragging ? 0.5 : 1
  let _defaultValue = '' // 下拉搜索、时间范围类型,初始值需要预处理
@@ -49,6 +55,12 @@
      _defaultValue = [moment().startOf('week'), moment().endOf('week')]
    } else if (card.initval === 'month') {
      _defaultValue = [moment().startOf('month'), moment().endOf('month')]
    } else if (card.initval === 'lastMonth') {
      _defaultValue = [moment().subtract(1, 'months').startOf('month'), moment().subtract(1, 'months').endOf('month')]
    } else if (card.initval === 'year') {
      _defaultValue = [moment().startOf('year'), moment().endOf('year')]
    } else if (card.initval === 'lastYear') {
      _defaultValue = [moment().subtract(1, 'years').startOf('year'), moment().subtract(1, 'years').endOf('year')]
    } else if (card.initval) {
      try {
        let _initval = JSON.parse(card.initval)
@@ -103,6 +115,30 @@
    formItem = (<DateGroup card={card} />)
  } else if (card.type === 'checkcard') {
    formItem = <CheckCard config={card} />
  } else if (card.type === 'switch') {
    formItem = (<Switch checkedChildren={card.openText || ''} unCheckedChildren={card.closeText || ''} style={{marginTop: '8px'}} checked={card.initval === card.openVal}/>)
  } else if (card.type === 'radio') {
    let options = card.options
    if (options.length === 0) {
      options = [{Value: '1', Text: '选项1'}, {Value: '2', Text: '选项2'}]
    }
    formItem = (<Radio.Group value={card.initval} style={{lineHeight: '40px', whiteSpace: 'nowrap'}}>
      {options.map((item, i) => (<Radio key={i} value={item.Value}> {item.Text} </Radio>))}
    </Radio.Group>)
  } else if (card.type === 'check') {
    formItem = <Checkbox style={{lineHeight: '36px', whiteSpace: 'nowrap'}} checked={card.initval === card.openVal}>{card.checkTip || ''}</Checkbox>
  } else if (card.type === 'range') {
    let vals = card.initval.split(',')
    formItem = (<>
      <Input style={{marginTop: '4px'}} value={vals[0] || ''} />
      至
      <Input style={{marginTop: '4px'}} value={vals[1] || ''} />
    </>)
  }
  let labelwidth = card.labelwidth || 33.3
  if (card.labelShow === 'false') {
    labelwidth = 0
  }
  return (
@@ -113,14 +149,14 @@
        <CloseOutlined className="close" onClick={() => delCard(id)} />
      </div>
    } trigger="hover">
      <div className={'page-card ' + (card.labelShow === 'false' ? 'label-hide ' : '') + card.type + (card.advanced === 'true' ? ' advanced' : '')} style={{ opacity: opacity}}>
        <div ref={node => drag(drop(node))}>
      <div className={'page-card ' + (card.labelShow === 'false' ? 'label-hide ' : '') + card.type + (card.advanced === 'true' ? ' advanced' : '') + (card.query === 'false' ? ' no-query' : '')} style={{ opacity: opacity}}>
        <div ref={node => drag(drop(node))} onDoubleClick={() => editCard(id)}>
          <Form.Item
            labelCol={{xs: { span: 24 }, sm: { span: 8 }}}
            wrapperCol = {{xs: { span: 24 }, sm: { span: 16 }}}
            labelCol={{style: {width: labelwidth + '%'}}}
            wrapperCol={{style: {width: (100 - labelwidth) + '%'}}}
            label={card.labelShow !== 'false' ? card.label : ''}
            required={card.required === 'true'}
            help={card.field + (card.datefield ? ', ' + card.datefield : '') + (card.advanced === 'true' ? '(高级搜索)' : '')}
            help={`${card.field || ''} ${card.datefield ? ', ' + card.datefield : ''} ${card.Hide === 'true' ? '(隐藏)' : ''} ${card.advanced === 'true' ? '(高级搜索)' : ''}`}
          >
            {formItem}
          </Form.Item>