From 137fb8ea6af2789b3238b22bac31d80bced41dfe Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 28 七月 2021 11:39:39 +0800
Subject: [PATCH] 2021-07-28

---
 src/templates/zshare/editTable/index.jsx |   61 +++++++++++++++++++++---------
 1 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/src/templates/zshare/editTable/index.jsx b/src/templates/zshare/editTable/index.jsx
index 9f96d5f..5e1d00b 100644
--- a/src/templates/zshare/editTable/index.jsx
+++ b/src/templates/zshare/editTable/index.jsx
@@ -2,7 +2,7 @@
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
 import { DndProvider, DragSource, DropTarget } from 'react-dnd'
-import { Table, Input, InputNumber, Popconfirm, Form, Icon, Select, Radio, Cascader, notification, message, Modal } from 'antd'
+import { Table, Input, InputNumber, Popconfirm, Form, Icon, Select, Radio, Cascader, notification, message, Modal, Typography } from 'antd'
 
 import Utils from '@/utils/utils.js'
 import ColorSketch from '@/mob/colorsketch'
@@ -15,6 +15,7 @@
 let eTDict = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
 const EditableContext = React.createContext()
 let dragingIndex = -1
+const { Paragraph } = Typography
 
 class BodyRow extends React.Component {
   render() {
@@ -170,6 +171,7 @@
   UNSAFE_componentWillMount () {
     const { data, actions } = this.props
     let columns = fromJS(this.props.columns).toJS()
+    let operation = null
 
     if (actions && (actions.includes('edit') || actions.includes('copy') || actions.includes('del'))) {
       let _operation = null
@@ -180,7 +182,7 @@
         return item.dataIndex !== 'operation'
       })
 
-      let operation = {
+      operation = {
         title: (<div>
           {eTDict['model.operation']}
           {actions.includes('copy') ? (
@@ -232,7 +234,7 @@
 
     this.setState({
       data: data || [],
-      oricolumns: fromJS(this.props.columns).toJS(),
+      operation,
       columns
     })
   }
@@ -240,19 +242,26 @@
   UNSAFE_componentWillReceiveProps (nextProps) {
     if (!is(fromJS(this.state.data), fromJS(nextProps.data))) {
       this.setState({data: nextProps.data, editingKey: ''})
-    } else if (!is(fromJS(this.state.oricolumns), fromJS(nextProps.columns))) {
-      let cols = {}
-      nextProps.columns.forEach(col => {cols[col.dataIndex] = col})
-
-      this.setState({
-        oricolumns: fromJS(nextProps.columns).toJS(),
-        columns: this.state.columns.map(col => {
-          if (cols[col.dataIndex]) {
-            return cols[col.dataIndex]
-          }
-          return col
+    } else if (!is(fromJS(this.props.columns), fromJS(nextProps.columns))) {
+      if (nextProps.columns.length === this.props.columns.length) {
+        let cols = {}
+        nextProps.columns.forEach(col => {cols[col.dataIndex] = col})
+  
+        this.setState({
+          columns: this.state.columns.map(col => {
+            if (cols[col.dataIndex]) {
+              return cols[col.dataIndex]
+            }
+            return col
+          })
         })
-      })
+      } else {
+        let columns = fromJS(nextProps.columns).toJS()
+        if (this.state.operation) {
+          columns.push(this.state.operation)
+        }
+        this.setState({columns})
+      }
     }
   }
 
@@ -353,7 +362,7 @@
   
           if (!unique) return
   
-          data.unshift(cell)
+          data.push(cell)
         })
 
         this.setState({ data, editingKey: '', visible: false }, () => {
@@ -493,7 +502,10 @@
       moveprops.moveRow = this.moveRow
     }
     
-    const columns = this.state.columns.map(col => {
+    let  columns = this.state.columns.map(col => {
+      if (col.copy) {
+        col.render = (text) => (<Paragraph copyable>{text}</Paragraph>)
+      }
       if (!col.editable) return col
       return {
         ...col,
@@ -513,6 +525,19 @@
       }
     })
 
+    columns.unshift({
+      title: '搴忓彿',
+      dataIndex: '$index',
+      className: 'mk-index',
+      width: '60px',
+    })
+
+    const data = this.state.data.map((item, index) => {
+      item.$index = index + 1
+
+      return item
+    })
+
     return (
       <EditableContext.Provider value={this.props.form}>
         <div className="modal-edit-table">
@@ -521,7 +546,7 @@
               bordered
               rowKey="uuid"
               components={components}
-              dataSource={this.state.data}
+              dataSource={data}
               columns={columns}
               rowClassName="editable-row"
               pagination={false}

--
Gitblit v1.8.0