| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { Form, Row, Col, Tooltip, Select } from 'antd' |
| | | import { QuestionCircleOutlined } from '@ant-design/icons' |
| | | import { Form, Row, Col, Tooltip, Select, Radio, AutoComplete, Modal } from 'antd' |
| | | import { QuestionCircleOutlined, SwapRightOutlined, DeleteOutlined } from '@ant-design/icons' |
| | | |
| | | // import './index.scss' |
| | | const { confirm } = Modal |
| | | |
| | | class SettingForm extends Component { |
| | | static propTpyes = { |
| | | tables: PropTypes.object |
| | | } |
| | | |
| | | state = {} |
| | | state = { |
| | | resource: 'custom', |
| | | reType: 'field', |
| | | field: '', |
| | | label: '', |
| | | fields: [], |
| | | labels: [] |
| | | } |
| | | |
| | | UNSAFE_componentWillMount() { |
| | | let records = localStorage.getItem('replaceRecord') |
| | | |
| | | if (records) { |
| | | records = JSON.parse(records) |
| | | |
| | | let fields = records.fields || [] |
| | | let labels = records.labels || [] |
| | | |
| | | this.setState({fields, labels, field: fields[0] || '', label: labels[0] || ''}) |
| | | } |
| | | |
| | | } |
| | | |
| | | handleConfirm = () => { |
| | | // 表单提交时检查输入值是否正确 |
| | | return new Promise((resolve, reject) => { |
| | | this.props.form.validateFieldsAndScroll((err, values) => { |
| | | if (!err) { |
| | | if (values.resource === 'custom') { |
| | | let records = localStorage.getItem('replaceRecord') |
| | | |
| | | if (records) { |
| | | records = JSON.parse(records) |
| | | } else { |
| | | records = {fields: [], labels: []} |
| | | } |
| | | |
| | | records.fields.unshift(values.field) |
| | | records.labels.unshift(values.label) |
| | | |
| | | let _fields = [] |
| | | let _labels = [] |
| | | |
| | | records.fields = records.fields.filter(m => { |
| | | if (_fields.includes(m.toLowerCase())) return false |
| | | _fields.push(m.toLowerCase()) |
| | | return true |
| | | }) |
| | | records.labels = records.labels.filter(m => { |
| | | if (_labels.includes(m.toLowerCase())) return false |
| | | _labels.push(m.toLowerCase()) |
| | | return true |
| | | }) |
| | | |
| | | localStorage.setItem('replaceRecord', JSON.stringify(records)) |
| | | } |
| | | resolve(values) |
| | | } else { |
| | | reject(err) |
| | |
| | | }) |
| | | } |
| | | |
| | | clear = () => { |
| | | let _this = this |
| | | confirm({ |
| | | title: '确定清除历史记录吗?', |
| | | content: '', |
| | | onOk() { |
| | | localStorage.removeItem('replaceRecord') |
| | | _this.setState({fields: [], labels: []}) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | const { tables } = this.props |
| | | const { getFieldDecorator } = this.props.form |
| | | const { resource, fields, labels, field, label, reType } = this.state |
| | | |
| | | const formItemLayout = { |
| | | labelCol: { |
| | |
| | | } |
| | | } |
| | | |
| | | let _fields = fields |
| | | if (field) { |
| | | _fields = fields.filter(item => item.toLowerCase().indexOf(field.toLowerCase()) > -1) |
| | | } |
| | | let _labels = labels |
| | | if (label) { |
| | | _labels = labels.filter(item => item.indexOf(label) > -1) |
| | | } |
| | | |
| | | return ( |
| | | <Form {...formItemLayout}> |
| | | <Row gutter={24}> |
| | | <Col span={20}> |
| | | <Form.Item label="替换来源"> |
| | | {getFieldDecorator('resource', { |
| | | initialValue: 'custom' |
| | | })( |
| | | <Radio.Group onChange={(e) => this.setState({resource: e.target.value})}> |
| | | <Radio value="dict">数据字典</Radio> |
| | | <Radio value="custom">自定义</Radio> |
| | | </Radio.Group> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | <Col span={20}> |
| | | <Form.Item label="替换依据"> |
| | | {getFieldDecorator('reType', { |
| | | initialValue: 'field' |
| | | })( |
| | | <Radio.Group onChange={(e) => this.setState({reType: e.target.value})}> |
| | | <Radio value="field">字段 <SwapRightOutlined /> 名称</Radio> |
| | | <Radio value="name">原字段 <SwapRightOutlined /> 新字段</Radio> |
| | | </Radio.Group> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | {resource === 'dict' ? <Col span={20}> |
| | | <Form.Item label={ |
| | | <Tooltip placement="topLeft" title="用于字段替换的表名。"> |
| | | <QuestionCircleOutlined className="mk-form-tip" /> |
| | |
| | | </Select> |
| | | )} |
| | | </Form.Item> |
| | | </Col> |
| | | </Col> : null} |
| | | {resource === 'custom' && reType === 'field' ? <Col span={20}> |
| | | <Form.Item label="字段"> |
| | | {getFieldDecorator('field', { |
| | | initialValue: field, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入字段!' |
| | | } |
| | | ] |
| | | })(<AutoComplete dataSource={_fields} autoFocus onSearch={(val) => this.setState({ field: val})} placeholder="" />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {resource === 'custom' && reType === 'field' ? <Col span={20}> |
| | | <Form.Item label="名称"> |
| | | {getFieldDecorator('label', { |
| | | initialValue: label, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入名称!' |
| | | } |
| | | ] |
| | | })(<AutoComplete dataSource={_labels} onSearch={(val) => this.setState({ label: val})} placeholder="" />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {resource === 'custom' && reType === 'name' ? <Col span={20}> |
| | | <Form.Item label="原字段"> |
| | | {getFieldDecorator('label', { |
| | | initialValue: label, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入名称!' |
| | | } |
| | | ] |
| | | })(<AutoComplete dataSource={_labels} autoFocus onSearch={(val) => this.setState({ label: val})} placeholder="" />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {resource === 'custom' && reType === 'name' ? <Col span={20}> |
| | | <Form.Item label="替换为"> |
| | | {getFieldDecorator('field', { |
| | | initialValue: field, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入字段!' |
| | | } |
| | | ] |
| | | })(<AutoComplete dataSource={_fields} onSearch={(val) => this.setState({ field: val})} placeholder="" />)} |
| | | </Form.Item> |
| | | </Col> : null} |
| | | {resource === 'custom' && fields.length > 0 ? <Col span={24}> |
| | | <DeleteOutlined onClick={this.clear} style={{float: 'right', fontSize: '18px', marginTop: '-10px', cursor: 'pointer', color: '#ff4d4f'}} title="清空历史记录" /> |
| | | </Col> : null} |
| | | </Row> |
| | | </Form> |
| | | ) |