From da64ab0923bf8817fc8599a6e37b953ce38f64c8 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 27 八月 2023 18:37:36 +0800
Subject: [PATCH] 2023-08-27

---
 src/templates/zshare/editTable/index.jsx |  109 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 79 insertions(+), 30 deletions(-)

diff --git a/src/templates/zshare/editTable/index.jsx b/src/templates/zshare/editTable/index.jsx
index ad29e43..3f0e3fe 100644
--- a/src/templates/zshare/editTable/index.jsx
+++ b/src/templates/zshare/editTable/index.jsx
@@ -180,6 +180,15 @@
     const { data, actions } = this.props
     let columns = fromJS(this.props.columns).toJS()
     let operation = null
+    let extra = null
+    
+    if (actions) {
+      actions.forEach(item => {
+        if (/^extra/.test(item)) {
+          extra = item.split(':')
+        }
+      })
+    }
 
     if (actions && (actions.includes('edit') || actions.includes('copy') || actions.includes('del'))) {
       let _operation = null
@@ -217,9 +226,10 @@
             </div>
           ) : (
             <div className={'edit-operation-btn' + (editingKey !== '' ? ' disabled' : '')} style={{minWidth: '110px', whiteSpace: 'nowrap'}}>
-              {actions.includes('edit') ? <span className="primary" onClick={() => {editingKey === '' && this.edit(record.uuid)}}><EditOutlined /></span> : null}
-              {actions.includes('copy') ? <span className="copy" onClick={() => {editingKey === '' && this.copy(record)}}><CopyOutlined /></span> : null}
-              {actions.includes('status') ? <span className="status" onClick={() => {editingKey === '' && this.handleStatus(record)}}><SwapOutlined /></span> : null}
+              {actions.includes('edit') ? <span className="primary" title="缂栬緫" onClick={() => {editingKey === '' && this.edit(record.uuid)}}><EditOutlined /></span> : null}
+              {extra ? <span className="status" title={extra[2]} onClick={() => {editingKey === '' && this.handleStatus(record, extra[1])}}><SwapOutlined /></span> : null}
+              {actions.includes('status') ? <span className="status" title="鏄惁鍚敤" onClick={() => {editingKey === '' && this.handleStatus(record, 'status')}}><SwapOutlined /></span> : null}
+              {actions.includes('copy') ? <span className="copy" title="澶嶅埗" onClick={() => {editingKey === '' && this.copy(record)}}><CopyOutlined /></span> : null}
               {actions.includes('del') && editingKey === '' ? <Popconfirm
                 overlayClassName="popover-confirm"
                 title="纭畾鍒犻櫎鍚�?"
@@ -406,7 +416,9 @@
       columns.forEach(col => {
         if (col.unique !== true || !unique) return
 
-        if (col.strict) {
+        if (col.uniqueFunc) {
+          unique = col.uniqueFunc(data, res.data)
+        } else if (col.strict) {
           let key = res.data[col.dataIndex].toLowerCase()
           let _index = data.findIndex(item => key === item[col.dataIndex].toLowerCase())
 
@@ -445,7 +457,9 @@
         columns.forEach(col => {
           if (col.unique !== true || !unique) return
 
-          if (col.strict) {
+          if (col.uniqueFunc) {
+            unique = col.uniqueFunc(data, cell)
+          } else if (col.strict) {
             let _index = data.findIndex(item => cell[col.dataIndex].toLowerCase() === item[col.dataIndex].toLowerCase())
   
             if (_index > -1) {
@@ -474,10 +488,10 @@
     message.success('绮樿创鎴愬姛銆�')
   }
 
-  handleStatus = (record) => {
+  handleStatus = (record, type) => {
     const { data } = this.state
 
-    record.status = record.status === 'false' ? 'true' : 'false'
+    record[type] = record[type] === 'false' ? 'true' : 'false'
 
     let newData = data.map(item => {
       if (record.uuid === item.uuid) return record
@@ -508,15 +522,32 @@
     columns.forEach(col => {
       if (col.unique !== true || !unique) return
 
-      let _index = newData.findIndex(item => record.uuid !== item.uuid && record[col.dataIndex] === item[col.dataIndex])
+      if (col.uniqueFunc) {
+        unique = col.uniqueFunc(newData, record)
+        return
+      } else if (col.strict) {
+        let key = record[col.dataIndex].toLowerCase()
+        let _index = newData.findIndex(item => record.uuid !== item.uuid && key === item[col.dataIndex].toLowerCase())
 
-      if (_index > -1) {
-        notification.warning({
-          top: 92,
-          message: col.title + '涓嶅彲閲嶅锛�',
-          duration: 5
-        })
-        unique = false
+        if (_index > -1) {
+          notification.warning({
+            top: 92,
+            message: col.title + '涓嶅彲閲嶅锛�',
+            duration: 5
+          })
+          unique = false
+        }
+      } else {
+        let _index = newData.findIndex(item => record.uuid !== item.uuid && record[col.dataIndex] === item[col.dataIndex])
+  
+        if (_index > -1) {
+          notification.warning({
+            top: 92,
+            message: col.title + '涓嶅彲閲嶅锛�',
+            duration: 5
+          })
+          unique = false
+        }
       }
     })
 
@@ -547,31 +578,49 @@
       }
       const newData = [...this.state.data]
       const index = newData.findIndex(item => uuid === item.uuid)
+      if (index > -1) {
+        row = {...newData[index], ...row}
+      } else {
+        row.uuid = uuid
+      }
 
       let unique = true
       columns.forEach(col => {
         if (col.unique !== true || !unique) return
 
-        let _index = newData.findIndex(item => uuid !== item.uuid && row[col.dataIndex] === item[col.dataIndex])
-
-        if (_index > -1) {
-          notification.warning({
-            top: 92,
-            message: col.title + '涓嶅彲閲嶅锛�',
-            duration: 5
-          })
-          unique = false
+        if (col.uniqueFunc) {
+          unique = col.uniqueFunc(newData, row)
+          return
+        } else if (col.strict) {
+          let key = row[col.dataIndex].toLowerCase()
+          let _index = newData.findIndex(item => row.uuid !== item.uuid && key === item[col.dataIndex].toLowerCase())
+  
+          if (_index > -1) {
+            notification.warning({
+              top: 92,
+              message: col.title + '涓嶅彲閲嶅锛�',
+              duration: 5
+            })
+            unique = false
+          }
+        } else {
+          let _index = newData.findIndex(item => row.uuid !== item.uuid && row[col.dataIndex] === item[col.dataIndex])
+  
+          if (_index > -1) {
+            notification.warning({
+              top: 92,
+              message: col.title + '涓嶅彲閲嶅锛�',
+              duration: 5
+            })
+            unique = false
+          }
         }
       })
 
       if (!unique) return
 
       if (index > -1) {
-        const item = newData[index]
-        newData.splice(index, 1, {
-          ...item,
-          ...row,
-        })
+        newData.splice(index, 1, row)
         this.setState({ data: newData, editingKey: '' }, () => {
           this.props.onChange(newData)
         })
@@ -660,7 +709,7 @@
       return item
     })
 
-    let reg = searchKey ? new RegExp(searchKey, 'ig') : null
+    let reg = searchKey ? new RegExp(searchKey, 'i') : null
 
     return (
       <EditableContext.Provider value={this.props.form}>

--
Gitblit v1.8.0