king
2023-08-15 a94b0a4d15b26ecf8fe99f0a1c3e60d60b97766d
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -1,14 +1,13 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import moment from 'moment'
import qs from 'qs'
import { is, fromJS } from 'immutable'
import { Button, Modal, notification, message, Drawer, Switch, Checkbox, Progress } from 'antd'
import md5 from 'md5'
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'
@@ -32,7 +31,6 @@
  }
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    visible: false,
    formdata: null,
    selines: null,
@@ -61,7 +59,7 @@
    
    if (btn.OpenType === 'form') {
      let data = selectedData && selectedData[0] ? selectedData[0] : null
      if (btn.formType === 'counter') {
      if (btn.formType === 'counter' || btn.formType === 'count_line') {
        let count = 0
        if (data && data[btn.field]) {
          count = +data[btn.field]
@@ -108,7 +106,7 @@
    if (btn.OpenType === 'form') {
      let data = nextProps.selectedData && nextProps.selectedData[0] ? nextProps.selectedData[0] : null
      if (btn.formType === 'counter') {
      if (btn.formType === 'counter' || btn.formType === 'count_line') {
        let count = 0
        if (data && data[btn.field]) {
          count = +data[btn.field]
@@ -144,7 +142,7 @@
      if (data.length > 0) {
        data.forEach(item => {
          let s = item[btn.controlField] !== undefined ? item[btn.controlField] + '' : ''
          if (btn.controlVals.includes(s)) {
          if (btn.controlVals.includes(s) || item.$lock) {
            disabled = true
          }
        })
@@ -258,7 +256,7 @@
      // 需要选择行时,校验数据
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectline'],
        message: '请选择行!',
        duration: 5
      })
      return
@@ -266,15 +264,7 @@
      // 需要选择单行时,校验数据
      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: '按钮行设置错误!',
        message: '请选择单行数据!',
        duration: 5
      })
      return
@@ -329,6 +319,9 @@
        return
      }
    } else if (!['inner', 'outer', 'system', 'custom'].includes(btn.intertype)) {
      if (btn.OpenType === 'form' && btn.formType === 'count_line') {
        return
      }
      // 接口类型错误
      notification.warning({
        top: 92,
@@ -350,7 +343,7 @@
    } 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)
@@ -459,10 +452,9 @@
        }
        if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
          param.LText = param.LText.replace(/\$@/ig, '/*')
          param.LText = param.LText.replace(/@\$/ig, '*/')
          param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
        } else {
          param.LText = param.LText.replace(/@\$|\$@/ig, '')
          param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
        }
        param.exec_type = 'y' // 后台解码
@@ -502,10 +494,9 @@
          }
          
          if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
            param.LText = param.LText.replace(/\$@/ig, '/*')
            param.LText = param.LText.replace(/@\$/ig, '*/')
            param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
          } else {
            param.LText = param.LText.replace(/@\$|\$@/ig, '')
            param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
          }
          param.exec_type = 'y' // 后台解码
@@ -535,10 +526,9 @@
          }
          
          if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
            param.LText = param.LText.replace(/\$@/ig, '/*')
            param.LText = param.LText.replace(/@\$/ig, '*/')
            param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
          } else {
            param.LText = param.LText.replace(/@\$|\$@/ig, '')
            param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
          }
          param.exec_type = 'y' // 后台解码
@@ -601,17 +591,16 @@
            param.LText = sql
            param.$callbacksql = callbacksql
          } else {
            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions, Utils.getAllSearchOptions) // 数据源
            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 数据源
            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, '*/')
            param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
          } else {
            param.LText = param.LText.replace(/@\$|\$@/ig, '')
            param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
          }
          param.exec_type = 'y' // 后台解码
@@ -655,10 +644,9 @@
            }
            
            if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
              param.LText = param.LText.replace(/\$@/ig, '/*')
              param.LText = param.LText.replace(/@\$/ig, '*/')
              param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
            } else {
              param.LText = param.LText.replace(/@\$|\$@/ig, '')
              param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
            }
            param.exec_type = 'y' // 后台解码
@@ -688,10 +676,9 @@
            }
            
            if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
              param.LText = param.LText.replace(/\$@/ig, '/*')
              param.LText = param.LText.replace(/@\$/ig, '*/')
              param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
            } else {
              param.LText = param.LText.replace(/@\$|\$@/ig, '')
              param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
            }
            param.exec_type = 'y' // 后台解码
@@ -744,8 +731,10 @@
    let _params = []
    if ( btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce' ) {
      let param = {
        func: btn.innerFunc || ''
      let param = {}
      if (btn.innerFunc) {
        param.func = btn.innerFunc
      }
      if (this.props.BID) {
@@ -758,9 +747,7 @@
        let ids = data.map(d => { return d[setting.primaryKey] || ''})
        ids = ids.filter(Boolean)
        primaryId = ids.join(',')
      }
      if (setting.primaryKey) {
        param[setting.primaryKey] = primaryId // 设置主键参数
      }
@@ -838,7 +825,7 @@
  getSysDeclareSql = (btn, formdata, data, columns, primaryId, BID = '') => {
    let datavars = {}                 // 声明的变量,表单及显示列
    // 需要声明的变量集
    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', 'bid']
    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']
  
    // sql语句
    let _sql = ''
@@ -855,17 +842,24 @@
  
      if (!_initvars.includes(_key)) {
        _initvars.push(_key)
        let val = form.value
  
        if (form.type === 'number' || form.type === 'rate') {
          let val = form.value
          if (isNaN(val)) {
            val = 0
          }
          _initFormfields.push(`@${_key}=${val}`)
        } else if (['date', 'datemonth'].includes(form.type)) {
          _initFormfields.push(`@${_key}='${form.value || '1949-10-01'}'`)
          _initFormfields.push(`@${_key}='${val || '1949-10-01'}'`)
        } else {
          _initFormfields.push(`@${_key}='${form.value}'`)
          if (/'/.test(val)) {
            val = val.replace(/'/ig, '"')
          }
          if (form.isconst) {
            _initFormfields.push(`@${_key}=N'${val}'`)
          } else {
            _initFormfields.push(`@${_key}='${val}'`)
          }
        }
      }
      
@@ -890,15 +884,16 @@
      }
    })
  
    let _data = {}
    if (data) {
      Object.keys(data).forEach(key => {
        data[key.toLowerCase()] = data[key]
        _data[key.toLowerCase()] = data[key]
      })
    }
  
    // 添加数据中字段,表单值优先(按钮不选行或多行拼接时跳过)
    if (data && btn.Ot !== 'notRequired' && columns && columns.length > 0) {
      datavars = {...data, ...datavars}
      datavars = {..._data, ...datavars}
  
      const setField = (col) => {
        if (!col.field) return
@@ -909,6 +904,10 @@
  
          if (col.datatype && /^date/ig.test(col.datatype) && !_val) {
            _val = '1949-10-01'
          }
          if (/'/.test(_val)) {
            _val = _val.replace(/'/ig, '"')
          }
  
          _initvars.push(_key)
@@ -956,7 +955,7 @@
      _declarefields = ',' + _declarefields
    }
    _sql = `/* 系统生成 */
        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @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),@bid nvarchar(50)${_declarefields}
        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @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),@mk_deleted int,@bid nvarchar(50)${_declarefields}
      `
  
    let userName = sessionStorage.getItem('User_Name') || ''
@@ -971,15 +970,10 @@
    let district = sessionStorage.getItem('district') || ''
    let address = sessionStorage.getItem('address') || ''
  
    if (sessionStorage.getItem('isEditState') === 'true') {
      userName = sessionStorage.getItem('CloudUserName') || ''
      fullName = sessionStorage.getItem('CloudFullName') || ''
    }
    // 初始化凭证及用户信息字段
    _sql += `
        /* 凭证及用户信息初始化赋值 */
        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@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}', @bid='${BID}', @BillCode='', @ModularDetailCode=''
        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@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}', @mk_deleted=1, @bid='${BID}', @BillCode='', @ModularDetailCode=''
        `
  
    // 表单变量赋值
@@ -1004,6 +998,12 @@
    _sql = _sql.replace(/@UserID@/ig, `'${sessionStorage.getItem('UserID') || ''}'`)
    _sql = _sql.replace(/@Appkey@/ig, `'${window.GLOB.appkey || ''}'`)
    _sql = _sql.replace(/@typename@/ig, `'admin'`)
    if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
      _sql = _sql.replace(/@datam@/ig, '\'Y\'')
    } else {
      _sql = _sql.replace(/@datam@/ig, '\'\'')
    }
    return _sql
  }
@@ -1053,42 +1053,56 @@
      if (params[0].$unCheckParam) {
        this.checkLoopRequest(params, _resolve)
      } else if (btn.preFunc && params.length === 1) {
        let param = params[0]
        let _param = fromJS(param).toJS()
        _param.func = btn.preFunc
        Api.genericInterface(_param).then(res => {
          if (res.status) {
            if (res.ErrCode !== '-1') {
              param = {...param, ...res}
              delete param.status
              delete param.ErrCode
              delete param.ErrMesg
              delete param.message
              setTimeout(() => {
                Api.genericInterface(param).then(result => {
                  if (!result.status) {
                    notification.warning({
                      top: 92,
                      message: result.message,
                      duration: 5
                    })
                  }
                })
              }, 600)
            }
            this.triggerNote(res, _param.ID) // 消息
            this.execSuccess(res)
          } else {
            this.execError(res)
          }
          _resolve()
        }, (error) => {
          if (error && error.ErrCode === 'LoginError') return
          this.updateStatus()
          _resolve()
        })
      } else if (params.length <= 20 && btn.execType !== 'single') {
        let deffers = params.map((param, i) => {
          return new Promise(resolve => {
            setTimeout(() => {
              let _param = null
              if (btn.preFunc) {
                _param = fromJS(param).toJS()
                param.func = btn.preFunc
              }
              Api.genericInterface(param).then(res => {
                if (btn.preFunc && res.status && res.ErrCode !== '-1') {
                  _param = {..._param, ...res}
                  delete _param.status
                  delete _param.ErrCode
                  delete _param.ErrMesg
                  delete _param.message
                  setTimeout(() => {
                    Api.genericInterface(_param).then(result => {
                      if (!result.status) {
                        notification.warning({
                          top: 92,
                          message: result.message,
                          duration: 5
                        })
                      }
                    })
                  }, 600)
                }
                if (res.status) {
                  this.triggerNote(res) // 消息
                  this.triggerNote(res, param.ID) // 消息
                }
                resolve(res)
              }, () => {
              }, (error) => {
                if (error && error.ErrCode === 'LoginError') return
                this.updateStatus()
                _resolve()
              })
@@ -1115,7 +1129,7 @@
          _resolve()
        })
      } else { // 超出20个请求时循环执行
        if (btn.progress === 'progressbar' && btn.$toolbtn && params.length > 1) {
        if (btn.progress === 'progressbar' && params.length > 1) {
          this.setState({
            loadingTotal: params.length
          })
@@ -1136,7 +1150,7 @@
        _params = this.getInnerParam(data, formdata, btn.callbackType === 'script')
      }
      if (_params.length > 1 && btn.progress === 'progressbar' && btn.$toolbtn) {
      if (_params.length > 1 && btn.progress === 'progressbar') {
        this.setState({
          loadingTotal: _params.length
        })
@@ -1157,7 +1171,7 @@
        params = this.getInnerParam(data, formdata, btn.callbackType === 'script')
      }
      if (params.length > 1 && btn.progress === 'progressbar' && btn.$toolbtn) {
      if (params.length > 1 && btn.progress === 'progressbar') {
        this.setState({
          loadingTotal: params.length
        })
@@ -1180,31 +1194,59 @@
    let record = {
      BID: param.BID || '',
      ID: param.ID || '',
      callbacksql: param.$callbacksql || ''
      callbacksql: param.$callbacksql || '',
      mk_api_key: ''
    }
    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
                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)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1229,23 +1271,73 @@
      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
    Api.directRequest(url, btn.method, param, btn.cross).then(res => {
      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,
      method: btn.method || 'post'
    }
    if (btn.cross === 'true') {
      if (JSON.stringify(param) !== '{}') {
        if (btn.stringify === 'qs') {
          _params.data = qs.stringify(param)
        } else if (btn.stringify === 'JSON') {
          _params.data = param
        } else {
          _params.data = JSON.stringify(param)
        }
      }
    } else {
      let _url = url
      if (JSON.stringify(param) !== '{}') {
        if (_params.method === 'get') {
          let keys = Object.keys(param).map(key => `${key}=${param[key]}`)
          _url = _url + '?' + keys.join('&')
        } else if (_params.method === 'post') {
          if (btn.stringify === 'qs') {
            _params.data = qs.stringify(param)
          } else if (btn.stringify === 'JSON') {
            _params.data = param
          } else {
            _params.data = JSON.stringify(param)
          }
        }
      }
      _url = _url.replace(/&/ig, '%26')
      _params.url = '/trans/redirect?rd=' + _url + '&method=' + _params.method
      _params.method = 'post'
    }
    if (btn.ContentType) {
      _params.headers = {
        'Content-Type': btn.ContentType
      }
    }
    Api.directRequest(_params).then(res => {
      if (typeof(res) !== 'object') {
        let error = '未知的返回结果!'
@@ -1254,7 +1346,7 @@
        }
        let result = {
          mk_api_key: mkey,
          mk_api_key: record.mk_api_key,
          $ErrCode: 'E',
          $ErrMesg: error
        }
@@ -1264,12 +1356,22 @@
        if (Array.isArray(res)) {
          res = { data: res }
        }
        res.mk_api_key = mkey
        if (btn.outerBlacklist) {
          let list = btn.outerBlacklist.split(',').map(m => m.toLowerCase())
          Object.keys(res).forEach(key => {
            if (list.includes(key.toLowerCase())) {
             delete res[key]
            }
          })
        }
        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 : ''
      }
@@ -1347,6 +1449,8 @@
    Api.genericInterface(param).then(res => {
      if (res.status) {
        this.triggerNote(res, param.ID) // 消息
        if (params.length === 0) {
          this.execSuccess(res)
          _resolve()
@@ -1357,7 +1461,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1406,14 +1511,14 @@
          if (typeof(val) === 'string') {
            val = val.replace(/'/ig, '"')
          }
          keys.push(key)
          keys.push('[' + key + ']')
          vals.push(`'${val}'`)
        }
      })
      lines.push({
        table: tb,
        insert: `Insert into ${pre}${tb} (${keys.join(',')},mk_level,mk_id,mk_bid)`,
        insert: `Insert into ${pre}${tb} (${keys.join(',')},[mk_level],[mk_id],[mk_bid])`,
        select: `Select ${vals.join(',')},'${level}','${id}','${bid}'`
      })
@@ -1497,17 +1602,16 @@
      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 (window.GLOB.debugger === true) {
        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, '*/')
        param.LText = param.LText.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'')
      } else {
        param.LText = param.LText.replace(/@\$|\$@/ig, '')
        param.LText = param.LText.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'')
      }
      param.LText = param.LText.replace(/\$check@|@check\$/ig, '')
@@ -1534,7 +1638,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
@@ -1558,37 +1662,9 @@
      loadingNumber: params.length
    })
    let _param = null
    if (btn.preFunc) {
      _param = fromJS(param).toJS()
      param.func = btn.preFunc
    }
    Api.genericInterface(param).then(res => {
      if (res.status) {
        if (btn.preFunc && res.ErrCode !== '-1') {
          _param = {..._param, ...res}
          delete _param.status
          delete _param.ErrCode
          delete _param.ErrMesg
          delete _param.message
          setTimeout(() => {
            Api.genericInterface(_param).then(result => {
              if (!result.status) {
                notification.warning({
                  top: 92,
                  message: result.message,
                  duration: 5
                })
              }
            })
          }, 600)
        }
        this.triggerNote(res) // 消息
        this.triggerNote(res, param.ID) // 消息
        if (params.length === 0) {
          this.execSuccess(res)
@@ -1600,7 +1676,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1621,7 +1698,7 @@
    Api.genericInterface(param).then(res => {
      if (res.status) {
        this.triggerNote(res) // 消息
        this.triggerNote(res, param.ID) // 消息
        if (params.length === 0) {
          this.execSuccess(res)
@@ -1630,15 +1707,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)
@@ -1663,7 +1745,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1725,7 +1808,8 @@
        this.execError(res)
        _resolve()
      }
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.updateStatus()
      _resolve()
    })
@@ -1734,6 +1818,7 @@
  outerOuterRequest = (params, result, record, _resolve) => {
    const { btn } = this.props
    let outParam = JSON.parse(JSON.stringify(result))
    let ver_token = false
    if (btn.outerFunc) {
      result.func = btn.outerFunc
@@ -1743,8 +1828,8 @@
        if (window.GLOB.mainSystemApi) {
          result.rduri = window.GLOB.mainSystemApi
        }
      } else if (btn.sysInterface === 'true' && options.cloudServiceApi) {
        result.rduri = options.cloudServiceApi
      } else if (btn.sysInterface === 'true' && window.GLOB.cloudServiceApi) {
        result.rduri = window.GLOB.cloudServiceApi
        result.userid = sessionStorage.getItem('CloudUserID') || ''
        result.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
      } else if (btn.sysInterface !== 'true') {
@@ -1772,6 +1857,7 @@
        } else {
          result.$token = btn.exInterface || ''
        }
        ver_token = true
      } else {
        if (window.GLOB.systemType === 'production' && btn.proInterface) {
          result.rduri = btn.proInterface
@@ -1788,8 +1874,13 @@
    Api.genericInterface(result).then(res => {
      if (!res) return // LoginError时中断请求
      if (ver_token && res.ErrMesg === 'token_error') {
        this.execError(res)
        return
      }
      this.outerCallbackRequest(params, res, record, outParam, _resolve)
    }, () => {
    }, (error) => {
      if (error && error.ErrCode === 'LoginError') return
      this.outerCallbackRequest(params, {status: false, message: 500, ErrCode: 'E', ErrMesg: 500}, record, outParam, _resolve)
    })
  }
@@ -1871,6 +1962,8 @@
    Api.genericInterface(param).then(res => {
      if (res.status) {
        this.triggerNote(res, param.ID) // 消息
        // 一次请求成功,进行下一项请求
        if (params.length === 0) {
          this.execSuccess(res)
@@ -1960,10 +2053,20 @@
   */
  execSuccess = (res = {}) => {
    const { btn } = this.props
    const { btnconfig, autoMatic } = this.state
    const { autoMatic } = this.state
    if (res.message && /^@speak@/.test(res.message)) {
      res.message = res.message.replace('@speak@', '')
    if (autoMatic) {
      this.setState({
        loading: false,
        visible: false
      })
      MKEmitter.emit('autoExecOver', btn.uuid, 'success')
      return
    }
    let sign = ''
    if (/^@speak@/i.test(res.message)) {
      res.message = res.message.replace(/^@speak@/i, '')
      let val = res.message.match(/<<.*>>/)
      res.message = res.message.replace(/\s*<<.*>>\s*/g, '')
      val = val ? val[0].replace(/<<|>>/g, '') : ''
@@ -1977,41 +2080,9 @@
      if (!res.message) {
        res.ErrCode = '-1'
      }
    }
    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 = ''
@@ -2022,6 +2093,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]
@@ -2032,9 +2150,9 @@
      return
    }
    if (btn.execSuccess === 'closetab') {
    if (btn.execSuccess === 'closetab' || sign === '@close_tab@') {
      MKEmitter.emit('closeTabView', btn.$MenuID)
    } else if (btn.execSuccess === 'closepoptab') {
    } else if (btn.execSuccess === 'closepoptab' || sign === '@close_popup@') {
      MKEmitter.emit('popclose')
    } else if (btn.execSuccess !== 'never') {
      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, id, this.state.selines)
@@ -2044,7 +2162,17 @@
      MKEmitter.emit('refreshDebugTable')
    }
    
    btn.syncComponentId && MKEmitter.emit('reloadData', btn.syncComponentId)
    if (btn.syncComponentId) {
      if (btn.syncComponentId === 'multiComponent') {
        btn.syncComponentIds.forEach((id, i) => {
          setTimeout(() => {
            MKEmitter.emit('reloadData', id)
          }, 20 * i)
        })
      } else {
        MKEmitter.emit('reloadData', btn.syncComponentId)
      }
    }
    if (tabId) {
      MKEmitter.emit('reloadMenuView', tabId, 'table')
@@ -2061,7 +2189,7 @@
      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]
@@ -2080,17 +2208,25 @@
      MKEmitter.emit('modifyTabs', newtab, true)
    }
    if (btn.execSuccess === 'popclose' && btn.$tabId) { // 标签关闭刷新
      MKEmitter.emit('refreshPopButton', btn.$tabId)
    }
  }
  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
@@ -2099,8 +2235,29 @@
      this.sendMessage(btn.verify, id)
    }
    if (btn.verify.wxNote === 'true') {
      this.sendWxMessage(btn.verify, id)
      if (btn.verify.wxTemplateId === 'mk_category_temp') {
        let verify = fromJS(btn.verify).toJS()
        verify.wxTemplateId = verify.wxCustomTempId
        verify.wxNoteKeys = verify.wxNoteKeys.filter(item => item.key)
        if (!verify.wxTemplateId || verify.wxNoteKeys.length === 0) return
        this.sendWxMessage(verify, id)
      } else {
        this.sendWxMessage(btn.verify, id)
      }
    }
  }
  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) => {
@@ -2122,8 +2279,15 @@
    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
    let domain1 = ''
    let domain2 = ''
    if (['8IFltwzyKcu15iA8fqSyb6m-pMa88a3ZTu0No3vDHgo', 'LOB-bbt9jVncGh7IOAUdESh1Sgzcbt62UwOqSqcK9ok'].includes(verify.wxTemplateId) && window.GLOB.sysType !== 'cloud') {
      domain1 = 'https://cloud.mk9h.cn/'
      domain2 = 'https://cloud.mk9h.cn:8443/'
    }
    Api.genericInterface(param).then(res => {
      // res.data = [{openid: 'o2E7gvoSFvQRG7I8_gZxf4y3ONkQ', send_id: '2223333', first: '您的缴费信息如下', keyword1: '010000000001', keyword2: '2022年07月03日', keyword3: '供暖缴费', keyword4: '20元', keyword5: '成功', remark: '感谢您的使用!'}]
      // res.send_data = [{openid: 'o2E7gvoSFvQRG7I8_gZxf4y3ONkQ', send_id: Utils.getuuid(), p1: '010000000001', p2: '明科', p3: 'dddd', p4: '顺风', p5: '成功'}]
      if (!res.status) {
        notification.warning({
          top: 92,
@@ -2131,7 +2295,12 @@
          duration: 5
        })
        return
      } else if (!res.send_data || res.send_data.length === 0) {
      }
      let sends = res.send_data || []
      sends = sends.filter(item => !!item.openid)
      if (sends.length === 0) {
        return
      }
@@ -2155,13 +2324,13 @@
      }
      
      verify.wxNoteKeys.forEach(item => {
        _param.data[item.key] = {value: '', color: item.color}
        _param.data[item.key] = {value: ''}
      })
      let params = res.send_data.map(item => {
      let params = sends.map(item => {
        let m = fromJS(_param).toJS()
        m.touser = item.openid || ''
        m.touser = item.openid
        if (item.bid && m.miniprogram && m.miniprogram.pagepath.indexOf('MenuId') > -1) {
          m.miniprogram.pagepath = m.miniprogram.pagepath + `&BID=${item.bid}`
        }
@@ -2179,21 +2348,25 @@
        return m
      })
      Api.wxAccessToken().then(res => {
      Api.wxAccessToken(domain1).then(res => {
        if (!res.oa_access_token) return
  
        params.forEach(n => {
          if (!n.touser) return
          Api.wxNginxRequest(`cgi-bin/message/template/send?access_token=${res.oa_access_token}`, 'post', n).then(re => {
          Api.wxNginxRequest(`${domain2}cgi-bin/message/template/send?access_token=${res.oa_access_token}`, 'post', JSON.stringify(n)).then(re => {
            if (verify.wxNoteCallback === 'true') {
              let msg = re.errmsg || ''
              if (msg.length > 50) {
                msg = msg.substr(0, 50)
              }
              let _p = {
                func: 's_get_sms_weixin_local_suc_err',
                upid: id,
                send_id: n.client_msg_id || '',
                status_result: re.errcode === 0 ? 'S' : 'E',
                errcode: re.errcode,
                msg_result: re.errmsg
                msg_result: msg
              }
              _p.LText = Utils.formatOptions(Utils.getuuid())
@@ -2340,6 +2513,29 @@
            duration: 5
          })
        }
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') {
          let param = {
            func: 's_visitor_login',
            timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
            SessionUid: 'bh0bapabtd45epsgra79segbch6c1ibk',
            TypeCharOne: 'pc',
            appkey: '202004041613277377A6A2456D34A4948AE84'
          }
          param.LText = md5(window.btoa('bh0bapabtd45epsgra79segbch6c1ibk' + param.timestamp))
          param.secretkey = md5(param.LText + 'mingke' + param.timestamp)
          let params = {
            url: 'https://sso.mk9h.cn/webapi/dologon',
            method: 'post',
            data: JSON.stringify(param)
          }
          Api.directRequest(params)
          return
        }
      })
    })
  }
@@ -2350,12 +2546,34 @@
   * 2、excel导出,失败后取消导出按钮加载中状态
   * 3、通知主列表刷新
   */
  execError = (res) => {
  execError = (res = {}) => {
    const { btn } = this.props
    const { btnconfig, autoMatic } = this.state
    const { autoMatic } = this.state
    if (res.message && /^@speak@/.test(res.message)) {
      res.message = res.message.replace('@speak@', '')
    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, '')
      let val = res.message.match(/<<.*>>/)
      res.message = res.message.replace(/\s*<<.*>>\s*/g, '')
      val = val ? val[0].replace(/<<|>>/g, '') : ''
@@ -2369,13 +2587,25 @@
      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 === '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 || '执行失败!',
@@ -2392,16 +2622,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
      })
@@ -2416,17 +2644,37 @@
      MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus)
    }
    if (btn.execError === 'closepoptab') {
    if (sign === '@close_tab@') {
      MKEmitter.emit('closeTabView', btn.$MenuID)
    } else if (btn.execError === 'closepoptab' || sign === '@close_popup@') {
      MKEmitter.emit('popclose')
    } else if (btn.execError !== 'never') {
      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines)
    } else if (btn.OpenType === 'form' && btn.formType !== 'counter') {
    }
    if (btn.OpenType === 'form') {
      let data = this.props.selectedData && this.props.selectedData[0] ? this.props.selectedData[0] : null
      this.setState({check: data && data[btn.field] === btn.openVal})
      if (btn.formType === 'counter') {
        let count = 0
        if (data && data[btn.field]) {
          count = +data[btn.field]
          if (isNaN(count)) {
            count = 0
          }
        }
        this.setState({count: count })
      } else {
        this.setState({check: data && data[btn.field] === btn.openVal})
      }
    }
    if (window.GLOB.breakpoint) {
      MKEmitter.emit('refreshDebugTable')
    }
    if (btn.execError === 'popclose' && btn.$tabId) { // 标签关闭刷新
      MKEmitter.emit('refreshPopButton', btn.$tabId)
    }
  }
@@ -2576,56 +2824,58 @@
    btnconfig.fields.forEach(item => {
      if (!item.field) return
      let _item = {
        key: item.field,
        readin: item.readin !== 'false' && item.readin !== 'top',
        fieldlen: item.fieldlength || 50,
        writein: item.writein !== 'false',
        type: item.type
      }
      let _initval = item.initval
      let _readin = item.readin !== 'false'
      let _format = item.precision || 'day' // 时间格式化
      if (item.type === 'funcvar') {
        _initval = ''
        _readin = false
        _item.readin = false
      } else if (item.type === 'linkMain') {
        _readin = false
        _item.readin = false
      } else if (item.type === 'date') {
        if (_format !== 'day') {
          _format = 'YYYY-MM-DD HH:mm:ss'
        } else {
          _format = 'YYYY-MM-DD'
        }
      } else if (item.type === 'datetime') {
        _item.type = 'date'
        _format = 'YYYY-MM-DD HH:mm:ss'
        type: item.type,
        value: item.initval,
        isconst: item.constant === 'true'
      }
      let key = item.field.toLowerCase()
      let _readin = item.readin !== 'false'
      if (_item.type === 'linkMain' && BData.hasOwnProperty(key)) {
        _initval = BData[key]
      } else if (_readin && _data.hasOwnProperty(key)) {
        _initval = _data[key]
      } else if (_item.type === 'date' && _initval) {
        _initval = moment().subtract(_initval, 'days').format(_format)
      } else if (_item.type === 'datemonth' && _initval) {
        _initval = moment().subtract(_initval, 'month').format('YYYY-MM')
      if (_item.type === 'date') { // 时间兼容
        _item.precision = item.precision || 'day'
      } else if (_item.type === 'datetime') {
        _item.type = 'date'
        _item.precision = 'second'
      } else if (['funcvar', 'linkMain'].includes(_item.type)) {
        _readin = false
        _item.readin = false
      } else if (['select', 'link', 'radio'].includes(_item.type)) { // 选中第一项
        if (/^\s*\$first\s*$/.test(_item.value)) {
          _item.value = ''
          if (item.resourceType === '0' && item.options[0] && item.options[0].Value) {
            _item.value = item.options[0].Value
          }
        }
      }
      _item.value = _initval === undefined ? '' : _initval
      if (_item.type === 'funcvar') {
        _item.value = ''
      } else if (_item.type === 'linkMain' && BData.hasOwnProperty(key)) {
        _item.value = BData[key]
      } else if (_readin && _data.hasOwnProperty(key)) {
        _item.value = _data[key]
      } else if (_item.type === 'date' && _item.value) {
        _item.value = moment().subtract(_item.value, 'days').format(_item.precision === 'day' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss')
      } else if (_item.type === 'datemonth' && _item.value) {
        _item.value = moment().subtract(_item.value, 'month').format('YYYY-MM')
      }
      _item.value = _item.value === undefined ? '' : _item.value
      if (_item.type === 'number' || item.declare === 'decimal') {
        _item.type = 'number'
        _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, '')
@@ -2640,9 +2890,19 @@
            _item.value = _item.value.slice(-item.fieldlength)
          }
        }
      } else if (_item.type.indexOf('date') > -1) {
        if (item.declareType === 'nvarchar(50)') {
          _item.type = 'text'
      } else if (_item.type === 'datemonth') {
        _item.type = 'text'
      } else  if (_item.type === 'date') {
        _item.type = item.declareType === 'nvarchar(50)' ? 'text' : 'date'
      } else if (_item.type === 'switch' || _item.type === 'check') {
        if (_readin) {
          _item.value = _item.value === item.openVal ? item.openVal : item.closeVal
        } else {
          if (item.initval === true) {
            _item.value = item.openVal
          } else {
            _item.value = item.closeVal
          }
        }
      } else if (_item.type === 'rate') {
        let count = item.rateCount || 5
@@ -2662,7 +2922,7 @@
      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)
@@ -2708,7 +2968,6 @@
        >
          <MutilForm
            BID={BID}
            dict={this.state.dict}
            action={btnconfig}
            inputSubmit={this.handleOk}
            data={this.state.selines[0]}
@@ -2749,7 +3008,6 @@
        >
          <MutilForm
            BID={BID}
            dict={this.state.dict}
            action={btnconfig}
            inputSubmit={this.handleOk}
            data={this.state.selines[0]}
@@ -2804,6 +3062,37 @@
    })
  }
  changeLineCount = (count) => {
    const { btn, selectedData } = this.props
    const { disabled } = this.state
    if (disabled) return
    let data = selectedData || []
    if (data.length === 0) {
      // 需要选择行时,校验数据
      notification.warning({
        top: 92,
        message: '请选择行!',
        duration: 5
      })
      return
    } else if (data.length !== 1) {
      // 需要选择单行时,校验数据
      notification.warning({
        top: 92,
        message: '请选择单行数据!',
        duration: 5
      })
      return
    }
    this.setState({count}, () => {
      MKEmitter.emit('refreshLineData', btn.$menuId, btn, data[0].$$uuid, count)
    })
  }
  render() {
    const { btn } = this.props
    const { loadingNumber, loadingTotal, loading, disabled, hidden, check, count } = this.state
@@ -2814,6 +3103,8 @@
        return <Switch loading={loading} checked={check} disabled={disabled || loading} title={disabled ? (btn.reason || '') : ''} onChange={(val,e) => {e.stopPropagation();this.actionTrigger()}} style={btn.style} className={btn.size === 'large' ? 'ant-switch-large' : ''} size={btn.size} checkedChildren={btn.openText || ''} unCheckedChildren={btn.closeText || ''}/>
      } else if (btn.formType === 'counter') {
        return <MkCounter count={count} disabled={disabled} btn={btn} onChange={this.changeCount}/>
      } else if (btn.formType === 'count_line') {
        return <MkCounter count={count} disabled={disabled} btn={btn} onChange={this.changeLineCount}/>
      } else if (btn.formType === 'radio') {
        return <Checkbox className={btn.checkType || ''} disabled={disabled || loading} title={disabled ? (btn.reason || '') : ''} checked={check} onChange={(e) => {e.stopPropagation();this.actionTrigger()}} style={btn.style}></Checkbox>
      } else {
@@ -2845,14 +3136,15 @@
      className = 'mk-btn mk-' + (btn.class || 'unset')
    }
    if (loadingNumber && !loadingTotal && btn.$toolbtn && (!btn.show || btn.show === 'button')) {
      label = (loadingNumber && !loadingTotal ? `(${loadingNumber})` : '') + btn.label
    if (loadingNumber && btn.progress !== 'progressbar' && btn.$toolbtn && (!btn.show || btn.show === 'button')) {
      label = (loadingNumber ? `(${loadingNumber})` : '') + btn.label
    }
    return <>
      <Button
        type={type}
        icon={icon}
        id={'button' + btn.uuid}
        title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
        loading={loading}
        disabled={disabled}