king
7 天以前 a1e9b18a4dbfd21e1bf4d5cb60974ac2f0115efd
src/tabviews/zshare/mutilform/index.jsx
@@ -4,9 +4,9 @@
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 { formRule } from '@/utils/option.js'
import Utils from '@/utils/utils.js'
import asyncComponent from '@/utils/asyncComponent'
import MKEmitter from '@/utils/events.js'
@@ -48,7 +48,8 @@
    timestamp: '',
    n_id: '',
    focusId: '',
    reFocusId: ''
    reFocusId: '',
    dict: window.GLOB.dict
  }
  record = {}
@@ -56,6 +57,7 @@
  componentDidMount () {
    const { action, unload } = this.props
    const { dict } = this.state
    let data = {}
    let BData = {}
@@ -68,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]
@@ -132,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
@@ -145,9 +156,11 @@
      // 数据自动填充
      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'
      item.defHidden = item.hidden === 'true'
      item.hidden = item.hidden === 'true'
      item.fieldlength = item.fieldlength || 50
@@ -160,6 +173,7 @@
      } else if (item.type === 'linkMain') {
        readin = false
        item.readin = false
        item.$verify = item.verifyVal === 'true'
      } else if (item.type === 'number') {
        item.decimal = item.decimal || 0
        item.fieldlength = item.decimal
@@ -168,12 +182,21 @@
      if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type)) {
        item.options = item.options || []
        item.options = item.options.filter(cell => {
          cell.value = cell.Value
          cell.label = cell.Text
          return !cell.Hide
        })
        item.$select = true
        if (item.type === 'checkcard') {
          item.options = item.options.filter(cell => {
            cell.$value = cell.$value + ''
            return !cell.Hide
          })
        } else {
          item.options = item.options.filter(cell => {
            cell.value = cell.Value + ''
            cell.label = cell.Text
            return !cell.Hide
          })
        }
        if (item.setAll === 'true' && ['select', 'link', 'radio'].includes(item.type)) { // 添加空值
          item.options.unshift({
            key: Utils.getuuid(),
@@ -273,6 +296,19 @@
        } else {
          item.showValue = ''
        }
        if (window.backend && action.uuid) {
          item.formSqlId = md5(action.uuid.replace(/_pop$/, '') + item.uuid)
        }
      } else if (item.type === 'brafteditor') {
        if (window.backend && newval && /<\/span>/.test(newval) && item.encryption === 'true') {
          try {
            newval = window.btoa(window.encodeURIComponent(newval))
          } catch (e) {
            newval = ''
          }
        }
      } else if (item.$select && item.resourceType === '0') {
        newval = newval + ''
      }
      if (newval !== '$empty') {
@@ -285,7 +321,7 @@
        if (isNaN(item.initval) || item.initval === '') {
          item.initval = 0
        }
      } else if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') {
      } else if (item.$select && item.resourceType === '1') {
        deForms.push(item)
      } else if (item.type === 'rate') {
        item.rateCount = item.rateCount || 5
@@ -310,18 +346,21 @@
      item.rules = []
      if (item.type === 'text') {
        item.initval = item.initval + ''
        if (/@currentYear@/ig.test(item.initval)) { // 系统变量替换
          item.initval = item.initval.replace(/@currentYear@/ig, moment().format('YYYY'))
        }
        if (item.required === 'true') {
          item.rules.push({
            required: true,
            message: item.label + '不可为空!'
            message: item.label + (dict['not_empty'] || '不可为空!')
          })
        }
        item.rules.push({
          validator: (rule, value, callback) => {
            if (/'/.test(value)) {
              callback('不可使用英文状态的单引号!')
              callback(dict['single_quot'] || '不可使用英文状态的单引号!')
            // } else if (/--/.test(value)) {
            //   callback('不可使用 -- !')
            } else {
@@ -333,7 +372,7 @@
        if (!item.lenControl || item.lenControl === 'limit') {
          item.rules.push({
            max: item.fieldlength,
            message: formRule.input.formMessage.replace('@max', item.fieldlength)
            message: (dict['max_char'] || '最多@max个字符').replace('@max', item.fieldlength)
          })
        }
@@ -345,7 +384,7 @@
            }
            item.rules.push({
              pattern: reg,
              message: item.regularText || formRule.input.numbermsg
              message: item.regularText || dict['enter_num'] || '请输入数字!'
            })
          } else if (item.regular === 'letter') {
            let reg = /^[a-zA-Z]*$/
@@ -354,7 +393,7 @@
            }
            item.rules.push({
              pattern: reg,
              message: item.regularText || formRule.input.lettermsg
              message: item.regularText || dict['enter_letter'] || '请输入字母!'
            })
          } else if (item.regular === 'letter_number') {
            let reg = /^[a-zA-Z0-9]*$/
@@ -363,7 +402,7 @@
            }
            item.rules.push({
              pattern: reg,
              message: item.regularText || '请输入数字或字母'
              message: item.regularText || dict['enter_num_letter'] || '请输入数字或字母'
            })
          } else if (item.regular === 'letter&number') {
            let reg = /^[a-zA-Z0-9@_.]*$/
@@ -372,33 +411,35 @@
            }
            item.rules.push({
              pattern: reg,
              message: item.regularText || '请输入数字、字母以及@_.'
              message: item.regularText || dict['enter_num_letter_char'] || '请输入数字、字母以及@_.'
            })
          } else if (item.regular === 'phone') {
            item.rules.push({
              pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
              message: item.regularText || '请正确输入手机号'
              pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\s?\d{4}\s?\d{4}$/,
              message: item.regularText || dict['phone_error'] || '请正确输入手机号'
            })
          } else if (item.regular === 'email') {
            item.rules.push({
              pattern: /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/,
              message: item.regularText || '请正确输入邮箱地址'
              message: item.regularText || dict['email_error'] || '请正确输入邮箱地址'
            })
          }
        }
      } else if (item.type === 'number') {
        item.rules = [{
          required: true,
          message: item.label + '不可为空!'
          message: item.label + (dict['not_empty'] || '不可为空!')
        }]
        if (typeof(item.min) === 'number' || typeof(item.max) === 'number') {
        if (typeof(item.min) === 'number' || typeof(item.max) === 'number' || item.notZero === 'true') {
          item.rules.push({
            validator: (rule, value, callback) => {
              if (isNaN(value)) {
                callback()
              } else if (item.notZero === 'true' && value === 0) {
                callback(item.label + (dict['not_zero'] || '不可为0'))
              } else if (typeof(item.min) === 'number' && value < item.min) {
                if (item.min < 1e-6) {
                if (item.min > 0 && item.min < 1e-6) {
                  if (item.min === 1e-6) {
                    callback(item.label + '最小值为 0.000001')
                  } else if (item.min === 1e-7) {
@@ -412,13 +453,13 @@
                  } else if (item.min === 1e-11) {
                    callback(item.label + '最小值为 0.00000000001')
                  } else {
                    callback(item.label + '最小值为 ' + item.min)
                    callback(item.label + (dict['less_limit'] || '最小值为 ') + item.min)
                  }
                } else {
                  callback(item.label + '最小值为 ' + item.min)
                  callback(item.label + (dict['less_limit'] || '最小值为 ') + item.min)
                }
              } else if (typeof(item.max) === 'number' && value > item.max) {
                callback(item.label + '最大值为 ' + item.max)
                callback(item.label + (dict['max_limit'] || '最大值为 ') + item.max)
              } else {
                callback()
              }
@@ -429,14 +470,14 @@
        if (item.required === 'true') {
          item.rules.push({
            required: true,
            message: item.label + '不可为空!'
            message: item.label + (dict['not_empty'] || '不可为空!')
          })
        }
        item.rules.push({
          validator: (rule, value, callback) => {
            if (/'/.test(value)) {
              callback('不可使用英文状态的单引号!')
              callback(dict['single_quot'] || '不可使用英文状态的单引号!')
            // } else if (/--/.test(value)) {
            //   callback('不可使用 -- !')
            } else {
@@ -445,32 +486,38 @@
          }
        }, {
          max: item.fieldlength,
          message: formRule.input.formMessage.replace('@max', item.fieldlength)
          message: (dict['max_char'] || '最多@max个字符').replace('@max', item.fieldlength)
        })
      } else if (item.type === 'brafteditor') {
        if (item.required === 'true') {
          item.rules.push({
            required: true,
            message: item.label + '不可为空!'
            message: item.label + (dict['not_empty'] || '不可为空!')
          })
        }
        item.rules.push({
          max: item.fieldlength,
          message: formRule.input.formMessage.replace('@max', item.fieldlength)
          message: (dict['max_char'] || '最多@max个字符').replace('@max', item.fieldlength)
        })
      } else if (item.type === 'linkMain' || item.type === 'vercode') {
        if (item.required === 'true') {
          item.rules.push({
            required: true,
            message: item.label + '不可为空!'
            message: item.label + (dict['not_empty'] || '不可为空!')
          })
        }
      } else {
        if (item.required === 'true') {
          item.rules.push({
            required: true,
            message: '请选择' + item.label + '!'
            message: (dict['select_tip'] || '请选择') + item.label + '!'
          })
        }
        if (['cascader', 'checkbox', 'checkcard', 'fileupload', 'multiselect'].includes(item.type) && item.fieldlength) {
          item.rules.push({
            max: item.fieldlength,
            message: (dict['max_char'] || '最多@max个字符').replace('@max', item.fieldlength)
          })
        }
      }
@@ -497,7 +544,7 @@
        let _hidden = false
        if (supItem.hidden) {
        if (supItem.hidden && !supItem.defHidden) {
          _hidden = true
        } else {
          let box = [...item.values]
@@ -535,7 +582,7 @@
        cell.labelCol = {style: {width: cell.labelwidth + '%'}}
        cell.wrapperCol = {style: {width: (100 - cell.labelwidth) + '%'}}
      }
      if (!cell.field || !fieldMap.has(cell.field)) return cell
      if (!cell.field || !fieldMap.has(cell.field) || ['hint', 'split', 'formula'].includes(cell.type)) return cell
      let item = fieldMap.get(cell.field)
      // 下级表单控制-字段写入
@@ -544,7 +591,7 @@
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
@@ -567,7 +614,7 @@
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
@@ -587,7 +634,7 @@
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
@@ -599,7 +646,7 @@
          item.subFields = []
          item.linkSubField.forEach(m => {
            let n = fieldMap.get(m)
            if (n && ['text', 'number', 'textarea'].includes(n.type)) {
            if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
              item.subFields.push({
                uuid: n.uuid,
                field: m
@@ -616,7 +663,11 @@
        item.supInitVal = ''
        if (fieldMap.has(item.linkField)) {
          item.supInitVal = fieldMap.get(item.linkField).initval || ''
          let supitem = fieldMap.get(item.linkField)
          item.supInitVal = supitem.initval || ''
          if (supitem.$first) {
            item.$resetSup = true
          }
        } else if (data.hasOwnProperty(item.linkField.toLowerCase())) {
          item.supInitVal = data[item.linkField.toLowerCase()]
        }
@@ -645,6 +696,13 @@
      
      if (item.enter === 'tab' || item.enter === 'sub') {
        item.tabUuid = ''
        if (item.enter === 'sub' && item.errTabField) {
          if (item.errTabField === 'origin') {
            item.errTabUuid = item.uuid
          } else if (fieldMap.has(item.errTabField)) {
            item.errTabUuid = fieldMap.get(item.errTabField).uuid
          }
        }
        if (item.tabField && fieldMap.has(item.tabField)) {
          item.tabUuid = fieldMap.get(item.tabField).uuid
        } else if (item.enter === 'tab') {
@@ -735,6 +793,7 @@
    if (action.subButton && action.subButton.resetForms) {
      MKEmitter.addListener('resetForms', this.resetForms)
    }
    MKEmitter.addListener('resetFocus', this.resetFocus)
  }
  componentWillUnmount () {
@@ -742,6 +801,27 @@
      return
    }
    MKEmitter.removeListener('resetForms', this.resetForms)
    MKEmitter.removeListener('resetFocus', this.resetFocus)
  }
  resetFocus = (id, field) => {
    const { action } = this.props
    if (id !== action.uuid.replace(/_pop$/, '')) return
    let focusId = ''
    this.state.formlist.forEach(item => {
      if (item.field === field) {
        focusId = item.uuid
      }
    })
    if (!focusId) return
    setTimeout(() => {
      MKEmitter.emit('mkFC', 'focus', focusId)
    }, 20)
  }
  resetForms = (id, data) => {
@@ -796,7 +876,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)
@@ -805,6 +887,144 @@
    }
  }
  /**
   * @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) {
      if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
        localItems.forEach(item => {
          deffers.push({
            $backend: true,
            $type: 's_Get_SelectedList',
            data: [item]
          })
        })
      } else {
        deffers.push({
          $backend: true,
          $type: 's_Get_SelectedList',
          data: localItems
        })
      }
    }
    if (mainItems.length) {
      if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
        mainItems.forEach(item => {
          deffers.push({
            $backend: true,
            $type: 's_Get_SelectedList',
            data: [item],
            rduri: window.GLOB.mainSystemApi
          })
        })
      } else {
        deffers.push({
          $backend: true,
          $type: 's_Get_SelectedList',
          data: mainItems,
          rduri: window.GLOB.mainSystemApi
        })
      }
    }
    if (!deffers.length) return
    deffers = deffers.map((item, i) => {
      return new Promise(resolve => {
        setTimeout(() => {
          Api.getSystemCacheConfig(item, cache).then(res => {
            if (!res.status) {
              if (res.ErrCode !== '-2') {
                notification.warning({
                  top: 92,
                  message: res.message,
                  duration: 5
                })
              }
              skip = true
            }
            resolve(res)
          })
        }, 30 * i)
      })
    })
    Promise.all(deffers).then(response => {
      let result = {}
      response.forEach(item => {
        result = {...result, ...item}
      })
      delete result.ErrCode
      delete result.ErrMesg
      delete result.message
      delete result.status
      this.resetFormList(result, skip)
    })
  }
  /**
   * @description 获取下拉表单选项信息
   */
@@ -829,7 +1049,7 @@
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (window.GLOB.debugger === true) {
          console.info(sql)
          window.mkInfo(sql)
        }
        sql = sql.replace(/%/ig, ' mpercent ')
@@ -843,7 +1063,7 @@
        sql = sql.replace(/@BID@/ig, `'${BID}'`)
        if (window.GLOB.debugger === true) {
          console.info(sql)
          window.mkInfo(sql)
        }
        sql = sql.replace(/%/ig, ' mpercent ')
@@ -878,11 +1098,13 @@
        new Promise(resolve => {
          Api.getSystemCacheConfig(param, cache).then(res => {
            if (!res.status) {
              notification.warning({
                top: 92,
                message: res.message,
                duration: 5
              })
              if (res.ErrCode !== '-2') {
                notification.warning({
                  top: 92,
                  message: res.message,
                  duration: 5
                })
              }
              skip = true
            }
            resolve(res)
@@ -920,11 +1142,13 @@
        new Promise(resolve => {
          Api.getSystemCacheConfig(mainparam, cache).then(res => {
            if (!res.status) {
              notification.warning({
                top: 92,
                message: res.message,
                duration: 5
              })
              if (res.ErrCode !== '-2') {
                notification.warning({
                  top: 92,
                  message: res.message,
                  duration: 5
                })
              }
              skip = true
            }
            resolve(res)
@@ -967,7 +1191,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') {
@@ -990,11 +1214,13 @@
          setTimeout(() => {
            Api.getSystemCacheConfig(param, cache).then(res => {
              if (!res.status) {
                notification.warning({
                  top: 92,
                  message: res.message,
                  duration: 5
                })
                if (res.ErrCode !== '-2') {
                  notification.warning({
                    top: 92,
                    message: res.message,
                    duration: 5
                  })
                }
                skip = true
              }
              resolve(res)
@@ -1086,7 +1312,11 @@
        // if (item.type === 'link') {
        if (item.linkField) {
          item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '')
          let supInitVal = item.supInitVal
          if (item.$resetSup) {
            supInitVal = this.record[item.linkField]
          }
          item.options = item.oriOptions.filter(option => option.ParentID === supInitVal || option.value === '')
        // } else if (['select', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) {
        } else {
          item.options = item.oriOptions
@@ -1228,11 +1458,17 @@
      if (item.hidden) return
      if (item.type === 'split') {
        fields.push(
          <Col span={24} key={index}>
            <p className="mk-form-split-line" style={item.style}>{item.label}</p>
          </Col>
        )
        if (item.opacity === 'false') {
          fields.push(
            <div key={index}></div>
          )
        } else {
          fields.push(
            <Col span={24} key={index}>
              <p className="mk-form-split-line" style={item.style}>{item.label}</p>
            </Col>
          )
        }
      } else if (item.type === 'hint') {
        fields.push(
          <Col span={item.span || 24} key={index}>
@@ -1280,7 +1516,7 @@
        } else if (item.type === 'radio') {
          content = (<MKRadio config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
        } else if (item.type === 'date' || item.type === 'datemonth') {
          content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
          content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit}/>)
        } else if (item.type === 'fileupload') {
          className = item.readonly ? 'readonly' : ''
          className += item.fileType === 'picture-card' ? ' file-upload' : ''
@@ -1321,9 +1557,11 @@
    return fields
  }
  handleConfirm = (formId) => {
  handleConfirm = (formId, errId) => {
    const { action } = this.props
    const { formlist, send_type, timestamp, n_id } = this.state
    window.CACHE.errFocusId = ''
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
@@ -1333,9 +1571,10 @@
        }
        let forms = []
        let record = {...this.record, ...values}
        let locals = null
        formlist.forEach(item => {
          if (!item.field) return
          if (!item.field || ['hint', 'split', 'formula'].includes(item.type)) return
    
          let _item = {
            type: item.type,
@@ -1345,6 +1584,11 @@
            key: item.field,
            isconst: item.constant === 'true'
          }
          if (item.$verify) {
            _item.$verify = true
            _item.label = item.label
          }
    
          _item.value = record[item.field] !== undefined ? record[item.field] : ''
    
@@ -1353,10 +1597,10 @@
          } else if (item.declare === 'decimal') {
            _item.type = 'number'
            _item.fieldlen = item.decimal || 0
          } else if (['text', 'textarea', 'linkMain'].includes(item.type)) {
          } else if (['text', 'textarea', 'linkMain', 'brafteditor'].includes(item.type)) {
            _item.value = _item.value + ''
            _item.value = _item.value.replace(/\t+|\v+/g, '')       // 去除制表符
            if (item.interception !== 'false') {                    // 去除首尾空格
              if (item.interception === 'func') {
                try {
@@ -1368,18 +1612,37 @@
                  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' && item.lenControl && item.lenControl !== 'limit') {
              if (item.lenControl === 'left') {
                _item.value = _item.value.substr(0, item.fieldlength)
              } else {
                _item.value = _item.value.slice(-item.fieldlength)
            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 (item.lenControl && item.lenControl !== 'limit') {
                if (item.lenControl === 'left') {
                  _item.value = _item.value.substr(0, item.fieldlength)
                } else {
                  _item.value = _item.value.slice(-item.fieldlength)
                }
              }
              if (item.regular === 'phone') {
                _item.value = _item.value.replace(/\s+/g, '')
              }
            }
          } else if (item.type === 'datemonth') {
@@ -1415,11 +1678,21 @@
              value: n_id || ''
            })
          }
          if (item.local) {
            locals = locals || {}
            locals[item.field] = _item.value
          }
    
          forms.push(_item)
        })
        this.submitId = formId || ''
        window.CACHE.errFocusId = errId || ''
        if (locals) {
          sessionStorage.setItem('local_' + action.uuid, JSON.stringify(locals))
        }
        resolve(forms)
      })