Files
fe_supplier_frontend/src/pages/supplierAnnualManage/supplierAnnualResult/supplierAnnualResultQuery2.tsx

292 lines
7.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import {
Button,
Card,
Table,
Input,
message,
Space,
Form,
Select,
Typography,
Tag,
DatePicker
} from 'antd';
import { ArrowLeftOutlined, SearchOutlined, DeleteOutlined } from '@ant-design/icons';
import { getAnnualResultReviewList } from '@/servers/api/supplierAnnual';
import styles from './supplierAnnualResult.less';
import {
AnnualReviewStatusText,
AnnualReviewStatusColor
} from '@/dicts/supplierAnnualReviewDict';
const { Title } = Typography;
const { Option } = Select;
const { RangePicker } = DatePicker;
// 定义审查结果状态
const resultOptions = [
{ label: '合格', value: '1' },
{ label: '不合格', value: '2' },
];
const SupplierAnnualResultQuery2: React.FC = () => {
const [form] = Form.useForm();
const [loading, setLoading] = useState<boolean>(false);
const [data, setData] = useState<supplierAnnualResult.ReviewRecord[]>([]);
const [pagination, setPagination] = useState({
current: 1,
pageSize: 10,
total: 0,
showTotal: (total: number) => `${total} 条记录`,
showSizeChanger: true,
showQuickJumper: true,
});
const [searchParams, setSearchParams] = useState({});
// 从路由获取供应商ID和名称
const { supplierId, supplierName, taskId, annualTheme,annualreviewTaskId } = history.location.state as {
supplierId: string;
supplierName: string;
taskId: string;
annualTheme: string;
annualreviewTaskId: string;
};
// 获取供应商审查列表
const fetchList = async (params: any = {}) => {
try {
setLoading(true);
const { current, pageSize, ...restParams } = params;
const res = await getAnnualResultReviewList({
basePageRequest: {
pageNo: current,
pageSize,
},
supplierId, // 使用userId参数传递supplierId
annualreviewTaskId,
...restParams,
...searchParams,
});
if (res.success) {
setData(res.data?.records || []);
setPagination({
...pagination,
current,
pageSize,
total: res.data?.total || 0,
});
} else {
message.error(res.message || '获取列表失败');
}
} catch (error) {
console.error('获取列表失败:', error);
message.error('获取列表失败');
} finally {
setLoading(false);
}
};
// 首次加载获取数据
useEffect(() => {
if (supplierId) {
fetchList({ current: 1, pageSize: 10 });
} else {
message.error('供应商ID不存在无法获取详情');
history.goBack();
}
}, [supplierId]);
// 表格变化处理
const handleTableChange = (paginationParams: any) => {
fetchList({
current: paginationParams.current,
pageSize: paginationParams.pageSize,
});
};
// 搜索
const handleSearch = (values: any) => {
const params = { ...values };
// 处理日期范围
if (params.reviewTime && params.reviewTime.length === 2) {
params.startTime = params.reviewTime[0].format('YYYY-MM-DD');
params.endTime = params.reviewTime[1].format('YYYY-MM-DD');
delete params.reviewTime;
}
setSearchParams(params);
fetchList({ current: 1, pageSize: pagination.pageSize, ...params });
};
// 重置搜索
const handleReset = () => {
form.resetFields();
setSearchParams({});
fetchList({ current: 1, pageSize: pagination.pageSize });
};
// 返回列表页
const handleBack = () => {
history.goBack();
};
// 查看详情
const handleViewDetail = (record: supplierAnnualResult.ReviewRecord) => {
history.push({
pathname: '/supplierAnnual/supplierAnnualResultDetail',
state: {
id: record.id,
supplierId,
supplierName,
taskId,
annualTheme,
annualreviewTaskId,
},
});
};
// 获取状态标签
const getStatusTag = (status: string | undefined, statusName: string | undefined) => {
if (!status) return <Tag></Tag>;
const color = AnnualReviewStatusColor[status as keyof typeof AnnualReviewStatusColor] || 'default';
const text = statusName || AnnualReviewStatusText[status as keyof typeof AnnualReviewStatusText] || '未知状态';
return <Tag color={color}>{text}</Tag>;
};
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80,
render: (_: any, __: any, index: number) => index + 1 + (pagination.current - 1) * pagination.pageSize,
},
{
title: '供应商名称',
dataIndex: 'name',
key: 'name',
},
{
title: '品类',
dataIndex: 'category',
key: 'category',
},
{
title: '审查单位',
dataIndex: 'deptName',
key: 'deptName',
},
{
title: '审查部门',
dataIndex: 'reviewDept',
key: 'reviewDept',
},
{
title: '评价人员',
dataIndex: 'userName',
key: 'userName',
},
{
title: '审查时间',
dataIndex: 'reviewTime',
key: 'reviewTime',
render: (_: any, record: supplierAnnualResult.ReviewRecord) => (
<span>{record.startTime} {record.endTime}</span>
),
},
{
title: '审查结果',
dataIndex: 'reviewStatus',
key: 'reviewStatus',
render: (status: string, record: supplierAnnualResult.ReviewRecord) =>
getStatusTag(status, record.reviewStatusName),
},
{
title: '操作',
key: 'action',
width: 120,
render: (text: any, record: supplierAnnualResult.ReviewRecord) => (
<Space size="middle">
<Button type="link" size="small" onClick={() => handleViewDetail(record)}>
</Button>
</Space>
),
},
];
return (
<div className="common-container">
<Card>
<div className={styles['page-header']}>
<Title level={4} style={{ margin: 0 }}>
{supplierName || '供应商'} -
</Title>
<Button type="link" icon={<ArrowLeftOutlined />} onClick={handleBack}>
</Button>
</div>
<div className="filter-action-row">
<Form
form={form}
layout="inline"
onFinish={handleSearch}
className="filter-form"
>
<Form.Item name="name" label="供应商名称">
<Input placeholder="请输入供应商名称" allowClear />
</Form.Item>
<Form.Item name="reviewResult" label="审查结果">
<Select placeholder="请选择审查结果" allowClear style={{ width: 150 }}>
{resultOptions.map(item => (
<Option key={item.value} value={item.value}>
{item.label}
</Option>
))}
</Select>
</Form.Item>
<Form.Item name="reviewTime" label="审查时间">
<RangePicker
placeholder={['开始日期', '结束日期']}
format="YYYY-MM-DD"
/>
</Form.Item>
<Form.Item className="filter-btns">
<Button type="primary" icon={<SearchOutlined />} onClick={() => form.submit()}>
</Button>
<Button
type="primary"
danger
icon={<DeleteOutlined />}
onClick={handleReset}
>
</Button>
</Form.Item>
</Form>
</div>
<div className="content-area">
<Table
columns={columns}
dataSource={data}
rowKey="id"
pagination={pagination}
loading={loading}
onChange={handleTableChange}
scroll={{ x: 1100 }}
/>
</div>
</Card>
</div>
);
};
export default SupplierAnnualResultQuery2;