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

---
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx | 1034 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 764 insertions(+), 270 deletions(-)

diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 760a4be..d5489f8 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -1,51 +1,92 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import moment from 'moment'
-import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
 import { Button, Modal, notification, message } from 'antd'
-import * as XLSX from 'xlsx'
+import * as XLSX from 'sheetjs-style'
 
 import Utils from '@/utils/utils.js'
-import options from '@/store/options.js'
 import Api from '@/api'
-import zhCN from '@/locales/zh-CN/main.js'
-import enUS from '@/locales/en-US/main.js'
-import './index.scss'
+import MKEmitter from '@/utils/events.js'
+import MkIcon from '@/components/mk-icon'
+// import './index.scss'
 
 class ExcelOutButton extends Component {
   static propTpyes = {
     BID: PropTypes.string,            // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
-    MenuID: PropTypes.string,         // 鑿滃崟ID
+    selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
     btn: PropTypes.object,            // 鎸夐挳
-    columns: PropTypes.array,         // 瀛楁鍒�
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
-    ContainerId: PropTypes.any,       // tab椤甸潰ID锛岀敤浜庡脊绐楁帶鍒�
     updateStatus: PropTypes.func,     // 鎸夐挳鐘舵�佹洿鏂�
-    getexceloutparam: PropTypes.func, // 鑾峰彇琛ㄦ牸涓弬鏁�
-    triggerBtn: PropTypes.any,
+    disabled: PropTypes.any,          // 琛屾寜閽鐢�
   }
 
   state = {
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
-    excelName: '',
+    excelName: '',  // 鏂囦欢鍚�
     search: '',     // 鎼滅储鏉′欢
-    loading: false
+    loading: false, // 瀵煎嚭涓�
+    hidden: false,
+    disabled: false
   }
 
-  /**
-   * @description 澶栭儴瑙﹀彂鎸夐挳鐐瑰嚮
-   */
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (nextProps.triggerBtn && !is(fromJS(this.props.triggerBtn), fromJS(nextProps.triggerBtn)) && nextProps.triggerBtn.button.uuid === this.props.btn.uuid) {
-      this.actionTrigger()
+  UNSAFE_componentWillMount () {
+    const { btn, BData, disabled } = this.props
+
+    if (btn.control === 'parent') {
+      if (!BData || !BData.hasOwnProperty(btn.controlField)) {
+        this.setState({hidden: true})
+      } else {
+        let s = BData[btn.controlField] + ''
+        if (btn.controlVals.includes(s)) {
+          this.setState({hidden: true})
+        } else {
+          this.setState({hidden: false})
+        }
+      }
+    }
+
+    if (disabled) {
+      this.setState({disabled: true})
     }
   }
 
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('triggerBtnId', this.actionTrigger)
+  }
+
+  UNSAFE_componentWillReceiveProps (nextProps) {
+    const { btn, BData } = this.props
+
+    if (btn.control === 'parent' && !is(fromJS(nextProps.BData || {}), fromJS(BData || {}))) {
+      if (!nextProps.BData || !nextProps.BData.hasOwnProperty(btn.controlField)) {
+        this.setState({hidden: true})
+      } else {
+        let s = nextProps.BData[btn.controlField] + ''
+        if (btn.controlVals.includes(s)) {
+          this.setState({hidden: true})
+        } else {
+          this.setState({hidden: false})
+        }
+      }
+    }
+
+    if (nextProps.disabled) {
+      this.setState({disabled: true})
+    } else {
+      this.setState({disabled: false})
+    }
+  }
+
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('triggerBtnId', this.actionTrigger)
   }
 
   /**
@@ -57,34 +98,42 @@
         loading: true,
         excelName: name
       })
-      this.props.updateStatus('start')
     } else if (type === 'over') {
       this.setState({
         loading: false
       })
-      this.props.updateStatus('over')
     }
   }
   
   /**
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
-  actionTrigger = () => {
-    const { setting, Tab, BID, btn } = this.props
+  actionTrigger = (triggerId, record, type) => {
+    const { setting, BID, btn } = this.props
+    const { loading, disabled } = this.state
 
-    if (Tab && Tab.supMenu && !BID) {
+    if (loading || disabled) return
+    if (triggerId && btn.uuid !== triggerId) return
+
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       return
+    } else if (type === 'linkbtn' && !btn.$toolbtn && !is(fromJS(this.props.selectedData || []), fromJS(record))) {
+      return
     }
 
-    if (
-      btn.intertype === 'inner' && !btn.innerFunc &&
-      ((setting.interType === 'inner' && setting.innerFunc) || setting.interType === 'outer')
-    ) {
+    if (!btn.verify || !btn.verify.columns || btn.verify.columns.length === 0) {
+      notification.warning({
+        top: 92,
+        message: '璇疯缃鍑哄垪锛�',
+        duration: 5
+      })
+      return
+    } else if (btn.intertype === 'system' && setting.interType !== 'system' && btn.verify.dataType !== 'custom') {
       notification.warning({
         top: 92,
         message: '瀵煎嚭鎸夐挳閰嶇疆閿欒锛�',
@@ -93,24 +142,25 @@
       return
     }
 
-    this.triggerExcelout()
+    MKEmitter.emit('queryModuleParam', btn.$menuId, this.triggerExcelout)
+    if (window.GLOB.systemType === 'production') {
+      MKEmitter.emit('queryTrigger', {menuId: btn.uuid, name: '瀵煎嚭Excel'})
+    }
   }
 
   /**
    * @description Excel 瀵煎嚭
    */
-  triggerExcelout = () => {
+  triggerExcelout = (viewParam) => {
     const { btn } = this.props
-    let viewParam = this.props.getexceloutparam()
+
     let name = `${viewParam.menuName}${moment().format('YYYYMMDDHHmmss')}.xlsx`
     let pageSize = 1000
 
-    if (btn.search === 'true' && viewParam.search && viewParam.search.length > 0) {
+    if (((btn.intertype === 'system' && btn.verify.dataType === 'custom' && btn.verify.useSearch === 'true') || btn.intertype !== 'system' || btn.verify.dataType !== 'custom') && btn.search === 'true' && viewParam.search && viewParam.search.length > 0) {
       let valid = false
       viewParam.search.forEach(item => {
-        if (Array.isArray(item.value) && item.value.length > 0) {
-          valid = true
-        } else if (item.value || item.value === 0) {
+        if (item.value || item.value === 0) {
           valid = true
         }
       })
@@ -125,21 +175,39 @@
       }
     }
 
-    if (btn.intertype === 'inner' && !btn.innerFunc && !viewParam.arr_field) { // 浣跨敤绯荤粺鍑芥暟
-      notification.warning({
-        top: 92,
-        message: '鏈缃樉绀哄垪锛�',
-        duration: 5
-      })
-      return
-    } else if (btn.intertype === 'inner' && !btn.innerFunc && btn.verify && btn.verify.enable === 'true') {
+    if (btn.intertype === 'system') { // 浣跨敤绯荤粺鍑芥暟
+      if (btn.verify.dataType !== 'custom' && !viewParam.arr_field) {
+        notification.warning({
+          top: 92,
+          message: '鎸夐挳闇�鑷畾涔夊鍑烘暟鎹紒',
+          duration: 5
+        })
+        return
+      } else if (btn.verify.dataType === 'custom') {
+        viewParam.arr_field = []
+        btn.verify.columns.forEach(col => {
+          if (col.Column && col.Column !== '$Index') {
+            viewParam.arr_field.push(col.Column)
+          }
+        })
+        viewParam.arr_field = viewParam.arr_field.join(',')
+
+        viewParam.orderBy = btn.verify.order || ''
+      }
+    }
+    if (btn.intertype === 'system' && btn.verify.enable === 'true') {
       this.setState({search: fromJS(viewParam.search).toJS()})
     }
+    if (btn.intertype === 'system' && btn.verify.dataType === 'custom' && btn.verify.useSearch === 'false') {
+      viewParam.search = []
+    }
+
+    viewParam.orderBy = viewParam.orderBy || viewParam.arr_field.split(',')[0]
     
     this.updateStatus('start', name)
 
     if (btn.pagination !== 'true') {
-      if (btn.intertype === 'inner' && !btn.innerFunc) { // 浣跨敤绯荤粺鍑芥暟
+      if (btn.intertype === 'system') { // 浣跨敤绯荤粺鍑芥暟
         let param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search)
 
         Api.genericInterface(param).then(result => {
@@ -148,10 +216,11 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
-      } else if (btn.intertype === 'inner' && btn.innerFunc) { // 浣跨敤鍐呴儴鍑芥暟
+      } else if (btn.intertype === 'inner') { // 浣跨敤鍐呴儴鍑芥暟
         let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search)
         param.func = btn.innerFunc
 
@@ -161,23 +230,46 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 浣跨敤澶栭儴鍑芥暟
         let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search)
 
-        if (this.props.menuType === 'HS') {
-          if (btn.sysInterface === 'true' && options.cloudServiceApi) {
-            param.rduri = options.cloudServiceApi
+        if (window.GLOB.mkHS) {
+          if (btn.sysInterface === 'true' && window.GLOB.cloudServiceApi) {
+            param.rduri = window.GLOB.cloudServiceApi
+            param.userid = sessionStorage.getItem('CloudUserID') || ''
+            param.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
           } else if (btn.sysInterface !== 'true') {
-            param.rduri = btn.interface
+            if (window.GLOB.systemType === 'production' && btn.proInterface) {
+              param.rduri = btn.proInterface
+            } else {
+              param.rduri = btn.interface
+            }
           }
         } else {
-          if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
-            param.rduri = window.GLOB.mainSystemApi
-          } else if (btn.sysInterface !== 'true') {
-            param.rduri = btn.interface
+          if (btn.sysInterface === 'true') {
+            if (window.GLOB.mainSystemApi) {
+              param.rduri = window.GLOB.mainSystemApi
+            }
+          } else if (btn.sysInterface === 'external') {
+            if (window.GLOB.systemType === 'production') {
+              param.$token = btn.exProInterface || ''
+            } else {
+              param.$token = btn.exInterface || ''
+            }
+          } else {
+            if (window.GLOB.systemType === 'production' && btn.proInterface) {
+              param.rduri = btn.proInterface
+            } else {
+              param.rduri = btn.interface
+            }
+            let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+            if (param.rduri.indexOf(host) === -1 && /\/dostars/.test(param.rduri)) {
+              param.$login = true
+            }
           }
         }
   
@@ -191,7 +283,8 @@
           } else {
             this.execError(result)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else if (btn.intertype === 'outer' && btn.innerFunc) {
@@ -205,10 +298,40 @@
             delete res.message
             delete res.status
 
-            if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
-              res.rduri = window.GLOB.mainSystemApi
-            } else if (btn.sysInterface !== 'true') {
-              res.rduri = btn.interface
+            if (window.GLOB.mkHS) {
+              if (btn.sysInterface === 'true' && window.GLOB.cloudServiceApi) {
+                res.rduri = window.GLOB.cloudServiceApi
+                res.userid = sessionStorage.getItem('CloudUserID') || ''
+                res.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
+              } else if (btn.sysInterface !== 'true') {
+                if (window.GLOB.systemType === 'production' && btn.proInterface) {
+                  res.rduri = btn.proInterface
+                } else {
+                  res.rduri = btn.interface
+                }
+              }
+            } else {
+              if (btn.sysInterface === 'true') {
+                if (window.GLOB.mainSystemApi) {
+                  res.rduri = window.GLOB.mainSystemApi
+                }
+              } else if (btn.sysInterface === 'external') {
+                if (window.GLOB.systemType === 'production') {
+                  res.$token = btn.exProInterface || ''
+                } else {
+                  res.$token = btn.exInterface || ''
+                }
+              } else {
+                if (window.GLOB.systemType === 'production' && btn.proInterface) {
+                  res.rduri = btn.proInterface
+                } else {
+                  res.rduri = btn.interface
+                }
+                let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+                if (res.rduri.indexOf(host) === -1 && /\/dostars/.test(res.rduri)) {
+                  res.$login = true
+                }
+              }
             }
   
             if (btn.outerFunc) {
@@ -225,7 +348,8 @@
           } else {
             this.execError(res)
           }
-        }, () => {
+        }, (error) => {
+          if (error && error.ErrCode === 'LoginError') return
           this.execError({})
         })
       } else {
@@ -258,17 +382,39 @@
         delete res.message
         delete res.status
 
-        if (this.props.menuType === 'HS') {
-          if (btn.sysInterface === 'true' && options.cloudServiceApi) {
-            param.rduri = options.cloudServiceApi
+        if (window.GLOB.mkHS) {
+          if (btn.sysInterface === 'true' && window.GLOB.cloudServiceApi) {
+            res.rduri = window.GLOB.cloudServiceApi
+            res.userid = sessionStorage.getItem('CloudUserID') || ''
+            res.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
           } else if (btn.sysInterface !== 'true') {
-            param.rduri = btn.interface
+            if (window.GLOB.systemType === 'production' && btn.proInterface) {
+              res.rduri = btn.proInterface
+            } else {
+              res.rduri = btn.interface
+            }
           }
         } else {
-          if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
-            param.rduri = window.GLOB.mainSystemApi
-          } else if (btn.sysInterface !== 'true') {
-            param.rduri = btn.interface
+          if (btn.sysInterface === 'true') {
+            if (window.GLOB.mainSystemApi) {
+              res.rduri = window.GLOB.mainSystemApi
+            }
+          } else if (btn.sysInterface === 'external') {
+            if (window.GLOB.systemType === 'production') {
+              res.$token = btn.exProInterface || ''
+            } else {
+              res.$token = btn.exInterface || ''
+            }
+          } else {
+            if (window.GLOB.systemType === 'production' && btn.proInterface) {
+              res.rduri = btn.proInterface
+            } else {
+              res.rduri = btn.interface
+            }
+            let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+            if (res.rduri.indexOf(host) === -1 && /\/dostars/.test(res.rduri)) {
+              res.$login = true
+            }
           }
         }
 
@@ -291,13 +437,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({})
     })
   }
@@ -308,31 +456,54 @@
   getExcelOutData = (viewParam, pageIndex, pageSize, data) => {
     const { btn } = this.props
     let param = null
-    if (btn.intertype === 'inner' && !btn.innerFunc) { // 浣跨敤绯荤粺鍑芥暟
+    if (btn.intertype === 'system') { // 浣跨敤绯荤粺鍑芥暟
       if (!viewParam.arr_field) {
         this.execError({ErrCode: 'N', message: '鏈缃樉绀哄垪锛�'})
         return
       }
 
       param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
-    } else if (btn.intertype === 'inner' && btn.innerFunc) { // 浣跨敤鍐呴儴鍑芥暟
+    } else if (btn.intertype === 'inner') { // 浣跨敤鍐呴儴鍑芥暟
       param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
       param.func = btn.innerFunc
 
     } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 浣跨敤澶栭儴鍑芥暟
       param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize)
 
-      if (this.props.menuType === 'HS') {
-        if (btn.sysInterface === 'true' && options.cloudServiceApi) {
-          param.rduri = options.cloudServiceApi
+      if (window.GLOB.mkHS) {
+        if (btn.sysInterface === 'true' && window.GLOB.cloudServiceApi) {
+          param.rduri = window.GLOB.cloudServiceApi
+          param.userid = sessionStorage.getItem('CloudUserID') || ''
+          param.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
         } else if (btn.sysInterface !== 'true') {
-          param.rduri = btn.interface
+          if (window.GLOB.systemType === 'production' && btn.proInterface) {
+            param.rduri = btn.proInterface
+          } else {
+            param.rduri = btn.interface
+          }
         }
       } else {
-        if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) {
-          param.rduri = window.GLOB.mainSystemApi
-        } else if (btn.sysInterface !== 'true') {
-          param.rduri = btn.interface
+        if (btn.sysInterface === 'true') {
+          if (window.GLOB.mainSystemApi) {
+            param.rduri = window.GLOB.mainSystemApi
+          }
+        } else if (btn.sysInterface === 'external') {
+          if (window.GLOB.systemType === 'production') {
+            param.$token = btn.exProInterface || ''
+          } else {
+            param.$token = btn.exInterface || ''
+          }
+        } else {
+          if (window.GLOB.systemType === 'production' && btn.proInterface) {
+            param.rduri = btn.proInterface
+          } else {
+            param.rduri = btn.interface
+          }
+
+          let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+          if (param.rduri.indexOf(host) === -1 && /\/dostars/.test(param.rduri)) {
+            param.$login = true
+          }
         }
       }
       
@@ -356,7 +527,8 @@
       } else {
         this.execError(result)
       }
-    }, () => {
+    }, (error) => {
+      if (error && error.ErrCode === 'LoginError') return
       this.execError({})
     })
   }
@@ -365,110 +537,281 @@
    * @description Excel 鐢熸垚
    */
   exportExcel = (data) => {
-    const { columns, btn } = this.props
-    if (data && data.length > 0) {
-      try {
-        let _header = []
-        let _topRow = {}
-        let colwidth = []
+    const { btn } = this.props
+    
+    let imgCol = false
+    let columns = btn.verify.columns.filter(col => {
+      if (col.output === 'false') return false
 
-        let hidecolumns = []
+      if (col.type === 'image') {
+        imgCol = true
+      }
 
-        let verifyColumn = {} // 璁板綍楠岃瘉淇℃伅涓殑Excel鍒楅厤缃�
-        if (btn.verify && btn.verify.columns && btn.verify.columns.length > 0) {
-          btn.verify.columns.forEach(col => {
-            if (col.export === 'false') {
-              hidecolumns.push(col.Column)
-              return
-            }
-            verifyColumn[col.Column] = col
-          })
+      if (col.type === 'number' && (col.decimal || col.decimal === 0) ) {
+        col.round = Math.pow(10, col.decimal)
+      }
+
+      return col
+    })
+
+    if (data && data[0]) {
+      let errors = []
+      columns.forEach(col => {
+        if (col.Column && data[0][col.Column] === undefined) {
+          errors.push(col.Text)
         }
+      })
 
-        columns.forEach(col => {
-          if (col.Hide === 'true' || hidecolumns.includes(col.field)) {
-            hidecolumns.push(col.field)
-            return
-          }
-          if (!data[0].hasOwnProperty(col.field)) return
-          if (_topRow[col.field]) return
-
-          if (verifyColumn[col.field]) { // 浼樺厛浣跨敤楠岃瘉淇℃伅涓殑鍒楄缃�
-            _header.push(col.field)
-            _topRow[col.field] = verifyColumn[col.field].Text
-  
-            colwidth.push({width: verifyColumn[col.field].Width})
-          } else {
-            _header.push(col.field)
-            _topRow[col.field] = col.label
-  
-            let _colwidth = Math.floor(col.Width / 6)
-  
-            if (!_colwidth || _colwidth < 5) {
-              _colwidth = 5
-            }
-  
-            colwidth.push({width: _colwidth})
-          }
+      if (errors.length) {
+        notification.error({
+          top: 92,
+          message: '鏁版嵁涓己灏戝瓧娈碉細' + errors.join('銆�'),
+          duration: 5
         })
 
-        if (btn.verify && btn.verify.columns && btn.verify.columns.length > 0) {
-          btn.verify.columns.forEach(col => {
-            if (hidecolumns.includes(col.Column)) return
-            if (!data[0].hasOwnProperty(col.Column)) return
-            if (_topRow[col.Column]) return
-
-            _header.push(col.Column)
-            _topRow[col.Column] = col.Text
-
-            colwidth.push({width: col.Width})
-          })
-        }
-
-        Object.keys(data[0]).forEach(key => {
-          if (hidecolumns.includes(key)) return
-          if (_topRow[key]) return
-
-          _header.push(key)
-          _topRow[key] = key
-
-          colwidth.push({width: 12})
+        this.setState({
+          loading: false
+        })
+        
+        return
+      }
+    }
+    
+    try {
+      if (imgCol) {
+        const column = columns.map(item => {
+          let col = {
+            title: item.Text, 
+            key: item.Column,
+            type: 'text',
+            width: (item.Width || 20) * 10
+          }
+          if (item.type === 'image') {
+            col.type = 'image'
+            col.height = col.width
+          }
+          return col
         })
 
         let table = []
 
-        table.push(_topRow)
-
-        data.forEach(item => {
+        data && data.forEach((item, index) => {
           let _row = {}
-          _header.forEach(field => {
-            _row[field] = item[field]
-          })
+  
+          item.$Index = index + 1 + ''
+  
+          columns.forEach((col, i) => {
+            let val = item[col.Column]
+            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)
+              }
+            }
 
+            _row[col.Column] = val
+          })
+  
           table.push(_row)
         })
 
+        this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls'))
+
+        if (btn.verify.enable === 'true' && btn.verify.script) {
+          this.execCustomScript()
+        } else {
+          this.execSuccess({ErrCode: 'S', message: '瀵煎嚭鎴愬姛锛�'})
+        }
+      } 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({wch: col.Width || 20})
+          if (col.required === 'true') {
+            requires.push(i)
+          }
+        })
+
+        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 = {}
+  
+          item.$Index = index + 1 + ''
+  
+          columns.forEach((col, i) => {
+            let val = item[col.Column]
+
+            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)
+              }
+            }
+
+            _row[col.Column] = val
+          })
+  
+          table.push(_row)
+        })
+  
         const ws = XLSX.utils.json_to_sheet(table, {header: _header, skipHeader: true})
 
         ws['!cols'] = colwidth
 
+        if (btn.verify.rowHeight) {
+          ws['!rows'] = Array(table.length).fill({hpx: btn.verify.rowHeight})
+        }
+
+        if (requires.length) {
+          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: '瀵煎嚭鎴愬姛锛�'})
+          this.execSuccess({ErrCode: 'S', message: '瀵煎嚭鎴愬姛锛�'})
         }
-      } catch {
-        this.execError({ErrCode: 'N', message: 'Excel鐢熸垚澶辫触锛�'})
       }
-    } else {
-      this.execError({ErrCode: 'N', message: '鏈煡璇㈠埌瀵煎嚭鏁版嵁锛�'})
+    } catch (e) {
+      this.execError({ErrCode: 'N', message: 'Excel鐢熸垚澶辫触锛�'})
     }
   }
+
+  table2excel = (column, data, excelName) => {
+    let thead = column.reduce((result, item) => {
+      return result + `<th>${item.title}</th>`
+    }, '')
+  
+    thead = `<thead><tr>${thead}</tr></thead>`
+  
+    let tbody = data.reduce((result, row) => {
+      const temp = column.reduce((tds, col) => {
+        let cell = '<td></td>'
+        if (col.type !== 'image' || !row[col.key]) {
+          cell = `<td style="width: ${col.width}px;">${row[col.key]}</td>`
+        } else if (col.type === 'image') {
+          cell = `<td style="width: ${col.width}px;height: ${col.height}px;"><img src="${row[col.key]}" width="${col.width * 0.75}"></td>`
+        }
+        return tds + cell
+      }, '')
+      return result + `<tr>${temp}</tr>`
+    }, '')
+  
+    tbody = `<tbody>${tbody}</tbody>`
+  
+    const table = thead + tbody
+
+    let html = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>"
+    html += '<head><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">'
+    html += '<xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:Print><x:ValidPrinterInfo/></x:Print></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml></head>'
+    html += `<body><table>${table}</table></body>`
+    html += '</html>'
+
+    let url = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(html)
+    // let url = 'data:application/vnd.ms-excel;base64,' + window.btoa(unescape(encodeURIComponent(html)))
+    let link = document.createElement('a')
+    link.href = url
+    link.download = excelName
+    document.body.appendChild(link)
+    link.click()
+    document.body.removeChild(link)
+  }
+  
 
   /**
    * @description 鎵ц鑷畾涔夎剼鏈�
@@ -478,11 +821,10 @@
     const { search } = this.state
     let script = btn.verify.script
 
-    if (this.props.dataManager) { // 鏁版嵁鏉冮檺
-      script = script.replace(/\$@/ig, '/*')
-      script = script.replace(/@\$/ig, '*/')
+    if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
+      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)
@@ -498,33 +840,35 @@
     })
 
     let param = {
-      func: 'sPC_TableData_InUpDe'
+      func: 'sPC_TableData_InUpDe',
+      menuname: btn.logLabel
     }
 
     if (this.props.BID) {
       param.BID = this.props.BID
     }
 
-    let { LText, LText1, LText2 } = Utils.sPCInUpDeFormatOptions(script)
+    param.exec_type = 'y' // 鍚庡彴瑙g爜
+    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+    param.secretkey = Utils.encrypt('', param.timestamp)
+    param.LText = Utils.formatOptions(script)
 
-    param.LText2 = LText2
-    param.LText1 = LText1
-    param.LText = LText
+    if (window.GLOB.mkHS) { // 绯荤粺鍑芥暟浜戠楠岃瘉
+      param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
+    }
 
-    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-
-    if (this.props.menuType === 'HS') { // 鍑芥暟 sPC_TableData_InUpDe 浜戠楠岃瘉
-      param.open_key = Utils.encrypt(param.secretkey, param.timestamp, true)
+    if (window.GLOB.probation) {
+      param.s_debug_type = 'Y'
     }
 
     Api.genericInterface(param).then((res) => {
       if (res.status) {
-        this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'})
+        this.execSuccess({ErrCode: 'S', message: '瀵煎嚭鎴愬姛锛�'})
       } else {
         this.execError(res)
       }
-    }, () => {
+    }, (error) => {
+      if (error && error.ErrCode === 'LoginError') return
       this.updateStatus('over')
     })
   }
@@ -533,11 +877,24 @@
    * @description 鑾峰彇鐢ㄦ埛鑷畾涔夊瓨鍌ㄨ繃绋嬩紶鍙�
    */
   getExcelCustomParam = (orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => {
+    const { btn, selectedData } = this.props
     let _search = Utils.formatCustomMainSearch(search)
 
     let param = {
       OrderCol: orderBy,
       ..._search
+    }
+
+    // 鏁版嵁绠$悊鏉冮檺
+    if (sessionStorage.getItem('dataM') === 'true') {
+      param.dataM = 'Y'
+    }
+
+    if (btn.Ot === 'requiredOnce' && selectedData && selectedData.length > 0) {
+      let primaryId = selectedData.map(d => d.$$uuid || '').filter(Boolean).join(',')
+      if (primaryId) {
+        param.ID = primaryId
+      }
     }
 
     if (this.props.BID) {
@@ -555,84 +912,139 @@
   /**
    * @description 鑾峰彇榛樿瀛樺偍杩囩▼璇锋眰鍙傛暟
    */
-  getExcelDefaultParam = (arr_field, orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => {
-    const { setting } = this.props
+  getExcelDefaultParam = (arr_field, orderBy, search, pagination = false, pageIndex = 1, pageSize = 9999) => {
+    const { setting, btn, selectedData, BID } = this.props
 
+    let defaultSql = setting.execute || setting.default || 'true'
+    let customScript = setting.customScript || ''
+    let _dataresource = setting.dataresource || ''
+    let queryType = setting.queryType
+    let primaryKey = setting.primaryKey || 'ID'
+
+    if (btn.verify.dataType === 'custom') {
+      defaultSql = btn.verify.defaultSql || 'true'
+      _dataresource = btn.verify.dataresource || ''
+      queryType = btn.verify.queryType
+      // primaryKey = btn.verify.primaryKey || 'ID'
+
+      if (/\s/.test(_dataresource)) {
+        _dataresource = '(' + _dataresource + ') tb'
+      }
+      customScript = ''
+      btn.verify.scripts && btn.verify.scripts.forEach(script => {
+        if (script.status !== 'false') {
+          customScript += `
+          ${script.sql}
+          `
+        }
+      })
+
+      if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
+        _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, '').replace(/@datam@/ig, '\'\'')
+        customScript = customScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
+      }
+    }
+
+    let custompage = /@pageSize@/i.test(_dataresource + customScript)
     let _search = Utils.joinMainSearchkey(search)
-
     _search = _search ? 'where ' + _search : ''
     
     let param = {
       func: 'sPC_Get_TableData',
       obj_name: 'data',
       arr_field: arr_field,
-      custom_script: setting.customScript || '',
-      default_sql: setting.default || 'true',
-      dataM: this.props.dataManager ? 'Y' : ''
+      custom_script: customScript,
+      default_sql: defaultSql,
+      menuname: btn.logLabel
     }
 
-    if (this.props.BID) {
-      param.BID = this.props.BID
-    }
-    
-    let _dataresource = setting.dataresource
-
-    if (/\s/.test(_dataresource)) {
-      _dataresource = '(' + _dataresource + ') tb'
+    if (btn.verify.dataType !== 'custom' && setting.sub_field) {
+      arr_field = arr_field + ',' + setting.sub_field
+      param.arr_field = arr_field
     }
 
-    if (this.props.dataManager) { // 鏁版嵁鏉冮檺
-      _dataresource = _dataresource.replace(/\$@/ig, '/*')
-      _dataresource = _dataresource.replace(/@\$/ig, '*/')
-      param.custom_script = param.custom_script.replace(/\$@/ig, '/*')
-      param.custom_script = param.custom_script.replace(/@\$/ig, '*/')
-    } else {
-      _dataresource = _dataresource.replace(/@\$|\$@/ig, '')
-      param.custom_script = param.custom_script.replace(/@\$|\$@/ig, '')
+    // 鏁版嵁绠$悊鏉冮檺
+    if (sessionStorage.getItem('dataM') === 'true') {
+      param.dataM = 'Y'
     }
 
-    let regoptions = null
-    if (setting.queryType === 'statistics' || param.custom_script) {
-      let allSearch = Utils.getAllSearchOptions(search)
-
-      regoptions = allSearch.map(item => {
-        return {
-          reg: new RegExp('@' + item.key + '@', 'ig'),
-          value: `'${item.value}'`
-        }
-      })
-
-      regoptions.push({
-        reg: new RegExp('@orderBy@', 'ig'),
-        value: orderBy
-      }, {
-        reg: new RegExp('@pageSize@', 'ig'),
-        value: pageSize
-      }, {
-        reg: new RegExp('@pageIndex@', 'ig'),
-        value: pageIndex
-      })
+    if (BID) {
+      param.BID = BID
     }
 
-    if (setting.queryType === 'statistics') { // 缁熻鏁版嵁婧愶紝鍐呭鏇挎崲
-      regoptions.forEach(item => {
-        _dataresource = _dataresource.replace(item.reg, item.value)
-      })
+    let userName = sessionStorage.getItem('User_Name') || ''
+    let fullName = sessionStorage.getItem('Full_Name') || ''
+    let RoleID = sessionStorage.getItem('role_id') || ''
+    let departmentcode = sessionStorage.getItem('departmentcode') || ''
+    let organization = sessionStorage.getItem('organization') || ''
+    let mk_user_type = sessionStorage.getItem('mk_user_type') || ''
+    let nation = sessionStorage.getItem('nation') || ''
+    let province = sessionStorage.getItem('province') || ''
+    let city = sessionStorage.getItem('city') || ''
+    let district = sessionStorage.getItem('district') || ''
+    let address = sessionStorage.getItem('address') || ''
+
+    let allSearch = Utils.getAllSearchOptions(search)
+    let regoptions = allSearch.map(item => {
+      return {
+        reg: new RegExp('@' + item.key + '@', 'ig'),
+        value: `'${item.value}'`
+      }
+    })
+
+    regoptions.push({
+      reg: new RegExp('@userName@', 'ig'),
+      value: userName
+    }, {
+      reg: new RegExp('@fullName@', 'ig'),
+      value: fullName
+    }, {
+      reg: new RegExp('@orderBy@', 'ig'),
+      value: orderBy || ''
+    }, {
+      reg: new RegExp('@pageSize@', 'ig'),
+      value: pageSize
+    }, {
+      reg: new RegExp('@pageIndex@', 'ig'),
+      value: pageIndex
+    })
+
+    regoptions.forEach(item => {
+      _dataresource = _dataresource.replace(item.reg, item.value)
+      param.custom_script = param.custom_script.replace(item.reg, item.value)
+    })
+
+    if (queryType === 'statistics') { // 缁熻鏁版嵁婧愶紝鍐呭鏇挎崲
       _search = ''
+    }
+
+    let primaryId = ''
+    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}'))`
+      } else if (primaryId) {
+        _search = `where ${primaryKey} in (select ID from dbo.SplitComma('${primaryId}'))`
+      }
     }
 
     let LText = ''
 
-    if (setting.default !== 'false' && !pagination) {
-      LText = ` select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows `
-    } else if (setting.default !== 'false') {
-      LText = ` select top ${pageSize} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows `
+    if (custompage) {
+      LText = `/*system_query*/select ${arr_field} from ${_dataresource} ${_search} `
+    } else if (defaultSql !== 'false' && !pagination) {
+      LText = `/*system_query*/select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows `
+    } else if (defaultSql !== 'false') {
+      LText = `/*system_query*/select top ${pageSize} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows `
     }
 
     if (param.custom_script) {
-      regoptions.forEach(item => {
-        param.custom_script = param.custom_script.replace(item.reg, item.value)
-      })
+      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
+        ${param.custom_script}
+      `
 
       if (LText) {
         LText += `
@@ -647,17 +1059,43 @@
             insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@
         `
       }
-
-      param.custom_script = Utils.formatOptions(param.custom_script)
+    } else if (LText) {
+      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
+        ${LText}
+      `
     }
 
+    LText = LText.replace(/@ID@/ig, `'${primaryId || ''}'`)
+    param.custom_script = param.custom_script.replace(/@ID@/ig, `'${primaryId || ''}'`)
+    LText = LText.replace(/@BID@/ig, `'${BID}'`)
+    param.custom_script = param.custom_script.replace(/@BID@/ig, `'${BID}'`)
+    LText = LText.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
+    param.custom_script = param.custom_script.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
+    LText = LText.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
+    param.custom_script = param.custom_script.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
+    LText = LText.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
+    param.custom_script = param.custom_script.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
+    LText = LText.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
+    param.custom_script = param.custom_script.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
+    LText = LText.replace(/@typename@/ig, `'admin'`)
+    param.custom_script = param.custom_script.replace(/@typename@/ig, `'admin'`)
+
+    // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞
+    if (window.GLOB.debugger === true) {
+      param.custom_script && console.info(`${LText ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${param.custom_script}`)
+      LText && console.info(LText)
+    }
+    
+    param.custom_script = Utils.formatOptions(param.custom_script)
     param.LText = Utils.formatOptions(LText)
-    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
     param.secretkey = Utils.encrypt(param.LText, param.timestamp)
     param.DateCount = ''
+    param.username = userName
+    param.fullname = fullName
 
-    if (this.props.menuType === 'HS') { // 浜戠鏁版嵁楠岃瘉
-      param.open_key = Utils.encrypt(param.secretkey, param.timestamp, true)
+    if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉
+      param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
     }
 
     return param
@@ -671,20 +1109,20 @@
    * 4銆佹ā鎬佹鎵ц鎴愬姛鍚庢槸鍚﹀叧闂�
    * 5銆侀�氱煡涓诲垪琛ㄥ埛鏂�
    */
-  execSuccess = (res) => {
+  execSuccess = (res = {}) => {
     const { btn } = this.props
 
-    if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛
+    if (res.ErrCode === 'S' || !res.ErrCode) { // 鎵ц鎴愬姛
       notification.success({
         top: 92,
-        message: res.ErrMesg || this.state.dict['main.action.confirm.success'],
+        message: res.message || '鎵ц鎴愬姛锛�',
         duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
       })
-    } else if (res && res.ErrCode === 'Y') { // 鎵ц鎴愬姛
+    } else if (res.ErrCode === 'Y') { // 鎵ц鎴愬姛
       Modal.success({
-        title: res.ErrMesg || this.state.dict['main.action.confirm.success']
+        title: res.message || '鎵ц鎴愬姛锛�'
       })
-    } else if (res && res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず
+    } else if (res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず
 
     }
     
@@ -692,7 +1130,33 @@
       loading: false
     })
 
-    this.props.updateStatus('refresh', btn.execSuccess)
+    if (btn.execSuccess === 'closepoptab') {
+      MKEmitter.emit('popclose')
+    } else if (btn.execSuccess !== 'never') {
+      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, '', [])
+    }
+    
+    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)
+    }
   }
 
   /**
@@ -701,63 +1165,93 @@
    * 2銆乪xcel瀵煎嚭锛屽け璐ュ悗鍙栨秷瀵煎嚭鎸夐挳鍔犺浇涓姸鎬�
    * 3銆侀�氱煡涓诲垪琛ㄥ埛鏂�
    */
-  execError = (res) => {
+  execError = (res = {}) => {
     const { btn } = this.props
+
+    if (!['LoginError', 'C', '-2', 'E', 'N', 'F', 'NM'].includes(res.ErrCode)) {
+      res.ErrCode = 'E'
+    }
 
     if (res.ErrCode === 'E') {
       Modal.error({
-        title: res.message || res.ErrMesg,
+        title: res.message || '鎵ц澶辫触锛�',
       })
     } else if (res.ErrCode === 'N') {
       notification.error({
         top: 92,
-        message: res.message || res.ErrMesg,
+        message: res.message || '鎵ц澶辫触锛�',
         duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10
       })
     } else if (res.ErrCode === 'F') {
       notification.error({
         className: 'notification-custom-error',
         top: 92,
-        message: res.message || res.ErrMesg,
+        message: res.message || '鎵ц澶辫触锛�',
         duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10
       })
     } else if (res.ErrCode === 'NM') {
-      message.error(res.message || res.ErrMesg)
+      message.error(res.message || '鎵ц澶辫触锛�')
     }
     
     this.setState({
       loading: false
     })
 
-    this.props.updateStatus('refresh', btn.execError)
+    if (btn.execError === 'closepoptab') {
+      MKEmitter.emit('popclose')
+    } 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() {
     const { btn } = this.props
-    const { loading } = this.state
+    const { loading, hidden, disabled } = this.state
+
+    if (hidden) return null
+
+    let label = ''
+    let icon = ''
+    let type = 'link'
+    let className = ''
+
+    if (btn.show === 'button') {
+      label = btn.label
+      icon = btn.icon || ''
+    } else if (btn.show === 'link') {
+      label = <span>{btn.label}{btn.icon ? <MkIcon style={{marginLeft: '8px'}} type={btn.icon}/> : ''}</span>
+      icon = ''
+    } else if (btn.show === 'icon') {
+      icon = btn.icon || 'download'
+    } else if (!btn.$toolbtn) {
+      icon = btn.icon || ''
+      label = btn.label
+      className = 'mk-btn mk-' + btn.class
+    } else {
+      type = ''
+      icon = btn.icon || ''
+      label = btn.label
+      className = 'mk-btn mk-' + btn.class
+    }
 
     return (
-      <div className="mk-btn-wrap">
-        <Button
-          className={'mk-btn mk-' + btn.class}
-          icon={btn.icon}
-          onClick={() => {this.actionTrigger()}}
-          loading={loading}
-        >{btn.label}</Button>
-      </div>
+      <Button
+        type={type}
+        id={'button' + btn.uuid}
+        title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
+        loading={loading}
+        disabled={disabled}
+        style={btn.style || null}
+        icon={icon}
+        className={className}
+        onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
+      >{label}</Button>
     )
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    menuType: state.editLevel,
-    dataManager: state.dataManager
-  }
-}
-
-const mapDispatchToProps = () => {
-  return {}
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(ExcelOutButton)
\ No newline at end of file
+export default ExcelOutButton
\ No newline at end of file

--
Gitblit v1.8.0