From a94b0a4d15b26ecf8fe99f0a1c3e60d60b97766d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 15 八月 2023 14:22:03 +0800
Subject: [PATCH] 2023-08-15

---
 src/tabviews/custom/components/table/base-table/index.jsx |  239 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 150 insertions(+), 89 deletions(-)

diff --git a/src/tabviews/custom/components/table/base-table/index.jsx b/src/tabviews/custom/components/table/base-table/index.jsx
index fec59dd..c05ea6d 100644
--- a/src/tabviews/custom/components/table/base-table/index.jsx
+++ b/src/tabviews/custom/components/table/base-table/index.jsx
@@ -4,7 +4,6 @@
 import { notification, Modal } from 'antd'
 
 import Api from '@/api'
-import Utils from '@/utils/utils.js'
 import UtilsDM from '@/utils/utils-datamanage.js'
 import asyncComponent from '@/utils/asyncComponent'
 import MKEmitter from '@/utils/events.js'
@@ -17,9 +16,7 @@
 
 class MkBaseTable extends Component {
   static propTpyes = {
-    data: PropTypes.array,           // 缁熶竴鏌ヨ鏁版嵁
     config: PropTypes.object,        // 缁勪欢閰嶇疆淇℃伅
-    mainSearch: PropTypes.any,       // 澶栧眰鎼滅储鏉′欢
   }
 
   state = {
@@ -86,7 +83,7 @@
       actions: _config.action,
       columns: _config.cols,
       arr_field: _config.columns.map(col => col.field).join(','),
-      search: Utils.initMainSearch(_config.search) // 鎼滅储鏉′欢鍒濆鍖栵紙鍚湁鏃堕棿鏍煎紡锛岄渶瑕佽浆鍖栵級
+      search: _config.$searches
     }, () => {
       if (_config.setting.onload === 'true') {
         setTimeout(() => {
@@ -103,7 +100,6 @@
    * @param { String }  repage 琛ㄦ牸鏄惁閲嶇疆椤电爜
    */
   async loadmaindata (reset, repage, id) {
-    const { mainSearch } = this.props
     const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize, BData } = this.state
 
     if (setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇�
@@ -122,17 +118,17 @@
     }
 
     let searches = fromJS(search).toJS()
-    if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢
-      let keys = searches.map(item => item.key.toLowerCase())
+    if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+      let mainSearch = window.GLOB.SearchBox.get(config.$searchId) || []
+      let keys = config.$s_keys || []
       mainSearch.forEach(item => {
-        if (!keys.includes(item.key.toLowerCase())) {
-          searches.push(item)
-        }
+        if (keys.includes(item.key.toLowerCase())) return
+
+        searches.push(item)
       })
     }
 
-    let requireFields = searches.filter(item => item.required && item.value === '')
-    if (requireFields.length > 0) {
+    if (config.$s_req && searches.filter(item => item.required && item.value === '').length > 0) {
       return
     }
 
@@ -183,32 +179,39 @@
         start = pageSize * (pageIndex - 1) + 1
       }
 
-      this.setState({
-        data: result.data.map((item, index) => {
-          item.key = index
-          item.$$uuid = item[setting.primaryKey] || ''
-          item.$$key = '' + item.key + item.$$uuid
-          item.$$BID = BID || ''
-          item.$$BData = BData || ''
-          item.$Index = start + index + ''
+      let data = result.data.map((item, index) => {
+        item.key = index
+        item.$$uuid = item[setting.primaryKey] || ''
+        item.$$key = '' + item.key + item.$$uuid
+        item.$$BID = BID || ''
+        item.$$BData = BData || ''
+        item.$Index = start + index + ''
 
-          if (config.absFields) {
-            config.absFields.forEach(f => {
-              if (!isNaN(item[f])) {
-                item[f] = Math.abs(item[f])
-              }
-            })
-          }
-          if (setting.controlField) {
-            if (setting.controlVal.includes(item[setting.controlField])) {
-              item.$disabled = true
+        if (config.absFields) {
+          config.absFields.forEach(f => {
+            if (!isNaN(item[f])) {
+              item[f] = Math.abs(item[f])
             }
+          })
+        }
+        if (setting.controlField) {
+          if (setting.controlVal.includes(item[setting.controlField] + '')) {
+            item.$disabled = true
           }
-          
-          return item
-        }),
+        }
+        
+        return item
+      })
+
+      let total = result.total || 0
+      if (config.setting.custompage && data.length) {
+        total = data[data.length - 1].mk_total || 0
+      }
+
+      this.setState({
+        data: data,
         selectedData: [],
-        total: result.total,
+        total: total,
         loading: false
       })
 
@@ -217,6 +220,20 @@
           MKEmitter.emit('autoGetData', config.MenuID)
         } else {
           MKEmitter.emit('autoMaticOver', config.MenuID)
+        }
+      }
+
+      if (result.message) {
+        if (result.ErrCode === 'Y') {
+          Modal.success({
+            title: result.message
+          })
+        } else if (result.ErrCode === 'S') {
+          notification.success({
+            top: 92,
+            message: result.message,
+            duration: 2
+          })
         }
       }
     } else {
@@ -228,11 +245,12 @@
         MKEmitter.emit('autoMaticError', config.MenuID)
       }
       
+      if (!result.message) return
       if (result.ErrCode === 'N') {
         Modal.error({
           title: result.message,
         })
-      } else {
+      } else if (result.ErrCode !== '-2') {
         notification.error({
           top: 92,
           message: result.message,
@@ -246,16 +264,16 @@
    * @description 鑾峰彇鍗曡鏁版嵁
    */ 
   async loadmainLinedata (id) {
-    const { mainSearch } = this.props
     const { setting, config, arr_field, search, orderBy, BID, pageIndex, pageSize, BData } = this.state
 
     let searches = fromJS(search).toJS()
-    if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢
-      let keys = searches.map(item => item.key.toLowerCase())
+    if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+      let mainSearch = window.GLOB.SearchBox.get(config.$searchId) || []
+      let keys = config.$s_keys || []
       mainSearch.forEach(item => {
-        if (!keys.includes(item.key.toLowerCase())) {
-          searches.push(item)
-        }
+        if (keys.includes(item.key.toLowerCase())) return
+
+        searches.push(item)
       })
     }
 
@@ -270,6 +288,7 @@
     if (result.status) {
       let data = fromJS(this.state.data).toJS()
       let selectedData = fromJS(this.state.selectedData).toJS()
+
       if (result.data && result.data[0]) {
         let _data = result.data[0] || {}
         _data.$$uuid = _data[setting.primaryKey] || ''
@@ -284,35 +303,67 @@
           })
         }
 
-        try {
-          data = data.map(item => {
-            if (item.$$uuid === _data.$$uuid) {
-              _data.key = item.key
-              _data.$$key = '' + item.key + item.$$uuid
-              _data.$Index = item.$Index
-              return _data
-            } else {
-              return item
-            }
-          })
-          selectedData = selectedData.map(item => {
-            if (_data.$$uuid === item.$$uuid) {
-              return _data
-            }
+        data = data.map(item => {
+          if (item.$$uuid === _data.$$uuid) {
+            _data.key = item.key
+            _data.$$key = '' + item.key + item.$$uuid
+            _data.$Index = item.$Index
+            return _data
+          } else {
             return item
+          }
+        })
+
+        if (!_data.$Index) {
+          this.setState({
+            loading: false
           })
-        } catch (e) {
-          console.warn('鏁版嵁鏌ヨ閿欒')
+          return
         }
 
-        MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid || '', _data)
-      }
+        selectedData = selectedData.map(item => {
+          if (_data.$$uuid === item.$$uuid) {
+            return _data
+          }
+          return item
+        })
 
-      this.setState({
-        data,
-        selectedData,
-        loading: false
-      })
+        if (selectedData.length && _data.$$uuid === selectedData[selectedData.length - 1].$$uuid) {
+          MKEmitter.emit('resetSelectLine', config.uuid, _data.$$uuid || '', _data)
+        }
+        
+        this.setState({
+          data,
+          selectedData,
+          loading: false
+        })
+      } else {
+        let index = data.findIndex(item => item.$$uuid === id)
+
+        if (index === -1) {
+          this.setState({
+            loading: false
+          })
+          return
+        }
+
+        data = data.filter(item => item.$$uuid !== id)
+        data = data.map((item, i) => {
+          item.key = i
+          item.$$key = '' + item.key + item.$$uuid
+
+          return item
+        })
+
+        this.setState({
+          data: data,
+          loading: false
+        })
+
+        setTimeout(() => {
+          MKEmitter.emit('resetTable', config.uuid, 'delete', index)
+        }, 20)
+      }
     } else {
       this.setState({
         loading: false
@@ -329,7 +380,6 @@
    * @description 鑾峰彇鍚堣瀛楁鍊�
    */
   getStatFieldsValue = () => {
-    const { mainSearch } = this.props
     const { setting, config, search, BID, orderBy } = this.state
 
     if (setting.supModule && !BID) { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇�
@@ -342,16 +392,17 @@
     if (config.statFields.length === 0 || setting.interType !== 'system' || !setting.dataresource) return
 
     let searches = fromJS(search).toJS()
-    if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢
-      let keys = searches.map(item => item.key.toLowerCase())
+    if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+      let mainSearch = window.GLOB.SearchBox.get(config.$searchId) || []
+      let keys = config.$s_keys || []
       mainSearch.forEach(item => {
-        if (!keys.includes(item.key.toLowerCase())) {
-          searches.push(item)
-        }
+        if (keys.includes(item.key.toLowerCase())) return
+
+        searches.push(item)
       })
     }
-    let requireFields = searches.filter(item => item.required && item.value === '')
-    if (requireFields.length > 0) {
+
+    if (config.$s_req && searches.filter(item => item.required && item.value === '').length > 0) {
       return
     }
 
@@ -396,6 +447,8 @@
    * 鍚湁鍒濆涓嶅姞杞界殑椤甸潰锛屼慨鏀硅缃�
    */
   refreshbysearch = (searches) => {
+    const { config} = this.state
+
     this.setState({
       pageIndex: 1,
       search: searches
@@ -403,6 +456,11 @@
       this.loadmaindata(true, 'true')
       this.getStatFieldsValue()
     })
+
+    if (config.$main) {
+      window.GLOB.SearchBox.set(config.$searchId, searches)
+      MKEmitter.emit('searchRefresh', config.$searchId)
+    }
   }
 
   /**
@@ -455,18 +513,18 @@
    * @description 瀵煎嚭Excel鏃讹紝鑾峰彇椤甸潰鎼滅储鎺掑簭绛夊弬鏁�
    */
   queryModuleParam = (menuId, callback) => {
-    const { mainSearch } = this.props
     const { arr_field, config, orderBy, search, setting} = this.state
 
     if (config.uuid !== menuId) return
 
     let searches = search ? fromJS(search).toJS() : []
-    if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢
-      let keys = searches.map(item => item.key.toLowerCase())
+    if (config.setting.useMSearch) { // 涓昏〃鎼滅储鏉′欢
+      let mainSearch = window.GLOB.SearchBox.get(config.$searchId) || []
+      let keys = config.$s_keys || []
       mainSearch.forEach(item => {
-        if (!keys.includes(item.key.toLowerCase())) {
-          searches.push(item)
-        }
+        if (keys.includes(item.key.toLowerCase())) return
+
+        searches.push(item)
       })
     }
 
@@ -528,20 +586,16 @@
     } else {
       this.reloadtable(btn, id)
     }
-
-    if (position === 'popclose') { // 鎵ц鍚姩寮圭獥鐨勬寜閽墍閫夋嫨鐨勫埛鏂伴」
-      btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId)
-    }
   }
 
-  UNSAFE_componentWillReceiveProps(nextProps) {
+  searchRefresh = (searchId) => {
     const { config } = this.state
 
-    if (config.setting.useMSearch && nextProps.mainSearch && !is(fromJS(this.props.mainSearch), fromJS(nextProps.mainSearch))) {
-      this.setState({pageIndex: 1}, () => {
-        this.reloadtable()
-      })
-    }
+    if (config.$searchId !== searchId) return
+    
+    this.setState({pageIndex: 1}, () => {
+      this.reloadtable()
+    })
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -549,10 +603,16 @@
   }
 
   componentDidMount () {
+    const { config } = this.state
+
     MKEmitter.addListener('reloadData', this.reloadData)
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
     MKEmitter.addListener('queryModuleParam', this.queryModuleParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
+
+    if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
+    }
   }
 
   /**
@@ -563,6 +623,7 @@
       return
     }
     MKEmitter.removeListener('reloadData', this.reloadData)
+    MKEmitter.removeListener('searchRefresh', this.searchRefresh)
     MKEmitter.removeListener('resetSelectLine', this.resetParentParam)
     MKEmitter.removeListener('queryModuleParam', this.queryModuleParam)
     MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult)

--
Gitblit v1.8.0