测试修改问题,国际化

This commit is contained in:
linxd
2025-07-01 17:02:11 +08:00
parent 4e972b1841
commit a774e03317
18 changed files with 688 additions and 222 deletions

View File

@ -1,5 +1,6 @@
import React, { useState, useEffect, useCallback, useMemo } from 'react';
import { Table, Input, Button, Space, message } from 'antd';
import type { TablePaginationConfig } from 'antd/es/table';
import { SearchOutlined } from '@ant-design/icons';
import { getUserList } from '@/servers/api/user';
import './EvaluateTaskPersonnelSelector.less';
@ -52,6 +53,12 @@ const EvaluateTaskPersonnelSelector: React.FC<EvaluateTaskPersonnelSelectorProps
// 加载状态
const [loading, setLoading] = useState<boolean>(false);
const [pagination, setPagination] = useState<TablePaginationConfig>({
current: 1,
pageSize: 10,
total: 0,
});
// 初始化时根据传入的selectedPersonnel设置选中状态
useEffect(() => {
// 直接使用传入的selectedPersonnel更新选中状态
@ -68,8 +75,8 @@ const EvaluateTaskPersonnelSelector: React.FC<EvaluateTaskPersonnelSelectorProps
try {
const params: API.UserListRequest = {
basePageRequest: {
pageNo: 1,
pageSize: 100, // 获取足够多的数据
pageNumber: pagination.current as number,
pageSize: pagination.pageSize as number, // 获取足够多的数据
},
keyword: keyword || undefined,
filter,
@ -101,7 +108,7 @@ const EvaluateTaskPersonnelSelector: React.FC<EvaluateTaskPersonnelSelectorProps
} finally {
setLoading(false);
}
}, [keyword]); // 移除selectedPersonnelIds依赖
}, [keyword, pagination]); // 移除selectedPersonnelIds依赖
/**
* 初始化人员数据
@ -137,11 +144,12 @@ const EvaluateTaskPersonnelSelector: React.FC<EvaluateTaskPersonnelSelectorProps
const handleConfirm = () => {
// 根据选中的ID筛选出完整的人员数据
const selectedData = personnel.filter(item => selectedKeys.includes(item.id));
// 回调传递给父组件
onSelect(selectedData);
};
const handleTableChange = (newPagination: TablePaginationConfig) => {
setPagination(newPagination);
};
// 表格列定义
const columns = [
{
@ -187,6 +195,7 @@ const EvaluateTaskPersonnelSelector: React.FC<EvaluateTaskPersonnelSelectorProps
size="small"
loading={loading}
pagination={{ pageSize: 10 }}
onChange={handleTableChange}
/>
<div className="selector-footer">
<Space>

View File

@ -1,5 +1,6 @@
// 供应商评价 模板管理新增中的table
import React, { useState, useEffect } from 'react';
import { useIntl } from 'umi';
import {
Table,
Input,
@ -45,7 +46,7 @@ interface TableRowItem {
subIndicator: string;
ndScore: string;
isStar: string;
desc?: string;
descScore?: string;
orderBy?: number;
ndOrderBy?: number;
selected?: boolean; // 是否选中
@ -59,6 +60,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
onSelect,
defaultSelectedIds = [],
}) => {
const intl = useIntl();
const [dataSource, setDataSource] = useState<TableRowItem[]>([]);
const [form] = Form.useForm();
const [indicatorTypes, setIndicatorTypes] = useState<DictItem[]>([]);
@ -72,11 +74,11 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
if (res.success && res.data) {
setIndicatorTypes(res.data);
} else {
message.error('获取指标类型失败');
message.error(intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.message.getTypeFailed' }));
}
} catch (error) {
console.error('获取指标类型失败:', error);
message.error('获取指标类型失败');
message.error(intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.message.getTypeFailed' }));
} finally {
setLoadingTypes(false);
}
@ -116,7 +118,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
subIndicator: ndItem.subIndicator,
ndScore: ndItem.score,
isStar: ndItem.isStar || StarLevel.NO,
desc: ndItem.desc,
descScore: ndItem.descScore,
orderBy: typeof stItem.orderBy === 'string' ? parseInt(stItem.orderBy) : stItem.orderBy,
ndOrderBy: typeof ndItem.orderBy === 'string' ? parseInt(ndItem.orderBy) : ndItem.orderBy,
selected: defaultSelectedIds.includes(ndItem.id) // 根据defaultSelectedIds设置选中状态
@ -169,7 +171,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
score: item.ndScore || '0',
isStar: item.isStar || StarLevel.NO,
orderBy: item.ndOrderBy || ndIndex + 1,
desc: item.desc || ''
descScore: item.descScore || ''
};
})
};
@ -310,7 +312,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
// 检查是否有重复的baseIndicator
const existingNames = newData.map((d) => d.baseIndicator).filter(Boolean);
if (existingNames.includes(val)) {
message.warning('指标名称已存在,请使用不同的名称');
message.warning(intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.message.duplicateName' }));
return;
}
}
@ -363,7 +365,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
subIndicator: '', // 注意二级指标需要为空字符串不能为undefined
ndScore: '0',
isStar: StarLevel.NO,
desc: '',
descScore: '',
orderBy: dataSource.length + 1, // 确保正确的排序
ndOrderBy: 1, // 设置二级指标初始排序
selected: false, // 默认未选中
@ -416,7 +418,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
const parent = dataSource.find((item) => item.key === parentKey);
if (!parent || !parent.baseIndicator) {
message.warning('请先填写一级指标名称');
message.warning(intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.baseIndicator' }));
return;
}
@ -429,7 +431,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
subIndicator: '',
ndScore: '0',
isStar: StarLevel.NO,
desc: '',
descScore: '',
ndOrderBy: dataSource.filter(item => item.baseIndicator === parent.baseIndicator).length + 1,
selected: false, // 默认未选中
};
@ -501,10 +503,10 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
const columns = [
{
title: '一级指标',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.levelOne' }),
children: [
{
title: '序号',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.index' }),
dataIndex: 'index',
align: 'center',
key: 'index',
@ -514,7 +516,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
},
{
title: '类型',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.type' }),
dataIndex: 'indicatorType',
align: 'center',
key: 'indicatorType',
@ -530,7 +532,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
<Select
value={cellContent}
onChange={(val) => handleInputChange(val, record, 'indicatorType')}
placeholder="请选择类型"
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.selectType' })}
style={{ width: '100%' }}
loading={loadingTypes}
>
@ -545,7 +547,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
},
{
title: '基本指标',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.baseIndicator' }),
align: 'center',
dataIndex: 'baseIndicator',
key: 'baseIndicator',
@ -559,14 +561,14 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
<Input
value={cellContent}
onChange={(e) => handleInputChange(e.target.value, record, 'baseIndicator')}
placeholder="请输入基本指标"
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.baseIndicator' })}
/>
);
});
},
},
{
title: '指标说明',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.indicatorDescription' }),
align: 'center',
dataIndex: 'descIndicator',
key: 'descIndicator',
@ -580,14 +582,14 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
<Input
value={cellContent}
onChange={(e) => handleInputChange(e.target.value, record, 'descIndicator')}
placeholder="请输入指标说明"
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.indicatorDescription' })}
/>
);
});
},
},
{
title: '分值',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.score' }),
align: 'center',
dataIndex: 'stScore',
key: 'stScore',
@ -610,7 +612,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
},
{
title: '操作',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.action' }),
key: 'level1Action',
align: 'center',
width: 100,
@ -625,19 +627,19 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
onClick={() => {
addLevel1Indicator(record);
}}
title="添加一级指标"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.button.addLevelOne' })}
/>
<Popconfirm
title="确定要删除此指标吗?"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.delete' })}
onConfirm={() => removeLevel1Indicator(record)}
okText="确定"
cancelText="取消"
okText={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.ok' })}
cancelText={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.cancel' })}
>
<Button
type="text"
danger
icon={<DeleteOutlined />}
title="删除一级指标"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.button.deleteLevelOne' })}
/>
</Popconfirm>
</div>
@ -647,10 +649,10 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
].filter((col) => !(isDetail && col.key === 'level1Action')),
},
{
title: '二级指标',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.levelTwo' }),
children: [
{
title: '细分指标',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.subIndicator' }),
dataIndex: 'subIndicator',
key: 'subIndicator',
align: 'center',
@ -663,13 +665,13 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
<Input
value={text}
onChange={(e) => handleInputChange(e.target.value, record, 'subIndicator')}
placeholder="请输入细分指标"
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.subIndicator' })}
/>
);
},
},
{
title: '分值',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.score' }),
dataIndex: 'ndScore',
key: 'ndScore',
width: 80,
@ -690,7 +692,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
},
{
title: '星号项',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.star' }),
dataIndex: 'isStar',
key: 'isStar',
align: 'center',
@ -712,10 +714,10 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
},
{
title: '评分说明',
dataIndex: 'desc',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.scoreDescription' }),
dataIndex: 'descScore',
align: 'center',
key: 'desc',
key: 'descScore',
render: (text: string, record: TableRowItem) => {
if (isDetail) {
return text || '-';
@ -723,15 +725,15 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
return (
<TextArea
value={text}
onChange={(e) => handleInputChange(e.target.value, record, 'desc')}
placeholder="请输入评分说明"
onChange={(e) => handleInputChange(e.target.value, record, 'descScore')}
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.scoreDescription' })}
autoSize={{ minRows: 1, maxRows: 3 }}
/>
);
},
},
{
title: '操作',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.action' }),
key: 'level2Action',
align: 'center',
width: 100,
@ -744,21 +746,21 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
type="text"
icon={<PlusOutlined />}
onClick={() => addSubIndicator(record.key)}
title="添加细分指标"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.button.addSubIndicator' })}
/>
{/* 如果该一级指标下有多个二级指标,才允许删除 */}
{getLevel1RowSpan(record.baseIndicator) > 1 && (
<Popconfirm
title="确定要删除此指标吗?"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.delete' })}
onConfirm={() => removeSubIndicator(record.key)}
okText="确定"
cancelText="取消"
okText={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.ok' })}
cancelText={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.confirm.cancel' })}
>
<Button
type="text"
danger
icon={<MinusCircleOutlined />}
title="删除细分指标"
title={intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.button.deleteSubIndicator' })}
/>
</Popconfirm>
)}
@ -768,7 +770,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
},
// 添加勾选列只在isCheck为true时显示
...(isCheck ? [{
title: '勾选',
title: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.check' }),
key: 'check',
align: 'center',
width: 80,
@ -794,7 +796,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
rowKey="key"
size="middle"
scroll={{ x: 'max-content' }}
locale={{ emptyText: '无数据' }}
locale={{ emptyText: intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.placeholder.emptyData' }) }}
/>
{!isDetail && (
<div className="add-button-row">
@ -806,7 +808,7 @@ const EvaluateTemplateTable: React.FC<EvaluateTemplateTableProps> = ({
style={{ width: '100%', marginTop: 16 }}
icon={<PlusOutlined />}
>
{intl.formatMessage({ id: 'supplierTemplateManage.evaluateTable.button.addLevelOne' })}
</Button>
</div>
)}