From f0bf8c399c354c22227f8f1a76ed806098db59c0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 21 五月 2024 16:51:02 +0800
Subject: [PATCH] 2024-05-21

---
 src/tabviews/custom/components/share/normalTable/index.jsx |  156 ++++++++++++++++++++++++++++++++--------------------
 1 files changed, 96 insertions(+), 60 deletions(-)

diff --git a/src/tabviews/custom/components/share/normalTable/index.jsx b/src/tabviews/custom/components/share/normalTable/index.jsx
index 66f8c96..a468ec1 100644
--- a/src/tabviews/custom/components/share/normalTable/index.jsx
+++ b/src/tabviews/custom/components/share/normalTable/index.jsx
@@ -20,6 +20,51 @@
   '5:1': '20%', '6:1': '16.67%', '7:1': '14.29%', '8:1': '12.5%', '9:1': '11.11%',
   '10:1': '10%', '3:4': '133.33%', '2:3': '150%', '9:16': '177.78%'
 }
+
+// 瀛楁閫忚
+const triggerLink = (e, item, record) => {
+  e.stopPropagation()
+
+  if (item.linkThdMenu) {
+    let __param = {
+      $BID: record.$$uuid
+    }
+
+    if (item.field) {
+      __param.$searchkey = item.field.toLowerCase()
+      __param.$searchval = record[item.field] || ''
+    }
+
+    Object.keys(record).forEach(key => {
+      if (/^\$/.test(key)) return
+      __param[key] = record[key]
+    })
+
+    let tabmenu = item.linkThdMenu
+
+    tabmenu.param = __param
+
+    MKEmitter.emit('modifyTabs', tabmenu, true)
+  } else if (item.linkurl) {
+    let src = item.linkurl
+
+    if (/@/.test(src)) {
+      src = src.replace(/@id@/ig, record.$$uuid)
+      src = src.replace(/@appkey@/ig, window.GLOB.appkey)
+      src = src.replace(/@userid@/ig, sessionStorage.getItem('UserID'))
+      src = src.replace(/@LoginUID@/ig, sessionStorage.getItem('LoginUID'))
+
+      Object.keys(record).forEach(key => {
+        if (/^\$/.test(key)) return
+        let reg = new RegExp('@' + key + '@', 'ig')
+        src = src.replace(reg, record[key])
+      })
+    }
+
+    window.open(src)
+  }
+}
+
 class BodyRow extends React.Component {
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props.data), fromJS(nextProps.data)) || this.props.className !== nextProps.className
@@ -107,7 +152,7 @@
   }
 
   render() {
-    let { col, config, record, className, style, triggerLink, ...resProps } = this.props
+    let { col, config, record, className, style, ...resProps } = this.props
 
     if (!col) return (<td {...resProps} className={className} style={style}/>)
 
@@ -169,10 +214,7 @@
       resProps.children = content
 
       if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
-        style = style || {}
-        style.cursor = 'pointer'
-
-        return (<td {...resProps} className={className} onDoubleClick={() => triggerLink(col, record)} style={style}/>)
+        return (<td {...resProps} className={className + ' clickable'} onClick={(e) => triggerLink(e, col, record)} style={style}/>)
       }
     } else if (col.type === 'number') {
       let content = ''
@@ -202,6 +244,7 @@
         }
   
         if (col.format === 'thdSeparator') {
+          content = content + ''
           content = content.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')
         }
   
@@ -243,10 +286,7 @@
       resProps.children = content
 
       if (!record.$disabled && (col.linkThdMenu || col.linkurl)) {
-        style = style || {}
-        style.cursor = 'pointer'
-
-        return (<td {...resProps} className={className} onDoubleClick={() => triggerLink(col, record)} style={style}/>)
+        return (<td {...resProps} className={className + ' clickable'} onClick={(e) => triggerLink(e, col, record)} style={style}/>)
       }
     } else if (col.type === 'picture') {
       let photos = ''
@@ -332,6 +372,17 @@
         } else {
           _href += '?' + _param
         }
+      } else if (/@/.test(_href)) {
+        _href = _href.replace(/@id@/ig, record.$$uuid || '')
+        _href = _href.replace(/@appkey@/ig, window.GLOB.appkey)
+        _href = _href.replace(/@userid@/ig, sessionStorage.getItem('UserID'))
+        _href = _href.replace(/@LoginUID@/ig, sessionStorage.getItem('LoginUID'))
+
+        Object.keys(record).forEach(key => {
+          if (/^\$/.test(key)) return
+          let reg = new RegExp('@' + key + '@', 'ig')
+          _href = _href.replace(reg, record[key])
+        })
       }
 
       if (col.blur) {
@@ -455,7 +506,8 @@
     chgSelectData: PropTypes.func,   // 鏁版嵁鍒囨崲
     autoMatic: PropTypes.any,
     allSearch: PropTypes.any,
-    colsCtrls: PropTypes.any
+    colsCtrls: PropTypes.any,
+    parCtrl: PropTypes.any
   }
 
   state = {
@@ -504,10 +556,7 @@
             if (item.rowspan === 'true') {
               rowspans.push(item.field)
             }
-            if (item.type === 'index') {
-              item.field = '$Index'
-              item.type = 'text'
-            } else if (_format && !Math.floor(Math.random() * radio)) {
+            if (_format && !Math.floor(Math.random() * radio)) {
               item.blur = true
             }
   
@@ -528,7 +577,6 @@
                 record,
                 col: item,
                 config: item.type === 'custom' ? {setting, columns: fields} : null,
-                triggerLink: this.triggerLink
               })
             }
           }
@@ -604,7 +652,7 @@
   }
 
   UNSAFE_componentWillReceiveProps(nextProps) {
-    const { allSearch } = this.props
+    const { allSearch, parCtrl } = this.props
     const { allColumns } = this.state
 
     if (allSearch && !is(fromJS(allSearch), fromJS(nextProps.allSearch))) {
@@ -613,6 +661,36 @@
         columns: this.getCurColumns(allColumns, nextProps.allSearch)
       }, () => {
         this.setState({reseting: false})
+      })
+    } else if (parCtrl && !is(fromJS(this.props.columns), fromJS(nextProps.columns))) {
+      let getColumns = (cols) => {
+        return cols.map(item => {
+          let cell = null
+    
+          if (item.type === 'colspan') {
+            cell = { title: item.label, align: item.Align }
+            cell.children = getColumns(item.subcols)
+          } else {
+            cell = {
+              align: item.Align,
+              dataIndex: item.uuid,
+              title: item.label,
+              sorter: (item.field || item.sortField) && item.IsSort === 'true',
+              width: item.Width || 120,
+              onCell: record => ({
+                record,
+                col: item,
+                config: item.type === 'custom' ? {setting: this.props.setting, columns: this.props.fields} : null,
+              })
+            }
+          }
+    
+          return cell
+        })
+      }
+
+      this.setState({
+        columns: getColumns(nextProps.columns)
       })
     }
   }
@@ -802,48 +880,6 @@
   
       MKEmitter.emit('resetSelectLine', MenuID, '', '')
       MKEmitter.emit('syncBalconyData', MenuID, [], false)
-    }
-  }
-
-  // 瀛楁閫忚
-  triggerLink = (item, record) => {
-    let __param = {
-      $searchkey: item.field,
-      $searchval: record[item.field] || '',
-      $BID: record.$$uuid
-    }
-
-    if (item.linkfields && item.linkfields.length > 0) {
-      item.linkfields.forEach(field => {
-        __param[field] = record[field] || ''
-      })
-    }
-
-    if (item.linkThdMenu) {
-      let tabmenu = item.linkThdMenu
-
-      tabmenu.param = __param
-
-      MKEmitter.emit('modifyTabs', tabmenu, true)
-    } else if (item.linkurl) {
-      let src = item.linkurl
-
-      let con = '?'
-
-      if (/\?/ig.test(src)) {
-        con = '&'
-      }
-
-      if (item.linkfields && item.linkfields.length > 0) {
-        item.linkfields.forEach(field => {
-          if (field.toLowerCase() === 'id') return
-          con += `${field}=${record[field] || ''}&`
-        })
-      }
-      
-      src = src + `${con}id=${record.$$uuid}&appkey=${window.GLOB.appkey}&userid=${sessionStorage.getItem('UserID')}&LoginUID=${sessionStorage.getItem('LoginUID') || ''}`
-
-      window.open(src)
     }
   }
 
@@ -1076,7 +1112,7 @@
     if (!setting.doubleClick) return
     if (record.$disabled) return
 
-    MKEmitter.emit('triggerBtnId', setting.doubleClick, [record], 'linkbtn')
+    MKEmitter.emit('triggerBtnId', setting.doubleClick, [record], 'linkbtn', (record.$$uuid || '') + (record.$Index || ''))
   }
 
   render() {
@@ -1159,7 +1195,7 @@
     }
 
     return (
-      <div className={`normal-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
+      <div className={`normal-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
         {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && data && data.length > 0 ?
           <Switch title="鏀惰捣" className="main-pickup" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /> : null
         }

--
Gitblit v1.8.0