From 24842b40de5cd60700bf69dfd38a0332f5431e36 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 23 五月 2025 10:55:07 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/tabviews/zshare/actionList/printbutton/index.jsx |  588 +++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 397 insertions(+), 191 deletions(-)

diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index 2e24601..8b330d2 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -8,6 +8,7 @@
 import Utils from '@/utils/utils.js'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 import { updateForm } from '@/utils/utils-update.js'
+import UtilsDM from '@/utils/utils-datamanage.js'
 import MKEmitter from '@/utils/events.js'
 import MkIcon from '@/components/mk-icon'
 // import './index.scss'
@@ -37,7 +38,8 @@
     loading: false,
     disabled: false,
     hidden: false,
-    autoMatic: false
+    autoMatic: false,
+    dict: window.GLOB.dict
   }
 
   UNSAFE_componentWillMount () {
@@ -130,34 +132,33 @@
   /**
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
-  actionTrigger = (triggerId, record, type) => {
-    const { BID, btn, selectedData, setting } = this.props
-    const { loading, disabled } = this.state
+  actionTrigger = (triggerId, record, type, lid) => {
+    const { BID, btn, selectedData, setting, LID } = this.props
+    const { loading, disabled, dict } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
+    if (type === 'linkbtn' && !btn.$toolbtn && LID !== lid) return
 
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
-      return
-    } else if (type === 'linkbtn' && !btn.$toolbtn && !is(fromJS(selectedData || []), fromJS(record))) {
       return
     }
 
     this.setState({autoMatic: type === 'autoMatic'})
 
-    let _this = this
+    let that = this
     let data = record || selectedData || []
 
     if (btn.Ot !== 'notRequired' && data.length === 0) {
       // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
       notification.warning({
         top: 92,
-        message: '璇烽�夋嫨琛岋紒',
+        message: dict['select_row'] || '璇烽�夋嫨琛岋紒',
         duration: 5
       })
       return
@@ -165,21 +166,7 @@
       // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
       notification.warning({
         top: 92,
-        message: '璇烽�夋嫨鍗曡鏁版嵁锛�',
-        duration: 5
-      })
-      return
-    } else if (!btn.verify || !btn.verify.printMode) {
-      notification.warning({
-        top: 92,
-        message: '璇峰畬鍠勬墦鍗伴獙璇佷俊鎭紒',
-        duration: 5
-      })
-      return
-    } else if (btn.intertype === 'system' && btn.verify.dataType === 'custom' && (!btn.verify.setting || btn.verify.columns.length === 0)) {
-      notification.warning({
-        top: 92,
-        message: '鑷畾涔夋墦鍗版暟鎹璁剧疆鏁版嵁婧愶紒',
+        message: dict['select_single_row'] || '璇烽�夋嫨鍗曡鏁版嵁锛�',
         duration: 5
       })
       return
@@ -193,6 +180,7 @@
       let modal = this.state.btnconfig
       if (!modal && btn.modal) {
         modal = this.handleModelConfig(btn.modal)
+        modal.uuid = btn.uuid
       }
 
       this.setState({
@@ -204,12 +192,14 @@
     } else if (btn.execMode === 'prompt') {
       this.setState({ loading: true })
       confirm({
-        title: '纭畾瑕佹墽琛屽悧?',
+        title: dict['exec_sure'] || '纭畾瑕佹墽琛屽悧?',
+        okText: dict['ok'] || '纭畾',
+        cancelText: dict['cancel'] || '鍙栨秷',
         onOk() {
-          _this.triggerPrint(data)
+          that.triggerPrint(data)
         },
         onCancel() {
-          _this.setState({ loading: false })
+          that.setState({ loading: false })
         }
       })
     } else {
@@ -270,6 +260,9 @@
 
             Object.keys(cell).forEach(key => {
               let _key = key.toLowerCase()
+
+              if (/^\$/.test(_key)) return
+              
               _cell[_key] = cell[key]
             })
 
@@ -405,7 +398,6 @@
             errorMsg = {
               ErrCode: 'N',
               message: _temp.error,
-              ErrMesg: _temp.error,
               status: false
             }
           } else {
@@ -506,7 +498,7 @@
       if (list.length === 0) {
         notification.warning({
           top: 92,
-          message: '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
+          message: window.GLOB.dict['no_data'] || '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
           duration: 5
         })
         return false
@@ -533,7 +525,7 @@
       if (!result.ConfigParam) {
         notification.warning({
           top: 92,
-          message: '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�',
+          message: window.GLOB.dict['no_print_temp'] || '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�',
           duration: 5
         })
         this.setState({ loading: false })
@@ -565,16 +557,66 @@
   execCustomPrint = (printlist, formdata) => {
     const { btn } = this.props
 
-    this.execSuccess({
-      ErrCode: '-1',
-      message: '',
-      status: true
-    })
+    let callback = null
+    let printReject = null
+    let skip = false
+    let send = false
+
+    let data = fromJS({
+      data: printlist,
+      form: formdata
+    }).toJS()
+
+    if (!window.GLOB.errorLog) {
+      printReject = (msg) => {
+        if (send) return
+
+        send = true
+        data.message = msg
+
+        window.mkInfo(JSON.stringify(data))
+      }
+    } else {
+      printReject = (msg) => {
+        if (send) return
+
+        send = true
+        data.message = msg
+
+        let param = {
+          func: 's_special_error_note_log',
+          api_url: btn.logLabel,
+          error_code: 507,
+          error_time: moment().format('YYYY-MM-DD HH:mm:ss'),
+          api_param: JSON.stringify(data)
+        }
+        Api.genericInterface(param)
+      }
+    }
+
+    if (/callback\(\)/.test(btn.verify.printFunc)) {
+      callback = () => {
+        if (skip) return
+        skip = true
+
+        this.execSuccess({
+          ErrCode: '-1',
+          message: '',
+          status: true
+        })
+      }
+    } else {
+      this.execSuccess({
+        ErrCode: '-1',
+        message: '',
+        status: true
+      })
+    }
 
     try {
       // eslint-disable-next-line
-      let func = new Function('data', 'form', 'printer', 'notification', 'Api', 'systemType', btn.verify.printFunc)
-      func(printlist, formdata, btn.verify, notification, Api, window.GLOB.systemType)
+      let func = new Function('data', 'form', 'printer', 'notification', 'Api', 'systemType', 'callback', 'printReject', btn.verify.printFunc)
+      func(printlist, formdata, btn.verify, notification, Api, window.GLOB.systemType, callback, printReject)
 
       // 鑷畾涔夋墦鍗扮ず渚�
       // let defaultPrinter = printer.defaultPrinter || 'lackprinter'
@@ -770,18 +812,13 @@
     } catch (e) {
       console.warn(e)
 
-      try {
-        // eslint-disable-next-line
-        let evalfunc = eval('(true && function (data, form, printer, notification, Api, systemType) {' + btn.verify.printFunc + '})')
-        evalfunc(printlist, formdata, btn.verify, notification, Api, window.GLOB.systemType)
-      } catch (error) {
-        console.warn(error)
-        notification.warning({
-          top: 92,
-          message: '鑷畾涔夊嚱鏁版墽琛岄敊璇紒',
-          duration: 5
-        })
-      }
+      notification.warning({
+        top: 92,
+        message: window.GLOB.dict['func_error'] || '鑷畾涔夊嚱鏁版墽琛岄敊璇紒',
+        duration: 5
+      })
+
+      printReject(window.GLOB.dict['func_error'] || '鑷畾涔夊嚱鏁版墽琛岄敊璇紒')
     }
   }
 
@@ -903,6 +940,14 @@
         if (btn.intertype === 'inner') {
           params = params.map(_param => {
             _param.func = btn.innerFunc
+
+            if (btn.recordUser === 'true') {
+              _param.username = sessionStorage.getItem('User_Name') || ''
+              _param.fullname = sessionStorage.getItem('Full_Name') || ''
+            }
+            if (btn.dataM === 'true') {
+              _param.dataM = sessionStorage.getItem('dataM') === 'true' ? 'Y' : ''
+            }
   
             return _param
           })
@@ -919,7 +964,7 @@
           Promise.all(deffers).then(result => {
             let errorMsg = ''
             result.forEach(res => {
-              if (!res.status) {
+              if (!res.status && !errorMsg) {
                 errorMsg = res
               }
             })
@@ -945,12 +990,71 @@
   getDefaultSql = (formlist, data, ID) => {
     const { BID, btn, columns } = this.props
 
+    if (window.backend && window.GLOB.CacheData.has('sql_' + btn.uuid)) {
+      let setting = {...btn.verify.setting}
+      setting.interType = 'system'
+      setting.uuid = btn.uuid
+
+      let _param = UtilsDM.getQueryDataParams(setting, [], setting.order, 1, 9999, BID, ID)
+      let item = window.GLOB.CacheData.get('sql_' + btn.uuid)
+
+      _param.data[0].exps = _param.data[0].exps.filter(n => n.key !== 'mk_search')
+      let formkeys = []
+
+      formlist.forEach(form => {
+        if (!item.reps.includes(form.key)) return
+
+        formkeys.push(form.key)
+
+        let val = form.value
+        if (form.type === 'number' || form.type === 'rate') {
+          if (isNaN(val) || val === '') {
+            val = 0
+          }
+        } else if (['date', 'datemonth'].includes(form.type)) {
+          val = val || '1949-10-01'
+        }
+
+        _param.data[0].exps.push({
+          key: 'mk_' + form.key + '_mk',
+          value: val
+        })
+      })
+
+      if (data && columns && columns.length > 0) {
+        let datavars = {}
+  
+        Object.keys(data).forEach(key => {
+          datavars[key.toLowerCase()] = data[key]
+        })
+    
+        columns.forEach(col => {
+          if (!item.reps.includes(col.field) || formkeys.includes(col.field)) return
+          if (!col.datatype) return
+  
+          let _key = col.field.toLowerCase()
+          let _val = datavars.hasOwnProperty(_key) ? datavars[_key] : ''
+  
+          if (/^date/ig.test(col.datatype) && !_val) {
+            _val = '1949-10-01'
+          }
+
+          _param.data[0].exps.push({
+            key: 'mk_' + col.field + '_mk',
+            value: _val
+          })
+        })
+      }
+
+      return _param
+    }
+
     let arrFields = btn.verify.columns.map(col => col.field).join(',')
 
     let param = {
       func: 'sPC_Get_TableData',
       obj_name: 'data',
-      exec_type: 'y',
+      exec_type: window.GLOB.execType || 'y',
       arr_field: arrFields,
       default_sql: btn.verify.setting.defaultSql
     }
@@ -976,10 +1080,15 @@
 
     let _dataresource = btn.verify.setting.dataresource
     let _customScript = ''
-
+    let _tailScript = ''
     btn.verify.scripts && btn.verify.scripts.forEach(script => {
-      if (script.status !== 'false') {
+      if (script.status === 'false') return
+      if (script.position !== 'back') {
         _customScript += `
+        ${script.sql}
+        `
+      } else {
+        _tailScript += `
         ${script.sql}
         `
       }
@@ -989,16 +1098,40 @@
       _dataresource = ''
     }
 
+    let custompage = false
+
+    if (/order\s+by\s+sort_id\s*$/i.test(_dataresource)) {
+      custompage = true
+    } else if (/@pageSize@|@orderBy@|@mk_total/i.test(_dataresource + _customScript + _tailScript)) {
+      custompage = true
+    }
+    
+    let isDataM = sessionStorage.getItem('dataM') === 'true'
+    let regoptions = [
+      { reg: /@orderBy@/ig, value: btn.verify.setting.order },
+      { reg: /@pageSize@/ig, value: '9999' },
+      { reg: /@pageIndex@/ig, value: '1'},
+      { reg: /@ID@/ig, value: `'${ID}'`},
+      { reg: /@BID@/ig, value: `'${BID || ''}'`},
+      { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`},
+      { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`},
+      { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`},
+      { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`},
+      { reg: /@lang@/ig, value: `'${sessionStorage.getItem('lang')}'`},
+      { reg: /@typename@/ig, value: `'admin'`},
+      { reg: /\$@/ig, value: isDataM ? '/*' : ''},
+      { reg: /@\$/ig, value: isDataM ? '*/' : ''},
+      { reg: /@datam@/ig, value: isDataM ? `'Y'` : `''`},
+    ]
+
+    regoptions.forEach(item => {
+      _dataresource = _dataresource.replace(item.reg, item.value)
+      _customScript = _customScript.replace(item.reg, item.value)
+      _tailScript = _tailScript.replace(item.reg, item.value)
+    })
+
     if (/\s/.test(_dataresource)) {
       _dataresource = '(' + _dataresource + ') tb'
-    }
-
-    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 initsql = `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)
@@ -1012,13 +1145,11 @@
     formlist.forEach(form => {
       let _key = form.key.toLowerCase()
 
-      if (_vars.includes(_key)) return
-
       _vars.push(_key)
 
       if (form.type === 'number' || form.type === 'rate') {
         let val = form.value
-        if (isNaN(val)) {
+        if (isNaN(val) || val === '') {
           val = 0
         }
         _initvars.push(`@${_key}=${val}`)
@@ -1028,7 +1159,7 @@
         _initvars.push(`@${_key}='${form.value}'`)
       }
 
-      if (form.fieldlen && form.fieldlen > 2048) {
+      if (form.fieldlen && form.fieldlen > 4000) {
         form.fieldlen = 'max'
       }
 
@@ -1086,7 +1217,6 @@
         select ${_initvars.join(',')}
       `
     }
-
     
     if (_customScript) {
       _customScript = `${initsql}
@@ -1094,49 +1224,40 @@
       `
     }
 
-    _dataresource = _dataresource.replace(/@select\$|\$select@/ig, '')
-    _customScript = _customScript.replace(/@select\$|\$select@/ig, '')
-    _dataresource = _dataresource.replace(/\$sum@/ig, '/*')
-    _dataresource = _dataresource.replace(/@sum\$/ig, '*/')
-    _customScript = _customScript.replace(/\$sum@/ig, '/*')
-    _customScript = _customScript.replace(/@sum\$/ig, '*/')
-
-    _dataresource = _dataresource.replace(/@ID@/ig, `'${ID}'`)
-    _customScript = _customScript.replace(/@ID@/ig, `'${ID}'`)
-    _dataresource = _dataresource.replace(/@BID@/ig, `'${BID || ''}'`)
-    _customScript = _customScript.replace(/@BID@/ig, `'${BID || ''}'`)
-    _dataresource = _dataresource.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
-    _customScript = _customScript.replace(/@LoginUID@/ig, `'${sessionStorage.getItem('LoginUID') || ''}'`)
-    _dataresource = _dataresource.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
-    _customScript = _customScript.replace(/@SessionUid@/ig, `'${localStorage.getItem('SessionUid') || ''}'`)
-    _dataresource = _dataresource.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
-    _customScript = _customScript.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
-    _dataresource = _dataresource.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
-    _customScript = _customScript.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
-    _dataresource = _dataresource.replace(/@typename@/ig, `'admin'`)
-    _customScript = _customScript.replace(/@typename@/ig, `'admin'`)
-
-
     let LText = ''
 
     if (_dataresource) {
-      LText = `/*system_query*/select ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${btn.verify.setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows `
+      if (custompage) {
+        LText = `/*system_query*/select ${arrFields} from ${_dataresource} `
+      } else {
+        LText = `/*system_query*/select ${arrFields} from (select ${arrFields} ,ROW_NUMBER() over(order by ${btn.verify.setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows `
+      }
     }
 
     if (_customScript) {
       if (LText) {
         LText = `${LText}
+          ${_tailScript}
           aaa:
           if @ErrorCode!=''
             insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,'${sessionStorage.getItem('UserID') || ''}' 
         `
       } else {
         _customScript = `${_customScript}
+          ${_tailScript}
           aaa:
           if @ErrorCode!=''
             insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,'${sessionStorage.getItem('UserID') || ''}' 
         `
       }
+    } else if (_tailScript) {
+      LText = `${initsql}
+        ${LText}
+        ${_tailScript}
+        aaa:
+        if @ErrorCode!=''
+          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,'${sessionStorage.getItem('UserID') || ''}' 
+      `
     } else {
       LText = `${initsql}
         ${LText}
@@ -1144,17 +1265,17 @@
     }
 
     // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞
-    if (window.GLOB.debugger === true || (window.debugger === true && window.GLOB.sysType !== 'cloud')) {
-      _customScript && console.info(`${btn.logLabel ? `/*${btn.logLabel} 鑷畾涔夎剼鏈�*/\n` : ''}${LText ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_customScript}`)
-      LText && console.info(`${btn.logLabel ? `/*${btn.logLabel} 鏁版嵁婧�*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
+    if (window.GLOB.debugger === true) {
+      _customScript && window.mkInfo(`${btn.logLabel ? `/*${btn.logLabel} 鑷畾涔夎剼鏈�*/\n` : ''}${LText ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_customScript}`)
+      LText && window.mkInfo(`${btn.logLabel ? `/*${btn.logLabel} 鏁版嵁婧�*/\n` : ''}` + LText.replace(/\n\s{8}/ig, '\n'))
     }
 
     if (btn.logLabel) {
       param.menuname = btn.logLabel
     }
 
-    param.custom_script = Utils.formatOptions(_customScript)
-    param.LText = Utils.formatOptions(LText)
+    param.custom_script = Utils.formatOptions(_customScript, param.exec_type)
+    param.LText = Utils.formatOptions(LText, param.exec_type)
 
     param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
     param.secretkey = Utils.encrypt('', param.timestamp)
@@ -1210,41 +1331,27 @@
       // 澶栭儴璇锋眰
       _outParam = JSON.parse(JSON.stringify(res))
 
-      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
-          }
+      if (btn.sysInterface === 'true') {
+        if (window.GLOB.mainSystemApi) {
+          res.rduri = window.GLOB.mainSystemApi
         }
-      } 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 || ''
-          }
-          ver_token = true
+      } else if (btn.sysInterface === 'external') {
+        if (window.GLOB.systemType === 'production') {
+          res.$token = btn.exProInterface || ''
         } else {
-          if (window.GLOB.systemType === 'production' && btn.proInterface) {
-            res.rduri = btn.proInterface
-          } else {
-            res.rduri = btn.interface
-          }
+          res.$token = btn.exInterface || ''
+        }
+        ver_token = true
+      } 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
-          }
+        let host = window.GLOB.baseurl.replace(/http(s):\/\//, '')
+        if (res.rduri.indexOf(host) === -1 && /\/dostars/.test(res.rduri)) {
+          res.$login = true
         }
       }
 
@@ -1256,7 +1363,8 @@
     }).then(response => {
       if (!response || response.ErrCode === 'LoginError') return
 
-      if (ver_token && response.ErrMesg === 'token_error') {
+      if (ver_token && response.ErrCode === 'token_error') {
+        response.ErrCode = 'E'
         this.execError(response)
         _resolve({next: false, list: []})
       } else if (btn.callbackFunc) {
@@ -1332,7 +1440,7 @@
     let imgs = []
 
     if (!res.ConfigParam) {
-      error = '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�'
+      error = window.GLOB.dict['no_print_temp'] || '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�'
     } else {
       try {
         configParam = JSON.parse(window.decodeURIComponent(window.atob(res.ConfigParam)))
@@ -1433,8 +1541,13 @@
           if (item.Field) {
             fields.push(item.Field)
             // 鏉$爜浜岀淮鐮佸瓧娈典笉鍙负绌�
-            if (item.Type === 'qrcode' || item.Type === 'barcode') {
+            if (item.Type === 'barcode') {
               nonEFields.push(item.Field)
+            }
+          } else if (!item.Value) {
+            // 鏉$爜浜岀淮鐮佸唴瀹逛笉鍙负绌�
+            if (item.Type === 'barcode') {
+              error = '妯℃澘涓潯鐮�/浜岀淮鐮佸唴瀹逛笉鍙负绌猴紒'
             }
           }
 
@@ -1489,7 +1602,7 @@
     if (list.length === 0) {
       notification.warning({
         top: 92,
-        message: '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
+        message: window.GLOB.dict['no_data'] || '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
         duration: 5
       })
       this.setState({ loading: false })
@@ -1608,7 +1721,7 @@
     Api.postekPrint(param).then(res => {
       if (res.retval === '0') {
         if (params.length === 0) {
-          this.execSuccess({ ErrCode: 'S', message: '鎵撳嵃璇锋眰宸插彂鍑恒��', status: true })
+          this.execSuccess({ ErrCode: 'S', message: window.GLOB.dict['print_out'] || '鎵撳嵃璇锋眰宸插彂鍑恒��', status: true })
         } else {
           setTimeout(() => {
             this.loopRFIDPrint(params)
@@ -1626,6 +1739,43 @@
 
   execPrint = (list, template) => {
     const { btn } = this.props
+    const { dict } = this.state
+
+    let printReject = null
+    let send = false
+
+    let data = fromJS({ 
+      data: list,
+      template: template
+    }).toJS()
+
+    if (!window.GLOB.errorLog) {
+      printReject = (msg) => {
+        if (send) return
+
+        send = true
+        data.message = msg
+
+        window.mkInfo(JSON.stringify(data))
+      }
+    } else {
+      printReject = (msg) => {
+        if (send) return
+
+        send = true
+        data.message = msg
+
+        let param = {
+          func: 's_special_error_note_log',
+          api_url: btn.logLabel,
+          error_code: 507,
+          error_time: moment().format('YYYY-MM-DD HH:mm:ss'),
+          api_param: JSON.stringify(data)
+        }
+        Api.genericInterface(param)
+      }
+    }
+
     let _errors = []
 
     let defaultPrinter = btn.verify.defaultPrinter || 'lackprinter'
@@ -1726,13 +1876,13 @@
       if (btn.verify.emptyTip === 'false') {
         this.execSuccess({
           ErrCode: '-1',
-          message: '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�',
+          message: dict['no_data'] || '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�',
           status: true
         })
       } else {
         this.execError({
           ErrCode: 'N',
-          message: '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�',
+          message: dict['no_data'] || '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�',
           status: false
         })
       }
@@ -1746,7 +1896,7 @@
           lackerror.push(`鏁版嵁涓湭鑾峰彇鍒版ā鏉匡紙${err.title}锛�${err.lacks.join('銆�')} 瀛楁`)
         }
         if (err.emptys.length > 0) {
-          emptyerror.push(`鏁版嵁涓ā鏉匡紙${err.title}锛� ${err.emptys.join('銆�')} 瀛楁涓嶅彲涓虹┖`)
+          emptyerror.push(dict['not_empty'] ? `${err.title}: ${err.emptys.join('銆�')} ${dict['not_empty']}` : `鏁版嵁涓ā鏉匡紙${err.title}锛� ${err.emptys.join('銆�')} 瀛楁涓嶅彲涓虹┖`)
         }
       })
 
@@ -1767,26 +1917,35 @@
       return
     }
 
+    if (printerList.length === 0) {
+      this.execSuccess({
+        ErrCode: '-1',
+        message: dict['no_data'] || '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�',
+        status: true
+      })
+      return
+    }
+
     if (!socket || socket.readyState !== 1 || socket.url !== 'ws://' + btn.verify.linkUrl) {
       socket = new WebSocket('ws://' + btn.verify.linkUrl)
     } else {
-      this.syncMessageSend(printerList)
-
-      this.execSuccess({
-        ErrCode: 'S',
-        message: '鎵撳嵃璇锋眰宸插彂鍑恒��',
-        status: true
+      this.syncMessageSend(printerList, () => {
+        this.execSuccess({
+          ErrCode: 'S',
+          message: dict['print_out'] || '鎵撳嵃璇锋眰宸插彂鍑恒��',
+          status: true
+        })
       })
     }
 
     // 鎵撳紑Socket
     socket.onopen = () =>{
-      this.syncMessageSend(printerList)
-
-      this.execSuccess({
-        ErrCode: 'S',
-        message: '鎵撳嵃璇锋眰宸插彂鍑恒��',
-        status: true
+      this.syncMessageSend(printerList, () => {
+        this.execSuccess({
+          ErrCode: 'S',
+          message: dict['print_out'] || '鎵撳嵃璇锋眰宸插彂鍑恒��',
+          status: true
+        })
       })
     }
     // 鐩戝惉娑堟伅
@@ -1829,29 +1988,40 @@
           message: data.message,
           status: false
         })
+
+        printReject(data.message)
       }
     }
 
     socket.onerror = () => {
       this.execError({
         ErrCode: 'N',
-        message: '鏃犳硶杩炴帴鍒�:' + btn.verify.linkUrl,
+        message: (dict['un_connect'] || '鏃犳硶杩炴帴鍒�') + ':' + btn.verify.linkUrl,
         status: false
       })
     }
   }
 
-  syncMessageSend = (list) => {
+  syncMessageSend = (list, callback) => {
     let param = list.shift()
 
-    if (socket && param) {
-      socket.send(JSON.stringify(param))
+    if (socket) {
+      try {
+        socket.send(JSON.stringify(param))
+      } catch(e) {
+        console.warn('鎵撳嵃璇锋眰鍙戦�佸け璐ワ紒')
+      }
     }
 
-    if (list && list.length > 0) {
-      setTimeout(() => {this.syncMessageSend(list)}, 3000)
+    if (list.length > 0) {
+      setTimeout(() => {
+        this.syncMessageSend(list, callback)
+      }, 3000)
+    } else {
+      callback()
     }
   }
+
   /**
    * @description 鎿嶄綔鎴愬姛鍚庡鐞�
    * 1銆乪xcel瀵煎嚭锛屾垚鍔熷悗鍙栨秷瀵煎嚭鎸夐挳鍔犺浇涓姸鎬�
@@ -1862,17 +2032,18 @@
    */
   execSuccess = (res = {}) => {
     const { btn } = this.props
-    const { autoMatic, btnconfig } = this.state
+    const { autoMatic, btnconfig, dict } = this.state
 
     if ((res.ErrCode === 'S' || !res.ErrCode) || autoMatic) { // 鎵ц鎴愬姛
       notification.success({
         top: 92,
-        message: res.message || '鎵ц鎴愬姛锛�',
+        message: res.message || dict['exc_success'] || '鎵ц鎴愬姛锛�',
         duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2
       })
     } else if (res.ErrCode === 'Y') { // 鎵ц鎴愬姛
       Modal.success({
-        title: res.message || '鎵ц鎴愬姛锛�'
+        title: res.message || dict['exc_success'] || '鎵ц鎴愬姛锛�',
+        okText: dict['got_it'] || '鐭ラ亾浜�'
       })
     } else if (res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず
 
@@ -1911,7 +2082,7 @@
    */
   execError = (res) => {
     const { btn } = this.props
-    const { btnconfig, autoMatic } = this.state
+    const { btnconfig, autoMatic, dict } = this.state
 
     if (!['LoginError', 'C', '-2', 'E', 'N', 'F', 'NM'].includes(res.ErrCode)) {
       res.ErrCode = 'E'
@@ -1919,23 +2090,24 @@
 
     if (res.ErrCode === 'E' && !autoMatic) {
       Modal.error({
-        title: res.message || '鎵ц澶辫触锛�',
+        title: res.message || dict['exc_fail'] || '鎵ц澶辫触锛�',
+        okText: dict['got_it'] || '鐭ラ亾浜�'
       })
     } else if (res.ErrCode === 'N' || autoMatic) {
       notification.error({
         top: 92,
-        message: res.message || '鎵ц澶辫触锛�',
+        message: res.message || dict['exc_fail'] || '鎵ц澶辫触锛�',
         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 || '鎵ц澶辫触锛�',
+        message: res.message || dict['exc_fail'] || '鎵ц澶辫触锛�',
         duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10
       })
     } else if (res.ErrCode === 'NM') {
-      message.error(res.message || '鎵ц澶辫触锛�')
+      message.error(res.message || dict['exc_fail'] || '鎵ц澶辫触锛�')
     }
     
     this.setState({
@@ -1947,6 +2119,8 @@
       MKEmitter.emit('autoExecOver', btn.uuid, 'error')
       return
     }
+
+    if (res.ErrCode === '-2') return
 
     if (btnconfig && btnconfig.setting && btnconfig.setting.errFocus) {
       MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus)
@@ -2040,6 +2214,7 @@
         } else {
           _LongParam = updateForm(_LongParam)
           _LongParam = this.handleModelConfig(_LongParam)
+          _LongParam.uuid = btn.uuid
 
           this.setState({
             btnconfig: _LongParam
@@ -2081,8 +2256,8 @@
   }
 
   modelconfirm = () => {
-    const { btnconfig, selines } = this.state
-    let _this = this
+    const { btnconfig, selines, dict } = this.state
+    let that = this
     let result = []
     let _data = {}
     let BData = {}
@@ -2114,6 +2289,10 @@
       let key = item.field.toLowerCase()
       let _readin = item.readin !== 'false'
 
+      if (item.type === 'linkMain' && item.verifyVal === 'true') {
+        _item.$verify = true
+        _item.label = item.label
+      }
       if (_item.type === 'date') { // 鏃堕棿鍏煎
         _item.precision = item.precision || 'day'
       } else if (_item.type === 'datetime') {
@@ -2154,10 +2333,41 @@
         _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 if (item.interception === 'charTure') {
+            let str = _item.value.replace(/(^\s*|\s*$)/g, '')
+            let result = ''
+            for (let i = 0 ; i < str.length; i++) {
+              let code = str.charCodeAt(i)
+              if (code >= 65281 && code <= 65373) {
+                result += String.fromCharCode(str.charCodeAt(i) - 65248)
+              } else if (code === 12288) {
+                result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32)
+              } else {
+                result += str.charAt(i)
+              }
+            }
+            _item.value = result
+          } 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, (this.props.BID || ''))
+        if (_item.type === 'text') {
+          if (/@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, (this.props.BID || ''))
+          }
+          if (/@currentYear@/ig.test(_item.value)) { // 绯荤粺鍙橀噺鏇挎崲
+            _item.value = _item.value.replace(/@currentYear@/ig, moment().format('YYYY'))
+          }
         }
         if (_item.type === 'text' && item.lenControl && item.lenControl !== 'limit') {
           if (item.lenControl === 'left') {
@@ -2198,12 +2408,14 @@
       this.execSubmit(selines, () => {}, result)
     } else {
       confirm({
-        title: '纭畾瑕佹墽琛屽悧?',
+        title: dict['exec_sure'] || '纭畾瑕佹墽琛屽悧?',
+        okText: dict['ok'] || '纭畾',
+        cancelText: dict['cancel'] || '鍙栨秷',
         onOk() {
-          _this.triggerPrint(selines, result)
+          that.triggerPrint(selines, result)
         },
         onCancel() {
-          _this.setState({ loading: false })
+          that.setState({ loading: false })
         }
       })
     }
@@ -2214,7 +2426,7 @@
    */
   getModels = () => {
     const { BID, btn } = this.props
-    const { btnconfig } = this.state
+    const { btnconfig, dict } = this.state
 
     if (!this.state.visible || !btnconfig || !btnconfig.setting) return null
 
@@ -2232,6 +2444,13 @@
       clickouter = true
     }
 
+    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}
@@ -2241,6 +2460,8 @@
         visible={this.state.visible}
         confirmLoading={this.state.confirmLoading}
         width={width}
+        okText={dict['ok'] || '纭畾'}
+        cancelText={dict['cancel'] || '鍙栨秷'}
         maskStyle={btnconfig.setting.moveable === 'true' ?  {backgroundColor: 'rgba(0, 0, 0, 0.15)'} : null}
         onOk={this.handleOk}
         onCancel={this.handleCancel}
@@ -2302,39 +2523,24 @@
     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 = ''
+    if (btn.show === 'link') {
+      label = <span>{btn.label}{btn.icon ? <MkIcon style={{marginLeft: '8px'}} type={btn.icon} /> : ''}</span>
     } else if (btn.show === 'icon') {
-      icon = btn.icon || ''
-    } else if (!btn.$toolbtn) {
-      icon = btn.icon || ''
-      label = btn.label
-      className = 'mk-btn mk-' + btn.class
+      label = !loading ? <MkIcon type={btn.icon} /> : null
     } else {
-      type = ''
-      icon = btn.icon || ''
-      label = btn.label
-      className = 'mk-btn mk-' + btn.class
+      label = <span>{!loading && btn.icon ? <MkIcon style={{marginRight: '8px'}} type={btn.icon} /> : ''}{btn.label}</span>
     }
 
     return <>
       <Button
-        type={type}
+        type="link"
         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}
+        className={btn.hover || ''}
         onClick={(e) => {e.stopPropagation(); this.actionTrigger()}}
       >{label}</Button>
       <span onClick={(e) => {e.stopPropagation()}}>{this.getModels()}</span>

--
Gitblit v1.8.0