From 169f6cd29a0d3add4fe2cf35c3579b45fa83c0d4 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 14 十一月 2023 00:02:45 +0800
Subject: [PATCH] 2023-11-14

---
 src/tabviews/zshare/actionList/normalbutton/index.jsx | 1018 +++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 635 insertions(+), 383 deletions(-)

diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 48ae9df..a274d27 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -8,9 +8,6 @@
 
 import Api from '@/api'
 import Utils, { getSysDefaultSql } from '@/utils/utils.js'
-import options from '@/store/options.js'
-import zhCN from '@/locales/zh-CN/main.js'
-import enUS from '@/locales/en-US/main.js'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 import { updateForm } from '@/utils/utils-update.js'
 import MKEmitter from '@/utils/events.js'
@@ -34,7 +31,6 @@
   }
 
   state = {
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     visible: false,
     formdata: null,
     selines: null,
@@ -51,6 +47,7 @@
   }
 
   moduleParams = null
+  preCallback = null
 
   UNSAFE_componentWillMount () {
     const { btn, selectedData, BData, disabled } = this.props
@@ -184,33 +181,17 @@
   }
 
   actionSubmit = (res) => {
-    const { btn, setting, BID } = this.props
+    const { btn } = this.props
     const { selines } = this.state
 
     if (btn.uuid !== res.menuId) return
 
     let data = selines || []
 
-    if (setting.supModule && !BID) {
-      notification.warning({
-        top: 92,
-        message: '闇�瑕佷笂绾т富閿�硷紒',
-        duration: 3
-      })
-      return
-    } else if (btn.Ot !== 'notRequired' && data.length === 0) {
-      notification.warning({
-        top: 92,
-        message: '璇烽�夋嫨琛岋紒',
-        duration: 5
-      })
-      return
-    } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
-      notification.warning({
-        top: 92,
-        message: '璇烽�夋嫨鍗曡鏁版嵁锛�',
-        duration: 5
-      })
+    let valid = this.checkBtnData(data)
+
+    if (!valid) {
+      this.preCallback && this.preCallback()
       return
     }
 
@@ -218,130 +199,36 @@
 
     this.execSubmit(data, () => {}, res.form)
   }
-
-  /**
-   * @description 鎸夐挳鐘舵�佹敼鍙�
-   */
-  updateStatus = () => {
-    this.setState({
-      loading: false,
-      visible: false,
-      confirmLoading: false
-    })
-  }
   
   /**
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
-  actionTrigger = (triggerId, record, type) => {
-    const { BID, btn, selectedData, setting } = this.props
+  actionTrigger = (triggerId, record, type, callback) => {
+    const { btn, selectedData } = this.props
     const { loading, disabled } = this.state
+
+    if (type === 'preButton') {
+      if (btn.uuid !== triggerId) return
+
+      this.preTrigger(callback)
+      return
+    } else {
+      this.preCallback = null
+    }
 
     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(selectedData || []), fromJS(record))) {
-      return
-    }
+    if (type === 'linkbtn' && !btn.$toolbtn && !is(fromJS(selectedData || []), fromJS(record))) return
+    if (btn.OpenType === 'form' && btn.formType === 'count_line') return
 
     this.setState({autoMatic: type === 'autoMatic'})
 
     let _this = this
     let data = record || selectedData || []
 
-    if (btn.Ot !== 'notRequired' && data.length === 0) {
-      // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
-      notification.warning({
-        top: 92,
-        message: this.state.dict['main.action.confirm.selectline'],
-        duration: 5
-      })
-      return
-    } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
-      // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
-      notification.warning({
-        top: 92,
-        message: this.state.dict['main.action.confirm.selectSingleLine'],
-        duration: 5
-      })
-      return
-    } else if (!['requiredSgl', 'notRequired', 'requiredOnce', 'required'].includes(btn.Ot)) {
-      // 鏁版嵁閫夋嫨绫诲瀷鏍¢獙
-      notification.warning({
-        top: 92,
-        message: '鎸夐挳琛岃缃敊璇紒',
-        duration: 5
-      })
-      return
-    } else if (btn.intertype === 'system') {
-      // 浣跨敤鍐呴儴鎺ュ彛鏃讹紝鎿嶄綔绫诲瀷鍜屾暟鎹簮涓嶅彲涓虹┖
-      if (!btn.sql || !btn.sqlType) {
-        notification.warning({
-          top: 92,
-          message: '鎸夐挳鎿嶄綔绫诲瀷閿欒锛�',
-          duration: 5
-        })
-        return
-      } else if (data.length === 0 && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
-        notification.warning({
-          top: 92,
-          message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
-          duration: 5
-        })
-        return
-      }
-    } else if (btn.intertype === 'inner') {
-      // 浣跨敤鍐呴儴鎺ュ彛鏃讹紝鍐呴儴鍑芥暟涓嶅彲涓虹┖
-      if (!btn.innerFunc) {
-        notification.warning({
-          top: 92,
-          message: '鎸夐挳鍐呴儴鍑芥暟涓嶅彲涓虹┖锛�',
-          duration: 5
-        })
-        return
-      }
-    } else if (btn.intertype === 'custom' || btn.intertype === 'outer') {
-      if (btn.callbackType === 'script' && (!btn.verify || !btn.verify.cbScripts || !btn.verify.cbScripts.filter(item => item.status !== 'false').length === 0)) {
-        notification.warning({
-          top: 92,
-          message: '浣跨敤鑷畾涔夎剼鏈洖璋冩椂锛屽洖璋冭剼鏈笉鍙负绌猴紒',
-          duration: 5
-        })
-        return
-      } else if (btn.procMode === 'system' && data.length === 0 && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
-        notification.warning({
-          top: 92,
-          message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
-          duration: 5
-        })
-        return
-      } else if (btn.intertype === 'custom' && window.GLOB.systemType === 'production' && !btn.proInterface) {
-        notification.warning({
-          top: 92,
-          message: '灏氭湭璁剧疆姝e紡绯荤粺鎺ュ彛鍦板潃锛�',
-          duration: 5
-        })
-        return
-      }
-    } else if (!['inner', 'outer', 'system', 'custom'].includes(btn.intertype)) {
-      if (btn.OpenType === 'form' && btn.formType === 'count_line') {
-        return
-      }
-      // 鎺ュ彛绫诲瀷閿欒
-      notification.warning({
-        top: 92,
-        message: '鎸夐挳鎺ュ彛绫诲瀷閿欒锛�',
-        duration: 5
-      })
-      return
-    }
+    let valid = this.checkBtnData(data)
+
+    if (!valid) return
 
     this.setState({
       selines: data
@@ -351,11 +238,10 @@
       this.setState({}, () => {
         MKEmitter.emit('mkFormSubmit', btn.uuid)
       })
-      return
     } else if (btn.OpenType === 'prompt') {
       this.setState({loading: true})
       confirm({
-        title: btn.tipTitle || this.state.dict['main.action.confirm.tip'],
+        title: btn.tipTitle || '纭畾瑕佹墽琛屽悧?',
         onOk() {
           return new Promise(resolve => {
             _this.execSubmit(data, resolve)
@@ -422,10 +308,158 @@
       let _change = {
         prompt: '鎻愮ず妗�',
         exec: '鐩存帴鎵ц',
-        pop: '寮圭獥锛堣〃鍗曪級'
+        pop: '寮圭獥锛堣〃鍗曪級',
+        formSubmit: '琛ㄥ崟',
+        form: '琛ㄥ崟',
       }
       MKEmitter.emit('queryTrigger', {menuId: btn.uuid, name: _change[btn.OpenType]})
     }
+  }
+
+  preTrigger = (callback) => {
+    const { btn, selectedData } = this.props
+    const { loading, disabled } = this.state
+
+    if (loading || disabled) {
+      callback()
+      return
+    } else if (btn.OpenType === 'form') {
+      callback()
+      return
+    }
+
+    let _this = this
+    let data = selectedData || []
+
+    let valid = this.checkBtnData(data)
+
+    if (!valid) {
+      callback()
+      return
+    }
+
+    this.preCallback = callback
+
+    this.setState({
+      selines: data
+    })
+    
+    if (btn.OpenType === 'formSubmit') {
+      this.setState({}, () => {
+        MKEmitter.emit('mkFormSubmit', btn.uuid, callback)
+      })
+    } else if (btn.OpenType === 'prompt') {
+      this.setState({loading: true})
+      confirm({
+        title: btn.tipTitle || '纭畾瑕佹墽琛屽悧?',
+        onOk() {
+          return new Promise(resolve => {
+            _this.execSubmit(data, resolve)
+          })
+        },
+        onCancel() {
+          callback()
+          _this.setState({loading: false})
+        }
+      })
+    } else if (btn.OpenType === 'exec') {
+      this.setState({loading: true})
+      this.execSubmit(data, () => { this.setState({loading: false})})
+    } else if (btn.OpenType === 'pop') {
+      let modal = this.state.btnconfig
+      if (!modal && btn.modal) {
+        modal = this.handleModelConfig(btn.modal)
+      }
+
+      this.setState({
+        loading: true,
+        btnconfig: modal
+      })
+
+      if (modal) {
+        if (modal.setting.display === 'prompt' || modal.setting.display === 'exec') {
+          this.modelconfirm()
+        } else {
+          this.setState({
+            visible: true
+          })
+        }
+      }
+    }
+  }
+  
+  /**
+   * @description 鎸夐挳鐘舵�佹敼鍙�
+   */
+  updateStatus = () => {
+    this.setState({
+      loading: false,
+      visible: false,
+      confirmLoading: false
+    })
+  }
+
+  checkBtnData = (data) => {
+    const { BID, btn, setting } = this.props
+
+    if (setting.supModule && !BID) {
+      notification.warning({
+        top: 92,
+        message: '闇�瑕佷笂绾т富閿�硷紒',
+        duration: 5
+      })
+      return false
+    } else if (btn.Ot !== 'notRequired' && data.length === 0) {
+      // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
+      notification.warning({
+        top: 92,
+        message: '璇烽�夋嫨琛岋紒',
+        duration: 5
+      })
+      return false
+    } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
+      // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
+      notification.warning({
+        top: 92,
+        message: '璇烽�夋嫨鍗曡鏁版嵁锛�',
+        duration: 5
+      })
+      return false
+    } else if (btn.intertype === 'system') {
+      if (data.length === 0 && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
+        notification.warning({
+          top: 92,
+          message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
+          duration: 5
+        })
+        return false
+      }
+    } else if (btn.intertype === 'custom' || btn.intertype === 'outer') {
+      if (btn.callbackType === 'script' && (!btn.verify || !btn.verify.cbScripts || !btn.verify.cbScripts.filter(item => item.status !== 'false').length === 0)) {
+        notification.warning({
+          top: 92,
+          message: '浣跨敤鑷畾涔夎剼鏈洖璋冩椂锛屽洖璋冭剼鏈笉鍙负绌猴紒',
+          duration: 5
+        })
+        return false
+      } else if (btn.procMode === 'system' && data.length === 0 && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
+        notification.warning({
+          top: 92,
+          message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
+          duration: 5
+        })
+        return false
+      } else if (btn.intertype === 'custom' && window.GLOB.systemType === 'production' && !btn.proInterface) {
+        notification.warning({
+          top: 92,
+          message: '灏氭湭璁剧疆姝e紡绯荤粺鎺ュ彛鍦板潃锛�',
+          duration: 5
+        })
+        return false
+      }
+    }
+
+    return true
   }
 
   getSystemParam = (data, formdata, retmsg) => {
@@ -453,21 +487,14 @@
         param.ID = primaryId
 
         if (retmsg) {
-          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, retmsg, this.moduleParams) // 鏁版嵁婧�
           param.LText = sql
           param.$callbacksql = callbacksql
         } else {
-          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, false, this.moduleParams) // 鏁版嵁婧�
           if (btn.output) {
             param.key_back_type = 'Y'
           }
-        }
-
-        if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-          param.LText = param.LText.replace(/\$@/ig, '/*')
-          param.LText = param.LText.replace(/@\$/ig, '*/')
-        } else {
-          param.LText = param.LText.replace(/@\$|\$@/ig, '')
         }
 
         param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -496,21 +523,14 @@
           param.ID = primaryId || Utils.getguid()
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
-          }
-          
-          if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-            param.LText = param.LText.replace(/\$@/ig, '/*')
-            param.LText = param.LText.replace(/@\$/ig, '*/')
-          } else {
-            param.LText = param.LText.replace(/@\$|\$@/ig, '')
           }
 
           param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -529,21 +549,14 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
-          }
-          
-          if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-            param.LText = param.LText.replace(/\$@/ig, '/*')
-            param.LText = param.LText.replace(/@\$/ig, '*/')
-          } else {
-            param.LText = param.LText.replace(/@\$|\$@/ig, '')
           }
 
           param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -602,21 +615,14 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, retmsg, this.moduleParams) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, this.moduleParams) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
-          }
-          
-          if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-            param.LText = param.LText.replace(/\$@/ig, '/*')
-            param.LText = param.LText.replace(/@\$/ig, '*/')
-          } else {
-            param.LText = param.LText.replace(/@\$|\$@/ig, '')
           }
 
           param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -649,21 +655,14 @@
             param.ID = Utils.getguid()
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
-            }
-            
-            if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-              param.LText = param.LText.replace(/\$@/ig, '/*')
-              param.LText = param.LText.replace(/@\$/ig, '*/')
-            } else {
-              param.LText = param.LText.replace(/@\$|\$@/ig, '')
             }
 
             param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -682,21 +681,14 @@
             param.ID = primaryId
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
-            }
-            
-            if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-              param.LText = param.LText.replace(/\$@/ig, '/*')
-              param.LText = param.LText.replace(/@\$/ig, '*/')
-            } else {
-              param.LText = param.LText.replace(/@\$|\$@/ig, '')
             }
 
             param.exec_type = 'y' // 鍚庡彴瑙g爜
@@ -758,6 +750,11 @@
       if (this.props.BID) {
         param.BID = this.props.BID
       }
+
+      if (btn.recordUser === 'true') {
+        param.username = sessionStorage.getItem('User_Name') || ''
+        param.fullname = sessionStorage.getItem('Full_Name') || ''
+      }
       
       let primaryId = ''
 
@@ -782,7 +779,7 @@
       }
 
       if (retmsg) {
-        param.$callbacksql = this.getSysDeclareSql(btn, formdata, data[0], columns, primaryId, this.props.BID)
+        param.$callbacksql = this.getSysDeclareSql(btn, formdata, data[0], columns, this.props.BID)
       }
 
       _params.push(param)
@@ -794,6 +791,11 @@
 
         if (this.props.BID) {
           param.BID = this.props.BID
+        }
+
+        if (btn.recordUser === 'true') {
+          param.username = sessionStorage.getItem('User_Name') || ''
+          param.fullname = sessionStorage.getItem('Full_Name') || ''
         }
 
         let primaryId = setting.primaryKey ? cell[setting.primaryKey] || '' : ''
@@ -827,7 +829,7 @@
         }
 
         if (retmsg) {
-          param.$callbacksql = this.getSysDeclareSql(btn, formdata, cell, columns, primaryId, this.props.BID)
+          param.$callbacksql = this.getSysDeclareSql(btn, formdata, cell, columns, this.props.BID)
         }
 
         return param
@@ -840,7 +842,7 @@
   /**
    * @description 鑾峰彇鍥炶皟鑴氭湰鐨勫瓧娈靛畾涔�
    */
-  getSysDeclareSql = (btn, formdata, data, columns, primaryId, BID = '') => {
+  getSysDeclareSql = (btn, formdata, data, columns, BID = '') => {
     let datavars = {}                 // 澹版槑鐨勫彉閲忥紝琛ㄥ崟鍙婃樉绀哄垪
     // 闇�瑕佸0鏄庣殑鍙橀噺闆�
     let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid']
@@ -884,7 +886,7 @@
       if (!_vars.includes(_key)) {
         _vars.push(_key)
   
-        if (form.fieldlen && form.fieldlen > 2048) {
+        if (form.fieldlen && form.fieldlen > 4000) {
           form.fieldlen = 'max'
         }
   
@@ -938,7 +940,7 @@
           if (col.datatype) {
             _declarefields.push(`@${_key} ${col.datatype}`)
           } else {
-            if (col.fieldlength && col.fieldlength > 2048) {
+            if (col.fieldlength && col.fieldlength > 4000) {
               col.fieldlength = 'max'
             }
   
@@ -988,11 +990,6 @@
     let district = sessionStorage.getItem('district') || ''
     let address = sessionStorage.getItem('address') || ''
   
-    if (sessionStorage.getItem('isEditState') === 'true') {
-      userName = sessionStorage.getItem('CloudUserName') || ''
-      fullName = sessionStorage.getItem('CloudFullName') || ''
-    }
-  
     // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
     _sql += `
         /* 鍑瘉鍙婄敤鎴蜂俊鎭垵濮嬪寲璧嬪�� */
@@ -1014,35 +1011,98 @@
         `
     }
 
-    _sql = _sql.replace(/@ID@/ig, `'${primaryId || ''}'`)
-    _sql = _sql.replace(/@BID@/ig, `'${BID}'`)
-    _sql = _sql.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
-    _sql = _sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
-    _sql = _sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
-    _sql = _sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
-    _sql = _sql.replace(/@typename@/ig, `'admin'`)
-
     return _sql
   }
 
   /**
    * @description 鎸夐挳鎻愪氦鎵ц
    */
-  execSubmit = (data, _resolve, formdata) => {
+  execSubmit = (data, _resolve, formdata, force) => {
     const { setting, btn } = this.props
     this.moduleParams = null
 
-    if (
-      (btn.intertype === 'system' || (btn.intertype === 'custom' && btn.procMode === 'system')) && 
-      btn.sqlType !== 'insert' && btn.Ot !== 'notRequired' && btn.verify && btn.verify.invalid === 'true' &&
-      setting.dataresource
-    ) {
+    if (btn.preButton && !force) {
+      this.trigger(btn.preButton, data, _resolve, formdata, 0)
+    } else if (btn.verify && btn.verify.invalid === 'true' && setting.dataresource) {
       MKEmitter.emit('queryModuleParam', btn.$menuId, (param) => {
-        this.moduleParams = param
+        let datasource = setting.dataresource
+        let customScript = setting.customScript || ''
+        let allSearch = Utils.getAllSearchOptions(param.search)
+
+        let regoptions = allSearch.map(item => {
+          return {
+            reg: new RegExp('@' + item.key + '@', 'ig'),
+            value: `'${item.value}'`
+          }
+        })
+
+        regoptions.push({
+          reg: new RegExp('@userName@', 'ig'),
+          value: `'${sessionStorage.getItem('User_Name') || ''}'`
+        }, {
+          reg: new RegExp('@fullName@', 'ig'),
+          value: `'${sessionStorage.getItem('Full_Name') || ''}'`
+        }, {
+          reg: new RegExp('@orderBy@', 'ig'),
+          value: setting.order
+        }, {
+          reg: new RegExp('@pageSize@', 'ig'),
+          value: 10
+        }, {
+          reg: new RegExp('@pageIndex@', 'ig'),
+          value: 1
+        })
+
+        regoptions.forEach(item => {
+          datasource = datasource.replace(item.reg, item.value)
+          customScript = customScript.replace(item.reg, item.value)
+        })
+
+        this.moduleParams = {
+          datasource,
+          customScript
+        }
+
         this.execRealSubmit(data, _resolve, formdata)
       })
     } else {
       this.execRealSubmit(data, _resolve, formdata)
+    }
+  }
+
+  trigger = (btnId, data, resolve, formdata, times) => {
+    if (times > 50) {
+      notification.warning({
+        top: 92,
+        message: '鍓嶇疆鎸夐挳鍔犺浇澶辫触锛�',
+        duration: 5
+      })
+      this.setState({loading: false})
+      resolve()
+      return
+    }
+    times++
+
+    let node = document.getElementById('button' + btnId)
+
+    if (node) {
+      MKEmitter.emit('triggerBtnId', btnId, null, 'preButton', (res) => {
+        if (!res) {
+          this.setState({loading: false})
+          resolve()
+          return
+        }
+
+        if (res.status) {
+          this.execSubmit(data, resolve, formdata, true)
+        } else {
+          this.execError(res)
+        }
+      })
+    } else {
+      setTimeout(() => {
+        this.trigger(btnId, data, resolve, formdata, times)
+      }, 100)
     }
   }
 
@@ -1098,7 +1158,7 @@
               }, 600)
             }
 
-            this.triggerNote(res) // 娑堟伅
+            this.triggerNote(res, _param.ID) // 娑堟伅
             this.execSuccess(res)
           } else {
             this.execError(res)
@@ -1115,7 +1175,7 @@
             setTimeout(() => {
               Api.genericInterface(param).then(res => {
                 if (res.status) {
-                  this.triggerNote(res) // 娑堟伅
+                  this.triggerNote(res, param.ID) // 娑堟伅
                 }
                 resolve(res)
               }, (error) => {
@@ -1202,6 +1262,8 @@
    * @description 鑷畾涔夎姹傚惊鐜墽琛�
    */
   customLoopRequest = (params, _resolve) => {
+    const { setting, btn } = this.props
+
     let param = params.shift()
 
     this.setState({
@@ -1211,25 +1273,62 @@
     let record = {
       BID: param.BID || '',
       ID: param.ID || '',
-      callbacksql: param.$callbacksql || ''
+      callbacksql: param.$callbacksql || '',
+      mk_api_key: ''
+    }
+
+    if (!record.ID && btn.Ot !== 'notRequired' && param[setting.primaryKey]) {
+      record.ID = param[setting.primaryKey]
     }
 
     delete param.$callbacksql
 
-    if (!param.func) {
+    if (param.$pice) {
+      record = param.$record
+
+      delete param.$record
+
+      this.customOuterRequest(params, param, record, _resolve)
+      return
+    } else if (!param.func) {
       this.customOuterRequest(params, param, record, _resolve)
       return
     }
 
     Api.genericInterface(param).then(res => {
+      record.mk_api_key = res.mk_api_key || ''
+
       if (res.status) {
-        if ((res.mk_ex_invoke === 'false' || res.mk_ex_invoke === false) && params.length === 0) {
+        if (res.mk_ex_invoke + '' === 'false' && params.length === 0) {
           this.execSuccess(res)
           _resolve()
-        } else if ((res.mk_ex_invoke === 'false' || res.mk_ex_invoke === false) && params.length > 0) {
+        } else if (res.mk_ex_invoke + '' === 'false' && params.length > 0) {
           this.customLoopRequest(params, _resolve)
         } else {
-          this.customOuterRequest(params, res, record, _resolve)
+          if (res.mk_ex_data) { // 鏁版嵁鍒嗘壒鎵ц
+            if (Array.isArray(res.mk_ex_data) && res.mk_ex_data.length > 0) {
+              let pices = res.mk_ex_data.map(item => {
+                item.$pice = true
+                item.$record = {...record}
+
+                if (item.hasOwnProperty('mk_api_key')) {
+                  item.$record.mk_api_key = item.mk_api_key || record.mk_api_key || ''
+
+                  delete item.mk_api_key
+                }
+                return item
+              })
+              params = [...pices, ...params]
+              this.customLoopRequest(params, _resolve)
+            } else if (params.length === 0) {
+              this.execSuccess(res)
+              _resolve()
+            } else {
+              this.customLoopRequest(params, _resolve)
+            }
+          } else {
+            this.customOuterRequest(params, res, record, _resolve)
+          }
         }
       } else {
         this.execError(res)
@@ -1261,21 +1360,26 @@
       url = btn.interface
     }
 
-    let mkey = result.mk_api_key || ''
-
-    delete result.mk_ex_invoke
-    delete result.status
-    delete result.message
-    delete result.ErrCode
-    delete result.ErrMesg
-    delete result.mk_api_key
-
+    
     let param = {}
 
-    Object.keys(result).forEach(key => {
-      key = key.replace(/^mk_/ig, '')
-      param[key] = result[key]
-    })
+    if (result.$pice) {
+      delete result.$pice
+
+      param = {...result}
+    } else {
+      delete result.mk_ex_invoke
+      delete result.status
+      delete result.message
+      delete result.ErrCode
+      delete result.ErrMesg
+      delete result.mk_api_key
+
+      Object.keys(result).forEach(key => {
+        key = key.replace(/^mk_/ig, '')
+        param[key] = result[key]
+      })
+    }
 
     let _params = {
       url: url,
@@ -1331,7 +1435,7 @@
         }
 
         let result = {
-          mk_api_key: mkey,
+          mk_api_key: record.mk_api_key,
           $ErrCode: 'E',
           $ErrMesg: error
         }
@@ -1351,12 +1455,12 @@
           })
         }
         
-        res.mk_api_key = mkey
+        res.mk_api_key = record.mk_api_key
         this.customCallbackRequest(params, res, record, _resolve)
       }
     }, (e) => {
       let result = {
-        mk_api_key: mkey,
+        mk_api_key: record.mk_api_key,
         $ErrCode: 'E',
         $ErrMesg: e && e.statusText ? e.statusText : ''
       }
@@ -1407,7 +1511,6 @@
         result.status = false
         result.message = result.$ErrMesg
         result.ErrCode = 'E'
-        result.ErrMesg = result.$ErrMesg
       } else {
         result.status = result.status !== false
         result.ErrCode = result.ErrCode || '-1'
@@ -1434,6 +1537,8 @@
 
     Api.genericInterface(param).then(res => {
       if (res.status) {
+        this.triggerNote(res, param.ID) // 娑堟伅
+
         if (params.length === 0) {
           this.execSuccess(res)
           _resolve()
@@ -1454,7 +1559,22 @@
   getCallBackSql = (result, record) => {
     const { btn } = this.props
     let lines = []
-    let pre = btn.callbackType === 'script' ? '@' : ''
+    let pre = ''
+    let tables = []
+
+    if (btn.callbackType === 'script') { // 浣跨敤鑷畾涔夎剼鏈�
+      pre = '@'
+
+      btn.verify.cbScripts.forEach(script => {
+        if (script.status === 'false') return
+
+        if (/\s#[a-z0-9_]+(\s|\()/ig.test(script.sql)) {
+          tables.push(...script.sql.match(/\s#[a-z0-9_]+(\s|\()/ig))
+        }
+      })
+
+      tables = tables.map(tb => tb.replace(/\s|\(/g, ''))
+    }
 
     let errSql = ''
     if (result.$ErrCode === 'E') {
@@ -1471,6 +1591,11 @@
       let vals = []
       let subObjs = []
       let id = Utils.getuuid()
+      let tbName = pre + tb
+
+      if (tables.includes('#' + tb)) {
+        tbName = '#' + tb
+      }
 
       delete obj.$$key
 
@@ -1494,14 +1619,16 @@
           if (typeof(val) === 'string') {
             val = val.replace(/'/ig, '"')
           }
-          keys.push(key)
+          keys.push('[' + key + ']')
           vals.push(`'${val}'`)
         }
       })
 
+      keys = keys.join(',')
+
       lines.push({
-        table: tb,
-        insert: `Insert into ${pre}${tb} (${keys.join(',')},mk_level,mk_id,mk_bid)`,
+        table: md5(tb + keys),
+        insert: `Insert into ${tbName} (${keys},[mk_level],[mk_id],[mk_bid])`,
         select: `Select ${vals.join(',')},'${level}','${id}','${bid}'`
       })
 
@@ -1533,7 +1660,7 @@
       param.func = 'sPC_TableData_InUpDe'
       
       if (record.BID) {
-        param.BID = this.props.BID
+        param.BID = record.BID
       }
       if (record.ID) {
         param.ID = record.ID
@@ -1563,6 +1690,8 @@
       if (btn.output) {
         _backCustomScript += `
           aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg,${btn.output} as mk_b_id`
+
+        param.key_back_type = 'Y'
       } else {
         _backCustomScript += `
           aaa: select @ErrorCode as ErrorCode,@retmsg as retmsg`
@@ -1578,27 +1707,25 @@
       sql = sql + _backCustomScript
 
       sql = sql.replace(/@ID@/ig, `'${record.ID || ''}'`)
-      sql = sql.replace(/@BID@/ig, `'${this.props.BID || ''}'`)
+      sql = sql.replace(/@BID@/ig, `'${record.BID || ''}'`)
       sql = sql.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
       sql = sql.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
       sql = sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
       sql = sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
       sql = sql.replace(/@typename@/ig, `'admin'`)
 
-      if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) {
+      if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
+        sql = sql.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
+      } else {
+        sql = sql.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
+      }
+
+      if (window.GLOB.debugger === true) {
+        console.info('%c' + btn.logLabel + '(鍥炶皟)', 'color: blue')
         console.info(sql.replace(/\n\s{8}/ig, '\n'))
       }
 
       param.LText = sql
-      
-      if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
-        param.LText = param.LText.replace(/\$@/ig, '/*')
-        param.LText = param.LText.replace(/@\$/ig, '*/')
-      } else {
-        param.LText = param.LText.replace(/@\$|\$@/ig, '')
-      }
-      param.LText = param.LText.replace(/\$check@|@check\$/ig, '')
-
       param.exec_type = 'y' // 鍚庡彴瑙g爜
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       param.secretkey = Utils.encrypt('', param.timestamp)
@@ -1622,7 +1749,7 @@
         Sort: index + 1
       }))
 
-      if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) {
+      if (window.GLOB.debugger === true) {
         let sql = [...lineMap.values()].map(item => (`
           ${item.insert}
           ${item.selects.join(` union all
@@ -1648,7 +1775,7 @@
 
     Api.genericInterface(param).then(res => {
       if (res.status) {
-        this.triggerNote(res) // 娑堟伅
+        this.triggerNote(res, param.ID) // 娑堟伅
 
         if (params.length === 0) {
           this.execSuccess(res)
@@ -1682,7 +1809,7 @@
 
     Api.genericInterface(param).then(res => {
       if (res.status) {
-        this.triggerNote(res) // 娑堟伅
+        this.triggerNote(res, param.ID) // 娑堟伅
 
         if (params.length === 0) {
           this.execSuccess(res)
@@ -1691,15 +1818,20 @@
           this.checkLoopRequest(params, _resolve)
         }
       } else if (res.ErrCode === 'C') {
+        let msg = res.message || ''
+        if (/\n|\r/.test(msg)) {
+          msg = msg.replace(/\n|\r/ig, '<br/>')
+          msg = <span dangerouslySetInnerHTML={{__html: msg}}></span>
+        }
         const _this = this
         confirm({
-          title: '缁х画鎵ц锛�',
-          content: res.message,
+          title: '璇风‘璁�',
+          content: msg,
           onOk() {
             return new Promise(resolve => {
               Api.genericInterface(unCheckParam).then(result => {
                 if (result.status) {
-                  _this.triggerNote(result) // 娑堟伅
+                  _this.triggerNote(result, param.ID) // 娑堟伅
           
                   if (params.length === 0) {
                     _this.execSuccess(result)
@@ -1735,7 +1867,7 @@
    * @description 澶栭儴璇锋眰寰幆鎵ц
    */
   outerLoopRequest = (params, _resolve) => {
-    if (!params && params.length === 0) return
+    const { setting, btn } = this.props
 
     let param = params.shift()
 
@@ -1747,6 +1879,10 @@
       BID: param.BID || '',
       ID: param.ID || '',
       callbacksql: param.$callbacksql || ''
+    }
+
+    if (!record.ID && btn.Ot !== 'notRequired' && param[setting.primaryKey]) {
+      record.ID = param[setting.primaryKey]
     }
 
     delete param.$callbacksql
@@ -1802,58 +1938,62 @@
     if (btn.outerFunc) {
       result.func = btn.outerFunc
     }
-    if (window.GLOB.mkHS) {
-      if (btn.outerFunc === 's_app_version_upt') { // special 鏇存柊鐗堟湰鍙锋椂璁块棶sso
-        if (window.GLOB.mainSystemApi) {
-          result.rduri = window.GLOB.mainSystemApi
-        }
-      } else if (btn.sysInterface === 'true' && options.cloudServiceApi) {
-        result.rduri = options.cloudServiceApi
-        result.userid = sessionStorage.getItem('CloudUserID') || ''
-        result.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
-      } else if (btn.sysInterface !== 'true') {
-        if (window.GLOB.systemType === 'production' && btn.proInterface) {
-          result.rduri = btn.proInterface
-        } else {
-          result.rduri = btn.interface
+
+    if (btn.sysInterface === 'true') {
+      if (window.GLOB.mainSystemApi) {
+        result.rduri = window.GLOB.mainSystemApi
+      }
+    } else if (btn.sysInterface === 'external') {
+      if (window.GLOB.systemType === 'production') {
+        result.$token = btn.exProInterface || ''
+      } else {
+        result.$token = btn.exInterface || ''
+      }
+      ver_token = true
+    } else {
+      if (window.GLOB.systemType === 'production' && btn.proInterface) {
+        result.rduri = btn.proInterface
+      } else {
+        result.rduri = btn.interface
+      }
+
+      if (/function:/i.test(result.rduri)) {
+        let rduri = result.rduri
+        try {
+          rduri = rduri.replace(/function:/i, '')
+          // eslint-disable-next-line
+          let func = new Function(rduri)
+          result.rduri = func()
+        } catch (e) {
+          console.warn(e)
         }
       }
 
-      // special 鍑芥暟 s_sDataDictb_TBBack 浜戠楠岃瘉
-      if (result.func === 's_sDataDictb_TBBack' && result.LTextOut) {
+      let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+      if (result.rduri.indexOf(host) === -1 && /\/dostars/.test(result.rduri)) {
+        result.$login = true
+      }
+    }
+
+    if (window.GLOB.mkHS) {
+      if (result.func === 's_app_version_upt') { // special 鏇存柊鐗堟湰鍙锋椂璁块棶sso
+        delete result.rduri
+        if (window.GLOB.localSystemApi) {
+          result.rduri = window.GLOB.localSystemApi
+        }
+        result.userid = sessionStorage.getItem('LocalUserID') || ''
+        result.LoginUID = sessionStorage.getItem('LocalLoginUID') || ''
+      } else if (result.func === 's_sDataDictb_TBBack' && result.LTextOut) { // special 鍑芥暟 s_sDataDictb_TBBack 浜戠楠岃瘉
         result.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
         result.secretkey = Utils.encrypt(result.LTextOut, result.timestamp)
         result.open_key = Utils.encryptOpenKey(result.secretkey, result.timestamp)
-      }
-    } else {
-      if (btn.sysInterface === 'true') {
-        if (window.GLOB.mainSystemApi) {
-          result.rduri = window.GLOB.mainSystemApi
-        }
-      } else if (btn.sysInterface === 'external') {
-        if (window.GLOB.systemType === 'production') {
-          result.$token = btn.exProInterface || ''
-        } else {
-          result.$token = btn.exInterface || ''
-        }
-        ver_token = true
-      } else {
-        if (window.GLOB.systemType === 'production' && btn.proInterface) {
-          result.rduri = btn.proInterface
-        } else {
-          result.rduri = btn.interface
-        }
-
-        let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
-        if (result.rduri.indexOf(host) === -1 && /\/dostars/.test(result.rduri)) {
-          result.$login = true
-        }
       }
     }
 
     Api.genericInterface(result).then(res => {
       if (!res) return // LoginError鏃朵腑鏂姹�
-      if (ver_token && res.ErrMesg === 'token_error') {
+      if (ver_token && res.ErrCode === 'token_error') {
+        res.ErrCode = 'E'
         this.execError(res)
         return
       }
@@ -1941,6 +2081,8 @@
 
     Api.genericInterface(param).then(res => {
       if (res.status) {
+        this.triggerNote(res, param.ID) // 娑堟伅
+
         // 涓�娆¤姹傛垚鍔燂紝杩涜涓嬩竴椤硅姹�
         if (params.length === 0) {
           this.execSuccess(res)
@@ -1972,10 +2114,12 @@
       callParam.open_key = Utils.encryptOpenKey(callParam.secretkey, callParam.timestamp)
     }
 
-    if (callParam.UpType === 'SSO' && window.GLOB.mainSystemApi) {
-      ssoParam = fromJS(callParam).toJS()
+    callParam.userid = sessionStorage.getItem('LocalUserID') || ''
+    callParam.LoginUID = sessionStorage.getItem('LocalLoginUID') || ''
 
-      ssoParam.rduri = window.GLOB.mainSystemApi
+    if (callParam.UpType === 'SSO' && window.GLOB.localSystemApi) {
+      ssoParam = fromJS(callParam).toJS()
+      ssoParam.rduri = window.GLOB.localSystemApi
 
       delete ssoParam.UpType
     } else {
@@ -2030,7 +2174,27 @@
    */
   execSuccess = (res = {}) => {
     const { btn } = this.props
-    const { btnconfig, autoMatic } = this.state
+    const { autoMatic } = this.state
+
+    if (btn.resetForm) {
+      MKEmitter.emit('mkFC', 'reset', btn.resetForm)
+    }
+
+    if (this.preCallback) {
+      this.setState({
+        loading: false,
+        visible: false
+      })
+      this.preCallback(res)
+      return
+    } else if (autoMatic) {
+      this.setState({
+        loading: false,
+        visible: false
+      })
+      MKEmitter.emit('autoExecOver', btn.uuid, 'success')
+      return
+    }
 
     let sign = ''
     if (/^@speak@/i.test(res.message)) {
@@ -2048,44 +2212,9 @@
       if (!res.message) {
         res.ErrCode = '-1'
       }
-    } else if (/@close_tab@|@close_popup@|@goback@/i.test(res.message)) {
-      sign = res.message.match(/@close_tab@|@close_popup@|@goback@/i)[0].toLowerCase()
-      res.message = res.message.replace(/@close_tab@|@close_popup@|@goback@/i, '')
-    }
-
-    if ((res.ErrCode === 'S' || !res.ErrCode) || autoMatic) { // 鎵ц鎴愬姛
-      if (btn.formType !== 'counter' || res.message) {
-        notification.success({
-          top: 92,
-          message: res.message || '鎵ц鎴愬姛锛�',
-          duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
-        })
-      }
-    } else if (res.ErrCode === 'Y') { // 鎵ц鎴愬姛
-      Modal.success({
-        title: res.message || '鎵ц鎴愬姛锛�'
-      })
-    } else if (res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず
-
-    }
-
-    this.setState({
-      loadingNumber: '',
-      loadingTotal: '',
-    })
-    
-    if (autoMatic) {
-      this.setState({
-        loading: false,
-        visible: false
-      })
-      MKEmitter.emit('autoExecOver', btn.uuid, 'success')
-      return
-    } else if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
-      this.setState({
-        loading: false,
-        visible: false
-      })
+    } else if (/@close_tab@|@close_popup@|@goback@|@no_target_menu@/i.test(res.message)) {
+      sign = res.message.match(/@close_tab@|@close_popup@|@goback@|@no_target_menu@/i)[0].toLowerCase()
+      res.message = res.message.replace(/@close_tab@|@close_popup@|@goback@|@no_target_menu@/i, '')
     }
 
     let id = ''
@@ -2096,6 +2225,53 @@
     if (res.mk_icon) {
       sessionStorage.setItem('avatar', res.mk_icon)
     }
+
+    res.ErrCode = res.ErrCode || 'S'
+
+    if (res.ErrCode === 'S') { // 鎵ц鎴愬姛
+      if (btn.formType !== 'counter' || res.message) {
+        notification.success({
+          top: 92,
+          message: res.message || '鎵ц鎴愬姛锛�',
+          duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
+        })
+      }
+    } else if (res.ErrCode === 'Y') { // 鎵ц鎴愬姛
+      let msg = res.message || '鎵ц鎴愬姛锛�'
+      if (/\n|\r/.test(msg)) {
+        msg = msg.replace(/\n|\r/ig, '<br/>')
+        msg = <span dangerouslySetInnerHTML={{__html: msg}}></span>
+      }
+      Modal.success({
+        title: msg,
+        onOk: () => {
+          this.successContinue(sign, id)
+        }
+      })
+      return
+    } else if (res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず
+
+    }
+
+    this.successContinue(sign, id)
+  }
+
+  successContinue = (sign, id) => {
+    const { btn } = this.props
+    const { btnconfig } = this.state
+
+    this.setState({
+      loadingNumber: '',
+      loadingTotal: '',
+    })
+    
+    if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
+      this.setState({
+        loading: false,
+        visible: false
+      })
+    }
+
     let tabId = ''
     if (btn.refreshTab && btn.refreshTab.length > 0) {
       tabId = btn.refreshTab[btn.refreshTab.length - 1]
@@ -2122,9 +2298,15 @@
       if (btn.syncComponentId === 'multiComponent') {
         btn.syncComponentIds.forEach((id, i) => {
           setTimeout(() => {
-            MKEmitter.emit('reloadData', id)
+            if (/\$focus/.test(id)) {
+              MKEmitter.emit('reloadData', id.split('$')[0], id.split('$')[1])
+            } else {
+              MKEmitter.emit('reloadData', id)
+            }
           }, 20 * i)
         })
+      } else if (/\$focus/.test(btn.syncComponentId)) {
+        MKEmitter.emit('reloadData', btn.syncComponentId.split('$')[0], btn.syncComponentId.split('$')[1])
       } else {
         MKEmitter.emit('reloadData', btn.syncComponentId)
       }
@@ -2145,24 +2327,24 @@
       node && node.scrollIntoView({behavior: 'smooth', block: 'center', inline: 'nearest'})
     }
 
-    if (btn.openmenu && Array.isArray(btn.openmenu) && btn.openmenu.length > 0) {
+    if (btn.openmenu && Array.isArray(btn.openmenu) && btn.openmenu.length > 0 && sign !== '@no_target_menu@') {
       let menuId = btn.openmenu.slice(-1)[0]
-      let newtab = window.GLOB.mkThdMenus.filter(m => m.MenuID === menuId)[0]
+      let menu = null
 
-      if (!newtab && btn.MenuID) {
-        newtab = {
+      if (window.GLOB.mkThdMenus.has(menuId)) {
+        menu = {...window.GLOB.mkThdMenus.get(menuId), param: { $BID: id }}
+      } else if (btn.MenuID) {
+        menu = {
           MenuID: btn.MenuID,
           MenuName: btn.MenuName,
-          MenuNo: btn.MenuNo,
-          type: btn.tabType
+          type: btn.tabType,
+          param: { $BID: id }
         }
-      } else if (!newtab) {
-        return
       }
 
-      newtab = {...newtab, param: { $BID: id }}
-
-      MKEmitter.emit('modifyTabs', newtab, true)
+      if (menu) {
+        MKEmitter.emit('modifyTabs', menu, true)
+      }
     }
 
     if (btn.execSuccess === 'popclose' && btn.$tabId) { // 鏍囩鍏抽棴鍒锋柊
@@ -2170,15 +2352,19 @@
     }
   }
 
-  triggerNote = (res) => {
+  triggerNote = (res, ID) => {
     const { btn } = this.props
 
     if (!btn.verify) return
-    if (btn.verify.noteEnable !== 'true' && btn.verify.wxNote !== 'true') return
+    if (btn.verify.noteEnable !== 'true' && btn.verify.wxNote !== 'true' && btn.verify.printEnable !== 'true') return
 
     let id = ''
     if (btn.output) {
       id = res.mk_b_id || res[btn.output] || ''
+    }
+
+    if (btn.verify.printEnable === 'true') {
+      this.billPrint(id || ID)
     }
 
     if (!id) return
@@ -2202,6 +2388,16 @@
     }
   }
 
+  billPrint = (id) => {
+    const { btn } = this.props
+
+    if (!id) return
+
+    setTimeout(() => {
+      window.open('#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: id, tempId: btn.verify.printTempId, pageId: btn.$MenuID || '', dataM: sessionStorage.getItem('dataM') }))))
+    }, 500)
+  }
+
   sendWxMessage = (verify, id) => {
     if (!window.GLOB.nginx) {
       notification.warning({
@@ -2223,7 +2419,7 @@
 
     let domain1 = ''
     let domain2 = ''
-    if (['8IFltwzyKcu15iA8fqSyb6m-pMa88a3ZTu0No3vDHgo', 'LOB-bbt9jVncGh7IOAUdESh1Sgzcbt62UwOqSqcK9ok'].includes(verify.wxTemplateId) && options.sysType !== 'cloud') {
+    if (['8IFltwzyKcu15iA8fqSyb6m-pMa88a3ZTu0No3vDHgo', 'LOB-bbt9jVncGh7IOAUdESh1Sgzcbt62UwOqSqcK9ok'].includes(verify.wxTemplateId) && window.GLOB.sysType !== 'cloud') {
       domain1 = 'https://cloud.mk9h.cn/'
       domain2 = 'https://cloud.mk9h.cn:8443/'
     }
@@ -2490,8 +2686,36 @@
    */
   execError = (res = {}) => {
     const { btn } = this.props
-    const { btnconfig, autoMatic } = this.state
+    const { autoMatic } = this.state
 
+    if (this.preCallback) {
+      this.setState({
+        loading: false,
+        visible: false
+      })
+      this.preCallback(res)
+      return
+    } else if (autoMatic) {
+      notification.error({
+        top: 92,
+        message: res.message || '鎵ц澶辫触锛�',
+        duration: 10
+      })
+
+      this.setState({
+        loading: false,
+        loadingNumber: '',
+        loadingTotal: '',
+        visible: false
+      })
+      MKEmitter.emit('autoExecOver', btn.uuid, 'error')
+      return
+    }
+
+    if (!['LoginError', 'C', '-2', 'E', 'N', 'F', 'NM'].includes(res.ErrCode)) {
+      res.ErrCode = 'E'
+    }
+    
     let sign = ''
     if (/^@speak@/i.test(res.message)) {
       res.message = res.message.replace(/^@speak@/i, '')
@@ -2513,11 +2737,20 @@
       res.message = res.message.replace(/@close_tab@|@close_popup@|@goback@/i, '')
     }
 
-    if (res.ErrCode === 'E' && !autoMatic) {
+    if (res.ErrCode === 'E') {
+      let msg = res.message || '鎵ц澶辫触锛�'
+      if (/\n|\r/.test(msg)) {
+        msg = msg.replace(/\n|\r/ig, '<br/>')
+        msg = <span dangerouslySetInnerHTML={{__html: msg}}></span>
+      }
       Modal.error({
-        title: res.message || '鎵ц澶辫触锛�',
+        title: msg,
+        onOk: () => {
+          this.errorContinue(sign)
+        }
       })
-    } else if (res.ErrCode === 'N' || autoMatic) {
+      return
+    } else if (res.ErrCode === 'N') {
       notification.error({
         top: 92,
         message: res.message || '鎵ц澶辫触锛�',
@@ -2534,16 +2767,14 @@
       message.error(res.message || '鎵ц澶辫触锛�')
     }
 
-    if (autoMatic) {
-      this.setState({
-        loading: false,
-        loadingNumber: '',
-        loadingTotal: '',
-        visible: false
-      })
-      MKEmitter.emit('autoExecOver', btn.uuid, 'error')
-      return
-    } else if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
+    this.errorContinue(sign)
+  }
+
+  errorContinue = (sign) => {
+    const { btn } = this.props
+    const { btnconfig } = this.state
+
+    if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
       this.setState({
         loading: false
       })
@@ -2714,6 +2945,8 @@
       visible: false,
       confirmLoading: false
     })
+
+    this.preCallback && this.preCallback()
   }
 
   modelconfirm = () => {
@@ -2789,10 +3022,22 @@
         _item.fieldlen = item.decimal || 0
       } else if (['text', 'textarea', 'linkMain'].includes(_item.type)) {
         _item.value = _item.value + ''
-        _item.value = _item.value.replace(/\t*|\v*/g, '')       // 鍘婚櫎鍒惰〃绗�
+        _item.value = _item.value.replace(/\t+|\v+/g, '')       // 鍘婚櫎鍒惰〃绗�
 
         if (item.interception !== 'false') {                    // 鍘婚櫎棣栧熬绌烘牸
-          _item.value = _item.value.replace(/(^\s*|\s*$)/g, '')
+          if (item.interception === 'func') {
+            try {
+              // eslint-disable-next-line
+              let func = new Function('value', 'data', item.func)
+              _item.value = func(_item.value, _data)
+              _item.value = _item.value !== undefined ? _item.value : ''
+            } catch (e) {
+              console.warn(e)
+              _item.value = ''
+            }
+          } else {
+            _item.value = _item.value.replace(/(^\s*|\s*$)/g, '')
+          }
         }
         if (_item.type === 'text' && /@appkey@|@SessionUid@|@bid@/ig.test(_item.value)) { // 鐗规畩瀛楁鏇挎崲
           _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey).replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')).replace(/^(\s*)@bid@(\s*)$/ig, (BID || ''))
@@ -2836,13 +3081,14 @@
       this.execSubmit(selines, () => {}, result)
     } else {
       confirm({
-        title: btn.tipTitle || this.state.dict['main.action.confirm.tip'],
+        title: btn.tipTitle || '纭畾瑕佹墽琛屽悧?',
         onOk() {
           return new Promise(resolve => {
             _this.execSubmit(selines, resolve, result)
           })
         },
         onCancel() {
+          _this.preCallback && _this.preCallback()
           _this.setState({ loading: false })
         }
       })
@@ -2882,7 +3128,6 @@
         >
           <MutilForm
             BID={BID}
-            dict={this.state.dict}
             action={btnconfig}
             inputSubmit={this.handleOk}
             data={this.state.selines[0]}
@@ -2907,6 +3152,13 @@
         container = () => document.getElementById(btn.ContainerId)
       }
 
+      if (btnconfig.setting.icon) {
+        title = <>
+          <span className={'mk-modal-icon-' + btnconfig.setting.iconType} style={{background: btnconfig.setting.iconColor || 'unset', color: btnconfig.setting.iconColor || 'inherit'}}><MkIcon type={btnconfig.setting.icon}/></span>
+          {title}
+        </>
+      }
+
       return (
         <Modal
           title={title}
@@ -2923,7 +3175,6 @@
         >
           <MutilForm
             BID={BID}
-            dict={this.state.dict}
             action={btnconfig}
             inputSubmit={this.handleOk}
             data={this.state.selines[0]}
@@ -2990,7 +3241,7 @@
       // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
       notification.warning({
         top: 92,
-        message: this.state.dict['main.action.confirm.selectline'],
+        message: '璇烽�夋嫨琛岋紒',
         duration: 5
       })
       return
@@ -2998,7 +3249,7 @@
       // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
       notification.warning({
         top: 92,
-        message: this.state.dict['main.action.confirm.selectSingleLine'],
+        message: '璇烽�夋嫨鍗曡鏁版嵁锛�',
         duration: 5
       })
       return
@@ -3060,6 +3311,7 @@
       <Button
         type={type}
         icon={icon}
+        id={'button' + btn.uuid}
         title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
         loading={loading}
         disabled={disabled}

--
Gitblit v1.8.0