From 063b983daaf51a7f1e8677bde1e9c0e618866c91 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 21 二月 2020 10:30:19 +0800 Subject: [PATCH] 2020-02-21 --- src/tabviews/tableshare/mutilform/index.jsx | 252 ++++++++++++++++++++++++++++--------------------- 1 files changed, 144 insertions(+), 108 deletions(-) diff --git a/src/tabviews/tableshare/mutilform/index.jsx b/src/tabviews/tableshare/mutilform/index.jsx index b56eea3..ea7f0d8 100644 --- a/src/tabviews/tableshare/mutilform/index.jsx +++ b/src/tabviews/tableshare/mutilform/index.jsx @@ -21,17 +21,37 @@ } state = { + cols: 2, datatype: null, readtype: null, - formlist: [] + readin: null, + fieldlen: null, + formlist: [], + 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 > 3 || cols < 1) { + cols = 2 + } + } + + this.setState({ + cols: cols + }) } componentDidMount () { const { data, BData } = this.props let action = JSON.parse(JSON.stringify(this.props.action)) - + let datatype = {} let readtype = {} + let readin = {} + let fieldlen = {} let formlist = [] if (action.groups.length > 0) { action.groups.forEach(group => { @@ -45,24 +65,32 @@ }) } - group.sublist.forEach(item => { - datatype[item.field] = item.type - readtype[item.field] = item.readonly === 'true' - formlist.push(item) - }) + formlist.push(...group.sublist) }) } else { - formlist = action.fields.map(item => { - datatype[item.field] = item.type - readtype[item.field] = item.readonly === 'true' - - return item - }) + formlist = action.fields } let _inputfields = formlist.filter(item => item.type === 'text' || item.type === 'number') // 鐢ㄤ簬杩囨护涓嬫媺鑿滃崟鍏宠仈琛ㄥ崟 formlist = formlist.map(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') { + _fieldlen = item.fieldlength || 512 + } else if (item.type === 'number') { + _fieldlen = item.decimal ? item.decimal : 0 + } + + datatype[item.field] = item.type + readtype[item.field] = item.readonly === 'true' + readin[item.field] = _readin + fieldlen[item.field] = _fieldlen + if (item.type === 'select' || item.type === 'link' || item.type === 'multiselect') { if (item.setAll === 'true') { item.options.unshift({ @@ -83,10 +111,10 @@ item.linkSubField = item.linkSubField.filter(_item => _fields.includes(_item)) } } - + if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) { item.initval = BData[item.field] - } else if (!/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) { + } else if (_readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) { item.initval = this.props.data[item.field] } @@ -94,7 +122,7 @@ }) let error = false - + formlist = formlist.map(item => { if (item.type === 'link') { let supItem = formlist.filter(form => form.field === item.linkField)[0] @@ -116,14 +144,16 @@ if (error) { notification.warning({ top: 92, - message: '鍏宠仈鑿滃崟璁剧疆閿欒锛�', + message: this.props.dict['main.form.link.error'], duration: 10 }) } - + this.setState({ readtype: readtype, datatype: datatype, + readin: readin, + fieldlen: fieldlen, formlist: formlist }, () => { if (action.setting && action.setting.focus) { @@ -136,7 +166,7 @@ input.select() }) } catch { - console.warn('琛ㄥ崟鑾峰彇澶辫触锛�') + console.warn('focus error锛�') } } }) @@ -161,18 +191,19 @@ }) if (subfields.length === 0 || index > 6) { - this.props.form.setFieldsValue(fieldsvalue) - return formlist + return {formlist: formlist, fieldsvalue: fieldsvalue} } else { return this.resetform(formlist, subfields, index, fieldsvalue) } } selectChange = (_field, value, option) => { + const { record } = this.state let formlist = JSON.parse(JSON.stringify(this.state.formlist)) 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) @@ -188,43 +219,48 @@ // 琛ㄥ崟鍒囨崲鏃讹紝鏇存柊鍏宠仈瀛楁 if (_field.type === 'select' && _field.linkSubField && _field.linkSubField.length > 0 && option.props.data) { let _data = option.props.data - let fieldVal = {} _field.linkSubField.forEach(subfield => { - fieldVal[subfield] = _data[subfield] + if (this.props.form.getFieldValue(subfield) !== undefined) { + fieldsvalue[subfield] = _data[subfield] || '' + } else { + _record[subfield] = _data[subfield] || '' + } }) - this.props.form.setFieldsValue(fieldVal) } - if (subfields.length === 0) return + if (subfields.length === 0) { + if (Object.keys(fieldsvalue).length > 0) { + this.props.form.setFieldsValue(fieldsvalue) + } + if (Object.keys(_record).length > 0) { + this.setState({ + record: {...record, ..._record} + }) + } + } else { + let result = this.resetform(formlist, subfields, 0, fieldsvalue) - formlist = this.resetform(formlist, subfields, 0, fieldsvalue) + if (Object.keys(result.fieldsvalue).length > 0) { + this.props.form.setFieldsValue(fieldsvalue) + } - this.setState({ - formlist: formlist - }) + let _param = { + formlist: result.formlist + } + + if (Object.keys(_record).length > 0) { + _param.record = {...record, ..._record} + } + + this.setState(_param) + } } - - // handleInputNumber = (rule, value, callback, item) => { - // if (item.required === 'true' && (!value && value !== 0)) { - // callback(this.props.dict['form.required.input'] + item.label + '!') - // } else if ((item.min || item.min === 0) && (value || value === 0) && value < item.min) { - // callback(item.label + '鏈�灏忓�间负' + item.min + '!') - // } else if ((item.max || item.max === 0) && (value || value === 0) && value > item.max) { - // callback(item.label + '鏈�澶у�间负' + item.max + '!') - // } - // } getFields() { const { getFieldDecorator } = this.props.form + const { cols } = this.state const fields = [] - let cols = 2 - if (this.props.action.setting && this.props.action.setting.cols) { - cols = parseInt(this.props.action.setting.cols) - if (cols > 3 || cols < 1) { - cols = 2 - } - } this.state.formlist.forEach((item, index) => { if ((!item.field && item.type !== 'title') || item.hidden === 'true') return @@ -236,6 +272,26 @@ </Col> ) } else if (item.type === 'text') { + let _max = item.fieldlength || 50 + let _rules = [] + 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 + }] + } + } fields.push( <Col span={24 / cols} key={index}> <Form.Item label={item.label}> @@ -247,9 +303,10 @@ message: this.props.dict['form.required.input'] + item.label + '!' }, { - max: formRule.input.max, - message: formRule.input.message - } + max: _max, + message: formRule.input.formMessage.replace('@max', _max) + }, + ..._rules ] })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onPressEnter={this.handleSubmit} />)} </Form.Item> @@ -268,7 +325,7 @@ initialValue: _initval, rules: [ { - required: item.required === 'true', + required: true, message: this.props.dict['form.required.input'] + item.label + '!' } ] @@ -340,7 +397,7 @@ ) } else if (item.type === 'date') { // 鏃堕棿鎼滅储 let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval) { + if (_initval && this.state.readin[item.field]) { _initval = moment(_initval, 'YYYY-MM-DD') } else { _initval = item.initval ? moment().subtract(item.initval, 'days') : null @@ -364,7 +421,7 @@ ) } else if (item.type === 'datemonth') { let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval) { + if (_initval && this.state.readin[item.field]) { _initval = moment(_initval, 'YYYY-MM') } else { _initval = item.initval ? moment().subtract(item.initval, 'month') : null @@ -388,7 +445,7 @@ ) } else if (item.type === 'datetime') { let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval) { + if (_initval && this.state.readin[item.field]) { _initval = moment(_initval, 'YYYY-MM-DD HH:mm:ss') } else { _initval = item.initval ? moment().subtract(item.initval, 'days') : null @@ -413,7 +470,7 @@ ) } else if (item.type === 'fileupload') { let filelist = this.props.data ? this.props.data[item.field] : item.initval - if (filelist) { + if (filelist && this.state.readin[item.field]) { try { filelist = filelist.split(',').map((url, index) => { return { @@ -427,6 +484,8 @@ } catch { filelist = [] } + } else { + filelist = [] } fields.push( @@ -505,6 +564,7 @@ } handleConfirm = () => { + const { record } = this.state // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { @@ -518,67 +578,47 @@ search.push({ type: 'funcvar', readonly: 'true', + readin: false, + 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] + } search.push({ type: this.state.datatype[item.field], readonly: this.state.readtype[item.field], + readin: this.state.readin[item.field], + fieldlen: this.state.fieldlen[item.field], key: item.field, - value: item.initval + value: _val }) } }) Object.keys(values).forEach(key => { + let _value = '' if (this.state.datatype[key] === 'datetime') { - let _value = '' if (values[key]) { _value = moment(values[key]).format('YYYY-MM-DD HH:mm:ss') } - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: _value - }) } else if (this.state.datatype[key] === 'datemonth') { - let _value = '' if (values[key]) { _value = moment(values[key]).format('YYYY-MM') } - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: _value - }) } else if (this.state.datatype[key] === 'date') { - let _value = '' if (values[key]) { _value = moment(values[key]).format('YYYY-MM-DD') } - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: _value - }) } else if (this.state.datatype[key] === 'number') { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: values[key] - }) + _value = values[key] + } else if (this.state.datatype[key] === 'multiselect') { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: values[key] ? values[key].join(',') : '' - }) + _value = values[key] ? values[key].join(',') : '' + } else if (this.state.datatype[key] === 'fileupload') { let vals = [] @@ -592,29 +632,25 @@ }) } - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: vals.join(',') - }) - } else if (this.state.datatype[key] === 'funcvar') { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: values[key] - }) + _value = vals.join(',') + } else if (this.state.datatype[key] === 'text') { + _value = values[key].replace(/(^\s*|\s*$) | \t* | \v*/ig, '') + } else { - search.push({ - type: this.state.datatype[key], - readonly: this.state.readtype[key], - key: key, - value: values[key].replace(/(^\s*|\s*$)/ig, '') - // value: values[key].replace(/[\x00-\xff]+/ig, '') - }) + _value = values[key] + } + + search.push({ + type: this.state.datatype[key], + readonly: this.state.readtype[key], + readin: this.state.readin[key], + fieldlen: this.state.fieldlen[key], + key: key, + value: _value + }) }) + resolve(search) } else { reject(err) -- Gitblit v1.8.0