From e9640ccdc9fe57f91919e3f51462c780e44fadb0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 23 十二月 2020 13:14:20 +0800
Subject: [PATCH] 2020-12-23

---
 src/menu/components/table/normal-table/columns/index.jsx |  144 ++++++++++++++++++++---------------------------
 1 files changed, 61 insertions(+), 83 deletions(-)

diff --git a/src/menu/components/table/normal-table/columns/index.jsx b/src/menu/components/table/normal-table/columns/index.jsx
index 093fb0d..5041887 100644
--- a/src/menu/components/table/normal-table/columns/index.jsx
+++ b/src/menu/components/table/normal-table/columns/index.jsx
@@ -41,7 +41,9 @@
 
     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 ||
+      this.props.rowSpan !== nextProps.rowSpan ||
+      this.props.colSpan !== nextProps.colSpan
   }
 
   render() {
@@ -66,10 +68,10 @@
       )
     } else if (column) {
       return (
-        <th {...restProps}>
+        <th {...restProps} key={column.uuid}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control">
-              {column && column.type === 'custom' ?
+              {column && ['custom', 'colspan'].includes(column.type) ?
                 <Icon className="plus" title="娣诲姞" type="plus" onClick={() => this.props.addElement(column)} /> : null
               }
               <Icon className="edit" title="缂栬緫" type="edit" onClick={() => this.props.editColumn(column)} />
@@ -153,7 +155,7 @@
       return (
         <td style={{...style, minWidth: column.Width || 100}} className={className}>
           {column.field}
-          {column.marks && column.marks.length > 0 ? <Icon className="profile" type="ant-design"/> : null}
+          {column.marks && column.marks.length ? <Icon className="profile" type="ant-design"/> : null}
         </td>
       )
     } else {
@@ -175,6 +177,7 @@
   state = {
     dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     data: [{uuid: Utils.getuuid()}],
+    refresh: false,    // 寮哄埗鍒锋柊
     columns: [],
     fields: [],
     lineMarks: []
@@ -225,29 +228,21 @@
     })
   }
 
+  loopCol = (columns, col) => {
+    return columns.map(column => {
+      if (column.type === 'colspan') {
+        column.subcols = this.loopCol(column.subcols, col)
+      }
+      if (column.uuid === col.uuid) {
+        return col
+      }
+      return column
+    })
+  }
+
   updateCol = (col, action) => {
     let _columns = fromJS(this.state.columns).toJS()
-
-    if (col.isSub) {
-      _columns = _columns.map(column => {
-        if (column.type === 'colspan') {
-          column.subcols = column.subcols.map(item => {
-            if (item.uuid === col.uuid) {
-              return col
-            }
-            return item
-          })
-        }
-        return column
-      })
-    } else {
-      _columns = _columns.map(column => {
-        if (column.uuid === col.uuid) {
-          return col
-        }
-        return column
-      })
-    }
+    _columns = this.loopCol(_columns, col)
 
     this.setState({
       columns: _columns,
@@ -333,20 +328,18 @@
     this.setState({card: null})
   }
 
+  loopDelCol = (columns, col) => {
+    return columns.filter(column => {
+      if (column.type === 'colspan') {
+        column.subcols = this.loopDelCol(column.subcols, col)
+      }
+      return column.uuid !== col.uuid
+    })
+  }
+
   deleteCol = (col) => {
     let _columns = fromJS(this.state.columns).toJS()
-
-    if (col.isSub) {
-      _columns = _columns.map(column => {
-        if (column.type !== 'colspan') return column
-        if (column.subcols && column.subcols.length > 0) {
-          column.subcols = column.subcols.filter(item => item.uuid !== col.uuid)
-        }
-        return column
-      })
-    } else {
-      _columns = _columns.filter(column => column.uuid !== col.uuid)
-    }
+    _columns = this.loopDelCol(_columns, col)
 
     this.setState({
       columns: _columns
@@ -387,6 +380,35 @@
     document.body.removeChild(oInput)
   }
 
+  handlecolumns = (columns, fields, config, isSub) => {
+    return columns.map((col, index) => {
+      return {
+        title: col.label,
+        dataIndex: col.uuid,
+        align: col.Align,
+        sorter: !isSub && col.IsSort === 'true',
+        onCell: () => ({
+          column: col,
+          width: col.Width,
+          config: config,
+          upComponent: this.updateCol
+        }),
+        onHeaderCell: () => ({
+          index: isSub ? undefined : index,
+          column: col,
+          fields: fields,
+          align: col.Align,
+          moveCol: this.moveCol,
+          updateCol: this.updateCol,
+          addElement: this.addElement,
+          editColumn: this.editColumn,
+          deleteCol: this.deleteCol,
+        }),
+        children: col.subcols && col.subcols.length ? this.handlecolumns(col.subcols, fields, config, true) : null,
+      }
+    })
+  }
+
   render() {
     const { config } = this.props
     const { fields, card, lineMarks, dict } = this.state
@@ -399,51 +421,7 @@
       }
     }
 
-    const columns = this.state.columns.map((col, index) => {
-      return {
-        title: col.label,
-        dataIndex: col.field,
-        align: col.Align,
-        sorter: col.IsSort === 'true',
-        onCell: () => ({
-          column: col,
-          width: col.Width,
-          config: config,
-          upComponent: this.updateCol
-        }),
-        children: col.subcols && col.subcols.length > 0 ? col.subcols.map(cell => ({
-          align: col.Align,
-          title: cell.label,
-          key: cell.uuid,
-          onCell: () => ({
-            column: cell,
-            width: cell.Width,
-            config: config,
-            upComponent: this.updateCol
-          }),
-          onHeaderCell: () => ({
-            column: cell,
-            fields: fields,
-            align: cell.Align,
-            updateCol: this.updateCol,
-            addElement: this.addElement,
-            editColumn: this.editColumn,
-            deleteCol: this.deleteCol,
-          })
-        })) : null,
-        onHeaderCell: () => ({
-          index,
-          column: col,
-          fields: fields,
-          align: col.Align,
-          moveCol: this.moveCol,
-          updateCol: this.updateCol,
-          addElement: this.addElement,
-          editColumn: this.editColumn,
-          deleteCol: this.deleteCol,
-        })
-      }
-    })
+    const columns = this.handlecolumns(this.state.columns, fields, config)
 
     return (
       <div className={`normal-table-columns ${config.setting.laypage} ${config.wrap.tableType}`}>
@@ -454,12 +432,12 @@
         <DndProvider>
           <Table
             rowKey="uuid"
+            rowClassName="editable-row"
             bordered={config.wrap.bordered !== 'false'}
             components={components}
             dataSource={this.state.data}
             rowSelection={config.wrap.tableType ? { type: 'radio' } : null}
             columns={columns}
-            rowClassName="editable-row"
             pagination={{
               current: 1,
               pageSize: 10,

--
Gitblit v1.8.0