king
2023-08-10 ac1d52c46ff9019fcc93cf3d5e7ab17cf850824e
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -9,8 +9,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 +32,6 @@
  }
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    visible: false,
    formdata: null,
    selines: null,
@@ -260,7 +257,7 @@
      // 需要选择行时,校验数据
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectline'],
        message: '请选择行!',
        duration: 5
      })
      return
@@ -268,7 +265,7 @@
      // 需要选择单行时,校验数据
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectSingleLine'],
        message: '请选择单行数据!',
        duration: 5
      })
      return
@@ -355,7 +352,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)
@@ -464,10 +461,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' // 后台解码
@@ -507,10 +503,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' // 后台解码
@@ -540,10 +535,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' // 后台解码
@@ -613,10 +607,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' // 后台解码
@@ -660,10 +653,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' // 后台解码
@@ -693,10 +685,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' // 后台解码
@@ -988,11 +979,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 += `
        /* 凭证及用户信息初始化赋值 */
@@ -1021,6 +1007,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
  }
@@ -1211,25 +1203,52 @@
    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)
@@ -1261,21 +1280,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 +1355,7 @@
        }
        let result = {
          mk_api_key: mkey,
          mk_api_key: record.mk_api_key,
          $ErrCode: 'E',
          $ErrMesg: error
        }
@@ -1351,12 +1375,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 : ''
      }
@@ -1494,14 +1518,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}'`
      })
@@ -1592,10 +1616,9 @@
      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, '')
@@ -1691,10 +1714,15 @@
          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 => {
@@ -2030,7 +2058,16 @@
   */
  execSuccess = (res = {}) => {
    const { btn } = this.props
    const { btnconfig, autoMatic } = this.state
    const { autoMatic } = this.state
    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 +2085,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 +2098,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]
@@ -2145,7 +2194,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]
@@ -2490,8 +2539,29 @@
   */
  execError = (res = {}) => {
    const { btn } = this.props
    const { btnconfig, autoMatic } = this.state
    const { autoMatic } = this.state
    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 +2583,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 +2613,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
      })
@@ -2789,7 +2866,7 @@
        _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, '')
@@ -2836,7 +2913,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)
@@ -2882,7 +2959,6 @@
        >
          <MutilForm
            BID={BID}
            dict={this.state.dict}
            action={btnconfig}
            inputSubmit={this.handleOk}
            data={this.state.selines[0]}
@@ -2923,7 +2999,6 @@
        >
          <MutilForm
            BID={BID}
            dict={this.state.dict}
            action={btnconfig}
            inputSubmit={this.handleOk}
            data={this.state.selines[0]}
@@ -2990,7 +3065,7 @@
      // 需要选择行时,校验数据
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectline'],
        message: '请选择行!',
        duration: 5
      })
      return
@@ -2998,7 +3073,7 @@
      // 需要选择单行时,校验数据
      notification.warning({
        top: 92,
        message: this.state.dict['main.action.confirm.selectSingleLine'],
        message: '请选择单行数据!',
        duration: 5
      })
      return
@@ -3060,6 +3135,7 @@
      <Button
        type={type}
        icon={icon}
        id={'button' + btn.uuid}
        title={disabled ? (btn.reason || '') : (btn.show === 'icon' ? btn.label : '')}
        loading={loading}
        disabled={disabled}