88 lines
3.0 KiB
JavaScript
88 lines
3.0 KiB
JavaScript
|
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||
|
|
import { Button, Form, Modal } from "antd";
|
||
|
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||
|
|
import Table from "zy-react-library/components/Table";
|
||
|
|
import TooltipPreviewImg from "zy-react-library/components/TooltipPreviewImg";
|
||
|
|
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
|
||
|
|
import useGetFile from "zy-react-library/hooks/useGetFile";
|
||
|
|
import useTable from "zy-react-library/hooks/useTable";
|
||
|
|
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
|
||
|
|
|
||
|
|
const ViewProjectReviewUserModal = (props) => {
|
||
|
|
const [form] = Form.useForm();
|
||
|
|
const { loading: getFileLoading, getFile } = useGetFile();
|
||
|
|
const { tableProps } = useTable(props["userQualificationInfo"], {
|
||
|
|
form,
|
||
|
|
params: {
|
||
|
|
eqUserld: props.data.id,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
const [tableData, setTableData] = useState([]);
|
||
|
|
const hasFetchedRef = useRef(false);
|
||
|
|
useEffect(() => {
|
||
|
|
// 只在第一次获取数据时执行,或者数据真正变化时
|
||
|
|
if (tableProps.dataSource
|
||
|
|
&& tableProps.dataSource.length > 0
|
||
|
|
&& !getFileLoading
|
||
|
|
&& !hasFetchedRef.current) {
|
||
|
|
hasFetchedRef.current = true;
|
||
|
|
|
||
|
|
const fetchFiles = async () => {
|
||
|
|
const dataWithFiles = await Promise.all(
|
||
|
|
tableProps.dataSource.map(async (item) => {
|
||
|
|
try {
|
||
|
|
const files = await getFile({
|
||
|
|
eqType: UPLOAD_FILE_TYPE_ENUM["6"],
|
||
|
|
eqForeignKey: item.userId,
|
||
|
|
});
|
||
|
|
return { ...item, files: files || [] };
|
||
|
|
}
|
||
|
|
catch (error) {
|
||
|
|
console.error("获取文件失败:", error);
|
||
|
|
return { ...item, files: [] };
|
||
|
|
}
|
||
|
|
}),
|
||
|
|
);
|
||
|
|
|
||
|
|
setTableData(dataWithFiles);
|
||
|
|
};
|
||
|
|
|
||
|
|
fetchFiles();
|
||
|
|
}
|
||
|
|
}, [tableProps.dataSource, getFileLoading, getFile]);
|
||
|
|
|
||
|
|
// 使用 useMemo 避免重复计算
|
||
|
|
const enhancedTableProps = useMemo(() => ({
|
||
|
|
...tableProps,
|
||
|
|
dataSource: tableData.length > 0 ? tableData : tableProps.dataSource || [],
|
||
|
|
}), [tableProps, tableData]);
|
||
|
|
|
||
|
|
return (
|
||
|
|
<Modal
|
||
|
|
title="特种作业人员证书"
|
||
|
|
width={1200}
|
||
|
|
open
|
||
|
|
maskClosable={false}
|
||
|
|
onCancel={props.onCancel}
|
||
|
|
footer={[
|
||
|
|
<Button key="cancel" onClick={props.onCancel}>取消</Button>,
|
||
|
|
]}
|
||
|
|
>
|
||
|
|
<Table
|
||
|
|
columns={[
|
||
|
|
{ title: "姓名", dataIndex: "userName" },
|
||
|
|
{ title: "证书名称", dataIndex: "qualificationName" },
|
||
|
|
{ title: "证书作业类别", dataIndex: "qualificationinfoCategoryName" },
|
||
|
|
{ title: "操作项目", dataIndex: "operatingProjectName" },
|
||
|
|
{ title: "证书编号", dataIndex: "certificateNo" },
|
||
|
|
{ title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) },
|
||
|
|
|
||
|
|
]}
|
||
|
|
{...enhancedTableProps}
|
||
|
|
/>
|
||
|
|
</Modal>
|
||
|
|
);
|
||
|
|
};
|
||
|
|
|
||
|
|
export default Connect([NS_QUALIFICATION_STATISTICS], true)(ViewProjectReviewUserModal);
|