From 08cce3334a2dc81d690b518136b0aaea64e48b0b Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 14 六月 2023 09:55:50 +0800
Subject: [PATCH] 2023-06-14

---
 src/menu/components/table/base-table/columns/index.jsx |  205 +++++++++++++++++++++++++++-----------------------
 1 files changed, 111 insertions(+), 94 deletions(-)

diff --git a/src/menu/components/table/base-table/columns/index.jsx b/src/menu/components/table/base-table/columns/index.jsx
index 27b02ee..d1da3b4 100644
--- a/src/menu/components/table/base-table/columns/index.jsx
+++ b/src/menu/components/table/base-table/columns/index.jsx
@@ -3,7 +3,7 @@
 import { is, fromJS } from 'immutable'
 import { DndProvider, DragSource, DropTarget } from 'react-dnd'
 import { Table, Popover, Modal, message, notification } from 'antd'
-import { PlusOutlined, EditOutlined, CopyOutlined, DeleteOutlined, FontColorsOutlined, CloseCircleOutlined, AntDesignOutlined, InfoOutlined } from '@ant-design/icons'
+import { PlusOutlined, PlusSquareOutlined, EditOutlined, CopyOutlined, DeleteOutlined, FontColorsOutlined, CloseCircleOutlined, AntDesignOutlined, InfoOutlined } from '@ant-design/icons'
 
 import asyncComponent from '@/utils/asyncComponent'
 import asyncIconComponent from '@/utils/asyncIconComponent'
@@ -46,63 +46,45 @@
 
     return !is(fromJS(this.props.column), fromJS(nextProps.column)) ||
       !is(fromJS(this.props.fields), fromJS(nextProps.fields)) ||
-      this.props.index !== nextProps.index
+      this.props.index !== nextProps.index ||
+      window.GLOB.columnId === nextProps.column.uuid || window.GLOB.precolumnId === nextProps.column.uuid
   }
 
   render() {
-    const { connectDragSource, connectDropTarget, moveCol, addElement, dropCol, updateCol, editColumn, pasteCell, changeStyle, deleteCol, index, column, align, fields, children, ...restProps } = this.props
+    const { connectDragSource, connectDropTarget, moveCol, componentId, addElement, dropCol, updateCol, editColumn, pasteCell, changeStyle, deleteCol, index, column, align, fields, children, ...restProps } = this.props
 
-    if (index !== undefined) {
-      let style = {cursor: 'move', textAlign: align}
-      if (column.Width) {
-        style.width = column.Width
-        style.minWidth = column.Width
-      }
+    if (!column) return (
+      <th {...restProps}>{children}</th>
+    )
 
-      return connectDragSource(
-        connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => column && this.props.editColumn(column)}>
-          <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
-            <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
-              {column && ['custom', 'colspan', 'action'].includes(column.type) ?
-                <PlusOutlined className="plus" title="娣诲姞" onClick={() => this.props.addElement(column)} /> : null
-              }
-              <EditOutlined className="edit" title="缂栬緫" onClick={() => this.props.editColumn(column)} />
-              {column && column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
-              {column && (column.type === 'custom' || column.type === 'action') ? <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => this.props.changeStyle(column)}/> : null}
-              <DeleteOutlined className="close" title="鍒犻櫎" onClick={this.deleteCol} />
-              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
-            </div>
-          } trigger="hover">
-            {children}
-          </Popover>
-        </th>),
-      )
-    } else if (column) {
-      let style = {textAlign: align}
-      if (column.Width) {
-        style.width = column.Width
-        style.minWidth = column.Width
-      }
-      return (
-        <th {...restProps} style={style} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}>
-          <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
-            <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
-              {column && ['custom', 'colspan'].includes(column.type) ?
-                <PlusOutlined className="plus" title="娣诲姞" onClick={() => this.props.addElement(column)} /> : null
-              }
-              <EditOutlined className="edit" title="缂栬緫" onClick={() => this.props.editColumn(column)} />
-              {column.type === 'custom' ? <PasteComponent options={['customCardElement']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
-              <DeleteOutlined className="close" title="鍒犻櫎" onClick={this.deleteCol} />
-              {column && ['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
-            </div>
-          } trigger="hover">
-            {children}
-          </Popover>
-        </th>
-      )
-    } else {
-      return (<th {...restProps}>{children}</th>)
+    let style = {cursor: 'move', textAlign: align}
+    if (column.Width) {
+      style.width = column.Width
+      style.minWidth = column.Width
     }
+
+    if (window.GLOB.columnId === column.uuid) {
+      style.color = '#1890ff'
+    }
+
+    return connectDragSource(
+      connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => this.props.editColumn(column)}>
+        <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
+          <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
+            {column.type === 'colspan' ? <PlusOutlined className="plus" title="娣诲姞鍒�" onClick={() => this.props.addElement(column)} /> : null}
+            {column.type === 'custom' ? <PlusOutlined className="plus" title="娣诲姞鍏冪礌" onClick={() => this.props.addElement(column)} /> : null}
+            {column.type === 'custom' ? <PlusSquareOutlined className="plus" title="娣诲姞鎸夐挳" onClick={() => this.props.addElement(column, 'button')} /> : null}
+            <EditOutlined className="edit" title="缂栬緫" onClick={() => this.props.editColumn(column)} />
+            {column.type === 'custom' ? <PasteComponent options={['customCardElement', 'action']} updateConfig={(res, resolve) => this.props.pasteCell(column, res, resolve)} /> : null}
+            {column.type === 'custom' ? <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => this.props.changeStyle(column)}/> : null}
+            <DeleteOutlined className="close" title="鍒犻櫎" onClick={this.deleteCol} />
+            {['text', 'number', 'formula'].includes(column.type) ? <MarkColumn field={column.field || ''} columns={fields} marks={column.marks} onSubmit={this.updateMarks} /> : null }
+          </div>
+        } trigger="hover">
+          {children}
+        </Popover>
+      </th>),
+    )
   }
 }
 
@@ -117,17 +99,28 @@
 const ColTarget = {
   drop(props, monitor) {
     const item = monitor.getItem()
-    const dragIndex = item.index
-    const hoverIndex = props.index
+    let dragIndex = item.index
+    let hoverIndex = props.index
 
     if (item.$init) {
-      props.dropCol(item, hoverIndex)
+      if (/sub_/.test(hoverIndex)) {
+        message.warning('鍚堝苟鍒楀瓙鍏冪礌鏆備笉鏀寔鎷栨嫿娣诲姞銆�')
+      } else {
+        props.dropCol(item, hoverIndex.replace(new RegExp(props.componentId + '@', 'ig'), ''))
+      }
       return
     } else if (dragIndex === undefined || hoverIndex === undefined || dragIndex === hoverIndex) {
       return
+    } else {
+      let reg = new RegExp(props.componentId + '@', 'ig')
+      if (reg.test(dragIndex)) {
+        props.moveCol(dragIndex.replace(reg, ''), hoverIndex.replace(reg, ''))
+      } else {
+        message.warning('鎷栧姩鍏冪礌涓嶅湪褰撳墠缁勪欢涓��')
+        return
+      }
     }
 
-    props.moveCol(dragIndex, hoverIndex)
     monitor.getItem().index = hoverIndex
   },
 }
@@ -190,12 +183,6 @@
     if (column && column.type === 'custom') {
       return (
         <td style={{padding: 0, ...(column.style || {})}} className={className}>
-          <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
-        </td>
-      )
-    } else if (column && column.type === 'action') {
-      return (
-        <td style={{padding: 0, textAlign: column.Align, ...(column.style || {})}} className={'action-column ' + className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
@@ -300,7 +287,17 @@
   moveCol = (dragIndex, hoverIndex) => {
     let _columns = fromJS(this.state.columns).toJS()
 
-    _columns.splice(hoverIndex, 0, ..._columns.splice(dragIndex, 1))
+    if (/^sub_/.test(dragIndex) || /^sub_/.test(hoverIndex)) {
+      let sign1 = dragIndex.split('_')
+      let sign2 = hoverIndex.split('_')
+      if (sign1[1] !== sign2[1]) {
+        message.warning('鎷栧姩鍏冪礌涓嶅湪鍚屼竴涓悎骞跺垪涓��')
+        return
+      }
+      this.loopMoveCol(_columns, sign1[1], sign1[2], sign2[2])
+    } else {
+      _columns.splice(hoverIndex, 0, ..._columns.splice(dragIndex, 1))
+    }
 
     this.setState({
       columns: _columns
@@ -309,14 +306,22 @@
     })
   }
 
+  loopMoveCol = (columns, colId, dragIndex, hoverIndex) => {
+    columns.forEach(column => {
+      if (column.type === 'colspan' && column.uuid === colId) {
+        column.subcols.splice(hoverIndex, 0, ...column.subcols.splice(dragIndex, 1))
+      } else if (column.type === 'colspan') {
+        this.loopMoveCol(column.subcols, colId, dragIndex, hoverIndex)
+      }
+    })
+  }
+
   dropCol = (item, hoverIndex) => {
     let _columns = fromJS(this.state.columns).toJS()
 
-    let col = { focus: true, uuid: Utils.getuuid(), label: 'label', field: '', type: item.subType, elements: [] }
+    let col = { focus: true, uuid: Utils.getuuid(), Width: 120, label: 'label', field: '', type: item.subType, elements: [] }
     if (col.type === 'colspan') {
       col.subcols = []
-    } else if (col.type === 'action') {
-      col.label = '鎿嶄綔'
     } else if (col.type === 'index') {
       col.label = '搴忓彿'
     }
@@ -354,7 +359,7 @@
         config.action = config.action.filter(item => item.uuid !== btn.uuid)
 
         setTimeout(() => {
-          MKEmitter.emit('revert', config.uuid)
+          MKEmitter.emit('revertBtn', config.uuid)
         }, 200)
       }
 
@@ -371,14 +376,23 @@
   pasteCell = (col, cell, resolve) => {
     resolve({status: true})
     
-    delete cell.copyType
     cell.uuid = Utils.getuuid()
     cell.focus = true
+    
+    if (!cell.eleType) {
+      if (cell.copyType === 'action') {
+        cell.eleType = 'button'
+        cell.width = cell.width || 12
+      } else {
+        cell.eleType = 'text'
+      }
+    }
+    delete cell.copyType
     
     MKEmitter.emit('cardAddElement', col.uuid, cell)
   }
 
-  addElement = (col) => {
+  addElement = (col, type) => {
     let column = fromJS(col).toJS()
 
     if (column.type === 'colspan') {
@@ -391,26 +405,28 @@
       })
       this.updateCol(column)
     } else if (column.type === 'custom') {
-      let newcard = {uuid: Utils.getuuid(), focus: true, width: 24, eleType: 'text', datatype: 'dynamic', style: {paddingLeft: '4px'}}
+      if (type === 'button') {
+        let newcard = {
+          uuid: Utils.getuuid(),
+          focus: true,
+          eleType: 'button',
+          label: 'button',
+          OpenType: 'prompt',
+          class: 'primary',
+          intertype: 'system',
+          execSuccess: 'grid',
+          execError: 'never',
+          show: 'link'
+        }
   
-      // 娉ㄥ唽浜嬩欢-娣诲姞鍏冪礌
-      MKEmitter.emit('cardAddElement', column.uuid, newcard)
-    } else if (column.type === 'action') {
-      let newcard = {
-        uuid: Utils.getuuid(),
-        focus: true,
-        eleType: 'button',
-        label: 'button',
-        OpenType: 'prompt',
-        class: 'primary',
-        intertype: 'system',
-        execSuccess: 'grid',
-        execError: 'never',
-        show: 'link'
+        // 娉ㄥ唽浜嬩欢-娣诲姞鍏冪礌
+        MKEmitter.emit('cardAddElement', column.uuid, newcard)
+      } else {
+        let newcard = {uuid: Utils.getuuid(), focus: true, width: 24, eleType: 'text', datatype: 'dynamic', style: {paddingLeft: '4px'}}
+    
+        // 娉ㄥ唽浜嬩欢-娣诲姞鍏冪礌
+        MKEmitter.emit('cardAddElement', column.uuid, newcard)
       }
-
-      // 娉ㄥ唽浜嬩欢-娣诲姞鍏冪礌
-      MKEmitter.emit('cardAddElement', column.uuid, newcard)
     }
   }
 
@@ -426,9 +442,6 @@
     } else if (col.type === 'custom') {
       col.style = card.style || {}
       col.elements = card.type === 'custom' ? (card.elements || []) : []
-    } else if (col.type === 'action') {
-      col.style = card.style || {}
-      col.elements = card.type === 'action' ? (card.elements || []) : []
     }
 
     if (!col.field || col.isSub) {
@@ -452,6 +465,9 @@
         resolve()
       }
     }
+
+    window.GLOB.precolumnId = window.GLOB.columnId || ''
+    window.GLOB.columnId = col.uuid
 
     this.setState({card: null})
     this.updateCol(col)
@@ -541,7 +557,7 @@
     document.body.removeChild(oInput)
   }
 
-  handlecolumns = (columns, fields, config, isSub) => {
+  handlecolumns = (columns, fields, config, pId) => {
     return columns.map((col, index) => {
       return {
         title: col.label,
@@ -555,8 +571,9 @@
           upComponent: this.updateCol
         }),
         onHeaderCell: () => ({
-          index: isSub ? undefined : index,
+          index: pId ? config.uuid + '@sub_' + pId + '_' + index : config.uuid + '@' + index,
           column: col,
+          componentId: config.uuid,
           fields: fields,
           align: col.Align,
           moveCol: this.moveCol,
@@ -568,7 +585,7 @@
           changeStyle: this.changeStyle,
           deleteCol: this.deleteCol,
         }),
-        children: col.subcols && col.subcols.length ? this.handlecolumns(col.subcols, fields, config, true) : null,
+        children: col.subcols && col.subcols.length ? this.handlecolumns(col.subcols, fields, config, col.uuid) : null,
       }
     })
   }
@@ -596,7 +613,7 @@
     let n = []
 
     config.columns.forEach(col => {
-      m.push(`${col.field}(${col.label})`)
+      m.push(`${col.field} ${col.datatype}`)
       n.push(col.field)
     })
 

--
Gitblit v1.8.0