import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { fromJS } from 'immutable'
|
import { Form, Row, Col, notification, Tooltip, Rate } from 'antd'
|
import { QuestionCircleOutlined, StarFilled } from '@ant-design/icons'
|
import moment from 'moment'
|
|
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'
|
import MKInput from './mkInput'
|
import MKNumberInput from './mkNumberInput'
|
import MKSelect from './mkSelect'
|
import MkIcon from '@/components/mk-icon'
|
import './index.scss'
|
|
const MKCheckCard = asyncComponent(() => import('./mkCheckCard'))
|
const MKSwitch = asyncComponent(() => import('./mkSwitch'))
|
const MKCheck = asyncComponent(() => import('./mkCheck'))
|
const MKCheckbox = asyncComponent(() => import('./mkCheckbox'))
|
const MKRadio = asyncComponent(() => import('./mkRadio'))
|
const MKDatePicker = asyncComponent(() => import('./mkDatePicker'))
|
const MKTextArea = asyncComponent(() => import('./mkTextArea'))
|
const MKFileUpload = asyncComponent(() => import('../fileupload'))
|
const MKColor = asyncComponent(() => import('./mkColor'))
|
const MkFormula = asyncComponent(() => import('./mkFormula'))
|
const MkCascader = asyncComponent(() => import('./mkCascader'))
|
const MkVercode = asyncComponent(() => import('./mkVercode'))
|
const MKPopSelect = asyncComponent(() => import('./mkPopSelect'))
|
const MKEditor = asyncComponent(() => import('@/components/editor'))
|
|
class MutilFormComponent extends Component {
|
static propTpyes = {
|
action: PropTypes.object, // 按钮信息、表单列表
|
data: PropTypes.any, // 表格数据
|
BID: PropTypes.any, // 主表ID
|
BData: PropTypes.any, // 主表数据
|
unload: PropTypes.any, // 下拉菜单不加载数据
|
inputSubmit: PropTypes.func // input回车提交
|
}
|
|
state = {
|
formlist: [], // 表单项
|
ID: '',
|
send_type: '',
|
timestamp: '',
|
n_id: '',
|
focusId: '',
|
reFocusId: ''
|
}
|
|
record = {}
|
submitId = ''
|
|
componentDidMount () {
|
const { action, unload } = this.props
|
|
let data = {}
|
let BData = {}
|
let linkFields = {} // 关联菜单
|
let controlFields = {} // 控制表单
|
let deForms = [] // 需要动态获取下拉菜单的表单
|
|
let record = {}
|
let formlist = fromJS(action.fields).toJS()
|
let fieldMap = new Map()
|
let check = action.setting.formType === 'check'
|
|
if (this.props.data) {
|
Object.keys(this.props.data).forEach(key => {
|
data[key.toLowerCase()] = this.props.data[key]
|
})
|
}
|
if (this.props.BData) {
|
Object.keys(this.props.BData).forEach(key => {
|
BData[key.toLowerCase()] = this.props.BData[key]
|
})
|
}
|
|
formlist = formlist.filter(item => {
|
if (item.type === 'hint') {
|
if (item.field && data[item.field.toLowerCase()]) {
|
item.message = data[item.field.toLowerCase()]
|
}
|
delete item.field
|
}
|
|
if (item.supField) { // 多层表单控制
|
if (['hint', 'split', 'formula'].includes(item.type)) {
|
item.field = item.uuid
|
fieldMap.set(item.field, item)
|
}
|
let supvals = []
|
if (item.supvalue) {
|
item.supvalue.split(',').forEach(val => {
|
supvals.push(val)
|
if (/^([-]?(0|[1-9][0-9]*)(\.[0-9]+)?)$/.test(val)) {
|
supvals.push(+val)
|
}
|
})
|
} else {
|
supvals.push('')
|
}
|
supvals = Array.from(new Set(supvals))
|
controlFields[item.supField] = controlFields[item.supField] || []
|
controlFields[item.supField].push({field: item.field, values: supvals})
|
}
|
// if (item.type === 'link') {
|
if (item.linkField) {
|
linkFields[item.linkField] = linkFields[item.linkField] || []
|
linkFields[item.linkField].push({field: item.field, uuid: item.uuid})
|
}
|
|
if (item.style) {
|
delete item.style.marginTop
|
delete item.style.marginBottom
|
delete item.style.marginLeft
|
delete item.style.marginRight
|
}
|
|
if (item.type === 'split' && item.splitctrl) {
|
if (data.hasOwnProperty(item.splitctrl.toLowerCase()) && data[item.splitctrl.toLowerCase()] === '') {
|
return false
|
}
|
}
|
|
if (['hint', 'split', 'formula'].includes(item.type)) return true
|
if (item.type === 'date') {
|
item.precision = item.precision || 'day'
|
} else if (item.type === 'datetime') {
|
item.type = 'date'
|
item.precision = 'second'
|
}
|
|
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
|
|
if (/^\s+$/.test(item.label)) {
|
item.style = item.style || {}
|
item.style.opacity = 0
|
item.style.width = 1
|
item.style.display = 'inline-block'
|
}
|
|
// 数据自动填充
|
let readin = item.readin !== 'false'
|
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
|
|
let key = item.field.toLowerCase()
|
|
if (item.type === 'funcvar') {
|
readin = false
|
item.readin = false
|
item.hidden = true
|
} else if (item.type === 'linkMain') {
|
readin = false
|
item.readin = false
|
} else if (item.type === 'number') {
|
item.decimal = item.decimal || 0
|
item.fieldlength = item.decimal
|
item.initval = item.initval || 0
|
}
|
|
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
|
})
|
if (item.setAll === 'true' && ['select', 'link', 'radio'].includes(item.type)) { // 添加空值
|
item.options.unshift({
|
key: Utils.getuuid(),
|
value: '',
|
label: item.emptyText || '空',
|
ParentID: ''
|
})
|
}
|
item.oriOptions = fromJS(item.options).toJS()
|
|
if (item.empty === 'hidden' && item.oriOptions.length === 0) {
|
item.hidden = true
|
}
|
if (item.type === 'checkcard' && item.readonly && item.unchecked === 'hidden') {
|
let selectKeys = item.initval
|
if (item.multiple === 'true') {
|
selectKeys = selectKeys ? selectKeys.split(',') : []
|
item.options = item.options.filter(item => selectKeys.includes(item.$value))
|
} else {
|
item.options = item.options.filter(item => selectKeys === item.$value)
|
}
|
item.oriOptions = fromJS(item.options).toJS()
|
if (item.options.length === 0) {
|
item.hidden = true
|
}
|
}
|
}
|
|
let newval = '$empty'
|
|
if (readin && data.hasOwnProperty(key)) {
|
newval = data[key]
|
}
|
if (item.type === 'linkMain' && BData.hasOwnProperty(key)) {
|
newval = BData[key]
|
} else if (item.type === 'date') { // 时间表单,提交值为天或秒
|
let _format = 'YYYY-MM-DD HH:mm:ss'
|
if (item.precision === 'day') {
|
_format = 'YYYY-MM-DD'
|
}
|
|
if (newval !== '$empty') {
|
newval = moment(newval, 'YYYY-MM-DD HH:mm:ss').format(_format)
|
newval = newval === 'Invalid date' ? '$empty' : newval
|
}
|
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') {
|
newval = moment(newval, 'YYYY-MM').format('YYYY-MM')
|
newval = newval === 'Invalid date' ? '$empty' : newval
|
}
|
if (newval === '$empty' && item.initval) {
|
newval = moment().subtract(item.initval, 'month').format('YYYY-MM')
|
}
|
} else if (item.type === 'switch' || item.type === 'check') { // 开关勾选框只接收固定值
|
if (newval !== '$empty' && (newval === item.closeVal || newval === item.openVal)) {
|
|
} else if (item.initval === true) {
|
newval = item.openVal
|
} else {
|
newval = item.closeVal
|
}
|
} else if (item.type === 'popSelect') {
|
if (newval && newval !== '$empty') {
|
item.showValue = data[item.showField.toLowerCase()] || ''
|
} else {
|
item.showValue = ''
|
}
|
}
|
|
if (newval !== '$empty') {
|
item.initval = newval
|
} else if (item.initval === undefined) {
|
item.initval = ''
|
}
|
|
if (item.type === 'number') {
|
if (isNaN(item.initval) || item.initval === '') {
|
item.initval = 0
|
}
|
} else if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') {
|
deForms.push(item)
|
} else if (item.type === 'rate') {
|
item.rateCount = item.rateCount || 5
|
item.allowHalf = item.allowHalf === 'true'
|
|
if (item.allowHalf) {
|
item.initval = parseFloat(item.initval)
|
if (item.initval % 0.5 !== 0) {
|
item.initval = parseInt(item.initval)
|
}
|
} else {
|
item.initval = parseInt(item.initval)
|
}
|
|
if (isNaN(item.initval) || item.initval < 0) {
|
item.initval = 0
|
} else if (item.initval > item.rateCount) {
|
item.initval = item.rateCount
|
}
|
}
|
|
item.rules = []
|
if (item.type === 'text') {
|
item.initval = item.initval + ''
|
|
if (item.required === 'true') {
|
item.rules.push({
|
required: true,
|
message: item.label + '不可为空!'
|
})
|
}
|
|
item.rules.push({
|
validator: (rule, value, callback) => {
|
if (/'/.test(value)) {
|
callback('不可使用英文状态的单引号!')
|
// } else if (/--/.test(value)) {
|
// callback('不可使用 -- !')
|
} else {
|
callback()
|
}
|
}
|
})
|
|
if (!item.lenControl || item.lenControl === 'limit') {
|
item.rules.push({
|
max: item.fieldlength,
|
message: formRule.input.formMessage.replace('@max', item.fieldlength)
|
})
|
}
|
|
if (item.regular) {
|
if (item.regular === 'number') {
|
let reg = /^[0-9.-]*$/
|
if (item.regularExtra) {
|
reg = new RegExp('^[0-9.-' + item.regularExtra.replace(/\.|-/g, '') + ']*$')
|
}
|
item.rules.push({
|
pattern: reg,
|
message: item.regularText || formRule.input.numbermsg
|
})
|
} else if (item.regular === 'letter') {
|
let reg = /^[a-zA-Z]*$/
|
if (item.regularExtra) {
|
reg = new RegExp('^[a-zA-Z' + item.regularExtra + ']*$')
|
}
|
item.rules.push({
|
pattern: reg,
|
message: item.regularText || formRule.input.lettermsg
|
})
|
} else if (item.regular === 'letter_number') {
|
let reg = /^[a-zA-Z0-9]*$/
|
if (item.regularExtra) {
|
reg = new RegExp('^[a-zA-Z0-9' + item.regularExtra + ']*$')
|
}
|
item.rules.push({
|
pattern: reg,
|
message: item.regularText || '请输入数字或字母'
|
})
|
} else if (item.regular === 'letter&number') {
|
let reg = /^[a-zA-Z0-9@_.]*$/
|
if (item.regularExtra) {
|
reg = new RegExp('^[a-zA-Z0-9@_.' + item.regularExtra.replace(/\.|_|@/g, '') + ']*$')
|
}
|
item.rules.push({
|
pattern: reg,
|
message: item.regularText || '请输入数字、字母以及@_.'
|
})
|
} 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 || '请正确输入手机号'
|
})
|
} else if (item.regular === 'email') {
|
item.rules.push({
|
pattern: /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/,
|
message: item.regularText || '请正确输入邮箱地址'
|
})
|
}
|
}
|
} else if (item.type === 'number') {
|
item.rules = [{
|
required: true,
|
message: item.label + '不可为空!'
|
}]
|
|
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 + '不可为0')
|
} else if (typeof(item.min) === 'number' && value < item.min) {
|
if (item.min < 1e-6) {
|
if (item.min === 1e-6) {
|
callback(item.label + '最小值为 0.000001')
|
} else if (item.min === 1e-7) {
|
callback(item.label + '最小值为 0.0000001')
|
} else if (item.min === 1e-8) {
|
callback(item.label + '最小值为 0.00000001')
|
} else if (item.min === 1e-9) {
|
callback(item.label + '最小值为 0.000000001')
|
} else if (item.min === 1e-10) {
|
callback(item.label + '最小值为 0.0000000001')
|
} else if (item.min === 1e-11) {
|
callback(item.label + '最小值为 0.00000000001')
|
} else {
|
callback(item.label + '最小值为 ' + item.min)
|
}
|
} else {
|
callback(item.label + '最小值为 ' + item.min)
|
}
|
} else if (typeof(item.max) === 'number' && value > item.max) {
|
callback(item.label + '最大值为 ' + item.max)
|
} else {
|
callback()
|
}
|
}
|
})
|
}
|
} else if (item.type === 'textarea') {
|
if (item.required === 'true') {
|
item.rules.push({
|
required: true,
|
message: item.label + '不可为空!'
|
})
|
}
|
|
item.rules.push({
|
validator: (rule, value, callback) => {
|
if (/'/.test(value)) {
|
callback('不可使用英文状态的单引号!')
|
// } else if (/--/.test(value)) {
|
// callback('不可使用 -- !')
|
} else {
|
callback()
|
}
|
}
|
}, {
|
max: item.fieldlength,
|
message: formRule.input.formMessage.replace('@max', item.fieldlength)
|
})
|
} else if (item.type === 'brafteditor') {
|
if (item.required === 'true') {
|
item.rules.push({
|
required: true,
|
message: item.label + '不可为空!'
|
})
|
}
|
|
item.rules.push({
|
max: item.fieldlength,
|
message: formRule.input.formMessage.replace('@max', item.fieldlength)
|
})
|
} else if (item.type === 'linkMain' || item.type === 'vercode') {
|
if (item.required === 'true') {
|
item.rules.push({
|
required: true,
|
message: item.label + '不可为空!'
|
})
|
}
|
} else {
|
if (item.required === 'true') {
|
item.rules.push({
|
required: true,
|
message: '请选择' + item.label + '!'
|
})
|
}
|
if (['cascader', 'checkbox', 'checkcard', 'fileupload', 'multiselect'].includes(item.type) && item.fieldlength) {
|
item.rules.push({
|
max: item.fieldlength,
|
message: formRule.input.formMessage.replace('@max', item.fieldlength)
|
})
|
}
|
}
|
|
if (item.rules.length === 0) {
|
item.rules = null
|
}
|
|
fieldMap.set(item.field, item)
|
|
return true
|
})
|
|
Object.keys(controlFields).forEach(key => {
|
if (!fieldMap.has(key)) return
|
|
let supItem = fieldMap.get(key)
|
let fields = []
|
|
controlFields[key].forEach(item => {
|
if (!fieldMap.has(item.field)) return
|
|
let cell = fieldMap.get(item.field)
|
|
let _hidden = false
|
|
if (supItem.hidden && !supItem.defHidden) {
|
_hidden = true
|
} else {
|
let box = [...item.values]
|
if (supItem.type === 'multiselect' || (supItem.type === 'checkcard' && supItem.multiple === 'true')) {
|
box.push(...supItem.initval.split(','))
|
} else {
|
box.push(supItem.initval)
|
}
|
|
if (box.length === Array.from(new Set(box)).length) {
|
_hidden = true
|
}
|
}
|
|
if (_hidden) {
|
cell.hidden = true
|
if (cell.empty === 'hidden') {
|
cell.$hidden = true
|
}
|
fieldMap.set(item.field, cell)
|
}
|
|
fields.push(item)
|
})
|
|
supItem.controlFields = fields
|
|
fieldMap.set(key, supItem)
|
})
|
|
let reFieldsVal = null
|
|
formlist = formlist.map(cell => {
|
if (cell.labelwidth) {
|
cell.labelCol = {style: {width: cell.labelwidth + '%'}}
|
cell.wrapperCol = {style: {width: (100 - cell.labelwidth) + '%'}}
|
}
|
if (!cell.field || !fieldMap.has(cell.field) || ['hint', 'split', 'formula'].includes(cell.type)) return cell
|
let item = fieldMap.get(cell.field)
|
|
// 下级表单控制-字段写入
|
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', 'select'].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()
|
}
|
} else if (item.type === 'switch') {
|
item.options = []
|
item.subFields = []
|
item.linkSubField.forEach(m => {
|
let n = fieldMap.get(m)
|
if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
|
item.subFields.push({
|
uuid: n.uuid,
|
field: m
|
})
|
}
|
})
|
|
reFieldsVal = reFieldsVal || {}
|
|
let val = item.initval === item.openVal ? item.openText : item.closeText
|
|
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', 'select'].includes(n.type)) {
|
item.subFields.push({
|
uuid: n.uuid,
|
field: m
|
})
|
}
|
})
|
} else if (item.type === 'popSelect') {
|
item.options = []
|
item.subFields = []
|
item.linkSubField.forEach(m => {
|
let n = fieldMap.get(m)
|
if (n && ['text', 'number', 'textarea', 'select'].includes(n.type)) {
|
item.subFields.push({
|
uuid: n.uuid,
|
field: m
|
})
|
}
|
})
|
}
|
|
item.linkSubField = null
|
}
|
|
// if (item.type === 'link') {
|
if (item.linkField) {
|
item.supInitVal = ''
|
|
if (fieldMap.has(item.linkField)) {
|
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()]
|
}
|
|
item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '')
|
}
|
|
if (['select', 'link', 'radio'].includes(item.type)) { // 选中第一项
|
if (/^\s*\$first\s*$/.test(item.initval)) {
|
item.$first = true
|
item.initval = ''
|
}
|
if (item.resourceType === '0') { // 选中第一项
|
if (item.$first) {
|
item.initval = item.options[0] ? item.options[0].value : ''
|
}
|
}
|
}
|
|
record[item.field] = item.initval
|
item.orgval = item.initval
|
|
if (linkFields[item.field]) {
|
item.linkFields = linkFields[item.field]
|
}
|
|
if (item.enter === 'tab' || item.enter === 'sub') {
|
item.tabUuid = ''
|
if (item.tabField && fieldMap.has(item.tabField)) {
|
item.tabUuid = fieldMap.get(item.tabField).uuid
|
} else if (item.enter === 'tab') {
|
item.enter = 'false'
|
} else if (item.enter === 'sub' && ['text', 'number'].includes(item.type)) {
|
item.tabUuid = item.uuid
|
}
|
}
|
|
if (item.subFields && item.options.length > 0) {
|
let initval = item.initval
|
if (item.type === 'cascader' && item.separator) {
|
initval = initval.split(item.separator).pop()
|
}
|
// eslint-disable-next-line
|
let option = item.options.filter(cell => initval == cell.value)[0]
|
|
if (option) {
|
reFieldsVal = reFieldsVal || {}
|
item.subFields.forEach(n => {
|
reFieldsVal[n.field] = option[n.field]
|
})
|
}
|
}
|
|
return item
|
})
|
|
if (reFieldsVal) {
|
formlist = formlist.map(cell => {
|
if (reFieldsVal[cell.field] === undefined) return cell
|
|
cell.initval = reFieldsVal[cell.field]
|
record[cell.field] = reFieldsVal[cell.field]
|
|
return cell
|
})
|
}
|
|
this.record = record
|
let ID = this.props.data ? this.props.data.$$uuid || '' : ''
|
let focusItem = null
|
|
if (action.setting.focus && fieldMap.has(action.setting.focus)) {
|
focusItem = fieldMap.get(action.setting.focus)
|
}
|
|
let reFocusItem = null
|
if (action.setting.refocus && fieldMap.has(action.setting.refocus)) {
|
reFocusItem = fieldMap.get(action.setting.refocus)
|
}
|
|
this.setState({
|
formlist,
|
ID,
|
focusId: focusItem ? focusItem.uuid : '',
|
reFocusId: reFocusItem ? reFocusItem.uuid : ''
|
}, () => {
|
if (unload) return
|
|
if (focusItem) {
|
if (focusItem.type === 'text' || focusItem.type === 'number') {
|
setTimeout(() => {
|
MKEmitter.emit('mkFC', 'focus', focusItem.uuid)
|
}, 20)
|
} else {
|
setTimeout(() => {
|
MKEmitter.emit('mkFC', 'focus', focusItem.uuid)
|
}, 500)
|
}
|
}
|
|
if (deForms.length > 0) {
|
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.getFormData(deForms)
|
}
|
}
|
})
|
|
if (action.subButton && action.subButton.resetForms) {
|
MKEmitter.addListener('resetForms', this.resetForms)
|
}
|
MKEmitter.addListener('resetFocus', this.resetFocus)
|
}
|
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
MKEmitter.removeListener('resetForms', this.resetForms)
|
MKEmitter.removeListener('resetFocus', this.resetFocus)
|
}
|
|
resetFocus = (id, field) => {
|
const { action } = this.props
|
|
if (id !== action.uuid) 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) => {
|
const { action } = this.props
|
const { focusId, reFocusId } = this.state
|
|
if (id !== action.uuid) return
|
|
let formlist = fromJS(this.state.formlist).toJS()
|
let resetForms = action.subButton.resetForms || []
|
|
formlist = formlist.map(item => {
|
if (item.type !== 'text' && item.type !== 'number') return item
|
|
if (resetForms.includes(item.field)) {
|
let key = item.field.toLowerCase()
|
if (typeof(data[key]) !== 'undefined') {
|
item.initval = data[key]
|
this.record[item.field] = data[key]
|
} else {
|
item.initval = item.orgval
|
this.record[item.field] = item.orgval
|
}
|
}
|
|
return item
|
})
|
|
let _list = fromJS(formlist).toJS().map(item => {
|
if (item.type !== 'text' && item.type !== 'number') return item
|
|
if (resetForms.includes(item.field) && !item.hidden) {
|
item.hidden = true
|
}
|
|
return item
|
})
|
|
this.setState({
|
formlist: _list
|
}, () => {
|
this.setState({
|
formlist
|
})
|
})
|
|
if (reFocusId || focusId || this.submitId) {
|
setTimeout(() => {
|
MKEmitter.emit('mkFC', 'focus', this.submitId || reFocusId || focusId)
|
}, 20)
|
}
|
}
|
|
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)
|
}
|
}
|
|
/**
|
* @description 获取下拉表单选项信息
|
*/
|
improveActionForm = (deForms) => {
|
const { BID, action } = this.props
|
|
let deffers = []
|
let mainItems = [] // 云端或单点数据
|
let localItems = [] // 本地数据
|
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
|
|
deForms.forEach(item => {
|
if (item.database === 'sso' && (window.GLOB.mkHS || window.GLOB.systemType === 'production')) {
|
let sql = _sso + item.base_sql
|
_sso = ''
|
|
sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
|
sql = sql.replace(/@BID@/ig, `'${BID}'`)
|
|
if (window.GLOB.debugger === true) {
|
console.info(sql)
|
}
|
|
sql = sql.replace(/%/ig, ' mpercent ')
|
|
mainItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${window.btoa(window.encodeURIComponent(sql))}' as LText`)
|
} else {
|
let sql = _sql + item.base_sql
|
_sql = ''
|
|
sql = sql.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
|
sql = sql.replace(/@BID@/ig, `'${BID}'`)
|
|
if (window.GLOB.debugger === true) {
|
console.info(sql)
|
}
|
|
sql = sql.replace(/%/ig, ' mpercent ')
|
|
localItems.push(`select '${item.field}' as obj_name,'${item.arr_field}' as arr_field,'${window.btoa(window.encodeURIComponent(sql))}' as LText`)
|
}
|
})
|
|
// 本地请求
|
let param = {
|
func: 'sPC_Get_SelectedList',
|
LText: localItems.join(' union all '),
|
obj_name: '',
|
arr_field: '',
|
table_type: 'Y'
|
}
|
|
if (param.LText) {
|
if (window.GLOB.execType === 'x') {
|
param.exec_type = 'x'
|
}
|
|
param.LText = Utils.formatOptions(param.LText, param.exec_type)
|
param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
param.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : param.LText, param.timestamp)
|
|
if (window.GLOB.mkHS) { // 云端数据验证
|
param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
|
}
|
|
deffers.push(
|
new Promise(resolve => {
|
Api.getSystemCacheConfig(param, cache).then(res => {
|
if (!res.status) {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
skip = true
|
}
|
resolve(res)
|
})
|
})
|
)
|
}
|
|
// 系统请求
|
let mainparam = {
|
func: 'sPC_Get_SelectedList',
|
LText: mainItems.join(' union all '),
|
obj_name: '',
|
arr_field: '',
|
table_type: 'Y'
|
}
|
|
if (mainparam.LText) {
|
if (window.GLOB.execType === 'x') {
|
mainparam.exec_type = 'x'
|
}
|
|
mainparam.LText = Utils.formatOptions(mainparam.LText, mainparam.exec_type)
|
mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
mainparam.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : 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)
|
}
|
|
deffers.push(
|
new Promise(resolve => {
|
Api.getSystemCacheConfig(mainparam, 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 测试系统获取下拉表单选项信息
|
*/
|
improveSimpleActionForm = (deForms) => {
|
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 = {
|
func: 'sPC_Get_SelectedList',
|
LText: _sql + form.base_sql,
|
obj_name: form.field,
|
arr_field: form.arr_field
|
}
|
|
param.LText = param.LText.replace(/@ID@/ig, `'${this.state.ID || ''}'`)
|
param.LText = param.LText.replace(/@BID@/ig, `'${this.props.BID || ''}'`)
|
|
if (window.GLOB.debugger) {
|
console.info(param.LText)
|
}
|
|
if (window.GLOB.execType === 'x') {
|
param.exec_type = 'x'
|
}
|
|
param.LText = Utils.formatOptions(param.LText, param.exec_type)
|
param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
|
param.secretkey = Utils.encrypt(window.GLOB.execType === 'x' ? '' : param.LText, param.timestamp)
|
|
if (form.database === 'sso' && window.GLOB.mainSystemApi && (window.GLOB.mkHS || window.GLOB.systemType === 'production')) {
|
param.rduri = window.GLOB.mainSystemApi
|
}
|
if (window.GLOB.mkHS) { // 云端数据验证
|
param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
|
}
|
|
return (
|
new Promise(resolve => {
|
setTimeout(() => {
|
Api.getSystemCacheConfig(param, cache).then(res => {
|
if (!res.status) {
|
notification.warning({
|
top: 92,
|
message: res.message,
|
duration: 5
|
})
|
skip = true
|
}
|
resolve(res)
|
})
|
}, index * 30)
|
})
|
)
|
})
|
|
Promise.all(deffers).then(response => {
|
let result = {}
|
|
response.forEach(res => {
|
result = {...result, ...res}
|
})
|
|
delete result.ErrCode
|
delete result.ErrMesg
|
delete result.message
|
delete result.status
|
|
this.resetFormList(result, skip)
|
})
|
}
|
|
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) {
|
let options = []
|
let map = new Map()
|
let all = false
|
result[item.field].forEach(cell => {
|
let _cell = { key: Utils.getuuid() , ParentID: ''}
|
|
if (item.linkField && cell[item.linkField] !== undefined) {
|
_cell.ParentID = cell[item.linkField]
|
}
|
|
if (item.type !== 'checkcard') {
|
_cell.value = cell[item.valueField]
|
_cell.label = cell[item.valueText] + ''
|
if (map.has(_cell.ParentID + _cell.value)) return
|
if (!_cell.label) {
|
if (!all) {
|
_cell.label = '全部'
|
all = true
|
} else {
|
return
|
}
|
}
|
|
map.set(_cell.ParentID + _cell.value, 0)
|
} else {
|
_cell.$value = cell[item.cardValField]
|
_cell = {..._cell, ...cell}
|
|
if (item.urlField) {
|
_cell.$url = cell[item.urlField] || ''
|
} else if (item.colorField) {
|
_cell.$color = cell[item.colorField] || ''
|
}
|
|
if (map.has(_cell.ParentID + _cell.$value)) return
|
|
map.set(_cell.ParentID + _cell.$value, 0)
|
}
|
|
if (item.subFields) {
|
item.subFields.forEach(m => {
|
_cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
|
})
|
}
|
|
if (item.disableField && cell[item.disableField] && /^true$/ig.test(cell[item.disableField])) {
|
_cell.$disabled = true
|
}
|
|
options.push(_cell)
|
})
|
|
item.oriOptions = [...item.oriOptions, ...options]
|
|
// if (item.type === 'link') {
|
if (item.linkField) {
|
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
|
}
|
|
if (['select', 'link', 'radio'].includes(item.type) && item.$first) { // 选中第一项
|
item.initval = item.options[0] ? item.options[0].value : ''
|
this.record[item.field] = item.initval
|
}
|
|
if (item.subFields && item.options.length > 0) {
|
let initval = item.initval
|
if (item.type === 'cascader' && item.separator) {
|
initval = initval.split(item.separator).pop()
|
}
|
// eslint-disable-next-line
|
let option = item.options.filter(cell => initval == cell.value)[0]
|
|
if (option) {
|
reFieldsVal = reFieldsVal || {}
|
item.subFields.forEach(n => {
|
reFieldsVal[n.field] = option[n.field]
|
})
|
}
|
}
|
|
if (item.empty === 'hidden' && item.oriOptions.length > 0 && !item.$hidden) {
|
item.hidden = false
|
}
|
if (item.type === 'checkcard' && item.readonly && item.unchecked === 'hidden') {
|
let selectKeys = item.initval
|
if (item.multiple === 'true') {
|
selectKeys = selectKeys ? selectKeys.split(',') : []
|
item.options = item.options.filter(item => selectKeys.includes(item.$value))
|
} else {
|
item.options = item.options.filter(item => selectKeys === item.$value)
|
}
|
item.oriOptions = fromJS(item.options).toJS()
|
if (item.options.length === 0) {
|
item.hidden = true
|
} else {
|
item.hidden = false
|
}
|
}
|
}
|
|
return item
|
})
|
|
if (reFieldsVal) {
|
_formlist = _formlist.map((cell, i) => {
|
if (reFieldsVal[cell.field] === undefined) return cell
|
|
cell.initval = reFieldsVal[cell.field]
|
this.record[cell.field] = reFieldsVal[cell.field]
|
|
setTimeout(() => {
|
MKEmitter.emit('mkFC', 'input', cell.uuid, reFieldsVal[cell.field])
|
}, i * 5)
|
|
return cell
|
})
|
}
|
|
this.setState({
|
formlist: _formlist
|
})
|
}
|
|
recordChange = (values, item) => {
|
this.record = {...this.record, ...values}
|
|
if (!item || !item.controlFields) return
|
|
let map = new Map()
|
this.state.formlist.forEach(cell => {
|
if (!cell.field) return
|
map.set(cell.field, cell)
|
})
|
|
let reset = (current) => {
|
let val = this.record[current.field]
|
|
current.controlFields.forEach(cell => {
|
let m = map.get(cell.field)
|
|
m.hidden = false
|
|
if (current.hidden) {
|
m.hidden = true
|
} else {
|
let box = [...cell.values]
|
if (current.type === 'multiselect' || (current.type === 'checkcard' && current.multiple === 'true')) {
|
box.push(...val.split(','))
|
} else {
|
box.push(val)
|
}
|
|
if (box.length === Array.from(new Set(box)).length) {
|
m.hidden = true
|
}
|
}
|
|
if (m.empty === 'hidden' && m.oriOptions.length === 0) {
|
m.hidden = true
|
}
|
|
if (m.hidden) {
|
m.initval = this.record[m.field]
|
}
|
|
map.set(cell.field, m)
|
|
if (m.controlFields) {
|
reset(m)
|
}
|
})
|
}
|
|
reset(item)
|
|
this.setState({
|
formlist: this.state.formlist.map(cell => {
|
if (cell.field) {
|
return map.get(cell.field)
|
}
|
return cell
|
})
|
})
|
}
|
|
getFields() {
|
const { getFieldDecorator } = this.props.form
|
const { formlist } = this.state
|
|
const fields = []
|
|
formlist.forEach((item, index) => {
|
if (item.hidden) return
|
|
if (item.type === 'split') {
|
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}>
|
<Form.Item className="hint" colon={false} label={item.label ? <span className="mk-form-label" style={item.style}>{item.label}</span> : ' '} labelCol={item.labelCol} wrapperCol={item.wrapperCol}>
|
<div className="message" style={item.style}>{item.message}</div>
|
</Form.Item>
|
</Col>
|
)
|
} else if (item.type === 'formula') {
|
fields.push(
|
<Col span={item.span || 24} key={index}>
|
<Form.Item className="hint" colon={false} label={<span className="mk-form-label" style={item.style}>{item.label}</span>} labelCol={item.labelCol} wrapperCol={item.wrapperCol}>
|
<MkFormula config={item} data={this.record}></MkFormula>
|
</Form.Item>
|
</Col>
|
)
|
} else {
|
let content = null
|
let className = ''
|
let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined style={{color: '#c49f47', marginRight: '3px'}}/>
|
<span className="mk-form-label" style={item.style}>{item.label}</span>
|
</Tooltip> : <span className="mk-form-label" style={item.style}>{item.label}</span>
|
|
if (item.type === 'text' || item.type === 'linkMain') {
|
content = (<MKInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
|
} else if (item.type === 'number') {
|
content = (<MKNumberInput config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit} />)
|
} else if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') {
|
content = (<MKSelect config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit} />)
|
} else if (item.type === 'popSelect') {
|
content = (<MKPopSelect config={item} BID={this.props.BID} ID={this.state.ID} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit} />)
|
} else if (item.type === 'cascader') {
|
content = (<MkCascader config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
|
} else if (item.type === 'color') {
|
content = (<MKColor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
|
} else if (item.type === 'checkcard') {
|
className = 'checkcard'
|
content = (<MKCheckCard config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
|
} else if (item.type === 'switch') {
|
content = (<MKSwitch config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)} onSubmit={this.props.inputSubmit}/>)
|
} else if (item.type === 'check') {
|
content = (<MKCheck config={item} onChange={(val) => this.recordChange({[item.field]: val}, item)} onSubmit={this.props.inputSubmit}/>)
|
} else if (item.type === 'checkbox') {
|
content = (<MKCheckbox config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
|
} 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})} onSubmit={this.props.inputSubmit}/>)
|
} else if (item.type === 'fileupload') {
|
className = item.readonly ? 'readonly' : ''
|
className += item.fileType === 'picture-card' ? ' file-upload' : ''
|
content = (<MKFileUpload config={item} data={this.record} 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') {
|
content = (<Rate count={item.rateCount} disabled={item.readonly} style={{color: item.color || '#fadb14'}} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>)
|
} else if (item.type === 'vercode') {
|
content = (<MkVercode config={item} record={this.record} onSend={(send_type, timestamp, n_id) => this.setState({send_type, timestamp, n_id})} onChange={(val) => this.recordChange({[item.field]: val})} onSubmit={this.props.inputSubmit}/>)
|
} else if (item.type === 'brafteditor') {
|
content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
|
label = item.hidelabel !== 'true' ? label : ''
|
}
|
|
if (!content) return
|
|
fields.push(
|
<Col span={item.span || 24} key={index}>
|
<Form.Item
|
label={label}
|
colon={false}
|
className={className}
|
extra={item.extra || null}
|
labelCol={item.labelCol}
|
wrapperCol={item.wrapperCol}
|
>
|
{getFieldDecorator(item.field, {
|
initialValue: item.initval,
|
rules: item.rules
|
})(content)}
|
</Form.Item>
|
</Col>
|
)
|
}
|
})
|
|
return fields
|
}
|
|
handleConfirm = (formId) => {
|
const { formlist, send_type, timestamp, n_id } = this.state
|
|
// 表单提交时检查输入值是否正确
|
return new Promise((resolve, reject) => {
|
this.props.form.validateFieldsAndScroll((err, values) => {
|
if (err) {
|
reject(err)
|
return
|
}
|
let forms = []
|
let record = {...this.record, ...values}
|
|
formlist.forEach(item => {
|
if (!item.field || ['hint', 'split', 'formula'].includes(item.type)) return
|
|
let _item = {
|
type: item.type,
|
readin: item.readin,
|
writein: item.writein,
|
fieldlen: item.fieldlength,
|
key: item.field,
|
isconst: item.constant === 'true'
|
}
|
|
_item.value = record[item.field] !== undefined ? record[item.field] : ''
|
|
if (item.type === 'funcvar') {
|
_item.value = ''
|
} else if (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, '') // 去除制表符
|
|
if (item.interception !== 'false') { // 去除首尾空格
|
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 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)
|
}
|
}
|
} 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 === 'vercode') {
|
_item.type = 'text'
|
forms.push({
|
type: 'text',
|
readin: false,
|
writein: false,
|
fieldlen: 50,
|
key: 'mk_timestamp',
|
value: timestamp || ''
|
})
|
|
forms.push({
|
type: 'text',
|
readin: false,
|
writein: false,
|
fieldlen: 50,
|
key: 'mk_send_type',
|
value: send_type || ''
|
})
|
|
forms.push({
|
type: 'text',
|
readin: false,
|
writein: false,
|
fieldlen: 50,
|
key: 'mk_n_id',
|
value: n_id || ''
|
})
|
}
|
|
forms.push(_item)
|
})
|
|
this.submitId = formId || ''
|
|
resolve(forms)
|
})
|
})
|
}
|
|
render() {
|
const { action } = this.props
|
|
let _align = 'left_right'
|
if (action.setting && action.setting.align) {
|
_align = action.setting.align
|
}
|
let space = ' space-normal'
|
if (action.setting && action.setting.verticalSpace) {
|
space = ' space-' + action.setting.verticalSpace
|
}
|
|
return (
|
<Form className={'main-form-field ' + _align + space}>
|
<Row gutter={24}>{this.getFields()}</Row>
|
</Form>
|
)
|
}
|
}
|
|
export default Form.create()(MutilFormComponent)
|