| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { fromJS } from 'immutable' |
| | | import { Form, Row, Col, notification, Tooltip, Icon } from 'antd' |
| | | 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 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')) |
| | |
| | | static propTpyes = { |
| | | menuType: PropTypes.object, // 菜单类型,是否为HS |
| | | action: PropTypes.object, // 按钮信息、表单列表 |
| | | dict: PropTypes.object, // 字典项 |
| | | data: PropTypes.any, // 表格数据 |
| | | BID: PropTypes.any, // 主表ID |
| | | BData: PropTypes.any, // 主表数据 |
| | |
| | | let record = {} |
| | | let formlist = fromJS(action.fields).toJS() |
| | | let fieldMap = new Map() |
| | | let check = action.setting.formType === 'check' |
| | | |
| | | formlist = formlist.filter(item => { |
| | | if (item.supField && item.supvalue) { // 多层表单控制 |
| | |
| | | |
| | | 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 |
| | | if (!item.field || !['text', 'number', 'switch', 'rate', 'select', 'link', 'linkMain', 'funcvar', 'date', 'datemonth', 'datetime', 'radio', 'checkbox', 'checkcard', 'fileupload', 'textarea', 'multiselect', 'brafteditor', 'color'].includes(item.type)) return false |
| | | |
| | | // 数据自动填充 |
| | | item.readin = item.readin !== 'false' |
| | | item.readonly = item.readonly === 'true' |
| | | 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') { |
| | |
| | | |
| | | let newval = '$empty' |
| | | |
| | | if (item.readin && data && data.hasOwnProperty(item.field)) { |
| | | if (readin && data && data.hasOwnProperty(item.field)) { |
| | | newval = data[item.field] |
| | | } |
| | | if (item.type === 'linkMain') { |
| | |
| | | |
| | | if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect'].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 |
| | | } |
| | | } |
| | | |
| | | if (item.type === 'text') { |
| | | if (typeof(item.initval) === 'number') { |
| | | item.initval = item.initval + '' |
| | | } |
| | | let _rules = [{ |
| | | pattern: /^[^']*$/ig, |
| | | message: formRule.input.quotemsg |
| | |
| | | } |
| | | |
| | | // 下级表单控制-字段写入 |
| | | if ((['select', 'radio'].includes(item.type) || (item.type === 'checkcard' && item.multiple !== 'true')) && item.linkSubField) { |
| | | 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 (item.subFields.length === 0) { |
| | | item.subFields = null |
| | | } else if (item.options.length > 0) { |
| | | item.options = item.options.map(cell => { |
| | | item.subFields.forEach(m => { |
| | | cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field] |
| | | }) |
| | | return cell |
| | | }) |
| | | |
| | | item.oriOptions = fromJS(item.options).toJS() |
| | | } |
| | | item.linkSubField = null |
| | | } |
| | |
| | | if (item.enter === 'tab' || item.enter === 'sub') { |
| | | if (fieldMap.has(item.tabField)) { |
| | | item.tabUuid = fieldMap.get(item.tabField).uuid |
| | | } else { |
| | | } else if (item.enter === 'tab') { |
| | | item.enter = 'false' |
| | | } else if (item.enter === 'sub') { |
| | | item.tabUuid = item.uuid |
| | | } |
| | | } |
| | |
| | | * @description 获取下拉表单选项信息 |
| | | */ |
| | | improveActionForm = (deForms) => { |
| | | const { BID, menuType } = this.props |
| | | const { BID, menuType, action } = this.props |
| | | |
| | | let deffers = [] |
| | | let mainItems = [] // 云端或单点数据 |
| | | let localItems = [] // 本地数据 |
| | | let cache = action.setting.cache !== 'false' |
| | | |
| | | deForms.forEach(item => { |
| | | if (item.database === 'sso') { |
| | |
| | | |
| | | deffers.push( |
| | | new Promise(resolve => { |
| | | Api.getSystemCacheConfig(param).then(res => { |
| | | Api.getSystemCacheConfig(param, cache).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | |
| | | deffers.push( |
| | | new Promise(resolve => { |
| | | Api.getSystemCacheConfig(mainparam).then(res => { |
| | | Api.getSystemCacheConfig(mainparam, cache).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | * @description 测试系统获取下拉表单选项信息 |
| | | */ |
| | | improveSimpleActionForm = (deForms) => { |
| | | let deffers = deForms.map(form => { |
| | | let cache = this.props.action.setting.cache !== 'false' |
| | | |
| | | let deffers = deForms.map((form, index) => { |
| | | let param = { |
| | | func: 'sPC_Get_SelectedList', |
| | | LText: form.data_sql, |
| | |
| | | |
| | | return ( |
| | | new Promise(resolve => { |
| | | Api.getSystemCacheConfig(param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | } |
| | | resolve(res) |
| | | }) |
| | | setTimeout(() => { |
| | | Api.getSystemCacheConfig(param, cache).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | } |
| | | resolve(res) |
| | | }) |
| | | }, index * 30) |
| | | }) |
| | | ) |
| | | }) |
| | |
| | | } |
| | | |
| | | resetFormList = (result) => { |
| | | let _formlist = this.state.formlist.map(item => { |
| | | 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 => { |
| | |
| | | |
| | | if (item.type === 'link') { |
| | | _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField] |
| | | } else if (item.subFields) { |
| | | } |
| | | if (item.subFields) { |
| | | item.subFields.forEach(m => { |
| | | _cell[m.field] = (cell[m.field] || cell[m.field] === 0) ? cell[m.field] : '' |
| | | _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) |
| | |
| | | } else if (item.type === 'hint') { |
| | | fields.push( |
| | | <Col span={item.span || 24} key={index}> |
| | | <Form.Item className="hint" colon={!!item.label} label={item.label} labelCol={item.labelCol} wrapperCol={item.wrapperCol}> |
| | | <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 { |
| | | let content = null |
| | | let className = '' |
| | | let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><Icon type="question-circle" />{item.label}</Tooltip> : item.label |
| | | let label = item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}><QuestionCircleOutlined style={{color: '#c49f47', marginRight: '3px'}}/>{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 === 'color') { |
| | | content = (<MKColor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) |
| | | } else if (item.type === 'checkcard') { |
| | | className = "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 === '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 === 'rate') { |
| | | content = (<Rate count={item.rateCount} disabled={item.readonly} onChange={(val) => this.recordChange({[item.field]: val})} character={item.character ? <MkIcon type={item.character}/> : <StarFilled />} allowHalf={item.allowHalf}/>) |
| | | } else if (item.type === 'brafteditor') { |
| | | content = (<MKEditor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>) |
| | | label = item.hidelabel !== 'true' ? label : '' |
| | |
| | | |
| | | if (item.type === 'funcvar') { |
| | | _item.value = '' |
| | | } else if (_item.value && (item.type === 'text' || item.type === 'textarea' || item.type === 'linkMain')) { |
| | | } else if (_item.value && (item.type === 'text' || item.type === 'textarea' || item.type === 'linkMain') && typeof(_item.value) === 'string') { |
| | | _item.value = _item.value.replace(/\t*|\v*/g, '') // 去除制表符 |
| | | |
| | | if (item.interception === 'true') { // 去除首尾空格 |
| | | _item.value = _item.value.replace(/(^\s*|\s*$)/g, '') |
| | | } |
| | | if (item.type === 'text' && typeof(_item.value) === 'string') { // 特殊字段替换 |
| | | if (item.type === 'text') { // 特殊字段替换 |
| | | _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 || '')) |
| | |
| | | } |
| | | |
| | | return ( |
| | | <Form className={'main-form-field ' + _align} id="main-form-box"> |
| | | <Form className={'main-form-field ' + _align}> |
| | | <Row gutter={24}>{this.getFields()}</Row> |
| | | </Form> |
| | | ) |