From 1a176e4bdba485301385caac1a29102e598d25cc Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 13 五月 2025 11:32:02 +0800 Subject: [PATCH] 2025-05-13 --- src/menu/replaceField/settingform/index.jsx | 192 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 188 insertions(+), 4 deletions(-) diff --git a/src/menu/replaceField/settingform/index.jsx b/src/menu/replaceField/settingform/index.jsx index ed8d59a..ad41ce6 100644 --- a/src/menu/replaceField/settingform/index.jsx +++ b/src/menu/replaceField/settingform/index.jsx @@ -1,22 +1,85 @@ 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, Input, 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', + records: [] + } + + componentDidMount () { + let records = localStorage.getItem('replaceRecord') + + if (records) { + records = JSON.parse(records) + + if (!Array.isArray(records)) { + localStorage.removeItem('replaceRecord') + records = [] + } + + this.setState({records}) + + let field = '' + let label = '' + records.forEach(item => { + if (item.reType !== 'field' || field) return + + field = item.value + label = item.label + }) + + this.props.form.setFieldsValue({field, label}) + } + } handleConfirm = () => { + const { reType } = this.state + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { if (!err) { + if (values.resource === 'custom') { + let records = localStorage.getItem('replaceRecord') + + if (reType === 'name') { + values.field = values.orifield + values.label = values.name + + delete values.orifield + delete values.name + } + + if (records) { + records = JSON.parse(records) + } else { + records = [] + } + + let field = values.field.toLowerCase() + records = records.filter(item => item.reType !== reType || item.value.toLowerCase() !== field) + + records.unshift({ + value: values.field, + label: values.label, + reType + }) + + this.setState({records: records}) + + localStorage.setItem('replaceRecord', JSON.stringify(records)) + } resolve(values) } else { reject(err) @@ -25,9 +88,40 @@ }) } + clear = () => { + let that = this + confirm({ + title: '纭畾娓呴櫎鍘嗗彶璁板綍鍚楋紵', + content: '', + onOk() { + localStorage.removeItem('replaceRecord') + that.setState({records: []}) + }, + onCancel() {} + }) + } + + complete = (key) => { + const { records, reType } = this.state + + let label = '' + records.forEach(item => { + if (item.reType === reType && key === item.value) { + label = item.label + } + }) + + if (reType === 'name') { + this.props.form.setFieldsValue({name: label}) + } else { + this.props.form.setFieldsValue({label: label}) + } + } + render() { const { tables } = this.props const { getFieldDecorator } = this.props.form + const { resource, records, reType } = this.state const formItemLayout = { labelCol: { @@ -40,10 +134,45 @@ } } + let _fields1 = [] + let _fields2 = [] + records.forEach(item => { + if (item.reType === 'field') { + _fields1.push(item.value) + } else { + _fields2.push(item.value) + } + }) + 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});this.props.form.setFieldsValue({reType: 'field'})}}> + <Radio value="dict">鏁版嵁瀛楀吀</Radio> + <Radio value="custom">鑷畾涔�</Radio> + <Radio value="langs">璇█鍖�</Radio> + </Radio.Group> + )} + </Form.Item> + </Col> + {resource !== 'langs' ? <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 disabled={resource === 'dict'} value="name">鍘熷瓧娈� <SwapRightOutlined /> 鏂板瓧娈�</Radio> + </Radio.Group> + )} + </Form.Item> + </Col> : null} + {resource === 'dict' ? <Col span={20}> <Form.Item label={ <Tooltip placement="topLeft" title="鐢ㄤ簬瀛楁鏇挎崲鐨勮〃鍚嶃��"> <QuestionCircleOutlined className="mk-form-tip" /> @@ -69,7 +198,62 @@ </Select> )} </Form.Item> - </Col> + </Col> : null} + {resource === 'custom' && reType === 'field' ? <Col span={20}> + <Form.Item label="瀛楁"> + {getFieldDecorator('field', { + initialValue: '', + rules: [ + { + required: true, + message: '璇疯緭鍏ュ瓧娈�!' + } + ] + })(<AutoComplete dataSource={_fields1} onSelect={this.complete} filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} autoFocus placeholder="" />)} + </Form.Item> + </Col> : null} + {resource === 'custom' && reType === 'field' ? <Col span={20}> + <Form.Item label="鍚嶇О"> + {getFieldDecorator('label', { + initialValue: '', + rules: [ + { + required: true, + message: '璇疯緭鍏ュ悕绉�!' + } + ] + })(<Input autoComplete="off"/>)} + </Form.Item> + </Col> : null} + {resource === 'custom' && reType === 'name' ? <Col span={20}> + <Form.Item label="鍘熷瓧娈�"> + {getFieldDecorator('orifield', { + initialValue: '', + rules: [ + { + required: true, + message: '璇疯緭鍏ュ師瀛楁!' + } + ] + })(<AutoComplete dataSource={_fields2} onSelect={this.complete} filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} autoFocus placeholder="" />)} + </Form.Item> + </Col> : null} + {resource === 'custom' && reType === 'name' ? <Col span={20}> + <Form.Item label="鏇挎崲涓�"> + {getFieldDecorator('name', { + initialValue: '', + rules: [ + { + required: true, + message: '璇疯緭鍏ュ瓧娈�!' + } + ] + })(<Input autoComplete="off"/>)} + </Form.Item> + </Col> : null} + {resource === 'custom' && records.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> ) -- Gitblit v1.8.0