From 71e3da644eca32a5aa40503e903efb0640748093 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 21 七月 2023 17:00:59 +0800
Subject: [PATCH] 2023-07-21

---
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx |  200 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 163 insertions(+), 37 deletions(-)

diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 41f9ddb..c24ba02 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -42,7 +42,7 @@
         this.setState({hidden: true})
       } else {
         let s = BData[btn.controlField] + ''
-        if (s === btn.controlVal || (btn.controlVal && btn.controlVal.split(',').includes(s))) {
+        if (btn.controlVals.includes(s)) {
           this.setState({hidden: true})
         } else {
           this.setState({hidden: false})
@@ -71,7 +71,7 @@
         this.setState({hidden: true})
       } else {
         let s = nextProps.BData[btn.controlField] + ''
-        if (s === btn.controlVal || (btn.controlVal && btn.controlVal.split(',').includes(s))) {
+        if (btn.controlVals.includes(s)) {
           this.setState({hidden: true})
         } else {
           this.setState({hidden: false})
@@ -220,7 +220,8 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else if (btn.intertype === 'inner') { // 浣跨敤鍐呴儴鍑芥暟
@@ -233,7 +234,8 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 浣跨敤澶栭儴鍑芥暟
@@ -285,7 +287,8 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else if (btn.intertype === 'outer' && btn.innerFunc) {
@@ -349,7 +352,8 @@
           } else {
             this.execError(res)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else {
@@ -437,13 +441,15 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else {
         this.execError(res)
       }
-    }, () => {
+    }, (error) => {
+      if (error && error.ErrCode === 'LoginError') return
       this.execError({})
     })
   }
@@ -525,7 +531,8 @@
       } else {
         this.execError(result)
       }
-    }, () => {
+    }, (error) => {
+      if (error && error.ErrCode === 'LoginError') return
       this.execError({})
     })
   }
@@ -550,6 +557,29 @@
 
       return col
     })
+
+    if (data && data[0]) {
+      let errors = []
+      columns.forEach(col => {
+        if (col.Column && data[0][col.Column] === undefined) {
+          errors.push(col.Text)
+        }
+      })
+
+      if (errors.length) {
+        notification.error({
+          top: 92,
+          message: '鏁版嵁涓己灏戝瓧娈碉細' + errors.join('銆�'),
+          duration: 5
+        })
+
+        this.setState({
+          loading: false
+        })
+        
+        return
+      }
+    }
     
     try {
       if (imgCol) {
@@ -576,13 +606,13 @@
   
           columns.forEach((col, i) => {
             let val = item[col.Column]
-            if (typeof(val) === 'number') {
+            if (col.type === 'number' && typeof(val) === 'number') {
               if (col.abs === 'true') {
                 val = Math.abs(val)
               }
               if (col.round) {
                 val = Math.round(val * col.round) / col.round
-                val = val.toFixed(col.decimal)
+                // val = val.toFixed(col.decimal)
               }
             }
 
@@ -594,29 +624,68 @@
 
         this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls'))
 
-        if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) {
+        if (btn.verify.enable === 'true' && btn.verify.script) {
           this.execCustomScript()
         } else {
           this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'})
         }
       } else {
+        let letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+        let cols = []
+
+        for (let index = 0; index < columns.length; index++) {
+          let i = Math.floor(index / 26)
+          let s = letters[i - 1] || ''
+          
+          cols.push(s + letters[index % 26])
+        }
+
+        let table = []
         let _header = []
         let _topRow = {}
         let colwidth = []
         let requires = []
+        let merges = []
 
         columns.forEach((col, i) => {
           _header.push(col.Column)
           _topRow[col.Column] = col.Text
-          colwidth.push({width: col.Width || 20})
+          colwidth.push({wch: col.Width || 20})
           if (col.required === 'true') {
             requires.push(i)
           }
         })
-  
-        let table = []
-  
-        table.push(_topRow)
+
+        if (btn.verify.merge === 'true') {
+          let fLine = {}
+          let sLine = {}
+          let sign = ''
+          columns.forEach((col, i) => {
+            if (/.+-.+/.test(col.Text)) {
+              let _sign = col.Text.split('-')[0]
+              let _name = col.Text.split('-')[1]
+              fLine[col.Column] = _sign
+              sLine[col.Column] = _name
+
+              if (sign === _sign) {
+                merges[merges.length - 1] = merges[merges.length - 1].split(':')[0] + `:${cols[i]}1`
+              } else {
+                merges.push(`${cols[i]}1:${cols[i]}2`)
+                sign = _sign
+              }
+            } else {
+              fLine[col.Column] = col.Text
+              sLine[col.Column] = col.Text
+              sign = ''
+              merges.push(`${cols[i]}1:${cols[i]}2`)
+            }
+          })
+
+          table.push(fLine)
+          table.push(sLine)
+        } else {
+          table.push(_topRow)
+        }
   
         data && data.forEach((item, index) => {
           let _row = {}
@@ -626,13 +695,13 @@
           columns.forEach((col, i) => {
             let val = item[col.Column]
 
-            if (typeof(val) === 'number') {
+            if (col.type === 'number' && typeof(val) === 'number') {
               if (col.abs === 'true') {
                 val = Math.abs(val)
               }
               if (col.round) {
                 val = Math.round(val * col.round) / col.round
-                val = val.toFixed(col.decimal)
+                // val = val.toFixed(col.decimal)
               }
             }
 
@@ -646,22 +715,57 @@
 
         ws['!cols'] = colwidth
 
+        if (btn.verify.rowHeight) {
+          ws['!rows'] = Array(table.length).fill({hpx: btn.verify.rowHeight})
+        }
+
         if (requires.length) {
-          let cols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
           requires.forEach(col => {
             if (cols[col]) {
               ws[cols[col] + '1'].s = {font: { color: { rgb: 'F5222D' } }}
             }
           })
         }
+
+        if (merges.length) {
+          ws['!merges'] = []
+          merges.forEach(item => {
+            ws['!merges'].push(XLSX.utils.decode_range(item))
+          })
+
+          cols.forEach(col => {
+            if (ws[col + '1'].s) {
+              ws[col + '1'].s = {font: { color: { rgb: 'F5222D' } }, alignment: { horizontal: 'center', vertical: 'center' }}
+            } else {
+              ws[col + '1'].s = {alignment: { horizontal: 'center', vertical: 'center' }}
+            }
+            ws[col + '2'].s = {alignment: { horizontal: 'center', vertical: 'center' }}
+          })
+        }
+
+        if (btn.verify.wrapText === 'true' && data) {
+          let lines = data.length + 1
+          let start = 2
+          if (btn.verify.merge === 'true') {
+            lines = data.length + 2
+          }
+          for (let n = 0; n < cols.length; n++) {
+            for (let m = start; m <= lines; m++) {
+              if (ws[cols[n] + m] && !ws[cols[n] + m].s) {
+                ws[cols[n] + m].s = {alignment: { wrapText: true }}
+              }
+            }
+          }
+        }
+
         // ws["A1"].s = {fill: { bgColor: { rgb: "FFFFAA"  }}, font: { color: { rgb: "1890FF" } }}
-  
+
         const wb = XLSX.utils.book_new()
-        XLSX.utils.book_append_sheet(wb, ws, 'Sheet1')
+        XLSX.utils.book_append_sheet(wb, ws, btn.verify.sheet || 'Sheet1')
   
         XLSX.writeFile(wb, this.state.excelName)
   
-        if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) {
+        if (btn.verify.enable === 'true' && btn.verify.script) {
           this.execCustomScript()
         } else {
           this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'})
@@ -722,10 +826,9 @@
     let script = btn.verify.script
 
     if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-      script = script.replace(/\$@/ig, '/*')
-      script = script.replace(/@\$/ig, '*/')
+      script = script.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
     } else {
-      script = script.replace(/@\$|\$@/ig, '')
+      script = script.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
     }
 
     let allSearch = Utils.getAllSearchOptions(search)
@@ -768,7 +871,8 @@
       } else {
         this.execError(res)
       }
-    }, () => {
+    }, (error) => {
+      if (error && error.ErrCode === 'LoginError') return
       this.updateStatus('over')
     })
   }
@@ -825,7 +929,7 @@
       defaultSql = btn.verify.defaultSql || 'true'
       _dataresource = btn.verify.dataresource || ''
       queryType = btn.verify.queryType
-      primaryKey = btn.verify.primaryKey || 'ID'
+      // primaryKey = btn.verify.primaryKey || 'ID'
 
       if (/\s/.test(_dataresource)) {
         _dataresource = '(' + _dataresource + ') tb'
@@ -840,13 +944,11 @@
       })
 
       if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-        _dataresource = _dataresource.replace(/\$@/ig, '/*')
-        _dataresource = _dataresource.replace(/@\$/ig, '*/')
-        customScript = customScript.replace(/\$@/ig, '/*')
-        customScript = customScript.replace(/@\$/ig, '*/')
+        _dataresource = _dataresource.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
+        customScript = customScript.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
       } else {
-        _dataresource = _dataresource.replace(/@\$|\$@/ig, '')
-        customScript = customScript.replace(/@\$|\$@/ig, '')
+        _dataresource = _dataresource.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
+        customScript = customScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
       }
     }
 
@@ -861,6 +963,11 @@
       custom_script: customScript,
       default_sql: defaultSql,
       menuname: btn.logLabel
+    }
+
+    if (btn.verify.dataType !== 'custom' && setting.sub_field) {
+      arr_field = arr_field + ',' + setting.sub_field
+      param.arr_field = arr_field
     }
 
     // 鏁版嵁绠$悊鏉冮檺
@@ -929,9 +1036,9 @@
     if (btn.Ot === 'requiredOnce' && selectedData && selectedData.length > 0) {
       primaryId = selectedData.map(d => d.$$uuid || '').filter(Boolean).join(',')
       if (_search && primaryId) {
-        _search += ` and ${primaryKey} in (select ID from  dbo.SplitComma('${primaryId}'))`
+        _search += ` and ${primaryKey} in (select ID from dbo.SplitComma('${primaryId}'))`
       } else if (primaryId) {
-        _search = `where ${primaryKey} in (select ID from  dbo.SplitComma('${primaryId}'))`
+        _search = `where ${primaryKey} in (select ID from dbo.SplitComma('${primaryId}'))`
       }
     }
 
@@ -1039,12 +1146,26 @@
       MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, '', [])
     }
     
-    btn.syncComponentId && MKEmitter.emit('reloadData', btn.syncComponentId)
+    if (btn.syncComponentId) {
+      if (btn.syncComponentId === 'multiComponent') {
+        btn.syncComponentIds.forEach((id, i) => {
+          setTimeout(() => {
+            MKEmitter.emit('reloadData', id)
+          }, 20 * i)
+        })
+      } else {
+        MKEmitter.emit('reloadData', btn.syncComponentId)
+      }
+    }
     
     if (btn.switchTab && btn.switchTab.length > 0) {
       let id = btn.switchTab[btn.switchTab.length - 1]
       let node = document.getElementById('tab' + id)
       node && node.click()
+    }
+
+    if (btn.execSuccess === 'popclose' && btn.$tabId) { // 鏍囩鍏抽棴鍒锋柊
+      MKEmitter.emit('refreshPopButton', btn.$tabId)
     }
   }
 
@@ -1087,6 +1208,10 @@
     } else if (btn.execError !== 'never') {
       MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', [])
     }
+
+    if (btn.execError === 'popclose' && btn.$tabId) { // 鏍囩鍏抽棴鍒锋柊
+      MKEmitter.emit('refreshPopButton', btn.$tabId)
+    }
   }
 
   render() {
@@ -1122,6 +1247,7 @@
     return (
       <Button
         type={type}
+        id={'button' + btn.uuid}
         title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
         loading={loading}
         disabled={disabled}

--
Gitblit v1.8.0