维护国际化

This commit is contained in:
linxd
2025-07-03 10:21:55 +08:00
parent fafb2cda44
commit cf8e9d0820
61 changed files with 2246 additions and 836 deletions

View File

@ -17,7 +17,7 @@ import {
Popconfirm,
Modal,
} from 'antd';
import { history, useLocation } from 'umi';
import { history, useLocation, useIntl } from 'umi';
import {
ArrowLeftOutlined,
SaveOutlined,
@ -73,6 +73,7 @@ const StarOptionsText = {
};
const SupplierAnnualTemplateManageAdd: React.FC = () => {
const intl = useIntl();
const [form] = Form.useForm();
const [loading, setLoading] = useState<boolean>(false);
const [isEdit, setIsEdit] = useState<boolean>(false);
@ -91,12 +92,12 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
if (res.success && res.data) {
setTemplateList(res.data);
} else {
message.error(res.message || '获取模板列表失败');
message.error(res.message || intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.getListFailed' }));
}
setLoading(false);
} catch (error) {
console.error('获取模板列表失败:', error);
message.error('获取模板列表失败');
message.error(intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.getListFailed' }));
setLoading(false);
}
};
@ -123,12 +124,12 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
setIndicatorList(res.data.indicatorList);
}
} else {
message.error(res.message || '获取模板详情失败');
message.error(res.message || intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.getDetailFailed' }));
}
setLoading(false);
} catch (error) {
console.error('获取模板详情失败:', error);
message.error('获取模板详情失败');
message.error(intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.getDetailFailed' }));
setLoading(false);
}
};
@ -162,7 +163,7 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
history.goBack();
};
// 实际提交数据的函数
// 实际提交数据的函数
const submitFormData = async (submitData: supplierAnnualTemplateManage.AddTemplateRequest) => {
setLoading(true);
try {
@ -175,14 +176,20 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
}
if (res && res.success) {
message.success(isEdit ? '模板更新成功' : '模板保存成功');
message.success(isEdit
? intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.submitSuccess' })
: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.saveSuccess' }));
history.goBack();
} else {
message.error(res?.message || (isEdit ? '模板更新失败' : '模板保存失败'));
message.error(res?.message || (isEdit
? intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.submitFailed' })
: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.saveFailed' })));
}
} catch (error) {
console.error('提交失败:', error);
message.error('提交失败');
message.error(isEdit
? intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.submitFailed' })
: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.saveFailed' }));
} finally {
setLoading(false);
}
@ -192,14 +199,17 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
const handleSubmit = async (values: any) => {
// 检查指标列表
if (!indicatorList || indicatorList.length === 0) {
message.error('至少需要添加一项指标');
message.error(intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.atLeastOneIndicator' }));
return;
}
// 检查指标名称不能为空
const emptyNameIndex = indicatorList.findIndex(item => !item.itemName);
if (emptyNameIndex !== -1) {
message.error(`${emptyNameIndex + 1} 项指标名称不能为空`);
message.error(intl.formatMessage(
{ id: 'supplierAnnualTemplateManage.add.indicatorNameRequired' },
{ index: emptyNameIndex + 1 }
));
return;
}
@ -217,10 +227,12 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
// 显示确认弹框
Modal.confirm({
title: '确认提交',
content: isEdit ? '确定要更新此模板吗?' : '确定要保存此模板吗?',
okText: '确定',
cancelText: '取消',
title: intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.confirm' }),
content: isEdit
? intl.formatMessage({ id: 'supplierAnnualTemplateManage.modal.enableConfirmContent' })
: intl.formatMessage({ id: 'supplierAnnualTemplateManage.modal.disableConfirmContent' }),
okText: intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.confirm' }),
cancelText: intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.cancel' }),
onOk: async () => {
await submitFormData(submitData);
}
@ -251,12 +263,12 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
setIndicatorList(copiedList);
}
} else {
message.error(res.message || '获取模板详情失败');
message.error(res.message || intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.getDetailFailed' }));
}
setLoading(false);
} catch (error) {
console.error('获取模板详情失败:', error);
message.error('获取模板详情失败');
message.error(intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.getDetailFailed' }));
setLoading(false);
}
}
@ -294,26 +306,26 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
// 指标表格列定义
const columns = [
{
title: '序号',
title: intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.serialNumber' }),
dataIndex: 'orderBy',
key: 'orderBy',
width: 80,
render: (_: string, __: any, index: number) => index + 1,
},
{
title: '检查项目',
title: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.checkItem' }),
dataIndex: 'itemName',
key: 'itemName',
render: (text: string, record: supplierAnnualTemplateManage.IndicatorItem, index: number) => (
<Input
value={text}
onChange={(e) => handleIndicatorChange(index, 'itemName', e.target.value)}
placeholder="请输入检查项目名称"
placeholder={`${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseInput' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.checkItem' })}`}
/>
),
},
{
title: '星号项',
title: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.starItem' }),
dataIndex: 'isStar',
key: 'isStar',
width: 120,
@ -323,13 +335,13 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
onChange={(value) => handleIndicatorChange(index, 'isStar', value)}
className={styles.starSelector}
>
<Option value={StarOptions.YES}>{StarOptionsText[StarOptions.YES]}</Option>
<Option value={StarOptions.NO}>{StarOptionsText[StarOptions.NO]}</Option>
<Option value={StarOptions.YES}>{intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.yes' })}</Option>
<Option value={StarOptions.NO}>{intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.no' })}</Option>
</Select>
),
},
{
title: '操作',
title: intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.operation' }),
key: 'action',
width: 120,
render: (_: any, __: supplierAnnualTemplateManage.IndicatorItem, index: number) => (
@ -339,16 +351,16 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
type="link"
icon={<PlusOutlined />}
onClick={handleAddIndicator}
title="添加指标"
title={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.addIndicator' })}
/>
)}
<Popconfirm
title="确定要删除此指标吗?"
title={intl.formatMessage({ id: 'supplierAnnualTemplateManage.modal.deleteConfirmContent' })}
onConfirm={() => handleDeleteIndicator(index)}
okText="确定"
cancelText="取消"
okText={intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.confirm' })}
cancelText={intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.cancel' })}
>
<Button type="link" danger icon={<DeleteOutlined />} title="删除指标" />
<Button type="link" danger icon={<DeleteOutlined />} title={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.deleteIndicator' })} />
</Popconfirm>
</Space>
),
@ -359,10 +371,13 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
<div className="common-container">
<div className={styles.pageHeader}>
<Title level={4} style={{ margin: 0 }}>
{isEdit ? '编辑年度模板' : '新增年度模板'}
{isEdit
? intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.edit' })
: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.title' })
}
</Title>
<Button type="link" icon={<ArrowLeftOutlined />} onClick={handleBack}>
{intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.back' })}
</Button>
</div>
@ -377,26 +392,30 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
wrapperCol={{ span: 17 }}
>
<Spin spinning={loading}>
<Card title="基础信息" bordered={false} className={styles.innerCard}>
<Card title={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.basicInfo' })} bordered={false} className={styles.innerCard}>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label="模板名称"
label={intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.templateName' })}
name="templateName"
rules={[{ required: true, message: '请输入模板名称' }]}
rules={[{ required: true, message: `${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseInput' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.templateName' })}` }]}
>
<Input placeholder="请输入模板名称" maxLength={50} />
<Input placeholder={`${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseInput' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.templateName' })}`} maxLength={50} />
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label="是否限品类"
label={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.categoryLimitation' })}
name="categoryLimitation"
rules={[{ required: true, message: '请选择是否限品类' }]}
rules={[{ required: true, message: `${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseSelect' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.categoryLimitation' })}` }]}
>
<Radio.Group>
<Radio value={CategoryLimitationType.UNIVERSAL}>{CategoryLimitationTypeText[CategoryLimitationType.UNIVERSAL]}</Radio>
<Radio value={CategoryLimitationType.LIMITED}>{CategoryLimitationTypeText[CategoryLimitationType.LIMITED]}</Radio>
<Radio value={CategoryLimitationType.UNIVERSAL}>
{intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.categoryLimitationUniversal' })}
</Radio>
<Radio value={CategoryLimitationType.LIMITED}>
{intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.categoryLimitationLimited' })}
</Radio>
</Radio.Group>
</Form.Item>
</Col>
@ -411,9 +430,9 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
const categoryLimitation = getFieldValue('categoryLimitation');
return categoryLimitation === CategoryLimitationType.LIMITED ? (
<Form.Item
label="选择品类"
label={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.selectCategory' })}
name="categoryId"
rules={[{ required: true, message: '请选择品类' }]}
rules={[{ required: true, message: `${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseSelect' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.category' })}` }]}
>
<CategorySelector multiple={false} />
</Form.Item>
@ -426,11 +445,11 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
<Row gutter={24}>
<Col span={8}>
<Form.Item
label="选择模版"
label={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.selectTemplate' })}
name="copyTemplateId"
>
<Select
placeholder="选择模版"
placeholder={intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseSelect' })}
loading={templateList.length === 0}
onSelect={handleTemplateSelect}
>
@ -446,9 +465,9 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
</Col>
<Col span={8}>
<Form.Item
label="模板状态"
label={intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.status' })}
name="status"
rules={[{ required: true, message: '请选择模板状态' }]}
rules={[{ required: true, message: `${intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.pleaseSelect' })}${intl.formatMessage({ id: 'supplierAnnualTemplateManage.list.status' })}` }]}
>
<Radio.Group>
<Radio value={AnnualTemplateStatus.DRAFT}>{AnnualTemplateStatusText[AnnualTemplateStatus.DRAFT]}</Radio>
@ -462,7 +481,7 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
<Divider />
<Card title="指标信息" bordered={false} className={styles.innerCard}>
<Card title={intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.indicatorInfo' })} bordered={false} className={styles.innerCard}>
<Table
columns={columns}
dataSource={indicatorList}
@ -470,7 +489,7 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
rowKey="orderBy"
size="middle"
pagination={false}
locale={{ emptyText: '暂无指标数据' }}
locale={{ emptyText: intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.noIndicatorData' }) }}
className={styles.indicatorTable}
/>
</Card>
@ -478,9 +497,9 @@ const SupplierAnnualTemplateManageAdd: React.FC = () => {
<div className={styles.formActions}>
<Space>
<Button onClick={handleBack}></Button>
<Button onClick={handleBack}>{intl.formatMessage({ id: 'supplierAnnualTemplateManage.common.cancel' })}</Button>
<Button type="primary" htmlType="submit" loading={loading} icon={<SaveOutlined />}>
{isEdit ? '更新' : '保存'}
{isEdit ? intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.update' }) : intl.formatMessage({ id: 'supplierAnnualTemplateManage.add.save' })}
</Button>
</Space>
</div>