维护国际化
This commit is contained in:
@ -13,7 +13,7 @@ import {
|
||||
Table,
|
||||
} from 'antd';
|
||||
import { SearchOutlined, DeleteOutlined } from '@ant-design/icons';
|
||||
import { history } from 'umi';
|
||||
import { history, useIntl } from 'umi';
|
||||
import styles from './supplierEvaluateScore.less';
|
||||
import {
|
||||
getSupplierDimension,
|
||||
@ -28,6 +28,7 @@ const { RangePicker } = DatePicker;
|
||||
const { Option } = Select;
|
||||
|
||||
const SupplierEvaluateScore: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const [filterForm] = Form.useForm();
|
||||
// 新增状态
|
||||
const [activeTab, setActiveTab] = useState<string>('supplier');
|
||||
@ -104,12 +105,12 @@ status:状态
|
||||
total: response.data.total || 0,
|
||||
});
|
||||
} else {
|
||||
message.error(response.message || '获取供应商列表失败');
|
||||
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateScore.message.getSupplierListFailed' }));
|
||||
setSupplierTableData([]);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取供应商列表失败:', error);
|
||||
message.error('获取供应商列表失败');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.getSupplierListFailed' }));
|
||||
setSupplierTableData([]);
|
||||
} finally {
|
||||
setSupplierTableLoading(false);
|
||||
@ -130,12 +131,12 @@ status:状态
|
||||
total: response.data.total || 0,
|
||||
});
|
||||
} else {
|
||||
message.error(response.message || '获取任务列表失败');
|
||||
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateScore.message.getTaskListFailed' }));
|
||||
setTaskTableData([]);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取任务列表失败:', error);
|
||||
message.error('获取任务列表失败');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.getTaskListFailed' }));
|
||||
setTaskTableData([]);
|
||||
} finally {
|
||||
setTaskTableLoading(false);
|
||||
@ -234,7 +235,7 @@ status:状态
|
||||
// 导出功能
|
||||
const handleExport = async (record: any) => {
|
||||
if (!record?.id) {
|
||||
message.error('缺少必要参数,无法导出');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.exportParamMissing' }));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -246,14 +247,14 @@ status:状态
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('导出失败:', error);
|
||||
message.error('导出失败,请稍后再试');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.exportFailed' }));
|
||||
}
|
||||
};
|
||||
|
||||
// 供应商Tab的表格列
|
||||
const supplierColumns = [
|
||||
{
|
||||
title: '序号',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.index' }),
|
||||
dataIndex: 'index',
|
||||
key: 'index',
|
||||
width: 80,
|
||||
@ -261,56 +262,56 @@ status:状态
|
||||
(pagination.current - 1) * pagination.pageSize + index + 1,
|
||||
},
|
||||
{
|
||||
title: '供应商名称',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.supplierName' }),
|
||||
dataIndex: 'name',
|
||||
key: 'name',
|
||||
},
|
||||
{
|
||||
title: '评价主题',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.evaluateTheme' }),
|
||||
dataIndex: 'evaluateTheme',
|
||||
key: 'evaluateTheme',
|
||||
},
|
||||
{
|
||||
title: '发起单位',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.tenantName' }),
|
||||
dataIndex: 'tenantName',
|
||||
key: 'tenantName',
|
||||
},
|
||||
{
|
||||
title: '评价开始时间',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.startTime' }),
|
||||
dataIndex: 'startTime',
|
||||
key: 'startTime',
|
||||
},
|
||||
{
|
||||
title: '评价结束时间',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.endTime' }),
|
||||
dataIndex: 'endTime',
|
||||
key: 'endTime',
|
||||
},
|
||||
{
|
||||
title: '评价状态',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.statusName' }),
|
||||
dataIndex: 'statusName',
|
||||
key: 'statusName',
|
||||
},
|
||||
{
|
||||
title: '提交状态',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionStatus' }),
|
||||
dataIndex: 'submissionStatus',
|
||||
key: 'submissionStatus',
|
||||
},
|
||||
{
|
||||
title: '提交时间',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.submissionTime' }),
|
||||
dataIndex: 'submissionTime',
|
||||
key: 'submissionTime',
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.action' }),
|
||||
key: 'action',
|
||||
render: (text: string, record: any) => (
|
||||
<Space>
|
||||
<Button type="link" onClick={() => goToScoring(record, 'supplier', 'view')}>
|
||||
查看
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.view' })}
|
||||
</Button>
|
||||
{record.status === '1' && ( // 只有待评分状态才显示打分按钮
|
||||
<Button type="link" onClick={() => goToScoring(record, 'supplier', 'score')}>
|
||||
打分
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.score' })}
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
@ -321,7 +322,7 @@ status:状态
|
||||
// 评价任务Tab的表格列
|
||||
const taskColumns = [
|
||||
{
|
||||
title: '序号',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.index' }),
|
||||
dataIndex: 'index',
|
||||
key: 'index',
|
||||
width: 80,
|
||||
@ -329,40 +330,40 @@ status:状态
|
||||
(pagination.current - 1) * pagination.pageSize + index + 1,
|
||||
},
|
||||
{
|
||||
title: '评价主题',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.evaluateTheme' }),
|
||||
dataIndex: 'evaluateTheme',
|
||||
key: 'evaluateTheme',
|
||||
},
|
||||
{
|
||||
title: '发起单位',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.deptName' }),
|
||||
dataIndex: 'deptName',
|
||||
key: 'deptName',
|
||||
},
|
||||
{
|
||||
title: '评价开始时间',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.startTime' }),
|
||||
dataIndex: 'startTime',
|
||||
key: 'startTime',
|
||||
},
|
||||
{
|
||||
title: '评价结束时间',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.endTime' }),
|
||||
dataIndex: 'endTime',
|
||||
key: 'endTime',
|
||||
},
|
||||
{
|
||||
title: '评价状态',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.statusName' }),
|
||||
dataIndex: 'statusName',
|
||||
key: 'statusName',
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.column.action' }),
|
||||
key: 'action',
|
||||
render: (text: string, record: any) => (
|
||||
<Space>
|
||||
<Button type="link" onClick={() => goToScoring(record, 'task', 'view')}>
|
||||
查看
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.view' })}
|
||||
</Button>
|
||||
<Button type="link" onClick={() => handleExport(record)}>
|
||||
导出
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.export' })}
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
@ -374,21 +375,23 @@ status:状态
|
||||
<div className="filter-action-row">
|
||||
<div className="filter-form">
|
||||
<Form form={filterForm} layout="inline">
|
||||
<Form.Item name="name" label="关键字">
|
||||
<Form.Item name="name" label={intl.formatMessage({ id: 'supplierEvaluateScore.form.keyword' })}>
|
||||
<Input
|
||||
placeholder={
|
||||
activeTab === 'supplier' ? '请输入供应商名称' : '请输入评价主题'
|
||||
activeTab === 'supplier'
|
||||
? intl.formatMessage({ id: 'supplierEvaluateScore.form.placeholder.supplierName' })
|
||||
: intl.formatMessage({ id: 'supplierEvaluateScore.form.placeholder.evaluateTheme' })
|
||||
}
|
||||
allowClear
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="evaluationTime" label="评价时间">
|
||||
<Form.Item name="evaluationTime" label={intl.formatMessage({ id: 'supplierEvaluateScore.form.evaluationTime' })}>
|
||||
<RangePicker />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item name="status" label="评价状态">
|
||||
<Select placeholder="请选择" style={{ width: 150 }} allowClear>
|
||||
<Form.Item name="status" label={intl.formatMessage({ id: 'supplierEvaluateScore.form.status' })}>
|
||||
<Select placeholder={intl.formatMessage({ id: 'supplierEvaluateScore.form.placeholder.select' })} style={{ width: 150 }} allowClear>
|
||||
{evaluateStatus.map((item) => (
|
||||
<Option key={item.code} value={item.code}>
|
||||
{item.dicName}
|
||||
@ -400,10 +403,10 @@ status:状态
|
||||
<Form.Item className="filter-btns">
|
||||
<Space>
|
||||
<Button type="primary" onClick={handleSearch}>
|
||||
<SearchOutlined /> 查询
|
||||
<SearchOutlined /> {intl.formatMessage({ id: 'supplierEvaluateScore.button.search' })}
|
||||
</Button>
|
||||
<Button onClick={handleReset} type="primary" danger>
|
||||
<DeleteOutlined /> 重置
|
||||
<DeleteOutlined /> {intl.formatMessage({ id: 'supplierEvaluateScore.button.reset' })}
|
||||
</Button>
|
||||
</Space>
|
||||
</Form.Item>
|
||||
@ -417,7 +420,7 @@ status:状态
|
||||
<div className={styles.headerRow}>
|
||||
<div className={styles.titleSection}>
|
||||
<Title level={4} className={styles.pageTitle}>
|
||||
供应商评价打分
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.title' })}
|
||||
</Title>
|
||||
</div>
|
||||
</div>
|
||||
@ -427,7 +430,7 @@ status:状态
|
||||
|
||||
<div className="content-area">
|
||||
<Tabs activeKey={activeTab} onChange={handleTabChange}>
|
||||
<TabPane tab="按供应商" key="supplier">
|
||||
<TabPane tab={intl.formatMessage({ id: 'supplierEvaluateScore.tab.supplier' })} key="supplier">
|
||||
<Table
|
||||
columns={supplierColumns}
|
||||
dataSource={supplierTableData}
|
||||
@ -439,12 +442,15 @@ status:状态
|
||||
total: pagination.total,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showTotal: (total) => intl.formatMessage(
|
||||
{ id: 'supplierEvaluateScore.pagination.total' },
|
||||
{ total }
|
||||
),
|
||||
}}
|
||||
onChange={handleTableChange}
|
||||
/>
|
||||
</TabPane>
|
||||
<TabPane tab="按评价任务" key="task">
|
||||
<TabPane tab={intl.formatMessage({ id: 'supplierEvaluateScore.tab.task' })} key="task">
|
||||
<Table
|
||||
columns={taskColumns}
|
||||
dataSource={taskTableData}
|
||||
@ -456,7 +462,10 @@ status:状态
|
||||
total: pagination.total,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
showTotal: (total) => intl.formatMessage(
|
||||
{ id: 'supplierEvaluateScore.pagination.total' },
|
||||
{ total }
|
||||
),
|
||||
}}
|
||||
onChange={handleTableChange}
|
||||
/>
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { history, useLocation } from 'umi';
|
||||
import { history, useLocation, useIntl } from 'umi';
|
||||
import {
|
||||
Button,
|
||||
Card,
|
||||
@ -21,6 +21,7 @@ const { Title } = Typography;
|
||||
const { confirm } = Modal;
|
||||
|
||||
const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const location = useLocation<{
|
||||
record: SupplierEvaluateScore.SupplierDimensionData;
|
||||
mode?: 'view' | 'score'; // 查看模式或打分模式
|
||||
@ -52,7 +53,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
setMode(location.state.record.status === '1' ? 'score' : 'view');
|
||||
}
|
||||
} else {
|
||||
message.error('缺少必要参数,无法获取详情');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.missingParams' }));
|
||||
history.goBack();
|
||||
}
|
||||
}, [location]);
|
||||
@ -92,7 +93,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
// 获取评价打分详情
|
||||
const fetchScoreDetail = async () => {
|
||||
if (!record?.id) {
|
||||
message.error('缺少必要参数,无法获取数据');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.submitParamMissing' }));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -107,11 +108,11 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
const formattedData = formatDataForScoreTable(response.data);
|
||||
setScoreData(formattedData);
|
||||
} else {
|
||||
message.error(response.message || '获取评价得分明细失败');
|
||||
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateScore.message.getDetailFailed' }));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取评价得分明细失败:', error);
|
||||
message.error('获取评价得分明细失败');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.getDetailFailed' }));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@ -137,7 +138,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
// 提交评分
|
||||
const handleSubmit = async () => {
|
||||
if (!record?.id) {
|
||||
message.error('缺少必要参数,无法提交');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.submitParamMissing' }));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -147,17 +148,17 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
);
|
||||
|
||||
if (hasEmptyScore) {
|
||||
message.warning('请为所有指标填写评分');
|
||||
message.warning(intl.formatMessage({ id: 'supplierEvaluateScore.message.emptyScore' }));
|
||||
return;
|
||||
}
|
||||
|
||||
// 显示确认对话框
|
||||
confirm({
|
||||
title: '提交确认',
|
||||
title: intl.formatMessage({ id: 'supplierEvaluateScore.confirm.title' }),
|
||||
icon: <ExclamationCircleOutlined />,
|
||||
content: '评分提交后将不可修改,确定要提交吗?',
|
||||
okText: '确定',
|
||||
cancelText: '取消',
|
||||
content: intl.formatMessage({ id: 'supplierEvaluateScore.confirm.content' }),
|
||||
okText: intl.formatMessage({ id: 'supplierEvaluateScore.confirm.ok' }),
|
||||
cancelText: intl.formatMessage({ id: 'supplierEvaluateScore.confirm.cancel' }),
|
||||
onOk: async () => {
|
||||
setSubmitting(true);
|
||||
try {
|
||||
@ -175,14 +176,14 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
const response = await saveEvaluateScore(submitData);
|
||||
|
||||
if (response.success) {
|
||||
message.success('评分保存成功');
|
||||
message.success(intl.formatMessage({ id: 'supplierEvaluateScore.message.saveSuccess' }));
|
||||
history.goBack();
|
||||
} else {
|
||||
message.error(response.message || '评分保存失败');
|
||||
message.error(response.message || intl.formatMessage({ id: 'supplierEvaluateScore.message.saveFailed' }));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('评分提交失败:', error);
|
||||
message.error('评分提交失败');
|
||||
message.error(intl.formatMessage({ id: 'supplierEvaluateScore.message.submitFailed' }));
|
||||
} finally {
|
||||
setSubmitting(false);
|
||||
}
|
||||
@ -193,12 +194,12 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
// 获取评价状态文本
|
||||
const getStatusText = (status: string) => {
|
||||
const statusMap: { [key: string]: string } = {
|
||||
'1': '待评分',
|
||||
'2': '已评分',
|
||||
'3': '进行中',
|
||||
'4': '已完成',
|
||||
'1': intl.formatMessage({ id: 'supplierEvaluateScore.status.pending' }),
|
||||
'2': intl.formatMessage({ id: 'supplierEvaluateScore.status.scored' }),
|
||||
'3': intl.formatMessage({ id: 'supplierEvaluateScore.status.inProgress' }),
|
||||
'4': intl.formatMessage({ id: 'supplierEvaluateScore.status.completed' }),
|
||||
};
|
||||
return statusMap[status] || '未知状态';
|
||||
return statusMap[status] || intl.formatMessage({ id: 'supplierEvaluateScore.status.unknown' });
|
||||
};
|
||||
|
||||
// 获取供应商名称
|
||||
@ -228,12 +229,15 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
<div className={styles.headerRow}>
|
||||
<div className={styles.titleSection}>
|
||||
<Title level={4} className={styles.pageTitle}>
|
||||
{getSupplierName()} - 评价打分
|
||||
{intl.formatMessage(
|
||||
{ id: 'supplierEvaluateScore.detail.title' },
|
||||
{ name: getSupplierName() }
|
||||
)}
|
||||
</Title>
|
||||
</div>
|
||||
<div className={styles.actionSection}>
|
||||
<Button type="link" icon={<ArrowLeftOutlined />} onClick={handleBack}>
|
||||
返回
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.back' })}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
@ -242,27 +246,37 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
{scoreDetail ? (
|
||||
<div className="content-area">
|
||||
<Title level={5} className={styles.pageTitle} style={{textAlign: 'center'}}>
|
||||
尊敬的评价人,请您谨慎评估,客观打分。您的评价结果将会成为供应商绩效评价的重要依据,并可能影响与供应商的后续合作。
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.detail.notice' })}
|
||||
</Title>
|
||||
<Card title="基本信息" bordered={false}>
|
||||
<Card title={intl.formatMessage({ id: 'supplierEvaluateScore.detail.basicInfo' })} bordered={false}>
|
||||
<Descriptions column={2} bordered>
|
||||
<Descriptions.Item label="供应商名称">{getSupplierName()}</Descriptions.Item>
|
||||
<Descriptions.Item label="品类">{scoreDetail.category || '-'}</Descriptions.Item>
|
||||
<Descriptions.Item label="评价主题">{getEvaluateTheme()}</Descriptions.Item>
|
||||
<Descriptions.Item label="评价状态">
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.supplierName' })}>
|
||||
{getSupplierName()}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.category' })}>
|
||||
{scoreDetail.category || '-'}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.evaluateTheme' })}>
|
||||
{getEvaluateTheme()}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.status' })}>
|
||||
{getStatusText(record?.status || '') || '-'}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label="评价开始时间">
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.startTime' })}>
|
||||
{record?.startTime || '-'}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label="评价结束时间">{record?.endTime || '-'}</Descriptions.Item>
|
||||
<Descriptions.Item label="发起单位">{getUnitName()}</Descriptions.Item>
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.endTime' })}>
|
||||
{record?.endTime || '-'}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={intl.formatMessage({ id: 'supplierEvaluateScore.description.unit' })}>
|
||||
{getUnitName()}
|
||||
</Descriptions.Item>
|
||||
</Descriptions>
|
||||
</Card>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Card title="评价打分" bordered={false}>
|
||||
<Card title={intl.formatMessage({ id: 'supplierEvaluateScore.detail.scoreInfo' })} bordered={false}>
|
||||
{scoreData.length > 0 ? (
|
||||
<ScoreEvaluationTable
|
||||
value={scoreData}
|
||||
@ -270,7 +284,7 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
isDetail={!canEdit} // 如果不可编辑,则以只读方式显示
|
||||
/>
|
||||
) : (
|
||||
<Empty description="暂无评分数据" />
|
||||
<Empty description={intl.formatMessage({ id: 'supplierEvaluateScore.detail.emptyData' })} />
|
||||
)}
|
||||
|
||||
{/* 只在打分模式下显示提交按钮,并移至底部 */}
|
||||
@ -283,14 +297,14 @@ const SupplierEvaluateScoreDetail: React.FC = () => {
|
||||
loading={submitting}
|
||||
style={{ marginTop: 24 }}
|
||||
>
|
||||
提交评分
|
||||
{intl.formatMessage({ id: 'supplierEvaluateScore.button.submit' })}
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</Card>
|
||||
</div>
|
||||
) : (
|
||||
!loading && <Empty description="暂无评分数据" />
|
||||
!loading && <Empty description={intl.formatMessage({ id: 'supplierEvaluateScore.detail.emptyData' })} />
|
||||
)}
|
||||
</Spin>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user