king
2024-10-11 8e003c1a94d26cc4d477e7aa03593ccb4d7e6c61
src/tabviews/zshare/mutilform/index.jsx
@@ -4,6 +4,7 @@
import { Form, Row, Col, notification, Tooltip, Rate } from 'antd'
import { QuestionCircleOutlined, StarFilled } from '@ant-design/icons'
import moment from 'moment'
import md5 from 'md5'
import Api from '@/api'
import Utils from '@/utils/utils.js'
@@ -69,11 +70,18 @@
    let fieldMap = new Map()
    let check = action.setting.formType === 'check'
    if (this.props.data) {
    if (this.props.data && !this.props.data.$$empty) {
      Object.keys(this.props.data).forEach(key => {
        data[key.toLowerCase()] = this.props.data[key]
      })
    } else if (action.uuid && sessionStorage.getItem('local_' + action.uuid)) {
      let _data = JSON.parse(sessionStorage.getItem('local_' + action.uuid))
      Object.keys(_data).forEach(key => {
        data[key.toLowerCase()] = _data[key]
      })
    }
    if (this.props.BData) {
      Object.keys(this.props.BData).forEach(key => {
        BData[key.toLowerCase()] = this.props.BData[key]
@@ -133,6 +141,8 @@
      } else if (item.type === 'datetime') {
        item.type = 'date'
        item.precision = 'second'
      } else if (item.type === 'fileupload') {
        item.fieldlength = item.fieldlength || 512
      }
      if (!item.field || !['text', 'number', 'switch', 'check', 'rate', 'select', 'popSelect', 'link', 'cascader', 'linkMain', 'funcvar', 'date', 'datemonth', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color', 'vercode'].includes(item.type)) return false
@@ -146,6 +156,7 @@
      // 数据自动填充
      let readin = item.readin !== 'false'
      item.local = item.readin === 'local'
      item.readin = item.readin !== 'false' && item.readin !== 'top'
      item.readonly = check || item.readonly === 'true'
      item.writein = item.writein !== 'false'
@@ -774,7 +785,7 @@
  resetFocus = (id, field) => {
    const { action } = this.props
    if (id !== action.uuid) return
    if (id !== action.uuid.replace(/_pop$/, '')) return
    let focusId = ''
@@ -843,7 +854,9 @@
  }
  getFormData = (deForms) => {
    if (deForms.length === 1) {
    if (window.backend && window.GLOB.CacheData.has('sql_' + md5(this.props.action.uuid.replace(/_pop$/, '') + deForms[0].uuid))) {
      this.improveBackActionForm(deForms)
    } else if (deForms.length === 1) {
      this.improveSimpleActionForm(deForms)
    } else if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
      this.improveSimpleActionForm(deForms)
@@ -852,6 +865,115 @@
    }
  }
  /**
   * @description 获取下拉表单选项信息
   */
  improveBackActionForm = (deForms) => {
    const { BID, action } = this.props
    let sysvals = {
      mk_departmentcode: sessionStorage.getItem('departmentcode') || '',
      mk_organization: sessionStorage.getItem('organization') || '',
      mk_user_type: sessionStorage.getItem('mk_user_type') || '',
      id: this.state.ID || '',
      bid: BID || '',
      datam: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
      datam_begin: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
      datam_end: sessionStorage.getItem('dataM') === 'true' ? 'Y' : ''
    }
    if (window.GLOB.externalDatabase !== null) {
      sysvals.db = window.GLOB.externalDatabase
    }
    let deffers = []
    let mainItems = []  // 云端或单点数据
    let localItems = [] // 本地数据
    let cache = action.setting.cache !== 'false' && !action.$cache
    let skip = false
    deForms.forEach(item => {
      let ex = window.GLOB.CacheData.get('sql_' + md5(action.uuid.replace(/_pop$/, '') + item.uuid))
      if (!ex) {
        notification.warning({
          top: 92,
          message: '表单(' + item.label + ')无可执行脚本。',
          duration: 5
        })
        return
      }
      let exps = []
      ex.reps.forEach(n => {
        let key = n.toLowerCase()
        if (sysvals.hasOwnProperty(key)) {
          exps.push({
            key: n,
            value: sysvals[key]
          })
        }
      })
      let cell = {
        id: ex.id,
        menuname: item.label + '(表单)',
        exps: exps,
        md5_id: ''
      }
      if (item.database === 'sso' && window.GLOB.mainSystemApi) {
        mainItems.push(cell)
      } else {
        localItems.push(cell)
      }
    })
    if (localItems.length) {
      deffers.push({
        $backend: true,
        $type: 's_Get_SelectedList',
        data: localItems
      })
    }
    if (mainItems.length) {
      deffers.push({
        $backend: true,
        $type: 's_Get_SelectedList',
        data: mainItems,
        rduri: window.GLOB.mainSystemApi
      })
    }
    if (!deffers.length) return
    deffers = deffers.map(item => {
      return new Promise(resolve => {
        Api.getSystemCacheConfig(item, cache).then(res => {
          if (!res.status) {
            notification.warning({
              top: 92,
              message: res.message,
              duration: 5
            })
            skip = true
          }
          resolve(res)
        })
      })
    })
    Promise.all(deffers).then(response => {
      let result = {...response[0], ...(response[1] || {})}
      delete result.ErrCode
      delete result.ErrMesg
      delete result.message
      delete result.status
      this.resetFormList(result, skip)
    })
  }
  /**
   * @description 获取下拉表单选项信息
   */
@@ -876,7 +998,7 @@
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (window.GLOB.debugger === true) {
          console.info(sql)
          window.mkInfo(sql)
        }
        sql = sql.replace(/%/ig, ' mpercent ')
@@ -890,7 +1012,7 @@
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (window.GLOB.debugger === true) {
          console.info(sql)
          window.mkInfo(sql)
        }
        sql = sql.replace(/%/ig, ' mpercent ')
@@ -1014,7 +1136,7 @@
      param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`)
      if (window.GLOB.debugger) {
        console.info(param.LText)
        window.mkInfo(param.LText)
      }
      if (window.GLOB.execType === 'x') {
@@ -1379,6 +1501,7 @@
  }
  handleConfirm = (formId) => {
    const { action } = this.props
    const { formlist, send_type, timestamp, n_id } = this.state
    // 表单提交时检查输入值是否正确
@@ -1390,6 +1513,7 @@
        }
        let forms = []
        let record = {...this.record, ...values}
        let locals = null
        formlist.forEach(item => {
          if (!item.field || ['hint', 'split', 'formula'].includes(item.type)) return
@@ -1487,11 +1611,20 @@
            })
          }
    
          if (item.local) {
            locals = locals || {}
            locals[item.field] = _item.value
          }
          forms.push(_item)
        })
        this.submitId = formId || ''
        if (locals) {
          sessionStorage.setItem('local_' + action.uuid, JSON.stringify(locals))
        }
        resolve(forms)
      })
    })