king
2023-10-04 ae46c8e640ed64abd7605b289554377e0cdc0cb7
src/tabviews/zshare/mutilform/index.jsx
@@ -6,7 +6,6 @@
import moment from 'moment'
import Api from '@/api'
import options from '@/store/options.js'
import { formRule } from '@/utils/option.js'
import Utils from '@/utils/utils.js'
import asyncComponent from '@/utils/asyncComponent'
@@ -213,6 +212,35 @@
        }
        if (newval === '$empty' && item.initval) {
          newval = moment().subtract(item.initval, 'days').format(_format)
        }
        if (item.minDate) {
          if (item.minDate === 'custom') {
            if (/^\d{4}-\d{2}-\d{2}$/.test(item.minDateField)) {
              item.minDate = moment(item.minDateField).format('YYYY-MM-DD')
            } else {
              let val = data[item.minDateField.toLowerCase()]
              item.minDate = val ? moment(val).format('YYYY-MM-DD') : ''
            }
            item.minDate = item.minDate === 'Invalid date' ? '' : item.minDate
          } else {
            item.minDate = moment().add(item.minDate, 'days').format('YYYY-MM-DD')
          }
        }
        if (item.maxDate) {
          if (item.maxDate === 'custom') {
            if (/^\d{4}-\d{2}-\d{2}$/.test(item.maxDateField)) {
              item.maxDate = moment(item.maxDateField).format('YYYY-MM-DD')
            } else {
              let val = data[item.maxDateField.toLowerCase()]
              item.maxDate = val ? moment(val).format('YYYY-MM-DD') : ''
            }
            item.maxDate = item.maxDate === 'Invalid date' ? '' : item.maxDate
          } else {
            item.maxDate = moment().add(item.maxDate, 'days').format('YYYY-MM-DD')
          }
        }
      } else if (item.type === 'datemonth') {
        if (newval !== '$empty') {
@@ -458,47 +486,42 @@
      let item = fieldMap.get(cell.field)
      // 下级表单控制-字段写入
      if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true') || (item.type === 'cascader' && item.resourceType !== '2')) && item.linkSubField) {
        item.subFields = []
        item.linkSubField.forEach(m => {
          let n = fieldMap.get(m)
          if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            item.subFields.push({
              uuid: n.uuid,
              field: m
            })
          }
        })
        if (item.subFields.length === 0) {
          item.subFields = null
        } else if (item.oriOptions.length > 0) {
          item.oriOptions = item.oriOptions.map(cell => {
            item.subFields.forEach(m => {
              cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
            })
            return cell
      if (item.linkSubField && item.linkSubField.length > 0) {
        if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true') || (item.type === 'cascader' && item.resourceType !== '2'))) {
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
              })
            }
          })
          item.options = fromJS(item.oriOptions).toJS()
        }
        item.linkSubField = null
      } else if (item.type === 'switch' && item.linkSubField) {
        item.options = []
        item.subFields = []
        item.linkSubField.forEach(m => {
          let n = fieldMap.get(m)
          if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            item.subFields.push({
              uuid: n.uuid,
              field: m
          if (item.oriOptions.length > 0) {
            item.oriOptions = item.oriOptions.map(cell => {
              item.subFields.forEach(m => {
                cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
              })
              return cell
            })
            item.options = fromJS(item.oriOptions).toJS()
          }
        })
        if (item.subFields.length === 0) {
          item.subFields = null
        } else {
        } else if (item.type === 'switch') {
          item.options = []
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
              })
            }
          })
          reFieldsVal = reFieldsVal || {}
          let val = item.initval === item.openVal ? item.openText : item.closeText
@@ -506,7 +529,20 @@
          item.subFields.forEach(n => {
            reFieldsVal[n.field] = val || ''
          })
        } else if (item.type === 'fileupload') {
          item.options = []
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
              })
            }
          })
        }
        item.linkSubField = null
      }
@@ -582,8 +618,9 @@
    }
    this.record = record
    let ID = this.props.data ? this.props.data.$$uuid || '' : ''
    this.setState({ formlist, ID: this.props.data ? this.props.data.$$uuid || '' : '' }, () => {
    this.setState({ formlist, ID }, () => {
      if (unload) return
      
      if (action.setting && action.setting.focus && fieldMap.has(action.setting.focus)) {
@@ -601,13 +638,29 @@
      }
      if (deForms.length > 0) {
        if (!window.GLOB.mkHS && options.sysType === 'local' && window.GLOB.systemType !== 'production') {
          this.improveSimpleActionForm(deForms)
        if (action.$cache && action.setting.cache !== 'false') {
          Api.getLCacheConfig(action.uuid, action.$time, this.props.BID, ID).then(res => {
            if (!res.valid) {
              this.getFormData(deForms)
            } else {
              this.resetFormList(res.data, true)
            }
          })
        } else {
          this.improveActionForm(deForms)
          this.getFormData(deForms)
        }
      }
    })
  }
  getFormData = (deForms) => {
    if (deForms.length === 1) {
      this.improveSimpleActionForm(deForms)
    } else if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
      this.improveSimpleActionForm(deForms)
    } else {
      this.improveActionForm(deForms)
    }
  }
  /**
@@ -619,8 +672,8 @@
    let deffers = []
    let mainItems = []  // 云端或单点数据
    let localItems = [] // 本地数据
    let cache = action.setting.cache !== 'false'
    let debug = window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')
    let cache = action.setting.cache !== 'false' && !action.$cache
    let skip = false
    let _sql = `Declare @mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20)  select @mk_departmentcode='${sessionStorage.getItem('departmentcode') || ''}',@mk_organization='${sessionStorage.getItem('organization') || ''}',@mk_user_type='${sessionStorage.getItem('mk_user_type') || ''}'\n`
    let _sso = _sql
@@ -633,7 +686,7 @@
        sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (debug) {
        if (window.GLOB.debugger === true) {
          console.info(sql)
        }
@@ -647,7 +700,7 @@
        sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (debug) {
        if (window.GLOB.debugger === true) {
          console.info(sql)
        }
@@ -684,6 +737,7 @@
                message: res.message,
                duration: 5
              })
              skip = true
            }
            resolve(res)
          })
@@ -705,15 +759,11 @@
      mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
      mainparam.secretkey = Utils.encrypt(mainparam.LText, mainparam.timestamp)
      if (window.GLOB.mainSystemApi) {
        mainparam.rduri = window.GLOB.mainSystemApi
      }
      if (window.GLOB.mkHS) { // 云端数据验证
        mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp)
        if (options.cloudServiceApi) {
          mainparam.rduri = options.cloudServiceApi
          mainparam.userid = sessionStorage.getItem('CloudUserID') || ''
          mainparam.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
        }
      } else if (window.GLOB.mainSystemApi) {
        mainparam.rduri = window.GLOB.mainSystemApi
      }
      deffers.push(
@@ -725,6 +775,7 @@
                message: res.message,
                duration: 5
              })
              skip = true
            }
            resolve(res)
          })
@@ -740,7 +791,7 @@
      delete result.message
      delete result.status
      this.resetFormList(result)
      this.resetFormList(result, skip)
    })
  }
@@ -748,9 +799,11 @@
   * @description 测试系统获取下拉表单选项信息
   */
  improveSimpleActionForm = (deForms) => {
    let cache = this.props.action.setting.cache !== 'false'
    let debug = window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')
    const { action } = this.props
    let cache = this.props.action.setting.cache !== 'false' && !action.$cache
    let _sql = `Declare @mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20)  select @mk_departmentcode='${sessionStorage.getItem('departmentcode') || ''}',@mk_organization='${sessionStorage.getItem('organization') || ''}',@mk_user_type='${sessionStorage.getItem('mk_user_type') || ''}'\n`
    let skip = false
    let deffers = deForms.map((form, index) => {
      let param = {
@@ -763,7 +816,7 @@
      param.LText = param.LText.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
      param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`)
      if (debug) {
      if (window.GLOB.debugger) {
        console.info(param.LText)
      }
  
@@ -773,6 +826,9 @@
      if (form.database === 'sso' && window.GLOB.mainSystemApi) {
        param.rduri = window.GLOB.mainSystemApi
      }
      if (window.GLOB.mkHS) { // 云端数据验证
        param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
      }
  
      return (
@@ -785,6 +841,7 @@
                  message: res.message,
                  duration: 5
                })
                skip = true
              }
              resolve(res)
            })
@@ -795,6 +852,7 @@
    Promise.all(deffers).then(response => {
      let result = {}
      response.forEach(res => {
        result = {...result, ...res}
      })
@@ -804,11 +862,17 @@
      delete result.message
      delete result.status
      this.resetFormList(result)
      this.resetFormList(result, skip)
    })
  }
  resetFormList = (result) => {
  resetFormList = (result, skip) => {
    const { BID, action } = this.props
    if (action.$cache && action.setting.cache !== 'false' && !skip) {
      Api.writeCacheConfig(action.uuid, fromJS(result).toJS(), BID, this.state.ID)
    }
    let reFieldsVal = null
    let _formlist = fromJS(this.state.formlist).toJS().map(item => {
      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
@@ -1080,7 +1144,7 @@
        } else if (item.type === 'fileupload') {
          className = item.readonly ? 'readonly' : ''
          className += item.fileType === 'picture-card' ? ' file-upload' : ''
          content = (<MKFileUpload config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
          content = (<MKFileUpload config={item} onChange={(val, other = {}) => this.recordChange({[item.field]: val, ...other})} />)
        } else if (item.type === 'textarea') {
          content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>)
        } else if (item.type === 'rate') {
@@ -1154,7 +1218,19 @@
            _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, record)
                  _item.value = _item.value !== undefined ? _item.value : ''
                } catch (e) {
                  console.warn(e)
                  _item.value = ''
                }
              } else {
                _item.value = _item.value.replace(/(^\s*|\s*$)/g, '')
              }
            }
            if (item.type === 'text' && /@appkey@|@SessionUid@|@bid@/ig.test(_item.value)) { // 特殊字段替换
              _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey).replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')).replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || ''))