关于我们优化代码

This commit is contained in:
linxd
2025-07-17 14:23:21 +08:00
parent 907dd03023
commit 55fa2cf919
3 changed files with 99 additions and 252 deletions

View File

@ -17,12 +17,12 @@ export default {
'aboutManage.form.content': 'Content (Chinese)', 'aboutManage.form.content': 'Content (Chinese)',
'aboutManage.form.contentRequired': 'Please enter Chinese content', 'aboutManage.form.contentRequired': 'Please enter Chinese content',
'aboutManage.form.contentPlaceholder': 'Please enter Chinese content...', 'aboutManage.form.contentPlaceholder': 'Please enter Chinese content...',
'aboutManage.form.address': 'Address (Chinese)', 'aboutManage.form.address': 'Company Address (Chinese)',
'aboutManage.form.addressRequired': 'Please enter Chinese address', 'aboutManage.form.addressRequired': 'Please enter Chinese company address',
'aboutManage.form.addressPlaceholder': 'Please enter Chinese address', 'aboutManage.form.addressPlaceholder': 'Please enter Chinese company address',
'aboutManage.form.contactsPhone': 'Contact Phone (Chinese)', 'aboutManage.form.contactsPhone': 'Contact Information (Chinese)',
'aboutManage.form.contactsPhoneRequired': 'Please enter Chinese contact phone', 'aboutManage.form.contactsPhoneRequired': 'Please enter Chinese contact information',
'aboutManage.form.contactsPhonePlaceholder': 'Please enter Chinese contact phone', 'aboutManage.form.contactsPhonePlaceholder': 'Please enter Chinese contact information',
'aboutManage.form.contactsEmail': 'Contact Email (Chinese)', 'aboutManage.form.contactsEmail': 'Contact Email (Chinese)',
'aboutManage.form.contactsEmailRequired': 'Please enter Chinese contact email', 'aboutManage.form.contactsEmailRequired': 'Please enter Chinese contact email',
'aboutManage.form.contactsEmailPlaceholder': 'Please enter Chinese contact email', 'aboutManage.form.contactsEmailPlaceholder': 'Please enter Chinese contact email',
@ -37,12 +37,12 @@ export default {
'aboutManage.form.contentEn': 'Content (English)', 'aboutManage.form.contentEn': 'Content (English)',
'aboutManage.form.contentEnRequired': 'Please enter English content', 'aboutManage.form.contentEnRequired': 'Please enter English content',
'aboutManage.form.contentEnPlaceholder': 'Please enter English content...', 'aboutManage.form.contentEnPlaceholder': 'Please enter English content...',
'aboutManage.form.addressEn': 'Address (English)', 'aboutManage.form.addressEn': 'Company Address (English)',
'aboutManage.form.addressEnRequired': 'Please enter English address', 'aboutManage.form.addressEnRequired': 'Please enter English company address',
'aboutManage.form.addressEnPlaceholder': 'Please enter English address', 'aboutManage.form.addressEnPlaceholder': 'Please enter English company address',
'aboutManage.form.contactsPhoneEn': 'Contact Phone (English)', 'aboutManage.form.contactsPhoneEn': 'Contact Information (English)',
'aboutManage.form.contactsPhoneEnRequired': 'Please enter English contact phone', 'aboutManage.form.contactsPhoneEnRequired': 'Please enter English contact information',
'aboutManage.form.contactsPhoneEnPlaceholder': 'Please enter English contact phone', 'aboutManage.form.contactsPhoneEnPlaceholder': 'Please enter English contact information',
'aboutManage.form.contactsEmailEn': 'Contact Email (English)', 'aboutManage.form.contactsEmailEn': 'Contact Email (English)',
'aboutManage.form.contactsEmailEnRequired': 'Please enter English contact email', 'aboutManage.form.contactsEmailEnRequired': 'Please enter English contact email',
'aboutManage.form.contactsEmailEnPlaceholder': 'Please enter English contact email', 'aboutManage.form.contactsEmailEnPlaceholder': 'Please enter English contact email',

View File

@ -17,12 +17,12 @@ export default {
'aboutManage.form.content': '正文内容', 'aboutManage.form.content': '正文内容',
'aboutManage.form.contentRequired': '请输入正文内容', 'aboutManage.form.contentRequired': '请输入正文内容',
'aboutManage.form.contentPlaceholder': '请输入正文内容...', 'aboutManage.form.contentPlaceholder': '请输入正文内容...',
'aboutManage.form.address': '地址', 'aboutManage.form.address': '公司地址',
'aboutManage.form.addressRequired': '请输入地址', 'aboutManage.form.addressRequired': '请输入公司地址',
'aboutManage.form.addressPlaceholder': '请输入地址', 'aboutManage.form.addressPlaceholder': '请输入公司地址',
'aboutManage.form.contactsPhone': '联系电话', 'aboutManage.form.contactsPhone': '联系方式',
'aboutManage.form.contactsPhoneRequired': '请输入联系电话', 'aboutManage.form.contactsPhoneRequired': '请输入联系方式',
'aboutManage.form.contactsPhonePlaceholder': '请输入联系电话', 'aboutManage.form.contactsPhonePlaceholder': '请输入联系方式',
'aboutManage.form.contactsEmail': '联系邮箱', 'aboutManage.form.contactsEmail': '联系邮箱',
'aboutManage.form.contactsEmailRequired': '请输入联系邮箱', 'aboutManage.form.contactsEmailRequired': '请输入联系邮箱',
'aboutManage.form.contactsEmailPlaceholder': '请输入联系邮箱', 'aboutManage.form.contactsEmailPlaceholder': '请输入联系邮箱',
@ -37,12 +37,12 @@ export default {
'aboutManage.form.contentEn': '正文内容(英文)', 'aboutManage.form.contentEn': '正文内容(英文)',
'aboutManage.form.contentEnRequired': '请输入英文正文内容', 'aboutManage.form.contentEnRequired': '请输入英文正文内容',
'aboutManage.form.contentEnPlaceholder': '请输入英文正文内容...', 'aboutManage.form.contentEnPlaceholder': '请输入英文正文内容...',
'aboutManage.form.addressEn': '地址(英文)', 'aboutManage.form.addressEn': '公司地址(英文)',
'aboutManage.form.addressEnRequired': '请输入英文地址', 'aboutManage.form.addressEnRequired': '请输入公司地址',
'aboutManage.form.addressEnPlaceholder': '请输入英文地址', 'aboutManage.form.addressEnPlaceholder': '请输入公司地址',
'aboutManage.form.contactsPhoneEn': '联系电话(英文)', 'aboutManage.form.contactsPhoneEn': '联系方式(英文)',
'aboutManage.form.contactsPhoneEnRequired': '请输入英文联系电话', 'aboutManage.form.contactsPhoneEnRequired': '请输入英文联系方式',
'aboutManage.form.contactsPhoneEnPlaceholder': '请输入英文联系电话', 'aboutManage.form.contactsPhoneEnPlaceholder': '请输入英文联系方式',
'aboutManage.form.contactsEmailEn': '联系邮箱(英文)', 'aboutManage.form.contactsEmailEn': '联系邮箱(英文)',
'aboutManage.form.contactsEmailEnRequired': '请输入英文联系邮箱', 'aboutManage.form.contactsEmailEnRequired': '请输入英文联系邮箱',
'aboutManage.form.contactsEmailEnPlaceholder': '请输入英文联系邮箱', 'aboutManage.form.contactsEmailEnPlaceholder': '请输入英文联系邮箱',

View File

@ -1,293 +1,140 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { useIntl, FormattedMessage } from 'umi'; import { useIntl } from 'umi';
import { Card, Form, Input, Button, message, Tabs, Spin } from 'antd'; import { Card, Form, Input, Button, message, Tabs, Spin, Typography } from 'antd';
import WangEditor from '@/components/WangEidtor/WangEidtor'; import WangEditor from '@/components/WangEidtor/WangEidtor';
import FileUpload from '@/components/FileUpload';
import { getAboutUs, updateAboutUs, AboutUsRequest } from '@/servers/api/about'; import { getAboutUs, updateAboutUs, AboutUsRequest } from '@/servers/api/about';
import styles from './aboutManage.less'; import styles from './aboutManage.less';
import FileUpload from '@/components/FileUpload'
const { TabPane } = Tabs; const { TabPane } = Tabs;
const { Title } = Typography;
interface ErrorInfo {
errorFields: {
name: string[];
errors: string[];
}[];
values: Record<string, any>;
}
const AboutManage: React.FC = () => { const AboutManage: React.FC = () => {
const intl = useIntl(); const intl = useIntl();
const [form] = Form.useForm(); const [form] = Form.useForm();
const [loading, setLoading] = useState<boolean>(false); const [loading, setLoading] = useState(false);
const [submitting, setSubmitting] = useState<boolean>(false); const [submitting, setSubmitting] = useState(false);
const [activeTabKey, setActiveTabKey] = useState<string>('zh'); const [activeTabKey, setActiveTabKey] = useState('zh');
const [aboutData, setAboutData] = useState<AboutUsRequest | null>(null); const [aboutData, setAboutData] = useState<AboutUsRequest | null>(null);
const editorHeight = 100;
// 获取关于我们详情数据
const fetchAboutData = async () => { const fetchAboutData = async () => {
setLoading(true); setLoading(true);
try { try {
const response = await getAboutUs(); const response = await getAboutUs();
if (response && response.success) { if (response?.success) {
setAboutData(response.data); setAboutData(response.data);
// 设置表单初始值 form.setFieldsValue({ ...response.data });
form.setFieldsValue({
title: response.data.title,
titleEn: response.data.titleEn,
content: response.data.content,
contentEn: response.data.contentEn,
address: response.data.address,
addressEn: response.data.addressEn,
contactsPhone: response.data.contactsPhone,
contactsPhoneEn: response.data.contactsPhoneEn,
contactsEmail: response.data.contactsEmail,
contactsEmailEn: response.data.contactsEmailEn,
contactsConsult: response.data.contactsConsult,
contactsConsultEn: response.data.contactsConsultEn,
// address_img varchar(255) 地址地图图片
addressImg: response.data.addressImg,
});
} else { } else {
message.error(response.message || intl.formatMessage({ id: 'aboutManage.fetchFailed' })); message.error(response.message || intl.formatMessage({ id: 'aboutManage.fetchFailed' }));
} }
} catch (error) { } catch (error) {
console.error('获取关于我们数据失败:', error);
message.error(intl.formatMessage({ id: 'aboutManage.fetchFailed' })); message.error(intl.formatMessage({ id: 'aboutManage.fetchFailed' }));
} finally { } finally {
setLoading(false); setLoading(false);
} }
}; };
// 首次加载时获取数据
useEffect(() => { useEffect(() => {
fetchAboutData(); fetchAboutData();
}, []); }, []);
// 处理Tab切换 const handleTabChange = (key: string) => setActiveTabKey(key);
const handleTabChange = (key: string) => {
setActiveTabKey(key);
};
// 处理表单提交
const handleSubmit = async () => { const handleSubmit = async () => {
try { try {
const values = await form.validateFields(); const values = await form.validateFields();
setSubmitting(true); setSubmitting(true);
// 处理上传文件字段
const formattedValues = { ...values }; const formattedValues = { ...values };
if (values.addressImg && Array.isArray(values.addressImg) && values.addressImg.length > 0) { if (Array.isArray(values.addressImg)) {
// 如果addressImg是文件数组提取URL
formattedValues.addressImg = values.addressImg[0]?.url || ''; formattedValues.addressImg = values.addressImg[0]?.url || '';
} }
const submitData: AboutUsRequest = { ...aboutData, ...formattedValues };
// 准备提交数据
const submitData: AboutUsRequest = {
...aboutData,
...formattedValues,
};
const response = await updateAboutUs(submitData); const response = await updateAboutUs(submitData);
if (response && response.success) { if (response?.success) {
message.success(intl.formatMessage({ id: 'aboutManage.saveSuccess' })); message.success(intl.formatMessage({ id: 'aboutManage.saveSuccess' }));
fetchAboutData(); // 刷新数据 fetchAboutData();
} else { } else {
message.error(response.message || intl.formatMessage({ id: 'aboutManage.saveFailed' })); message.error(response.message || intl.formatMessage({ id: 'aboutManage.saveFailed' }));
} }
} catch (errorInfo: any) { } catch (errorInfo: any) {
// 获取所有字段的错误信息 const fields = errorInfo?.errorFields || [];
const errorFields = errorInfo.errorFields || []; const hasZhError = fields.some((f: any) => !`${f.name}`.includes('En'));
const hasEnError = fields.some((f: any) => `${f.name}`.includes('En'));
// 检查是否有中文标题或内容的错误 if (hasZhError) setActiveTabKey('zh');
const hasZhError = errorFields.some((field: any) => { else if (hasEnError) setActiveTabKey('en');
if (!field.name) return false;
const fieldName = Array.isArray(field.name) ? field.name.join('.') : String(field.name);
return !fieldName.includes('En');
});
// 检查是否有英文标题或内容的错误
const hasEnError = errorFields.some((field: any) => {
if (!field.name) return false;
const fieldName = Array.isArray(field.name) ? field.name.join('.') : String(field.name);
return fieldName.includes('En');
});
// 如果有中文字段错误切换到中文Tab
if (hasZhError) {
setActiveTabKey('zh');
}
// 如果只有英文字段错误切换到英文Tab
else if (hasEnError && !hasZhError) {
setActiveTabKey('en');
}
console.log('表单验证失败:', errorInfo);
} finally { } finally {
setSubmitting(false); setSubmitting(false);
} }
}; };
const renderFormFields = (lang: 'zh' | 'en') => {
const isZh = lang === 'zh';
const prefix = isZh ? '' : 'En';
const langCode = isZh ? 'zh-CN' : 'en';
return (
<>
<Title level={5} style={{ textAlign: 'center' }}>{intl.formatMessage({ id: 'aboutManage.title' })}</Title>
<Form.Item
name={`title${prefix}`}
label={intl.formatMessage({ id: `aboutManage.form.title${prefix}` })}
rules={[{ required: true, message: intl.formatMessage({ id: `aboutManage.form.title${prefix}Required` }) }]}
>
<Input placeholder={intl.formatMessage({ id: `aboutManage.form.title${prefix}Placeholder` })} />
</Form.Item>
<Form.Item
name={`content${prefix}`}
label={intl.formatMessage({ id: `aboutManage.form.content${prefix}` })}
rules={[{ required: true, message: intl.formatMessage({ id: `aboutManage.form.content${prefix}Required` }) }]}
>
<WangEditor language={langCode} height={`${editorHeight}px`} placeholder={intl.formatMessage({ id: `aboutManage.form.content${prefix}Placeholder` })} />
</Form.Item>
<Title level={5} style={{ textAlign: 'center' }}></Title>
{(
<Form.Item
name="addressImg"
label="地址图片"
rules={[{ required: true, message: '请上传地址图片' }]}
normalize={(val) => typeof val === 'string' ? [{ uid: '-1', name: 'image.jpg', status: 'done', url: val }] : val}
>
<FileUpload maxCount={1} maxSize={2} listType="picture-card" />
</Form.Item>
)}
{["address", "contactsConsult", "contactsEmail", "contactsPhone"].map((field) => (
<Form.Item
key={field}
name={`${field}${prefix}`}
label={intl.formatMessage({ id: `aboutManage.form.${field}${prefix}` })}
rules={[{ required: true, message: intl.formatMessage({ id: `aboutManage.form.${field}${prefix}Required` }) }]}
>
<WangEditor language={langCode} height={`${editorHeight}px`} placeholder={intl.formatMessage({ id: `aboutManage.form.${field}${prefix}Placeholder` })} />
</Form.Item>
))}
</>
);
};
return ( return (
<div className="common-container"> <div className="common-container">
<Card <Card>
title={intl.formatMessage({ id: 'aboutManage.title' })}
extra={
<Button
type="primary"
onClick={handleSubmit}
loading={submitting}
>
{intl.formatMessage({ id: 'aboutManage.save' })}
</Button>
}
>
<Spin spinning={loading}> <Spin spinning={loading}>
<Form <Form form={form} layout="vertical">
form={form}
layout="vertical"
initialValues={aboutData || {}}
>
<Form.Item
name="addressImg"
label="地址图片"
rules={[{ required: true, message: '请上传地址图片' }]}
normalize={(value) => {
if (typeof value === 'string') {
return [
{
uid: '-1',
name: 'image.jpg',
status: 'done',
url: value,
}
];
}
return value;
}}
>
<FileUpload
maxCount={1}
maxSize={2}
listType="picture-card"
/>
</Form.Item>
<Tabs activeKey={activeTabKey} onChange={handleTabChange}> <Tabs activeKey={activeTabKey} onChange={handleTabChange}>
<TabPane tab={intl.formatMessage({ id: 'aboutManage.form.chineseTab' })} key="zh"> <TabPane tab={intl.formatMessage({ id: 'aboutManage.form.chineseTab' })} key="zh">
<Form.Item {renderFormFields('zh')}
name="title"
label={intl.formatMessage({ id: 'aboutManage.form.title' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.titleRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.titlePlaceholder' })} />
</Form.Item>
<Form.Item
name="content"
label={intl.formatMessage({ id: 'aboutManage.form.content' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contentRequired' }) }]}
>
<WangEditor
language="zh-CN"
height="400px"
placeholder={intl.formatMessage({ id: 'aboutManage.form.contentPlaceholder' })}
/>
</Form.Item>
<Form.Item
name="address"
label={intl.formatMessage({ id: 'aboutManage.form.address' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.addressRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.addressPlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsPhone"
label={intl.formatMessage({ id: 'aboutManage.form.contactsPhone' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsPhoneRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsPhonePlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsEmail"
label={intl.formatMessage({ id: 'aboutManage.form.contactsEmail' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsEmailRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsEmailPlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsConsult"
label={intl.formatMessage({ id: 'aboutManage.form.contactsConsult' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsConsultRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsConsultPlaceholder' })} />
</Form.Item>
</TabPane> </TabPane>
<TabPane tab={intl.formatMessage({ id: 'aboutManage.form.englishTab' })} key="en"> <TabPane tab={intl.formatMessage({ id: 'aboutManage.form.englishTab' })} key="en">
<Form.Item {renderFormFields('en')}
name="titleEn"
label={intl.formatMessage({ id: 'aboutManage.form.titleEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.titleEnRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.titleEnPlaceholder' })} />
</Form.Item>
<Form.Item
name="contentEn"
label={intl.formatMessage({ id: 'aboutManage.form.contentEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contentEnRequired' }) }]}
>
<WangEditor
language="en"
height="400px"
placeholder={intl.formatMessage({ id: 'aboutManage.form.contentEnPlaceholder' })}
/>
</Form.Item>
<Form.Item
name="addressEn"
label={intl.formatMessage({ id: 'aboutManage.form.addressEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.addressEnRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.addressEnPlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsPhoneEn"
label={intl.formatMessage({ id: 'aboutManage.form.contactsPhoneEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsPhoneEnRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsPhoneEnPlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsEmailEn"
label={intl.formatMessage({ id: 'aboutManage.form.contactsEmailEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsEmailEnRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsEmailEnPlaceholder' })} />
</Form.Item>
<Form.Item
name="contactsConsultEn"
label={intl.formatMessage({ id: 'aboutManage.form.contactsConsultEn' })}
rules={[{ required: true, message: intl.formatMessage({ id: 'aboutManage.form.contactsConsultEnRequired' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'aboutManage.form.contactsConsultEnPlaceholder' })} />
</Form.Item>
</TabPane> </TabPane>
</Tabs> </Tabs>
</Form> </Form>
</Spin> </Spin>
<div className={styles.saveBtnWrapper}> <div className={styles.saveBtnWrapper}>
<Button <Button type="primary" onClick={handleSubmit} loading={submitting}>
type="primary"
onClick={handleSubmit}
loading={submitting}
>
{intl.formatMessage({ id: 'aboutManage.save' })} {intl.formatMessage({ id: 'aboutManage.save' })}
</Button> </Button>
</div> </div>