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 |  206 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 195 insertions(+), 11 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 053c122..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
@@ -445,6 +450,12 @@
 
             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] : ''
@@ -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
@@ -862,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 = (<>
@@ -1128,6 +1147,8 @@
     loading: PropTypes.bool,         // 琛ㄦ牸鍔犺浇涓�
     refreshdata: PropTypes.func,     // 琛ㄦ牸涓帓搴忓垪銆侀〉鐮佺殑鍙樺寲鏃跺埛鏂�
     chgSelectData: PropTypes.func,
+    allSearch: PropTypes.any,
+    colsCtrls: PropTypes.any
   }
 
   state = {
@@ -1144,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 = []
@@ -1162,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') {
@@ -1217,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,
@@ -1257,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,
@@ -1321,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 = ''
@@ -1367,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: []}, () => {
@@ -1561,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})
     })
   }
@@ -1686,6 +1789,8 @@
       this.setState({edData: _data}, () => {
         if (setting.commit === 'simple') {
           this.submit()
+        } else if (setting.commit === 'blur') {
+          this.submit(record)
         }
       })
     }
@@ -1697,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
@@ -1728,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) => {
@@ -1886,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
 
@@ -1902,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
 
@@ -2144,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