From 742f7d11557526038d332e60a8c8ca18177bc4e4 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 26 十月 2023 15:51:58 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx |  236 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 205 insertions(+), 31 deletions(-)

diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
index 95e8350..bd322ed 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -407,9 +407,9 @@
       }
 
       if (col.marks) {
-        let mark = getMark(col.marks, record, style)
+        style = style ? {...style} : {}
 
-        style = mark.style
+        let mark = getMark(col.marks, record, style)
 
         if (mark.icon) {
           if (mark.position === 'front') {
@@ -433,23 +433,23 @@
       if (col.editable === 'true' && !disabled) {
         if (editing) {
           if (!col.editType || col.editType === 'text') {
-            return (<td className="editing_table_cell">
+            return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
               <Input className={err ? 'has-error' : ''} title={err} id={col.uuid + record.$$uuid} defaultValue={value} onChange={(e) => this.onChange(e.target.value)} onPressEnter={this.enterPress} onBlur={this.onBlur}/>
             </td>)
           } else if (col.editType === 'date') {
-            return (<td className="editing_table_cell">
+            return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
               <CusDatePicker config={col} value={record[col.field] || null} open={true} onChange={this.onDateChange} blur={() => this.setState({editing: false})}/>
             </td>)
           } else if (col.editType === 'switch') {
             let _value = record[col.field] !== undefined ? record[col.field] : ''
 
-            return (<td className="editing_table_cell">
+            return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
               <CusSwitch config={col} defaultValue={_value} autoFocus={true} onChange={this.onSwitchChange} onBlur={this.switchBlur}/>
             </td>)
           } else {
             let _value = record[col.field] !== undefined ? record[col.field] : ''
 
-            return (<td className="editing_table_cell">
+            return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
               <Select
                 showSearch
                 defaultValue={_value}
@@ -465,7 +465,7 @@
             </td>)
           }
         } else {
-          return (<td className={className + ' pointer'} style={style}>
+          return (<td onClick={(e) => e.stopPropagation()} className={className + ' pointer'} style={style}>
             <div className="mk-mask" id={col.uuid + record.$$uuid} onClick={this.focus}></div>{content}
           </td>)
         }
@@ -507,9 +507,9 @@
       }
 
       if (col.marks) {
-        let mark = getMark(col.marks, record, style)
+        style = style ? {...style} : {}
 
-        style = mark.style
+        let mark = getMark(col.marks, record, style)
 
         if (mark.icon) {
           if (mark.position === 'front') {
@@ -536,11 +536,11 @@
           if (col.noValue === 'hide' && value === 0) {
             val = ''
           }
-          return (<td className="editing_table_cell">
+          return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
             <InputNumber className={err ? 'has-error' : ''} precision={col.decimal || 0} title={err} id={col.uuid + record.$$uuid} defaultValue={val} onChange={(val) => this.onChange(val)} onPressEnter={this.enterPress} onBlur={this.onBlur}/>
           </td>)
         } else {
-          return (<td className={className + ' pointer'} style={style}>
+          return (<td onClick={(e) => e.stopPropagation()} className={className + ' pointer'} style={style}>
             <div className="mk-mask" id={col.uuid + record.$$uuid} onClick={this.focus}></div>{content}
           </td>)
         }
@@ -612,9 +612,9 @@
       }
 
       if (col.marks) {
-        let mark = getMark(col.marks, record, style)
+        style = style ? {...style} : {}
 
-        style = mark.style
+        let mark = getMark(col.marks, record, style)
 
         if (mark.icon) {
           if (mark.position === 'front') {
@@ -840,6 +840,7 @@
     if (!col) return (<td {...resProps} className={className} style={style}/>)
 
     let disabled = false
+    let editable = false
     if (col.ctrlField) {
       disabled = col.ctrlValue.includes(record[col.ctrlField])
     }
@@ -847,6 +848,7 @@
     let children = null
     if (col.type === 'text') {
       if (col.editable === 'true' && !disabled) {
+        editable = true
         let _value = record[col.field] !== undefined ? record[col.field] : ''
         
         if (!col.editType || col.editType === 'text') {
@@ -901,9 +903,9 @@
         }
 
         if (col.marks) {
-          let mark = getMark(col.marks, record, style)
+          style = style ? {...style} : {}
 
-          style = mark.style
+          let mark = getMark(col.marks, record, style)
 
           if (mark.icon) {
             if (mark.position === 'front') {
@@ -932,6 +934,7 @@
       }
     } else if (col.type === 'number') {
       if (col.editable === 'true' && !disabled) {
+        editable = true
         let _value = record[col.field] !== undefined ? record[col.field] : ''
 
         if (col.noValue === 'hide' && _value === 0) {
@@ -976,9 +979,9 @@
         }
 
         if (col.marks) {
-          let mark = getMark(col.marks, record, style)
+          style = style ? {...style} : {}
 
-          style = mark.style
+          let mark = getMark(col.marks, record, style)
 
           if (mark.icon) {
             if (mark.position === 'front') {
@@ -1070,9 +1073,9 @@
       }
 
       if (col.marks) {
-        let mark = getMark(col.marks, record, style)
+        style = style ? {...style} : {}
 
-        style = mark.style
+        let mark = getMark(col.marks, record, style)
 
         if (mark.icon) {
           if (mark.position === 'front') {
@@ -1105,6 +1108,10 @@
       )
     }
 
+    if (editable) {
+      return (<td onClick={(e) => e.stopPropagation()} className={'editing_all_table_cell ' + className} style={style}>{children}</td>)
+    }
+
     return (<td className={'editing_all_table_cell ' + className} style={style}>{children}</td>)
   }
 }
@@ -1121,6 +1128,8 @@
     loading: PropTypes.bool,         // 琛ㄦ牸鍔犺浇涓�
     refreshdata: PropTypes.func,     // 琛ㄦ牸涓帓搴忓垪銆侀〉鐮佺殑鍙樺寲鏃跺埛鏂�
     chgSelectData: PropTypes.func,
+    allSearch: PropTypes.any,
+    colsCtrls: PropTypes.any
   }
 
   state = {
@@ -1137,11 +1146,13 @@
     pageOptions: [],
     deForms: null,
     visible: false,
-    midData: null
+    midData: null,
+    allColumns: null,
+    reseting: false
   }
 
   UNSAFE_componentWillMount () {
-    const { setting, fields, columns, BID } = this.props
+    const { setting, fields, columns, BID, colsCtrls } = this.props
     let orderfields = {}
 
     let _columns = []
@@ -1155,7 +1166,7 @@
         let cell = null
   
         if (item.type === 'colspan') {
-          cell = { title: item.label, align: item.Align }
+          cell = { title: item.label, align: item.Align, $key: item.uuid }
           cell.children = getColumns(item.subcols)
         } else {
           if (item.editable === 'true') {
@@ -1200,15 +1211,18 @@
     
           if (item.field) {
             orderfields[item.uuid] = item.field
+          } else if (item.sortField) {
+            orderfields[item.uuid] = item.sortField
           }
 
           cell = {
             align: item.Align,
             dataIndex: item.uuid,
             title: item.editable === 'true' ? <span>{item.label}<EditOutlined className="system-color mk-edit-sign"/></span> : item.label,
-            sorter: !!(item.field && item.IsSort === 'true'),
+            sorter: (item.field || item.sortField) && item.IsSort === 'true',
             width: item.Width || 120,
-            $type: item.type,
+            // $type: item.type,
+            $key: item.uuid,
             onCell: record => ({
               record,
               col: item,
@@ -1248,9 +1262,16 @@
       pageOptions = pageOptions.sort((a, b) => a - b)
     }
 
+    let allColumns = null
+    if (colsCtrls) {
+      allColumns = [..._columns]
+      _columns = this.getCurColumns(_columns, this.props.allSearch)
+    }
+
     this.setState({
       forms,
       signForms,
+      allColumns,
       pageSize: setting.pageSize || 10,
       pageOptions,
       columns: _columns,
@@ -1312,13 +1333,54 @@
     MKEmitter.removeListener('changeRecord', this.changeRecord)
   }
 
+  getCurColumns = (columns, allSearch) => {
+    const { colsCtrls } = this.props
+
+    let values = {}
+    allSearch.forEach(item => {
+      values[item.key] = item.value
+    })
+    let cols = null
+    colsCtrls.some(item => {
+      let originVal = item.field.map(f => values[f] || '').join('')
+      let contrastVal = item.contrastValue
+      let result = false
+
+      if (item.match === '=') {
+        result = originVal === contrastVal
+      } else if (item.match === '!=') {
+        result = originVal !== contrastVal
+      } else {
+        originVal = isNaN(originVal) ? originVal : +originVal
+        contrastVal = isNaN(contrastVal) ? contrastVal : +contrastVal
+        if (item.match === '>') {
+          result = originVal > contrastVal
+        } else if (item.match === '<') {
+          result = originVal < contrastVal
+        }
+      }
+
+      if (!result) return false
+
+      cols = item.cols
+
+      return true
+    })
+
+    if (cols) {
+      return columns.filter(col => cols.includes(col.$key))
+    }
+
+    return columns
+  }
+
   transferData = (menuid, data, type) => {
     const { MenuID, setting } = this.props
     const { edData, signForms } = this.state
 
     if (menuid !== MenuID) return
 
-    if (setting.commit !== 'all' && setting.standard !== 'change') {
+    if (setting.commit !== 'all' && setting.commit !== 'blur' && setting.standard !== 'change') {
       if (type !== 'line') {
         data.forEach(item => {
           let value = ''
@@ -1358,7 +1420,24 @@
   }
 
   updateMutil = (data) => {
-    const { setting } = this.props
+    const { setting, colsCtrls, allSearch } = this.props
+    const { allColumns } = this.state
+
+    if (colsCtrls) {
+      this.setState({
+        columns: this.getCurColumns(allColumns, allSearch),
+        reseting: true,
+        edData: data,
+        visible: false,
+        midData: null
+      }, () => {
+        this.setState({
+          reseting: false
+        })
+      })
+
+      return
+    }
 
     if (setting.editType === 'multi' && data.length > 0) {
       this.setState({edData: []}, () => {
@@ -1552,7 +1631,21 @@
       return item
     })
 
-    this.setState({columns: [], edData: []}, () => {
+    let _cols = this.state.allColumns
+    if (_cols) {
+      _cols = _cols.map(item => {
+        if (reCols[item.dataIndex]) {
+          item.onCell = record => ({
+            record,
+            col: reCols[item.dataIndex]
+          })
+        }
+  
+        return item
+      })
+    }
+
+    this.setState({columns: [], edData: [], allColumns: _cols}, () => {
       this.setState({columns: _edColumns, edData: edData})
     })
   }
@@ -1677,6 +1770,8 @@
       this.setState({edData: _data}, () => {
         if (setting.commit === 'simple') {
           this.submit()
+        } else if (setting.commit === 'blur') {
+          this.submit(record)
         }
       })
     }
@@ -1688,7 +1783,9 @@
 
     if (id !== tableId) return
 
-    if (!record.$sign) {
+    if (setting.commit === 'blur') {
+
+    } else if (!record.$sign) {
       record.$origin = false
       record.$lock = true
       delete record.$forbid
@@ -1719,7 +1816,11 @@
       if (setting.tableType && setting.hasAction && this.state.selectedRowKeys.includes(record.$$uuid)) {
         this.selectdata(this.state.selectedRowKeys)
       }
+      if (setting.commit === 'blur') {
+        this.submit(record)
+      }
     })
+
   }
 
   addRecord = (id, record) => {
@@ -1877,7 +1978,71 @@
     return data
   }
 
-  submit = () => {
+  checkLineData = (item) => {
+    const { forms } = this.state
+
+    let record = fromJS(item).toJS()
+    let err = ''
+    forms.forEach(col => {
+      if (col.editable !== 'true' || record.$deleted) {
+        if (col.type === 'number') {
+          record[col.field] = +record[col.field]
+          if (isNaN(record[col.field])) {
+            record[col.field] = 0
+          }
+        } else {
+          record[col.field] = record[col.field] !== undefined ? (record[col.field] + '') : ''
+        }
+        return
+      }
+      if (col.type === 'text') {
+        let val = record[col.field] !== undefined ? (record[col.field] + '') : ''
+        if (col.required === 'true' && !val) {
+          err = `${col.label}涓嶅彲涓虹┖`
+        } else if (col.datatype === 'datetime' && !val) {
+          val = '1949-10-01'
+        }
+        record[col.field] = val
+      } else if (col.type === 'number') {
+        let val = record[col.field]
+        if (col.noValue === 'hide' && !val) {
+          val = 0
+        } else if (!val && val !== 0) {
+          err = `${col.label}涓嶅彲涓虹┖`
+          return
+        }
+        val = +val
+        if (isNaN(val)) {
+          err = `${col.label}鏁版嵁鏍煎紡閿欒`
+          return
+        }
+
+        val = +val.toFixed(col.decimal || 0)
+        
+        if (typeof(col.max) === 'number' && val > col.max) {
+          err = `${col.label}涓嶅彲澶т簬${col.max}`
+        } else if (typeof(col.min) === 'number' && val < col.min) {
+          err = `${col.label}涓嶅彲灏忎簬${col.min}`
+        }
+
+        record[col.field] = val
+      }
+    })
+
+    if (err) {
+      notification.warning({
+        top: 92,
+        message: err,
+        duration: 5
+      })
+
+      return null
+    }
+
+    return [record]
+  }
+
+  submit = (record) => {
     const { submit, BID, setting } = this.props
     const { forms } = this.state
 
@@ -1893,7 +2058,14 @@
       return
     }
 
-    let data = this.checkData()
+    if (setting.commit === 'blur' && !record) return
+
+    let data = null
+    if (setting.commit === 'blur') {
+      data = this.checkLineData(record)
+    } else {
+      data = this.checkData()
+    }
 
     if (!data) return
 
@@ -2135,7 +2307,9 @@
 
   render() {
     const { setting, lineMarks, submit } = this.props
-    const { tableId, edData, columns, loading, pageOptions, selectedRowKeys, visible, midData } = this.state
+    const { tableId, edData, columns, loading, pageOptions, selectedRowKeys, visible, midData, reseting } = this.state
+
+    if (reseting) return null
 
     const components = {
       body: {

--
Gitblit v1.8.0