From 8f78c97ffcde201e2a4d1ffa7ccb97a13f0f045d Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 18 四月 2024 15:34:15 +0800 Subject: [PATCH] 2024-04-18 --- src/menu/components/card/cardcellcomponent/elementform/index.jsx | 652 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 424 insertions(+), 228 deletions(-) diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx index f0fbb8e..efc66b8 100644 --- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx +++ b/src/menu/components/card/cardcellcomponent/elementform/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, Select, Radio, Tooltip, InputNumber, Cascader } from 'antd' +import { Form, Row, Col, Input, Select, Radio, Tooltip, InputNumber, Cascader, Popover, message, AutoComplete } from 'antd' import { QuestionCircleOutlined } from '@ant-design/icons' import { formRule } from '@/utils/option.js' @@ -10,27 +10,30 @@ const { TextArea } = Input const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) +const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror')) const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) +const MKTable = asyncComponent(() => import('@/components/normalform/modalform/mkTable')) const MkEditIcon = asyncComponent(() => import('@/components/mkIcon')) const cardTypeOptions = { - sequence: ['eleType', 'width'], - text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable'], - number: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle'], + sequence: ['eleType', 'width', 'prefix', 'postfix'], + text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable', 'alignItems', 'sortField'], + number: ['eleType', 'datatype', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle', 'alignItems'], picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'maxWidth', 'link', 'noValue'], video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay', 'loop', 'startTime', 'noValue', 'posterType'], - icon: ['eleType', 'icon', 'datatype', 'width'], + icon: ['eleType', 'datatype', 'tipType', 'width', 'tooltip'], slider: ['eleType', 'datatype', 'width', 'color', 'maxValue', 'showInfo', 'showType', 'strokeWidth', 'strokeLinecap', 'trailColor'], splitline: ['eleType', 'color', 'width', 'borderWidth'], barcode: ['eleType', 'datatype', 'width', 'barHeight', 'displayValue', 'interval', 'noValue'], qrcode: ['eleType', 'datatype', 'width', 'qrWidth', 'color', 'url', 'noValue'], currentDate: ['eleType', 'width', 'dateFormat', 'prefix', 'postfix', 'fixStyle'], - formula: ['eleType', 'width', 'height', 'prefix', 'postfix', 'eval', 'formula', 'noValue', 'fixStyle'], + formula: ['eleType', 'width', 'height', 'eval', 'formula', 'noValue'], + color: ['eleType', 'datatype', 'width', 'lenWidRadio', 'noValue', 'copyable'], + tag: ['eleType', 'datatype', 'width', 'noValue', 'signs'], } -class MainSearch extends Component { +class ElementEditForm extends Component { static propTpyes = { - dict: PropTypes.object, // 瀛楀吀椤� config: PropTypes.object, // 缁勪欢淇℃伅 formlist: PropTypes.any, // 琛ㄥ崟淇℃伅 card: PropTypes.any, // 鎸夐挳淇℃伅 @@ -38,55 +41,113 @@ } state = { - formlist: null, // 琛ㄥ崟淇℃伅 - eleType: '', - datatype: '', - showType: '', - showInfo: 'false', - fixStyle: '', - link: '' + formlist: null // 琛ㄥ崟淇℃伅 } + record = null + UNSAFE_componentWillMount () { - const { card, config } = this.props - let _options = this.getOptions(card.eleType, card.datatype, card.link, (card.showType || 'line'), card.showInfo, card.fixStyle || '', card.posterType || '') + const { card, config, side, formlist } = this.props + this.record = {} + + formlist.forEach(item => { + this.record[item.key] = item.initVal + }) + + let _options = this.getOptions() + this.setState({ - link: card.link, - eleType: card.eleType, - datatype: card.datatype, - showType: card.showType || 'line', - showInfo: card.showInfo || 'false', - fixStyle: card.fixStyle || '', - posterType: card.posterType || '', - formlist: this.props.formlist.map(item => { + formlist: formlist.map(item => { item.hidden = !_options.includes(item.key) - if (item.key === 'field' || item.key === 'linkurl' || item.key === 'bgImage' || item.key === 'posterField') { + if ((item.key === 'field' || item.key === 'linkurl' || item.key === 'bgImage' || item.key === 'posterField') && item.type === 'select') { item.options = [] + + if (side === 'sub') { + config.subColumns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + if (/^(Int|Decimal)/ig.test(col.datatype) && (card.eleType === 'number' || card.eleType === 'slider')) { + item.options.push({ + value: col.field, + text: label + }) + } else if (/^(Nvarchar|date)/ig.test(col.datatype) && card.eleType !== 'number' && card.eleType !== 'slider') { + item.options.push({ + value: col.field, + text: label + }) + } + }) + } else { + config.columns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + if (/^(Int|Decimal)/ig.test(col.datatype) && (card.eleType === 'number' || card.eleType === 'slider')) { + item.options.push({ + value: col.field, + text: label + }) + } else if (/^(Nvarchar|date)/ig.test(col.datatype) && card.eleType !== 'number' && card.eleType !== 'slider') { + item.options.push({ + value: col.field, + text: label + }) + } + }) + } + } else if (item.key === 'sortField' && !item.forbid) { + item.options = [] + config.columns.forEach(col => { - let label = col.label - if (label !== col.field) { - label = col.field + ' ' + col.label - } - if (/^(Int|Decimal)/ig.test(col.datatype) && (card.eleType === 'number' || card.eleType === 'slider')) { - item.options.push({ - value: col.field, - text: label - }) - } else if (/^(Nvarchar|date)/ig.test(col.datatype) && card.eleType !== 'number' && card.eleType !== 'slider') { - item.options.push({ - value: col.field, - text: label - }) - } + let label = `${col.field}锛�${col.label}锛塦 + item.options.push({ + value: col.field, + text: label + }) }) - } else if (item.key === 'value' && card.eleType === 'slider') { - item.type = 'number' - item.label = '鍊�' - } else if (item.key === 'value' && card.eleType === 'text') { - item.type = 'textarea' - item.label = '鍐呭' + + if (config.subColumns) { + config.subColumns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + item.options.push({ + value: col.field, + text: label + }) + }) + } + } else if (item.key === 'formula') { + item.fields = [] + + if (side === 'sub') { + if (config.subColumns) { + config.subColumns.forEach(col => { + item.fields.push(col.field) + }) + } + } else { + config.columns.forEach(col => { + item.fields.push(col.field) + }) + } + + item.fields = item.fields.join(', ') + } else if (item.key === 'value') { + item.tooltip = '' + if (card.eleType === 'slider') { + item.type = 'number' + item.label = '鍊�' + } else if (card.eleType === 'text') { + item.type = 'textarea' + item.label = '鍐呭' + item.tooltip = '鏂囨湰绫诲瀷锛屼細鏇挎崲鍐呭涓殑@username@銆丂fullName@銆丂mk_city@銆丂appname@銆丂bid@銆丂month@銆丂week@銆丂day@' + } else if (card.eleType === 'tag') { + item.type = 'textarea' + item.label = '鍐呭' + item.tooltip = '澶氫釜鍊艰浣跨敤閫楀彿锛堣嫳鏂囷級鍒嗛殧銆�' + } else { + item.type = 'text' + item.label = '鍐呭' + } } else if (item.key === 'format') { if (card.eleType === 'text') { item.options = item.oriOptions.filter(op => !['percent', 'thdSeparator', 'abs'].includes(op.value)) @@ -97,7 +158,7 @@ item.required = card.eleType !== 'qrcode' } if (item.key === 'linkurl') { - item.type = card.link === 'dynamic' ? 'select' : 'textarea' + item.type = card.link === 'dynamic' ? item.defType : 'textarea' } return item @@ -105,50 +166,75 @@ }) } - getOptions = (eleType, datatype, link, showType, showInfo, fixStyle, posterType) => { - let _options = fromJS(cardTypeOptions[eleType]).toJS() // 閫夐」鍒楄〃 + getOptions = () => { + let _options = fromJS(cardTypeOptions[this.record.eleType]).toJS() // 閫夐」鍒楄〃 - if (['text', 'number', 'picture', 'slider', 'barcode', 'qrcode', 'video'].includes(eleType)) { - if (datatype === 'dynamic') { + if (['text', 'number', 'picture', 'slider', 'barcode', 'qrcode', 'video', 'color', 'tag'].includes(this.record.eleType)) { + if (this.record.datatype === 'dynamic') { _options.push('field') - if (eleType === 'number') { - _options.push('decimal') + if (this.record.eleType === 'number') { + _options.push('decimal', 'format') } - } else if (eleType === 'picture' || eleType === 'video') { + } else if (this.record.eleType === 'picture' || this.record.eleType === 'video') { _options.push('url') } else { _options.push('value') } - if (eleType === 'video' && posterType) { - if (posterType === 'dynamic') { + + if (this.record.eleType === 'picture' && this.record.noValue === 'show') { + _options.push('lostTip') + } else if (this.record.eleType === 'video' && this.record.posterType) { + if (this.record.posterType === 'dynamic') { _options.push('posterField') } else { _options.push('posterUrl') } } - if (['text', 'picture'].includes(eleType) && link) { - // if (link === 'dynamic' || link === 'static') { - _options.push('linkurl', 'joint', 'linkType') - // } - } else if (eleType === 'picture' && !link) { + if (['text', 'picture'].includes(this.record.eleType) && this.record.link) { + _options.push('linkType') + if (this.record.linkType === 'linkmenu') { + _options.push('open', 'joint') + if (this.record.link === 'static') { + _options.push('linkmenu') + } else { + _options.push('linkurl') + } + } else if (this.record.linkType === 'other') { + _options.push('linkurl', 'joint', 'open') + } else { + _options.push('linkurl') + } + } else if (this.record.eleType === 'picture' && !this.record.link) { _options.push('scale') - } else if (eleType === 'slider') { - if (showInfo === 'true') { + } else if (this.record.eleType === 'slider') { + if (this.record.showInfo === 'true') { _options.push('infoColor') } - if (showType !== 'line') { + if (this.record.showType !== 'line') { _options.push('outlineWidth', 'textAlign') } } - } else if (eleType === 'icon') { - if (datatype === 'dynamic') { - _options.push('field') + } else if (this.record.eleType === 'icon') { + if (this.record.datatype === 'dynamic') { + _options.push('field', 'noValue') + } else if (this.record.tipType === 'text') { + _options.push('value') } else { - _options.push('tooltip') + _options.push('icon') + } + if (this.record.tipType === 'text') { + _options.push('height') + } + } else if (this.record.eleType === 'formula') { + if (this.record.eval !== 'func') { + _options.push('prefix', 'postfix', 'fixStyle', 'alignItems') + } + if (this.record.eval === 'true') { + _options.push('decimal') } } - if (_options.includes('fixStyle') && fixStyle === 'alone') { + if (_options.includes('fixStyle') && this.record.fixStyle === 'alone') { _options.push('fixSize', 'fixColor', 'fixLeft', 'fixRight') } @@ -162,42 +248,72 @@ * 3銆佸垏鎹㈡爣绛剧被鍨嬶紝閲嶇疆鍙�夋爣绛� */ selectChange = (key, value, option) => { - const { card, config } = this.props - const { datatype, eleType, showType, showInfo, fixStyle, posterType } = this.state + const { config, side } = this.props + + this.record[key] = value if (key === 'eleType') { - let _options = this.getOptions(value, datatype, '', showType, showInfo, fixStyle, posterType) + this.record.link = '' + let _options = this.getOptions() + + if (value === 'splitline') { + this.record.color = '#EBE9E9' + } else if (value === 'formula') { + this.record.decimal = '' + } let _formlist = this.state.formlist.map(item => { + item.initVal = this.record[item.key] item.hidden = !_options.includes(item.key) - if (item.key === 'field') { + if (item.key === 'field' && item.type === 'select') { item.options = [] - config.columns.forEach(col => { - let label = col.label - if (label !== col.field) { - label = col.field + ' ' + col.label - } - if (/^(Int|Decimal)/ig.test(col.datatype) && (value === 'number' || value === 'slider')) { - item.options.push({ - value: col.field, - text: label - }) - } else if (/^(Nvarchar|date)/ig.test(col.datatype) && value !== 'number' && value !== 'slider') { - item.options.push({ - value: col.field, - text: label - }) - } - }) + if (side === 'sub') { + config.subColumns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + if (/^(Int|Decimal)/ig.test(col.datatype) && (value === 'number' || value === 'slider')) { + item.options.push({ + value: col.field, + text: label + }) + } else if (/^(Nvarchar|date)/ig.test(col.datatype) && value !== 'number' && value !== 'slider') { + item.options.push({ + value: col.field, + text: label + }) + } + }) + } else { + config.columns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + + if (/^(Int|Decimal)/ig.test(col.datatype) && (value === 'number' || value === 'slider')) { + item.options.push({ + value: col.field, + text: label + }) + } else if (/^(Nvarchar|date)/ig.test(col.datatype) && value !== 'number' && value !== 'slider') { + item.options.push({ + value: col.field, + text: label + }) + } + }) + } } else if (item.key === 'value') { + item.tooltip = '' if (value === 'slider') { item.type = 'number' item.label = '鍊�' } else if (value === 'text') { item.type = 'textarea' item.label = '鍐呭' + item.tooltip = '鏂囨湰绫诲瀷锛屼細鏇挎崲鍐呭涓殑@username@銆丂fullName@銆丂mk_city@銆丂appname@銆丂bid@銆丂month@銆丂week@銆丂day@' + } else if (value === 'tag') { + item.type = 'textarea' + item.label = '鍐呭' + item.tooltip = '澶氫釜鍊艰浣跨敤閫楀彿锛堣嫳鏂囷級鍒嗛殧銆�' } else { item.type = 'text' item.label = '鍐呭' @@ -210,31 +326,29 @@ } } else if (item.key === 'url') { item.required = value !== 'qrcode' - } else if (item.key === 'showInfo') { - item.initVal = showInfo - } else if (item.key === 'posterType') { - item.initVal = posterType - } else if (item.key === 'fixStyle') { - item.initVal = fixStyle } return item }) + let _field = '' + if (value === 'formula') { + _field = this.props.form.getFieldValue('field') || '' + } + this.setState({ - link: '', - eleType: value, - showType: card.showType || 'line', formlist: _formlist }, () => { - if (value === 'slider') { + if (value === 'splitline') { + this.props.form.setFieldsValue({width: 24, color: '#EBE9E9'}) + } else if (value === 'slider') { this.props.form.setFieldsValue({width: 24, color: '#1890ff'}) - } else if (value === 'splitline') { - this.props.form.setFieldsValue({width: 24, color: '#e8e8e8'}) } else if (value === 'qrcode') { this.props.form.setFieldsValue({color: '#000000'}) } else if (value === 'text' || value === 'number') { this.props.form.setFieldsValue({format: ''}) + } else if (value === 'formula' && _field) { + this.props.form.setFieldsValue({formula: '@' + _field + '@'}) } if (value === 'text' || value === 'picture') { this.props.form.setFieldsValue({link: ''}) @@ -245,90 +359,27 @@ this.props.form.setFieldsValue({value: option.props.title}) } } else if (key === 'link') { - let _options = this.getOptions(eleType, datatype, value, showType, showInfo, fixStyle, posterType) + let _options = this.getOptions() this.setState({ - link: value, formlist: this.state.formlist.map(item => { + item.initVal = this.record[item.key] item.hidden = !_options.includes(item.key) + if (item.key === 'linkurl') { - item.type = value === 'dynamic' ? 'select' : 'textarea' + item.type = value === 'dynamic' ? item.defType : 'textarea' } return item }) }) - } - } - - onChange = (e, key) => { - const { eleType, datatype, link, showType, showInfo, fixStyle, posterType } = this.state - let value = e.target.value - - if (key === 'datatype') { - let _options = this.getOptions(eleType, value, link, showType, showInfo, fixStyle, posterType) + } else if (['datatype', 'showInfo', 'showType', 'fixStyle', 'posterType', 'eval', 'linkType', 'tipType', 'noValue'].includes(key)) { + let _options = this.getOptions() this.setState({ - datatype: value, formlist: this.state.formlist.map(item => { + item.initVal = this.record[item.key] item.hidden = !_options.includes(item.key) return item - }) - }) - } else if (key === 'link') { - let _options = this.getOptions(eleType, datatype, value, showType, showInfo, fixStyle, posterType) - this.setState({ - link: value, - formlist: this.state.formlist.map(item => { - item.hidden = !_options.includes(item.key) - if (item.key === 'linkurl') { - item.type = value === 'dynamic' ? 'select' : 'textarea' - } - return item - }) - }) - } else if (key === 'showInfo') { - let _options = this.getOptions(eleType, datatype, link, showType, value, fixStyle, posterType) - this.setState({ - showInfo: value, - formlist: this.state.formlist.map(item => { - item.hidden = !_options.includes(item.key) - return item - }) - }) - } else if (key === 'showType') { - this.setState({ - showType: value - }, () => { - let _options = this.getOptions(eleType, datatype, link, value, showInfo, fixStyle, posterType) - this.setState({ - formlist: this.state.formlist.map(item => { - item.hidden = !_options.includes(item.key) - return item - }) - }) - }) - } else if (key === 'fixStyle') { - this.setState({ - fixStyle: value - }, () => { - let _options = this.getOptions(eleType, datatype, link, showType, showInfo, value, posterType) - this.setState({ - formlist: this.state.formlist.map(item => { - item.hidden = !_options.includes(item.key) - return item - }) - }) - }) - } else if (key === 'posterType') { - this.setState({ - posterType: value - }, () => { - let _options = this.getOptions(eleType, datatype, link, showType, showInfo, fixStyle, value) - this.setState({ - formlist: this.state.formlist.map(item => { - item.hidden = !_options.includes(item.key) - return item - }) }) }) } @@ -350,30 +401,65 @@ if (item.hidden || item.forbid) return if (item.type === 'text') { - fields.push( - <Col span={12} key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <QuestionCircleOutlined className="mk-form-tip" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.key, { - initialValue: item.initVal || '', - rules: [ - { - required: item.readonly ? false : !!item.required, - message: this.props.dict['form.required.input'] + item.label + '!' - }, - { - max: formRule.input.max, - message: formRule.input.message - } - ] - })(<Input placeholder="" autoComplete="off" disabled={item.readonly} onPressEnter={this.handleSubmit} />)} - </Form.Item> - </Col> - ) + if (item.options && item.options.length > 0) { + fields.push( + <Col span={12} key={index}> + <Form.Item label={item.label}> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + }, + { + pattern: formRule.field.pattern, + message: formRule.field.message + }, + { + max: formRule.input.max, + message: formRule.input.message + } + ] + })( + <AutoComplete + dataSource={item.options.map((cell, i) => <AutoComplete.Option value={cell.value} key={i}> + {cell.value} + </AutoComplete.Option>)} + filterOption={(input, option) => option.props.children.indexOf(input) > -1} + > + <Input autoComplete="off" onPressEnter={this.handleSubmit} /> + </AutoComplete> + )} + </Form.Item> + </Col> + ) + } else { + fields.push( + <Col span={12} key={index}> + <Form.Item label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: item.readonly ? false : !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + }, + { + max: formRule.input.max, + message: formRule.input.message + } + ] + })(<Input placeholder="" autoComplete="off" disabled={item.readonly} onPressEnter={this.handleSubmit} />)} + </Form.Item> + </Col> + ) + } } else if (item.type === 'textarea') { fields.push( <Col span={24} className="textarea" key={index}> @@ -388,7 +474,7 @@ rules: [ { required: item.readonly ? false : !!item.required, - message: this.props.dict['form.required.input'] + item.label + '!' + message: '璇疯緭鍏�' + item.label + '!' } ] })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)} @@ -396,24 +482,45 @@ </Col> ) } else if (item.type === 'number') { - fields.push( - <Col span={12} key={index}> - <Form.Item help={item.help || null} label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <QuestionCircleOutlined className="mk-form-tip" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.key, { - initialValue: item.initVal, - rules: [{ - required: item.readonly ? false : !!item.required, - message: this.props.dict['form.required.input'] + item.label + '!' - }] - })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)} - </Form.Item> - </Col> - ) + if (item.help) { + fields.push( + <Col span={12} key={index}> + <Form.Item help={item.help} label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal, + rules: [{ + required: item.readonly ? false : !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + }] + })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)} + </Form.Item> + </Col> + ) + } else { + fields.push( + <Col span={12} key={index}> + <Form.Item label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal, + rules: [{ + required: item.readonly ? false : !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + }] + })(<InputNumber min={item.min || 0} max={item.max || 10000} precision={item.precision || 0} onPressEnter={this.handleSubmit} />)} + </Form.Item> + </Col> + ) + } } else if (item.type === 'select') { // 涓嬫媺鎼滅储 fields.push( <Col span={12} key={index}> @@ -427,7 +534,7 @@ initialValue: item.initVal || '', rules: [{ required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' }] })( <Select @@ -438,8 +545,8 @@ getPopupContainer={() => document.getElementById('card-winter')} > {item.options.map((option, index) => - <Select.Option id={`${index}`} title={option.text} key={`${index}`} value={option.value}> - {option.text} + <Select.Option id={`${index}`} title={option.text || option.label} key={`${index}`} value={option.value}> + {option.text || option.label} </Select.Option> )} </Select> @@ -460,7 +567,7 @@ initialValue: item.initVal || '', rules: [{ required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' }] })( <MkEditIcon /> @@ -481,10 +588,10 @@ initialValue: item.initVal, rules: [{ required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' }] })( - <Radio.Group onChange={(e) => {this.onChange(e, item.key)}} disabled={item.readonly}> + <Radio.Group onChange={(e) => {this.selectChange(item.key, e.target.value)}} disabled={item.readonly}> {item.options.map(option => { return ( <Radio key={option.value} value={option.value}>{option.text}</Radio> @@ -504,7 +611,7 @@ rules: [ { required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' } ] })( @@ -514,19 +621,25 @@ </Col> ) } else if (item.type === 'file') { - let type = this.state.eleType + let type = this.record.eleType if (item.key === 'posterUrl') { type = 'picture' } + fields.push( <Col span={12} key={index}> - <Form.Item label={item.label}> + <Form.Item label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> {getFieldDecorator(item.key, { initialValue: item.initVal, rules: [ { required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' } ] })( @@ -549,7 +662,7 @@ rules: [ { required: !!item.required, - message: this.props.dict['form.required.select'] + item.label + '!' + message: '璇烽�夋嫨' + item.label + '!' } ] })( @@ -558,18 +671,101 @@ </Form.Item> </Col> ) + } else if (item.type === 'table') { + fields.push( + <Col span={24} key={index} className="textarea"> + <Form.Item label={ + item.tooltip ? <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + } + ] + })( + <MKTable columns={item.columns || []} actions={item.actions}/> + )} + </Form.Item> + </Col> + ) + } else if (item.type === 'codemirror') { + fields.push( + <Col span={24} key={index} className="textarea"> + <Form.Item label={ + <Tooltip placement="topLeft" overlayStyle={{width: 500, maxWidth: 500}} title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + } + ] + })( + <CodeMirror mode="text/javascript"/> + )} + </Form.Item> + <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click"> + <span className="formula-icon">瀛楁闆�</span> + </Popover> + </Col> + ) } }) return fields } handleConfirm = () => { + const { config } = this.props + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { values.uuid = this.props.card.uuid values.marks = this.props.card.marks || null + + // eslint-disable-next-line + if (values.eleType === 'formula' && values.eval === 'true' && /^[\u4E00-\u9FA50-9a-zA-Z_\s@\+\-\*\/]*$/ig.test(values.formula) && /[\+\-\*\/]/ig.test(values.formula)) { + let cols = [] + config.subColumns && config.subColumns.forEach(col => { + if (/^(Int|Decimal)/ig.test(col.datatype)) { + cols.push({reg: new RegExp('@' + col.field + '@', 'ig'), value: `(@${col.field}@)`}) + } + }) + config.columns.forEach(col => { + if (/^(Int|Decimal)/ig.test(col.datatype)) { + cols.push({reg: new RegExp('@' + col.field + '@', 'ig'), value: `(@${col.field}@)`}) + } + }) + + cols.forEach(col => { + values.formula = values.formula.replace(col.reg, col.value) + }) + } + + if (values.width === 0) { + let utype = {picture: '鍥剧墖', video: '瑙嗛', slider: '杩涘害鏉�', splitline: '鍒嗗壊绾�', barcode: '鏉″舰鐮�', qrcode: '浜岀淮鐮�'} + + if (utype[values.eleType]) { + message.warning(utype[values.eleType] + '鍏冪礌瀹藉害涓嶅彲涓�0锛�') + return + } + } + + if (values.eleType === 'tag' && values.signs && values.signs.length === 0) { + values.signs = null + } resolve(values) } else { @@ -598,4 +794,4 @@ } } -export default Form.create()(MainSearch) \ No newline at end of file +export default Form.create()(ElementEditForm) \ No newline at end of file -- Gitblit v1.8.0