From 432b788acf901b0720184b8ee8bc81a2e6fa47e0 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 28 九月 2021 18:22:02 +0800 Subject: [PATCH] 2021-09-28 --- src/tabviews/zshare/mutilform/index.jsx | 1630 ++++++++++++++++++---------------------------------------- 1 files changed, 508 insertions(+), 1,122 deletions(-) diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx index 7010528..184bddf 100644 --- a/src/tabviews/zshare/mutilform/index.jsx +++ b/src/tabviews/zshare/mutilform/index.jsx @@ -1,7 +1,7 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { fromJS } from 'immutable' -import { Form, Row, Col, Input, InputNumber, Select, DatePicker, notification, Checkbox, Radio, Tooltip, Icon } from 'antd' +import { Form, Row, Col, notification, Tooltip, Icon } from 'antd' import moment from 'moment' import Api from '@/api' @@ -9,17 +9,21 @@ import { formRule } from '@/utils/option.js' import Utils from '@/utils/utils.js' import asyncComponent from '@/utils/asyncComponent' -import asyncSpinComponent from '@/utils/asyncSpinComponent' +import MKEmitter from '@/utils/events.js' +import MKInput from './mkInput' +import MKNumberInput from './mkNumberInput' +import MKSelect from './mkSelect' import './index.scss' -const { MonthPicker } = DatePicker - -const CheckCard = asyncComponent(() => import('./checkCard')) -const CustomSwitch = asyncComponent(() => import('./customSwitch')) -const CustomTextArea = asyncComponent(() => import('./customTextArea')) -const FileUpload = asyncComponent(() => import('../fileupload')) -const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) -const Editor = asyncSpinComponent(() => import('@/components/editor')) +const MKCheckCard = asyncComponent(() => import('./mkCheckCard')) +const MKSwitch = asyncComponent(() => import('./mkSwitch')) +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 MKEditor = asyncComponent(() => import('@/components/editor')) class MainSearch extends Component { static propTpyes = { @@ -33,184 +37,25 @@ } state = { - cols: 2, // 鏄剧ず涓哄灏戝垪 - datatype: null, // 鏁版嵁绫诲瀷 - readtype: null, // 鏄惁鍙 - readin: null, // 琛屾暟鎹槸鍚﹀啓鍏� - writein: null, // 鎵ц鏃舵槸鍚﹀~鍏ラ粯璁ql - fieldlen: null, // 瀛楁闀垮害 formlist: [], // 琛ㄥ崟椤� - intercepts: [], // 鎴彇瀛楁 - record: {} // 璁板綍涓嬫媺琛ㄥ崟鍏宠仈瀛楁锛岀敤浜庢暟鎹啓鍏� } - UNSAFE_componentWillMount () { - let cols = 2 - if (this.props.action.setting && this.props.action.setting.cols) { - cols = parseInt(this.props.action.setting.cols) - if (cols > 4 || cols < 1) { - cols = 2 - } - } - - this.setState({ - cols: cols - }) - } + record = {} componentDidMount () { - const { data, BData } = this.props - let action = fromJS(this.props.action).toJS() - - let datatype = {} - let readtype = {} - let readin = {} - let writein = {} - let fieldlen = {} - let formlist = [] - let intercepts = [] - let _inputfields = [] - - if (action.groups.length > 0) { - action.groups.forEach(group => { - if (group.sublist.length === 0) return - - if (!group.default) { - formlist.push({ - type: 'title', - label: group.label, - uuid: group.uuid - }) - } - - formlist.push(...group.sublist) - }) - } else { - formlist = action.fields - } + const { data, BData, action } = this.props let linkFields = {} // 鍏宠仈鑿滃崟 - let supItemVal = {} // 涓婄骇鑿滃崟鍒濆鍊� + let controlFields = {} // 鎺у埗琛ㄥ崟 let deForms = [] // 闇�瑕佸姩鎬佽幏鍙栦笅鎷夎彍鍗曠殑琛ㄥ崟 - formlist.forEach(item => { - if (item.type === 'text' || item.type === 'number') { // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟 - _inputfields.push(item.field) - } else if (item.type === 'textarea') { - _inputfields.push(item.field) - } else if (item.type === 'link') { - linkFields[item.linkField] = linkFields[item.linkField] || [] - linkFields[item.linkField].push(item.field) - } - if (item.interception === 'true') { // 瀛楃鎴彇瀛楁 - intercepts.push(item.field) - } - }) + let record = {} + let formlist = fromJS(action.fields).toJS() + let fieldMap = new Map() + let check = action.setting.formType === 'check' - formlist = formlist.map(item => { - if (item.type === 'title') return item - - // 鏁版嵁鑷姩濉厖 - let _readin = item.readin !== 'false' - if (item.type === 'linkMain' || item.type === 'funcvar') { - _readin = false - } - - let _fieldlen = item.fieldlength || 50 - if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect' || item.type === 'brafteditor') { - _fieldlen = item.fieldlength || 512 - } else if (item.type === 'number') { - _fieldlen = item.decimal ? item.decimal : 0 - item.initval = item.initval || 0 - } - - datatype[item.field] = item.type - readtype[item.field] = item.readonly === 'true' - readin[item.field] = _readin - writein[item.field] = item.writein !== 'false' - fieldlen[item.field] = _fieldlen - - if (item.setAll === 'true' && (item.type === 'select' || item.type === 'link' || item.type === 'radio')) { // 娣诲姞绌哄�� - item.options.unshift({ - key: Utils.getuuid(), - Value: '', - Text: item.emptyText || '绌�', - ParentID: '' - }) - } - - item.oriOptions = item.options ? fromJS(item.options).toJS() : null // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庤仈鍔ㄨ彍鍗曟帶鍒� - - // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆 - if ((item.type === 'select' || item.type === 'radio') && item.linkSubField && item.linkSubField.length > 0) { - item.linkSubField = item.linkSubField.filter(_item => _inputfields.includes(_item)) - } - if (item.linkSubField && item.linkSubField.length === 0) { - item.linkSubField = null - } - - let newval = '' - - if (item.type === 'linkMain') { - newval = BData && BData[item.field] ? BData[item.field] : '' - } else if (_readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } else if (item.type === 'date') { // 鏃堕棿鎼滅储 - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM-DD') - newval = newval.format('YYYY-MM-DD') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment().subtract(item.initval, 'days') - } else if (!newval) { - newval = null - } - } else if (item.type === 'datemonth') { - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM') - newval = newval.format('YYYY-MM') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment().subtract(item.initval, 'month') - } else if (!newval) { - newval = null - } - } else if (item.type === 'datetime') { - if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { - newval = this.props.data[item.field] - } - if (newval) { - newval = moment(newval, 'YYYY-MM-DD HH:mm:ss') - newval = newval.format('YYYY-MM-DD HH:mm:ss') === 'Invalid date' ? '' : newval - } - if (!newval && item.initval) { - newval = moment(moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00', 'YYYY-MM-DD HH:mm:ss') - } else if (!newval) { - newval = null - } - } - - if (item.type === 'switch' && newval !== '') { // 寮�鍏冲彧鎺ユ敹鍥哄畾鍊� - if (newval !== item.closeVal && newval !== item.openVal) { - newval = '' - } else if (newval === item.openVal) { - newval = true - } else { - newval = false - } - } - - // 璇诲彇琛ㄦ牸鏁版嵁鎴栬鏈夋椂闂寸殑鍒濆鍊� - item.initval = newval !== '' ? newval : item.initval - - // 涓嬫媺琛ㄥ崟锛屽瓨鍦ㄤ笂绾ц彍鍗曟椂锛岀敓鎴愭樉绀哄�煎垪琛紝浼樺厛浠ユ暟瀛楀垽鏂� - if (item.supvalue) { + formlist = formlist.filter(item => { + if (item.supField && item.supvalue) { // 澶氬眰琛ㄥ崟鎺у埗 let supvals = [] item.supvalue.split(',').forEach(val => { supvals.push(val) @@ -218,86 +63,316 @@ supvals.push(+val) } }) - item.supvalue = supvals + controlFields[item.supField] = controlFields[item.supField] || [] + controlFields[item.supField].push({field: item.field, values: supvals}) + } + if (item.type === 'link') { + linkFields[item.linkField] = linkFields[item.linkField] || [] + linkFields[item.linkField].push({field: item.field, uuid: item.uuid}) + } + + if (item.type === 'split' || item.type === 'hint') return true + + if (!item.field || !['text', 'number', 'switch', 'select', 'link', 'linkMain', 'funcvar', 'date', 'datemonth', 'datetime', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false + + // 鏁版嵁鑷姩濉厖 + 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.hidden = item.hidden === 'true' + item.fieldlength = item.fieldlength || 50 + + if (item.type === 'funcvar') { + readin = false + item.readin = false + item.hidden = true + } 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'].includes(item.type)) { + item.options = item.options || [] + item.options = item.options.map(cell => { + cell.value = cell.Value + cell.label = cell.Text + return cell + }) + 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() + } + + let newval = '$empty' + + if (readin && data && data.hasOwnProperty(item.field)) { + newval = data[item.field] + } + if (item.type === 'linkMain') { + newval = BData && BData[item.field] ? BData[item.field] : '$empty' + } else if (item.type === 'date') { // 鏃堕棿鎼滅储 + if (newval !== '$empty') { + newval = moment(newval, 'YYYY-MM-DD').format('YYYY-MM-DD') + newval = newval === 'Invalid date' ? '$empty' : newval + } + if (newval === '$empty' && item.initval) { + newval = moment().subtract(item.initval, '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 === 'datetime') { + if (newval !== '$empty') { + newval = moment(newval, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss') + newval = newval === 'Invalid date' ? '$empty' : newval + } + if (newval === '$empty' && item.initval) { + newval = moment().subtract(item.initval, 'days').format('YYYY-MM-DD') + ' 00:00:00' + } + } else if (item.type === 'switch') { // 寮�鍏冲彧鎺ユ敹鍥哄畾鍊� + if (newval !== '$empty' && (newval === item.closeVal || newval === item.openVal)) { + + } else if (item.initval === true) { + newval = item.openVal + } else { + newval = item.closeVal + } + } + + if (newval !== '$empty') { + item.initval = newval + } else if (item.initval === undefined) { + item.initval = '' + } + + if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type) && item.resourceType === '1') { + deForms.push(item) + } + + if (item.type === 'text') { + if (typeof(item.initval) === 'number') { + item.initval = item.initval + '' + } + let _rules = [{ + pattern: /^[^']*$/ig, + message: formRule.input.quotemsg + }, { + required: item.required === 'true', + message: item.label + '涓嶅彲涓虹┖!' + }, { + max: item.fieldlength, + message: formRule.input.formMessage.replace('@max', item.fieldlength) + }] + + if (item.regular) { + if (item.regular === 'number') { + _rules.push({ + pattern: /^[0-9.-]*$/ig, + message: formRule.input.numbermsg + }) + } else if (item.regular === 'letter') { + _rules.push({ + pattern: /^[a-zA-Z]*$/ig, + message: formRule.input.lettermsg + }) + } else if (item.regular === 'letter&number') { + _rules.push({ + pattern: /^[a-zA-Z0-9]*$/ig, + message: formRule.input.letternummsg + }) + } else if (item.regular === 'phone') { + _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}$/ig, + message: '璇锋纭緭鍏ユ墜鏈哄彿' + }) + } else if (item.regular === 'funcname') { + _rules.push({ + pattern: /^[\u4E00-\u9FA50-9a-zA-Z_]*$/ig, + message: formRule.input.funcname + }) + } + } + + item.rules = _rules + } else if (item.type === 'number') { + item.rules = [{ + required: true, + message: item.label + '涓嶅彲涓虹┖!' + }, { + validator: (rule, value, callback) => this.handleConfirmPassword(rule, value, callback, item) + }] + } else if (item.type === 'textarea') { + let _rules = [ + { + required: item.required === 'true', + message: item.label + '涓嶅彲涓虹┖!' + }, + { + max: item.fieldlength, + message: formRule.input.formMessage.replace('@max', item.fieldlength) + } + ] + if (item.encryption !== 'true') { + _rules.push({ + pattern: /^[^']*$/ig, + message: formRule.input.quotemsg + }) + } + item.rules = _rules + } else if (item.type === 'brafteditor') { + item.rules = [ + { + required: item.required === 'true', + message: item.label + '涓嶅彲涓虹┖!' + }, + { + max: item.fieldlength, + message: formRule.input.formMessage.replace('@max', item.fieldlength) + } + ] + } else if (item.type === 'linkMain') { + item.rules = [ + { + required: item.required === 'true', + message: item.label + '涓嶅彲涓虹┖!' + } + ] + } else { + item.rules = [ + { + required: item.required === 'true', + message: '璇烽�夋嫨' + item.label + '!' + } + ] + } + + 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) + + if (cell.hidden) return + + if (supItem.hidden || !item.values.includes(supItem.initval)) { + cell.hidden = true + fieldMap.set(item.field, cell) + } + + fields.push(item) + }) + + supItem.controlFields = fields + + fieldMap.set(key, supItem) + }) + + 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)) return cell + let item = fieldMap.get(cell.field) + + if (item.type === 'link') { + item.supInitVal = '' + + if (fieldMap.has(item.linkField)) { + item.supInitVal = fieldMap.get(item.linkField).initval || '' + } else if (data && data.hasOwnProperty(item.linkField)) { + item.supInitVal = data[item.linkField] + } + + item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '') + } + + if (['select', 'link', 'radio'].includes(item.type) && item.resourceType !== '1') { // 閫変腑绗竴椤� + if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { + item.initval = item.options[0] ? item.options[0].value : '' + } + } + + if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { + record[item.field] = '' + } else { + record[item.field] = item.initval } if (linkFields[item.field]) { item.linkFields = linkFields[item.field] } - supItemVal[item.field] = item.initval - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && item.resourceType === '1') { - deForms.push(item) - } else if (['select', 'link', 'radio'].includes(item.type) && item.resourceType !== '1') { // 閫変腑绗竴椤� - if (typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { - item.initval = item.options[0] ? item.options[0].Value : '' - } - } - - return item - }) - - formlist = formlist.map(item => { - if (item.type === 'link') { - item.supInitVal = '' - - if (supItemVal[item.linkField]) { - item.supInitVal = supItemVal[item.linkField] - } else if (data && data.hasOwnProperty(item.linkField)) { - item.supInitVal = data[item.linkField] - } - - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') - } - return item - }) - - this.setState({ - readin, - writein, - readtype, - datatype, - fieldlen, - intercepts, - formlist - }, () => { - if (action.setting && action.setting.focus) { - this.selectInput(action.setting.focus, 'init') - } - // 鐢ㄦ潵鏇存柊state锛岄槻姝㈠彈鎺ц〃鍗曞垵濮嬫椂涓嶆樉绀� - this.setState({ - loaded: true - }) - this.improveActionForm(deForms) - }) - } - - selectInput = (selectId, type) => { - try { - let _form = document.getElementById('main-form-box') - let _inputs = _form.getElementsByTagName('input') - _inputs = [..._inputs] - _inputs.forEach(input => { - if (!input || input.id !== selectId) return - - if (input.className === 'ant-select-search__field' && type !== 'init') { - let div = input.parentNode - while (div && div.parentNode) { - div = div.parentNode - if (div.id === selectId) { - div && div.click && div.click() - div = null - } + // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆 + if ((['select', 'radio', 'link'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true')) && 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 + }) } - } else if (input.select) { - input.select() - } else if (input.focus) { - input.focus() + }) + + if (item.subFields.length === 0) { + item.subFields = null } - }) - } catch { - console.warn('focus error锛�') - } + item.linkSubField = null + } + + if (item.enter === 'tab' || item.enter === 'sub') { + if (fieldMap.has(item.tabField)) { + item.tabUuid = fieldMap.get(item.tabField).uuid + } else { + item.tabUuid = item.uuid + } + } + + return item + }) + + this.record = record + + this.setState({ formlist }, () => { + if (action.setting && action.setting.focus && fieldMap.has(action.setting.focus)) { + setTimeout(() => { + MKEmitter.emit('mkFC', 'focus', fieldMap.get(action.setting.focus).uuid) + }, 500) + } + + if (deForms.length > 0) { + if (this.props.menuType !== 'HS' && options.sysType === 'local' && window.GLOB.systemType !== 'production') { + this.improveSimpleActionForm(deForms) + } else { + this.improveActionForm(deForms) + } + } + }) } /** @@ -305,14 +380,6 @@ */ improveActionForm = (deForms) => { const { BID, menuType } = this.props - const { formlist } = this.state - - if (deForms.length === 0) { - return - } else if (menuType !== 'HS' && options.sysType === 'local' && !window.GLOB.systemType) { - this.improveSimpleActionForm(deForms) - return - } let deffers = [] let mainItems = [] // 浜戠鎴栧崟鐐规暟鎹� @@ -326,7 +393,7 @@ } }) - if (menuType !== 'HS' && window.GLOB.systemType !== 'production') { + if (menuType !== 'HS' && options.sysType !== 'local') { localItems = [...localItems, ...mainItems] mainItems = [] } @@ -337,11 +404,8 @@ LText: localItems.join(' union all '), obj_name: '', arr_field: '', - table_type: 'Y' - } - - if (BID) { - param.BID = BID + table_type: 'Y', + BID: BID || '' } if (param.LText) { @@ -375,11 +439,8 @@ LText: mainItems.join(' union all '), obj_name: '', arr_field: '', - table_type: 'Y' - } - - if (BID) { - mainparam.BID = BID + table_type: 'Y', + BID: BID || '' } if (mainparam.LText) { @@ -422,62 +483,7 @@ delete result.message delete result.status - let _formlist = formlist.map(item => { - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) { - let options = [] - result[item.field].forEach(cell => { - let _cell = { key: Utils.getuuid() } - - if (item.type !== 'checkcard') { - _cell.Value = cell[item.valueField] - _cell.Text = cell[item.valueText] - if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return - } else { - _cell.$value = cell[item.valueField] - _cell = {..._cell, ...cell} - if (!_cell.$value && _cell.$value !== 0) return - } - - if (item.type === 'link') { - _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] - } else if (item.linkSubField) { - item.linkSubField.forEach(_field => { - _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : '' - }) - } - - options.push(_cell) - }) - - item.oriOptions = [...item.oriOptions, ...options] - } - return item - }) - let values = [] - - this.setState({ - formlist: _formlist.map(item => { - if (item.type === 'link') { - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') - } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) { - item.options = item.oriOptions - } - if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤� - item.initval = item.options[0] ? item.options[0].Value : '' - values.push({field: item.field, value: item.initval}) - } - return item - }) - }, () => { - if (values.length === 0) return - let fieldsvalue = {} - values.forEach(item => { - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.value - } - }) - this.props.form.setFieldsValue(fieldsvalue) - }) + this.resetFormList(result) }) } @@ -485,18 +491,13 @@ * @description 娴嬭瘯绯荤粺鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅 */ improveSimpleActionForm = (deForms) => { - const { formlist } = this.state - let deffers = deForms.map(form => { let param = { func: 'sPC_Get_SelectedList', LText: form.data_sql, obj_name: form.field, - arr_field: form.arr_field - } - - if (this.props.BID) { - param.BID = this.props.BID + arr_field: form.arr_field, + BID: this.props.BID || '' } param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') @@ -529,152 +530,61 @@ delete result.message delete result.status - let _formlist = formlist.map(item => { - if (['select', 'link', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) { - let options = [] - result[item.field].forEach(cell => { - let _cell = { key: Utils.getuuid() } - - if (item.type !== 'checkcard') { - _cell.Value = cell[item.valueField] - _cell.Text = cell[item.valueText] - if ((!_cell.Value && _cell.Value !== 0) || (!_cell.Text && _cell.Text !== 0)) return - } else { - _cell.$value = cell[item.valueField] - _cell = {..._cell, ...cell} - if (!_cell.$value && _cell.$value !== 0) return - } - - if (item.type === 'link') { - _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] - } else if (item.linkSubField) { - item.linkSubField.forEach(_field => { - _cell[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : '' - }) - } - - options.push(_cell) - }) - - item.oriOptions = [...item.oriOptions, ...options] - } - return item - }) - let values = [] - - this.setState({ - formlist: _formlist.map(item => { - if (item.type === 'link') { - item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.Value === '') - } else if (['select', 'multiselect', 'radio', 'checkbox', 'checkcard'].includes(item.type)) { - item.options = item.oriOptions - } - if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤� - item.initval = item.options[0] ? item.options[0].Value : '' - values.push({field: item.field, value: item.initval}) - } - return item - }) - }, () => { - if (values.length === 0) return - let fieldsvalue = {} - values.forEach(item => { - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.value - } - }) - this.props.form.setFieldsValue(fieldsvalue) - }) + this.resetFormList(result) }) } - resetform = (formlist, supfields, index, fieldsvalue) => { - index++ - let subfields = [] + resetFormList = (result) => { + let _formlist = fromJS(this.state.formlist).toJS().map(item => { + if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type) && result[item.field] && result[item.field].length > 0) { + let options = [] + result[item.field].forEach(cell => { + let _cell = { key: Utils.getuuid() } - supfields.forEach(supfield => { - formlist = formlist.map(item => { - if (item.type === 'link' && item.linkField === supfield.field) { - - item.options = item.oriOptions.filter(option => option.ParentID === supfield.initval || option.Value === '') - item.initval = item.options[0] ? item.options[0].Value : '' - - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.initval + if (item.type !== 'checkcard') { + _cell.value = cell[item.valueField] + _cell.label = cell[item.valueText] + if (!_cell.label && _cell.label !== 0) return + } else { + _cell.$value = cell[item.cardValField] + _cell = {..._cell, ...cell} } - subfields.push(item) + if (item.type === 'link') { + _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] + } + 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') { + item.options = item.oriOptions.filter(option => option.ParentID === item.supInitVal || option.value === '') + } else if (['select', 'radio', 'checkbox', 'checkcard', 'multiselect'].includes(item.type)) { + item.options = item.oriOptions } - return item - }) - }) - - if (subfields.length === 0 || index > 6) { - return {formlist: formlist, fieldsvalue: fieldsvalue} - } else { - return this.resetform(formlist, subfields, index, fieldsvalue) - } - } - - selectChange = (_field, value) => { - const { record } = this.state - let formlist = fromJS(this.state.formlist).toJS() - let subfields = [] - let fieldsvalue = {} - let _record = {} - - formlist = formlist.map(item => { - if (item.type === 'link' && item.linkField === _field.field) { - item.options = item.oriOptions.filter(option => option.ParentID === value || option.Value === '') - item.initval = item.options[0] ? item.options[0].Value : '' - - if (this.props.form.getFieldValue(item.field) !== undefined) { - fieldsvalue[item.field] = item.initval - } - - subfields.push(item) } + + if (['select', 'link', 'radio'].includes(item.type) && typeof(item.initval) === 'string' && item.initval.indexOf('$first') > -1) { // 閫変腑绗竴椤� + item.initval = item.options[0] ? item.options[0].value : '' + this.record[item.field] = item.initval + } + return item }) - - // 琛ㄥ崟鍒囨崲鏃讹紝鏇存柊鍏宠仈瀛楁 - if (_field.linkSubField) { - let _data = _field.options.filter(op => op.Value === value)[0] - if (_data) { - _field.linkSubField.forEach(subfield => { - if (this.props.form.getFieldValue(subfield) !== undefined) { - fieldsvalue[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : '' - } else { - _record[subfield] = (_data[subfield] || _data[subfield] === 0) ? _data[subfield] : '' - } - }) - } - } - - if (subfields.length === 0) { - this.props.form.setFieldsValue(fieldsvalue) - this.setState({ - record: {...record, ..._record} - }) - } else { - let result = this.resetform(formlist, subfields, 0, fieldsvalue) - - this.props.form.setFieldsValue(fieldsvalue) - this.setState({ - formlist: result.formlist, - record: {...record, ..._record} - }) - } - - this.setState({}, () => { - if (!_field.enter || _field.enter === 'false') return - - if (_field.enter === 'tab') { - this.selectInput(_field.tabField) - } else if (_field.enter === 'sub') { - this.handleSubmit() - } + this.setState({ + formlist: _formlist }) } @@ -691,533 +601,121 @@ callback() } - handleChange = (e, item) => { - let val = e.target.value + recordChange = (values, item) => { + this.record = {...this.record, ...values} - if (item.enter === 'false') return - if (!val || !/\n/ig.test(val)) return - if (item.enter === 'tab') { - this.selectInput(item.tabField) - } else { - this.handleSubmit(e) - this.selectInput(item.tabField || item.field) - } - } + if (item && item.controlFields) { + let map = new Map() + this.state.formlist.forEach(cell => { + if (!cell.field) return + map.set(cell.field, cell) + }) - handleInputSubmit = (e, item) => { - if (item.enter === 'false') return - if (item.enter === 'tab') { - this.selectInput(item.tabField) - } else { - this.handleSubmit(e) - this.selectInput(item.tabField || item.field) + let reset = (current) => { + let val = this.record[current.field] + + current.controlFields.forEach(cell => { + let m = map.get(cell.field) + m.hidden = current.hidden || !cell.values.includes(val) + + 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 { cols, formlist } = this.state + const { formlist } = this.state const fields = [] - let filtration = {} formlist.forEach((item, index) => { - if ((!item.field && item.type !== 'title' && item.type !== 'hint') || item.hidden === 'true' || item.type === 'funcvar') return - if (item.supField) { // 澶氬眰琛ㄥ崟鎺у埗 - let _supVal = this.props.form.getFieldValue(item.supField) + if (item.hidden) return - if (_supVal === undefined && filtration[item.supField]) { - _supVal = filtration[item.supField] - } - - if (item.supvalue.includes(_supVal)) { - let _subVal = this.props.form.getFieldValue(item.field) - filtration[item.field] = _subVal === undefined ? item.initval : _subVal - } else { - return - } - } - - let _colspan = 24 / cols - if (item.entireLine === 'true') { - _colspan = 24 - } - - if (item.type === 'title') { + if (item.type === 'split') { fields.push( <Col span={24} key={index}> - <p>{item.label}</p> + <p className="mk-form-split-line">{item.label}</p> </Col> ) } else if (item.type === 'hint') { fields.push( - <Col span={24} key={index}> - <Form.Item colon={!!item.label} label={item.label || ' '} className="hint"> + <Col span={item.span || 24} key={index}> + <Form.Item className="hint" colon={!!item.label} label={item.label} labelCol={item.labelCol} wrapperCol={item.wrapperCol}> <div className="message">{item.message}</div> </Form.Item> </Col> ) - } else if (item.type === 'text') { - let _max = item.fieldlength || 50 - let _rules = [{ - pattern: /^[^']*$/ig, - message: formRule.input.quotemsg - }] - - if (item.regular) { - if (item.regular === 'number') { - _rules = [{ - pattern: /^[0-9.-]*$/ig, - message: formRule.input.numbermsg - }] - } else if (item.regular === 'letter') { - _rules = [{ - pattern: /^[a-zA-Z]*$/ig, - message: formRule.input.lettermsg - }] - } else if (item.regular === 'letter&number') { - _rules = [{ - pattern: /^[a-zA-Z0-9]*$/ig, - message: formRule.input.letternummsg - }] - } else if (item.regular === 'funcname') { - _rules = [{ - pattern: /^[\u4E00-\u9FA50-9a-zA-Z_]*$/ig, - message: formRule.input.funcname - }] - } + } else { + let content = null + let className = '' + let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><Icon type="question-circle" />{item.label}</Tooltip> : item.label + + 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 === '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) => this.recordChange({[item.field]: val})}/>) + } 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) => this.recordChange({[item.field]: val}, item)}/>) + } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') { + content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} />) + } 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})} />) + } else if (item.type === 'textarea') { + content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>) + } else if (item.type === 'brafteditor') { + content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) + label = item.hidelabel !== 'true' ? label : '' } - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval + '', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - }, - ..._rules - ] - })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onChange={(e) => this.handleChange(e, item)} onPressEnter={(e) => this.handleInputSubmit(e, item)} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'number') { // 鏁板瓧 - let precision = (item.decimal || item.decimal === 0) ? item.decimal : null + if (!content) return fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> + <Col span={item.span || 24} key={index}> + <Form.Item + label={label} + className={className} + extra={item.extra || null} + labelCol={item.labelCol} + wrapperCol={item.wrapperCol} + > {getFieldDecorator(item.field, { initialValue: item.initval, - rules: [ - { - required: true, - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - validator: (rule, value, callback) => this.handleConfirmPassword(rule, value, callback, item) - } - ] - })( - precision === null ? - <InputNumber disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> : - <InputNumber precision={precision} disabled={item.readonly === 'true'} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'color') { // 棰滆壊閫夋嫨 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval || 'transparent', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <ColorSketch /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'checkcard') { // 澶氶�夋 - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - } className="checkcard"> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })(<CheckCard card={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'switch') { // 澶氶�夋 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })(<CustomSwitch Item={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'checkbox') { // 澶氶�夋 - let _initval = item.initval ? item.initval.split(',').filter(Boolean) : [] - - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: _initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Checkbox.Group disabled={item.readonly === 'true'}> - {item.options.map(option => <Checkbox key={option.key} title={option.Text} value={option.Value}>{option.Text}</Checkbox>)} - </Checkbox.Group> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'radio') { // 鍗曢�夋 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Radio.Group disabled={item.readonly === 'true'} onChange={(e) => {this.selectChange(item, e.target.value)}}> - {item.options.map(option => <Radio key={option.key} value={option.Value}>{option.Text}</Radio>)} - </Radio.Group> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'select' || item.type === 'link') { // 涓嬫媺鎼滅储 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Select - showSearch - allowClear={true} - filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} - onSelect={(value) => {this.selectChange(item, value)}} - disabled={item.readonly === 'true'} - > - {item.options.map(option => - <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> - )} - </Select> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'multiselect') { // 澶氶�� - let _initval = item.initval ? item.initval.split(',').filter(Boolean) : [] - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: _initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <Select - showSearch - mode="multiple" - filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} - disabled={item.readonly === 'true'} - > - {item.options.map(option => - <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> - )} - </Select> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'date') { // 鏃堕棿鎼滅储 - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <DatePicker disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'datemonth') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <MonthPicker disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'datetime') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <DatePicker showTime disabled={item.readonly === 'true'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'fileupload') { - let filelist = this.props.data ? this.props.data[item.field] : item.initval - if (filelist && this.state.readin[item.field]) { - try { - filelist = filelist.split(',').map((url, index) => { - return { - uid: `${index}`, - name: url.slice(url.lastIndexOf('/') + 1), - status: 'done', - url: url, - origin: true - } - }) - } catch { - filelist = [] - } - } else { - filelist = [] - } - - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: filelist, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.select'] + item.label + '!' - } - ] - })( - <FileUpload accept={item.suffix} maxFile={item.maxfile} fileType={item.fileType || 'text'} /> - )} - </Form.Item> - </Col> - ) - } else if (item.type === 'linkMain') { - fields.push( - <Col span={_colspan} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - } - ] - })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'funcvar') { - // 鍑芥暟鍙橀噺瀛楁锛岄粯璁や笉鏄剧ず - } else if (item.type === 'textarea') { - let _max = item.fieldlength || 512 - let _rules = [] - if (item.encryption !== 'true') { - _rules = [{ - pattern: /^[^']*$/ig, - message: formRule.input.quotemsg - }] - } - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.field, { - initialValue: item.initval, - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - }, - ..._rules - ] - })(<CustomTextArea Item={item} />)} - </Form.Item> - </Col> - ) - } else if (item.type === 'brafteditor') { - let _max = item.fieldlength || 512 - - fields.push( - <Col span={24} key={index}> - <Form.Item label={item.hidelabel !== 'true' && item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <Icon type="question-circle" /> - {item.label} - </Tooltip> : (item.hidelabel !== 'true' ? item.label : '') - }> - {getFieldDecorator(item.field, { - initialValue: item.initval || '', - rules: [ - { - required: item.required === 'true', - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: _max, - message: formRule.input.formMessage.replace('@max', _max) - } - ] - })(<Editor Item={item}/>)} + rules: item.rules + })(content)} </Form.Item> </Col> ) @@ -1228,182 +726,70 @@ } handleConfirm = () => { - const { record, intercepts, writein } = this.state - let _format = { - date: 'YYYY-MM-DD', - datemonth: 'YYYY-MM', - datetime: 'YYYY-MM-DD HH:mm:ss' - } + const { formlist } = this.state // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { - if (!err) { - let search = [] - // 闅愯棌琛ㄥ崟 - this.state.formlist.forEach(item => { - if (!item.field) return + if (err) { + reject(err) + return + } + let search = [] + let record = {...this.record, ...values} - let _item = null - if (item.type === 'funcvar') { - _item = { - type: 'funcvar', - readonly: 'true', - readin: false, - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: '' - } - } else if (item.hidden === 'true') { - let _val = item.initval - if (record.hasOwnProperty(item.field)) { - _val = record[item.field] - } - - _item = { - type: this.state.datatype[item.field], - readonly: this.state.readtype[item.field], - readin: this.state.readin[item.field], - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: _val - } - } else if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) { - _item = { - type: this.state.datatype[item.field], - readonly: this.state.readtype[item.field], - readin: this.state.readin[item.field], - writein: writein[item.field], - fieldlen: this.state.fieldlen[item.field], - key: item.field, - value: item.initval - } + formlist.forEach(item => { + if (!item.field) return + + let _item = { + type: item.type, + readonly: item.readonly, + readin: item.readin, + writein: item.writein, + fieldlen: item.fieldlength, + key: item.field + } + + _item.value = record[item.field] !== undefined ? record[item.field] : '' + + if (item.type === 'funcvar') { + _item.value = '' + } else if (_item.value && (item.type === 'text' || item.type === 'textarea' || item.type === 'linkMain')) { + _item.value = _item.value.replace(/\t*|\v*/g, '') // 鍘婚櫎鍒惰〃绗� + + if (item.interception === 'true') { // 鍘婚櫎棣栧熬绌烘牸 + _item.value = _item.value.replace(/(^\s*|\s*$)/g, '') } - - if (!_item) return - - if (_item.value === undefined) { - _item.value = '' - } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') { - if (!_item.value) { - _item.value = '' - } else if (_item.value.format) { - _item.value = _item.value.format(_format[item.type]) - } - } else if (item.type === 'text' && _item.value && typeof(_item.value) === 'string') { // 鐗规畩瀛楁鏇挎崲 + if (item.type === 'text' && typeof(_item.value) === 'string') { // 鐗规畩瀛楁鏇挎崲 _item.value = _item.value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey) _item.value = _item.value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')) _item.value = _item.value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || '')) } - - search.push(_item) - }) - - Object.keys(values).forEach(key => { - if (values[key] === undefined) { // 琛ㄥ崟寮傚父锛燂紵锛� - if (search.filter(s => s.key === key).length === 0) { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - readin: this.state.readin[key], - writein: writein[key], - fieldlen: this.state.fieldlen[key], - key: key, - value: '' - }) - } - return + } else if (item.type.indexOf('date') > -1) { + if (item.declareType === 'nvarchar(50)') { + _item.type = 'text' } + } + + search.push(_item) + }) - let _value = '' - let _type = this.state.datatype[key] - if (_type === 'datetime') { - _value = values[key] ? moment(values[key]).format('YYYY-MM-DD HH:mm:ss') : '' - } else if (_type === 'datemonth') { - _value = values[key] ? moment(values[key]).format('YYYY-MM') : '' - } else if (_type === 'date') { - _value = values[key] ? moment(values[key]).format('YYYY-MM-DD') : '' - } else if (_type === 'number') { - _value = values[key] - - } else if (_type === 'multiselect' || _type === 'checkbox') { - _value = values[key] ? values[key].join(',') : '' - - } else if (_type === 'fileupload') { - let vals = [] - - if (values[key] && values[key].length > 0) { - values[key].forEach(_val => { - if (_val.origin && _val.url) { - vals.push(_val.url) - } else if (!_val.origin && _val.status === 'done' && _val.response) { - vals.push(Utils.getrealurl(_val.response)) - } - }) - } - - _value = vals.join(',') - } else if (_type === 'text' || _type === 'textarea') { - _value = values[key].replace(/\t*|\v*/g, '') // 鍘婚櫎鍒惰〃绗� - - if (intercepts.includes(key)) { // 鍘婚櫎棣栧熬绌烘牸 - _value = _value.replace(/(^\s*|\s*$)/g, '') - } - if (_type === 'text' && _value) { // 鐗规畩瀛楁鏇挎崲 - _value = _value.replace(/^(\s*)@appkey@(\s*)$/ig, window.GLOB.appkey) - _value = _value.replace(/^(\s*)@SessionUid@(\s*)$/ig, (localStorage.getItem('SessionUid') || '')) - _value = _value.replace(/^(\s*)@bid@(\s*)$/ig, (this.props.BID || '')) - } - } else { - _value = values[key] - } - - if (_value === undefined) { - _value = '' - } - - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - readin: this.state.readin[key], - writein: writein[key], - fieldlen: this.state.fieldlen[key], - key: key, - value: _value - }) - }) - - resolve(search) - } else { - reject(err) - } + resolve(search) }) }) } - handleSubmit = (e) => { - e && e.preventDefault() - this.props.inputSubmit() - } - render() { - const { cols } = this.state - const formItemLayout = { - // labelCol: { - // xs: { span: 24 }, - // sm: { span: 8 } - // }, - // wrapperCol: { - // xs: { span: 24 }, - // sm: { span: 16 } - // } + const { action } = this.props + + let _align = 'left_right' + if (action.setting && action.setting.align) { + _align = action.setting.align } return ( - <Form {...formItemLayout} className="ant-advanced-search-form main-form-field" id="main-form-box"> - <Row className={'cols' + cols} gutter={24}>{this.getFields()}</Row> + <Form className={'main-form-field ' + _align}> + <Row gutter={24}>{this.getFields()}</Row> </Form> ) } -- Gitblit v1.8.0