From 6555f1f63a5389d49fbb98b5b2dca16a61239c64 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 27 十月 2023 09:49:39 +0800
Subject: [PATCH] 2023-10-27

---
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx |  251 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 221 insertions(+), 30 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 b858fbf..0805ba9 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -15,6 +15,7 @@
 
 const { Paragraph } = Typography
 const MkIcon = asyncComponent(() => import('@/components/mk-icon'))
+const MKPopSelect = asyncComponent(() => import('./mkPopSelect'))
 const CardCellComponent = asyncComponent(() => import('@/tabviews/custom/components/card/cardcellList'))
 
 class CusSwitch extends Component {
@@ -370,6 +371,10 @@
     }, 10)
   }
 
+  onPopChange = () => {
+
+  }
+
   render() {
     let { col, config, record, style, className, ...resProps } = this.props
     const { editing, value, err } = this.state
@@ -407,9 +412,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 +438,29 @@
       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 if (col.editType === 'popSelect') {
+            let _value = record[col.field] !== undefined ? record[col.field] : ''
+
+            return (<td onClick={(e) => e.stopPropagation()} className="editing_table_cell">
+              <MKPopSelect defaultValue={_value} config={col} BID={record.$$BID} ID={record.$$uuid} onChange={this.onPopChange} onSubmit={() => {}}/>
             </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 +476,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 +518,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 +547,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 +623,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') {
@@ -833,6 +844,10 @@
     MKEmitter.emit('changeRecord', col.tableId, {...record, [col.field]: _val})
   }
 
+  onPopChange = () => {
+
+  }
+
   render() {
     let { col, config, record, style, className, ...resProps } = this.props
     const { err } = this.state
@@ -840,6 +855,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 +863,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') {
@@ -860,6 +877,10 @@
         } else if (col.editType === 'date') {
           children = (
             <CusDatePicker config={col} value={record[col.field] || null} onChange={this.onDateChange} blur={() => {}}/>
+          )
+        } else if (col.editType === 'popSelect') {
+          children = (
+            <MKPopSelect config={col} defaultValue={record[col.field] || ''} BID={record.$$BID} ID={record.$$uuid} onChange={this.onPopChange} onSubmit={() => {}}/>
           )
         } else {
           children = (<>
@@ -901,9 +922,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 +953,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 +998,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 +1092,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 +1127,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 +1147,8 @@
     loading: PropTypes.bool,         // 琛ㄦ牸鍔犺浇涓�
     refreshdata: PropTypes.func,     // 琛ㄦ牸涓帓搴忓垪銆侀〉鐮佺殑鍙樺寲鏃跺埛鏂�
     chgSelectData: PropTypes.func,
+    allSearch: PropTypes.any,
+    colsCtrls: PropTypes.any
   }
 
   state = {
@@ -1137,11 +1165,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 +1185,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') {
@@ -1210,7 +1240,8 @@
             title: item.editable === 'true' ? <span>{item.label}<EditOutlined className="system-color mk-edit-sign"/></span> : item.label,
             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,
@@ -1250,9 +1281,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,
@@ -1314,13 +1352,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 = ''
@@ -1360,7 +1439,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: []}, () => {
@@ -1554,7 +1650,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})
     })
   }
@@ -1679,6 +1789,8 @@
       this.setState({edData: _data}, () => {
         if (setting.commit === 'simple') {
           this.submit()
+        } else if (setting.commit === 'blur') {
+          this.submit(record)
         }
       })
     }
@@ -1690,7 +1802,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
@@ -1721,7 +1835,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) => {
@@ -1879,7 +1997,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
 
@@ -1895,7 +2077,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
 
@@ -2137,7 +2326,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