数据统计 - 供应商准入情况统计模块
This commit is contained in:
@ -34,6 +34,13 @@ export const AnnualReviewResultColor = {
|
||||
'2': 'red',
|
||||
};
|
||||
|
||||
// 准入方式
|
||||
export const AccessTypeText = {
|
||||
'online': '线上准入',
|
||||
'offline': '线下准入',
|
||||
'scattered': '零星采购/应急采购/个人供应商',
|
||||
};
|
||||
|
||||
// 数据统计类型
|
||||
export const StatisticsType = {
|
||||
'EVALUATE': 'evaluate', // 评价情况统计
|
||||
|
@ -16,6 +16,9 @@ export default {
|
||||
'dataStatistics.common.pleaseInput': 'Please input',
|
||||
'dataStatistics.common.year': 'Year',
|
||||
'dataStatistics.common.yearFormat': 'Year {year}',
|
||||
'dataStatistics.common.accessType': 'Access Type',
|
||||
'dataStatistics.common.accessYear': 'Access Year',
|
||||
'dataStatistics.common.supplierType': 'Domestic/Foreign',
|
||||
|
||||
// Annual Review Statistics
|
||||
'dataStatistics.annual.title': 'Supplier Annual Review Statistics',
|
||||
@ -50,4 +53,8 @@ export default {
|
||||
'dataStatistics.qualification.termOfValidity': 'Qualification Expiry Date',
|
||||
'dataStatistics.qualification.validityRange': 'Expiry Date Range',
|
||||
'dataStatistics.qualification.getDataFailed': 'Failed to get qualification warning statistics data',
|
||||
|
||||
// Admission Statistics
|
||||
'dataStatistics.admission.title': 'Supplier Admission Statistics',
|
||||
'dataStatistics.admission.getDataFailed': 'Failed to get admission statistics data',
|
||||
};
|
||||
|
@ -16,6 +16,9 @@ export default {
|
||||
'dataStatistics.common.pleaseInput': '请输入',
|
||||
'dataStatistics.common.year': '年度',
|
||||
'dataStatistics.common.yearFormat': '{year}年',
|
||||
'dataStatistics.common.accessType': '准入方式',
|
||||
'dataStatistics.common.accessYear': '准入年度',
|
||||
'dataStatistics.common.supplierType': '境内/境外',
|
||||
|
||||
// 年审统计
|
||||
'dataStatistics.annual.title': '供应商年审统计',
|
||||
@ -50,4 +53,8 @@ export default {
|
||||
'dataStatistics.qualification.termOfValidity': '资质到期时间',
|
||||
'dataStatistics.qualification.validityRange': '到期时间范围',
|
||||
'dataStatistics.qualification.getDataFailed': '获取资质预警统计数据失败',
|
||||
|
||||
// 准入统计
|
||||
'dataStatistics.admission.title': '供应商准入统计',
|
||||
'dataStatistics.admission.getDataFailed': '获取准入统计数据失败',
|
||||
};
|
||||
|
@ -3,7 +3,7 @@ import { Button, Table, Input, Select, Form, Tooltip, Tag, message, DatePicker }
|
||||
import type { TablePaginationConfig } from 'antd';
|
||||
import { SearchOutlined, DeleteOutlined, ExportOutlined } from '@ant-design/icons';
|
||||
import { useIntl } from 'umi';
|
||||
import { AnnualReviewResultText, AnnualReviewResultColor } from '@/dicts/dataStatistics';
|
||||
import { AccessTypeText } from '@/dicts/dataStatistics';
|
||||
import { getSupplierAdmissionStatistics } from '@/servers/api/dataStatistics';
|
||||
import { downloadFile } from '@/utils/download';
|
||||
import moment from 'moment';
|
||||
@ -26,8 +26,12 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
showQuickJumper: true,
|
||||
showTotal: (total) => intl.formatMessage({ id: 'dataStatistics.common.total' }, { total }),
|
||||
});
|
||||
const [searchParams, setSearchParams] =
|
||||
useState<DataStatistics.AnnualReviewStatisticsSearchParams>({});
|
||||
const [searchParams, setSearchParams] = useState<
|
||||
| (DataStatistics.SupplierAdmissionStatistics & {
|
||||
annualreviewYear: string;
|
||||
})
|
||||
| undefined
|
||||
>();
|
||||
|
||||
// 准入单位下拉选项 - 假数据
|
||||
const companyOptions = [
|
||||
@ -37,33 +41,29 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
{ label: '东莞市制造业有限公司', value: '东莞市制造业有限公司' },
|
||||
];
|
||||
|
||||
// 年审结果选项
|
||||
const annualResultOptions = Object.entries(AnnualReviewResultText).map(([key, value]) => ({
|
||||
label: value,
|
||||
value: key,
|
||||
}));
|
||||
|
||||
// 获取数据
|
||||
const fetchStatisticsData = async (
|
||||
current = 1,
|
||||
pageSize = 10,
|
||||
params: DataStatistics.AnnualReviewStatisticsSearchParams = searchParams,
|
||||
) => {
|
||||
if (params !== searchParams) {
|
||||
const fetchStatisticsData = async (current = 1, pageSize = 10, params = searchParams) => {
|
||||
// 如果params没传,证明是重置
|
||||
if (!params && params !== searchParams) {
|
||||
setSearchParams(params);
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
try {
|
||||
// 构建请求参数
|
||||
const requestParams: DataStatistics.AnnualReviewStatisticsRequest = {
|
||||
basePageRequest: {
|
||||
pageNo: current,
|
||||
pageSize: pageSize,
|
||||
},
|
||||
const requestParams = {
|
||||
pageNo: current,
|
||||
pageSize: pageSize,
|
||||
...params,
|
||||
startTime: params?.annualreviewYear
|
||||
? moment(params.annualreviewYear).format('YYYY-MM-DD')
|
||||
: undefined,
|
||||
// 结束时间为开始时间 + 1年
|
||||
endTime: params?.annualreviewYear
|
||||
? moment(params.annualreviewYear).add(1, 'year').format('YYYY-MM-DD')
|
||||
: undefined,
|
||||
};
|
||||
|
||||
delete requestParams.annualreviewYear;
|
||||
// 调用接口
|
||||
const response = await getSupplierAdmissionStatistics(requestParams);
|
||||
|
||||
@ -77,12 +77,12 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
});
|
||||
} else {
|
||||
message.error(
|
||||
response.message || intl.formatMessage({ id: 'dataStatistics.annual.getDataFailed' }),
|
||||
response.message || intl.formatMessage({ id: 'dataStatistics.admission.getDataFailed' }),
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取年审统计数据失败:', error);
|
||||
message.error(intl.formatMessage({ id: 'dataStatistics.annual.getDataFailed' }));
|
||||
console.error('获取准入统计数据失败:', error);
|
||||
message.error(intl.formatMessage({ id: 'dataStatistics.admission.getDataFailed' }));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@ -90,7 +90,7 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
|
||||
// 首次加载获取数据
|
||||
useEffect(() => {
|
||||
fetchStatisticsData(pagination.current, pagination.pageSize, {});
|
||||
fetchStatisticsData(pagination.current, pagination.pageSize);
|
||||
}, []);
|
||||
|
||||
// 处理表格分页变化
|
||||
@ -98,17 +98,6 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
fetchStatisticsData(newPagination.current, newPagination.pageSize, searchParams);
|
||||
};
|
||||
|
||||
// 获取年审结果标签
|
||||
const getResultTag = (result: string) => {
|
||||
const color =
|
||||
AnnualReviewResultColor[result as keyof typeof AnnualReviewResultColor] || 'default';
|
||||
const text =
|
||||
result === '1'
|
||||
? intl.formatMessage({ id: 'dataStatistics.annual.qualified' })
|
||||
: intl.formatMessage({ id: 'dataStatistics.annual.unqualified' });
|
||||
return <Tag color={color}>{text}</Tag>;
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.serialNumber' }),
|
||||
@ -131,16 +120,24 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
),
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.area' }),
|
||||
dataIndex: 'area',
|
||||
key: 'area',
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.supplierType' }),
|
||||
dataIndex: 'supplierTypeCn',
|
||||
key: 'supplierTypeCn',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.accessType' }),
|
||||
dataIndex: 'accessType',
|
||||
key: 'accessType',
|
||||
width: 180,
|
||||
render: (type: string) => AccessTypeText[type as keyof typeof AccessTypeText] || type,
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.category' }),
|
||||
dataIndex: 'categoryName',
|
||||
key: 'categoryName',
|
||||
dataIndex: 'categoryNameList',
|
||||
key: 'categoryNameList',
|
||||
width: 120,
|
||||
render: (text: string[]) => text.join(','),
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.accessUnit' }),
|
||||
@ -163,20 +160,13 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.year' }),
|
||||
dataIndex: 'annualreviewYear',
|
||||
key: 'annualreviewYear',
|
||||
title: intl.formatMessage({ id: 'dataStatistics.common.accessYear' }),
|
||||
dataIndex: 'accessYear',
|
||||
key: 'accessYear',
|
||||
width: 100,
|
||||
render: (year: string) =>
|
||||
intl.formatMessage({ id: 'dataStatistics.common.yearFormat' }, { year }),
|
||||
},
|
||||
{
|
||||
title: intl.formatMessage({ id: 'dataStatistics.annual.annualStatisticsResult' }),
|
||||
dataIndex: 'annualStatisticsResult',
|
||||
key: 'annualStatisticsResult',
|
||||
width: 100,
|
||||
render: (result: string) => getResultTag(result),
|
||||
},
|
||||
];
|
||||
|
||||
// 处理搜索
|
||||
@ -187,7 +177,13 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
// 导出功能
|
||||
const handleExport = () => {
|
||||
const values = form.getFieldsValue();
|
||||
downloadFile('/dataStatistics/exportSupplierAnnualReviewStatistics', 'GET', values);
|
||||
const params = {
|
||||
...values,
|
||||
startTime: values.annualreviewYear ? moment(values.annualreviewYear).format('YYYY-MM-DD') : undefined,
|
||||
endTime: values.annualreviewYear ? moment(values.annualreviewYear).add(1, 'year').format('YYYY-MM-DD') : undefined,
|
||||
};
|
||||
delete params.annualreviewYear;
|
||||
downloadFile('/coscoAccessSupplier/getPageExport', 'GET', params);
|
||||
};
|
||||
|
||||
return (
|
||||
@ -218,7 +214,7 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
value: value ? moment(value) : undefined,
|
||||
})}
|
||||
normalize={(value) => value && value.format('YYYY')}
|
||||
label={intl.formatMessage({ id: 'dataStatistics.annual.annualYear' })}
|
||||
label={intl.formatMessage({ id: 'dataStatistics.common.accessYear' })}
|
||||
>
|
||||
<DatePicker
|
||||
style={{ width: '100%' }}
|
||||
@ -250,20 +246,20 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
</Select>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="annualStatisticsResult"
|
||||
label={intl.formatMessage({ id: 'dataStatistics.annual.annualResult' })}
|
||||
name="accessType"
|
||||
label={intl.formatMessage({ id: 'dataStatistics.common.accessType' })}
|
||||
>
|
||||
<Select
|
||||
placeholder={
|
||||
intl.formatMessage({ id: 'dataStatistics.common.pleaseSelect' }) +
|
||||
intl.formatMessage({ id: 'dataStatistics.annual.annualResult' })
|
||||
intl.formatMessage({ id: 'dataStatistics.common.accessType' })
|
||||
}
|
||||
allowClear
|
||||
style={{ width: 120 }}
|
||||
style={{ width: 200 }}
|
||||
>
|
||||
{annualResultOptions.map((option) => (
|
||||
<Option key={option.value} value={option.value}>
|
||||
{option.label}
|
||||
{Object.entries(AccessTypeText).map(([value, label]) => (
|
||||
<Option key={value} value={value}>
|
||||
{label}
|
||||
</Option>
|
||||
))}
|
||||
</Select>
|
||||
@ -278,7 +274,7 @@ const SupplierAnnualStatistics: React.FC = () => {
|
||||
icon={<DeleteOutlined />}
|
||||
onClick={() => {
|
||||
form.resetFields();
|
||||
fetchStatisticsData(1, pagination.pageSize, {});
|
||||
fetchStatisticsData(1, pagination.pageSize);
|
||||
}}
|
||||
>
|
||||
{intl.formatMessage({ id: 'dataStatistics.common.reset' })}
|
||||
|
@ -5,7 +5,7 @@ import { getAllEvaluateRules } from './supplierEvaluate';
|
||||
|
||||
// 评价情况统计列表查询
|
||||
export async function getSupplierAdmissionStatistics(params: DataStatistics.SupplierAdmissionStatistics) {
|
||||
return request('/api/coscoAccessSupplier/getPage', {
|
||||
return request('/coscoAccessSupplier/getPage', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
});
|
||||
@ -13,7 +13,7 @@ export async function getSupplierAdmissionStatistics(params: DataStatistics.Supp
|
||||
|
||||
// 评价情况统计列表查询
|
||||
export async function getEvaluateStatisticsList(params: DataStatistics.EvaluateStatisticsRequest) {
|
||||
return request('/api/dataStatistics/evaluateStatistics/list', {
|
||||
return request('/dataStatistics/evaluateStatistics/list', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
});
|
||||
@ -21,7 +21,7 @@ export async function getEvaluateStatisticsList(params: DataStatistics.EvaluateS
|
||||
|
||||
// 评价情况统计数据导出
|
||||
export async function exportEvaluateStatistics(params: DataStatistics.EvaluateStatisticsSearchParams) {
|
||||
return request('/api/dataStatistics/evaluateStatistics/export', {
|
||||
return request('/dataStatistics/evaluateStatistics/export', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
responseType: 'blob',
|
||||
@ -30,7 +30,7 @@ export async function exportEvaluateStatistics(params: DataStatistics.EvaluateSt
|
||||
|
||||
// 年度考核统计列表查询
|
||||
export async function getAnnualStatisticsList(params: any) {
|
||||
return request('/api/dataStatistics/annualStatistics/list', {
|
||||
return request('/dataStatistics/annualStatistics/list', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
});
|
||||
@ -38,7 +38,7 @@ export async function getAnnualStatisticsList(params: any) {
|
||||
|
||||
// 年度考核统计数据导出
|
||||
export async function exportAnnualStatistics(params: any) {
|
||||
return request('/api/dataStatistics/annualStatistics/export', {
|
||||
return request('/dataStatistics/annualStatistics/export', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
responseType: 'blob',
|
||||
@ -47,7 +47,7 @@ export async function exportAnnualStatistics(params: any) {
|
||||
|
||||
// 供应商退出统计列表查询
|
||||
export async function getExitStatisticsList(params: any) {
|
||||
return request('/api/dataStatistics/exitStatistics/list', {
|
||||
return request('/dataStatistics/exitStatistics/list', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
});
|
||||
@ -55,7 +55,7 @@ export async function getExitStatisticsList(params: any) {
|
||||
|
||||
// 供应商退出统计数据导出
|
||||
export async function exportExitStatistics(params: any) {
|
||||
return request('/api/dataStatistics/exitStatistics/export', {
|
||||
return request('/dataStatistics/exitStatistics/export', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
responseType: 'blob',
|
||||
@ -64,7 +64,7 @@ export async function exportExitStatistics(params: any) {
|
||||
|
||||
// 资质预警统计列表查询
|
||||
export async function getQualificationWarningStatisticsList(params: any) {
|
||||
return request('/api/dataStatistics/qualificationWarningStatistics/list', {
|
||||
return request('/dataStatistics/qualificationWarningStatistics/list', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
});
|
||||
@ -72,7 +72,7 @@ export async function getQualificationWarningStatisticsList(params: any) {
|
||||
|
||||
// 资质预警统计数据导出
|
||||
export async function exportQualificationWarningStatistics(params: any) {
|
||||
return request('/api/dataStatistics/qualificationWarningStatistics/export', {
|
||||
return request('/dataStatistics/qualificationWarningStatistics/export', {
|
||||
method: 'POST',
|
||||
data: params,
|
||||
responseType: 'blob',
|
||||
|
4
src/servers/dao/dataStatistics.d.ts
vendored
4
src/servers/dao/dataStatistics.d.ts
vendored
@ -26,6 +26,10 @@ declare namespace DataStatistics {
|
||||
export interface SupplierAdmissionStatistics {
|
||||
pageNo: number;
|
||||
pageSize: number;
|
||||
supplierName?: string;
|
||||
startTime?: string;
|
||||
endTime?: string;
|
||||
accessType?: string;
|
||||
// supplierName: string;
|
||||
// accessType: string;
|
||||
// updateYear: number;
|
||||
|
@ -17,7 +17,6 @@ export async function downloadFile(
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const fetchUrl =
|
||||
method === 'GET' && params
|
||||
? `${REQUEST_BASE}${url}?${new URLSearchParams(cleanedParams as any).toString()}`
|
||||
|
Reference in New Issue
Block a user