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