| | |
| | | } |
| | | |
| | | state = { |
| | | datatype: null, // 数据类型 |
| | | readtype: null, // 是否只读 |
| | | readin: null, // 行数据是否写入 |
| | | writein: null, // 执行时是否填入默认sql |
| | | fieldlen: null, // 字段长度 |
| | | formlist: [], // 表单项 |
| | | intercepts: [], // 截取字段 |
| | | record: {} // 记录下拉表单关联字段,用于数据写入 |
| | | } |
| | | |
| | | componentDidMount () { |
| | | const { data, BData, action } = this.props |
| | | |
| | | let datatype = {} |
| | | let readtype = {} |
| | | let readin = {} |
| | | let writein = {} |
| | | let fieldlen = {} |
| | | let intercepts = [] |
| | | let _inputfields = [] |
| | | let linkFields = {} // 关联菜单 |
| | | let supItemVal = {} // 上级菜单初始值 |
| | |
| | | linkFields[item.linkField] = linkFields[item.linkField] || [] |
| | | linkFields[item.linkField].push(item.field) |
| | | } |
| | | if (item.interception === 'true') { // 字符截取字段 |
| | | intercepts.push(item.field) |
| | | } |
| | | }) |
| | | |
| | | formlist = formlist.map(item => { |
| | |
| | | if (item.type === 'split' || item.type === 'hint') return item |
| | | |
| | | // 数据自动填充 |
| | | let _readin = item.readin !== 'false' |
| | | item.readin = item.readin !== 'false' |
| | | if (item.type === 'linkMain' || item.type === 'funcvar') { |
| | | _readin = false |
| | | item.readin = false |
| | | } |
| | | item.readonly = item.readonly === 'true' |
| | | item.writein = item.writein !== '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.fieldlength = item.fieldlength || 50 |
| | | if (item.type === 'number') { |
| | | item.fieldlength = 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({ |
| | |
| | | |
| | | if (item.type === 'linkMain') { |
| | | newval = BData && BData[item.field] ? BData[item.field] : '' |
| | | } else if (_readin && !/^date/.test(item.type) && data && data.hasOwnProperty(item.field)) { |
| | | } else if (item.readin && !/^date/.test(item.type) && data && data.hasOwnProperty(item.field)) { |
| | | newval = data[item.field] |
| | | } else if (item.type === 'date') { // 时间搜索 |
| | | if (_readin && data && data.hasOwnProperty(item.field)) { |
| | | if (item.readin && data && data.hasOwnProperty(item.field)) { |
| | | newval = data[item.field] |
| | | } |
| | | if (newval) { |
| | |
| | | newval = null |
| | | } |
| | | } else if (item.type === 'datemonth') { |
| | | if (_readin && data && data.hasOwnProperty(item.field)) { |
| | | if (item.readin && data && data.hasOwnProperty(item.field)) { |
| | | newval = data[item.field] |
| | | } |
| | | if (newval) { |
| | |
| | | newval = null |
| | | } |
| | | } else if (item.type === 'datetime') { |
| | | if (_readin && data && data.hasOwnProperty(item.field)) { |
| | | if (item.readin && data && data.hasOwnProperty(item.field)) { |
| | | newval = data[item.field] |
| | | } |
| | | if (newval) { |
| | |
| | | }) |
| | | |
| | | this.setState({ |
| | | readin, |
| | | writein, |
| | | readtype, |
| | | datatype, |
| | | fieldlen, |
| | | intercepts, |
| | | formlist |
| | | }, () => { |
| | | if (action.setting && action.setting.focus) { |
| | |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'text') { |
| | | let _max = item.fieldlength || 50 |
| | | let _max = item.fieldlength |
| | | let _rules = [{ |
| | | pattern: /^[^']*$/ig, |
| | | message: formRule.input.quotemsg |
| | |
| | | }, |
| | | ..._rules |
| | | ] |
| | | })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} onChange={(e) => this.handleChange(e, item)} onPressEnter={(e) => this.handleInputSubmit(e, item)} />)} |
| | | })(<Input placeholder="" autoComplete="off" disabled={item.readonly} onChange={(e) => this.handleChange(e, item)} onPressEnter={(e) => this.handleInputSubmit(e, item)} />)} |
| | | </Form.Item> |
| | | </Col> |
| | | ) |
| | |
| | | ] |
| | | })( |
| | | 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)} /> |
| | | <InputNumber disabled={item.readonly} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> : |
| | | <InputNumber precision={precision} disabled={item.readonly} onPressEnter={(e) => this.handleInputSubmit(e, item)} /> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | |
| | | } |
| | | ] |
| | | })( |
| | | <Checkbox.Group disabled={item.readonly === 'true'}> |
| | | <Checkbox.Group disabled={item.readonly}> |
| | | {item.options.map(option => <Checkbox key={option.key} title={option.Text} value={option.Value}>{option.Text}</Checkbox>)} |
| | | </Checkbox.Group> |
| | | )} |
| | |
| | | } |
| | | ] |
| | | })( |
| | | <Radio.Group disabled={item.readonly === 'true'} onChange={(e) => {this.selectChange(item, e.target.value)}}> |
| | | <Radio.Group disabled={item.readonly} onChange={(e) => {this.selectChange(item, e.target.value)}}> |
| | | {item.options.map(option => <Radio key={option.key} value={option.Value}>{option.Text}</Radio>)} |
| | | </Radio.Group> |
| | | )} |
| | |
| | | allowClear={true} |
| | | filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 || option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0} |
| | | onSelect={(value) => {this.selectChange(item, value)}} |
| | | disabled={item.readonly === 'true'} |
| | | disabled={item.readonly} |
| | | > |
| | | {item.options.map(option => |
| | | <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> |
| | |
| | | showSearch |
| | | mode="multiple" |
| | | filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 || option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0} |
| | | disabled={item.readonly === 'true'} |
| | | disabled={item.readonly} |
| | | > |
| | | {item.options.map(option => |
| | | <Select.Option id={option.key} title={option.Text} key={option.key} value={option.Value}>{option.Text}</Select.Option> |
| | |
| | | } |
| | | ] |
| | | })( |
| | | <DatePicker disabled={item.readonly === 'true'} /> |
| | | <DatePicker disabled={item.readonly} /> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | |
| | | } |
| | | ] |
| | | })( |
| | | <MonthPicker disabled={item.readonly === 'true'} /> |
| | | <MonthPicker disabled={item.readonly} /> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | |
| | | } |
| | | ] |
| | | })( |
| | | <DatePicker showTime disabled={item.readonly === 'true'} /> |
| | | <DatePicker showTime disabled={item.readonly} /> |
| | | )} |
| | | </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]) { |
| | | if (filelist && item.readin) { |
| | | try { |
| | | filelist = filelist.split(',').map((url, index) => { |
| | | return { |
| | |
| | | message: this.props.dict['form.required.input'] + item.label + '!' |
| | | } |
| | | ] |
| | | })(<Input placeholder="" autoComplete="off" disabled={item.readonly === 'true'} />)} |
| | | })(<Input placeholder="" autoComplete="off" disabled={item.readonly} />)} |
| | | </Form.Item> |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'funcvar') { |
| | | // 函数变量字段,默认不显示 |
| | | } else if (item.type === 'textarea') { |
| | | let _max = item.fieldlength || 512 |
| | | let _max = item.fieldlength |
| | | let _rules = [] |
| | | if (item.encryption !== 'true') { |
| | | _rules = [{ |
| | |
| | | </Col> |
| | | ) |
| | | } else if (item.type === 'brafteditor') { |
| | | let _max = item.fieldlength || 512 |
| | | let _max = item.fieldlength |
| | | |
| | | fields.push( |
| | | <Col span={item.span || 24} key={index}> |
| | |
| | | } |
| | | |
| | | handleConfirm = () => { |
| | | const { record, intercepts, writein } = this.state |
| | | const { record, formlist } = this.state |
| | | let _format = { |
| | | date: 'YYYY-MM-DD', |
| | | datemonth: 'YYYY-MM', |
| | |
| | | this.props.form.validateFieldsAndScroll((err, values) => { |
| | | if (!err) { |
| | | let search = [] |
| | | // 隐藏表单 |
| | | this.state.formlist.forEach(item => { |
| | | formlist.forEach(item => { |
| | | if (!item.field) return |
| | | |
| | | let _item = null |
| | | |
| | | let _item = { |
| | | type: item.type, |
| | | readonly: item.readonly, |
| | | readin: item.readin, |
| | | writein: item.writein, |
| | | fieldlen: item.fieldlength, |
| | | key: item.field |
| | | } |
| | | |
| | | 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') { |
| | | _item.value = '' |
| | | } else if (item.hidden === 'true' || (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField)))) { |
| | | 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 |
| | | _item.value = _val |
| | | |
| | | if (['date', 'datemonth', 'datetime'].includes(item.type)) { |
| | | if (!_item.value) { |
| | | _item.value = '' |
| | | } else if (_item.value.format) { |
| | | _item.value = _item.value.format(_format[item.type]) |
| | | } |
| | | |
| | | if (item.declareType === 'nvarchar(50)') { |
| | | _item.type = 'text' |
| | | } |
| | | } else if (item.type === 'text' && _item.value && 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 || '')) |
| | | } |
| | | } 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 |
| | | } else if (typeof(values[item.field]) !== 'undefined') { |
| | | let _value = values[item.field] |
| | | |
| | | if (item.type === 'datetime') { |
| | | _value = _value ? moment(_value).format('YYYY-MM-DD HH:mm:ss') : '' |
| | | if (item.declareType === 'nvarchar(50)') { |
| | | _item.type = 'text' |
| | | } |
| | | } else if (item.type === 'datemonth') { |
| | | _value = _value ? moment(_value).format('YYYY-MM') : '' |
| | | if (item.declareType === 'nvarchar(50)') { |
| | | _item.type = 'text' |
| | | } |
| | | } else if (item.type === 'date') { |
| | | _value = _value ? moment(_value).format('YYYY-MM-DD') : '' |
| | | if (item.declareType === 'nvarchar(50)') { |
| | | _item.type = 'text' |
| | | } |
| | | } else if (item.type === 'multiselect' || item.type === 'checkbox') { |
| | | _value = _value ? _value.join(',') : '' |
| | | |
| | | } else if (item.type === 'fileupload') { |
| | | let vals = [] |
| | | |
| | | if (_value && _value.length > 0) { |
| | | _value.forEach(_val => { |
| | | if (_val.origin && _val.url) { |
| | | vals.push(_val.url) |
| | | } else if (!_val.origin && _val.status === 'done' && _val.response) { |
| | | vals.push(_val.response) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | _value = vals.join(',') |
| | | } else if (item.type === 'text' || item.type === 'textarea') { |
| | | _value = _value.replace(/\t*|\v*/g, '') // 去除制表符 |
| | | |
| | | if (item.interception === 'true') { // 去除首尾空格 |
| | | _value = _value.replace(/(^\s*|\s*$)/g, '') |
| | | } |
| | | |
| | | if (item.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 || '')) |
| | | } |
| | | } |
| | | _item.value = _value |
| | | } else { |
| | | _item.value = '' |
| | | } |
| | | |
| | | 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') { // 特殊字段替换 |
| | | _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 |
| | | } |
| | | |
| | | 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) |