import React, { useState, useEffect } from "react";
import {
Form,
Table,
Button,
Input,
Select,
Space,
Modal,
Upload,
message,
Flex,
} from "antd";
import { PlusOutlined, UploadOutlined } from "@ant-design/icons";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
import SearchForm from "@cqsjjb/jjb-react-admin-component/SearchForm";
import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper";
import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace";
import { MATERIAL_TYPE_OPTIONS, MATERIAL_TYPE_MAP } from "~/enumerate/constant";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { tools } from "@cqsjjb/jjb-common-lib";
import AttachmentUpload from "~/components/AttachmentUpload";
import PreviewUrlButton from "~/components/PreviewUrlButton";
const { router } = tools;
const ProjectDocLibrary = (props) => {
const [searchForm] = Form.useForm();
const [uploadForm] = Form.useForm();
const [dataSource, setDataSource] = useState([]);
const [total, setTotal] = useState(0);
const [uploadModalOpen, setUploadModalOpen] = useState(false);
const [projectList, setProjectList] = useState([]);
const [docViewerVisible, setDocViewerVisible] = useState(false);
const [currentDocs, setCurrentDocs] = useState([]);
const { evalProjectDocLoading, evalProjectDocSaveLoading } = props.safetyEvalBusiness;
const getData = async (pagination) => {
const params = {
...router.query,
current: pagination?.current || router.query.current || 1,
size: pagination?.size || router.query.size || 10,
};
const res = await props.evalProjectDocPage(params);
if (res?.success !== false) {
setDataSource(res?.data || []);
setTotal(res?.total || 0);
}
};
const getProjectList = async () => {
const res = await props.evalProjectPage({ current: 1, size: 999 });
if (res?.success !== false) {
setProjectList(res?.data || []);
}
};
useEffect(() => {
searchForm.setFieldsValue(router.query);
getData();
}, []);
const handleSearch = (values) => {
router.query = { ...router.query, ...values, current: 1, size: 10 };
getData();
};
const handleReset = (values) => {
searchForm.resetFields();
router.query = { ...values, current: 1, size: 10 };
getData();
};
const handlePageChange = (pagination) => {
router.query = {
...router.query,
current: pagination.current,
size: pagination.pageSize,
};
getData(pagination);
};
const handleOpenUpload = () => {
uploadForm.resetFields();
getProjectList();
setUploadModalOpen(true);
};
const handleUploadSubmit = async () => {
const values = await uploadForm.validateFields();
const res = await props.evalProjectDocSave({
projectId: values.projectId,
projectDocUrl: values.file.map((item) => ({
project_doc_url: item.url,
materialName: item.name,
materialType: values.materialType,
})),
});
if (res?.success !== false) {
message.success("上传成功");
setUploadModalOpen(false);
getData();
}
};
const columns = [
{ title: "项目编号", dataIndex: "projectNo", width: 130 },
{
title: "项目名称",
dataIndex: "projectName",
ellipsis: true,
width: 200,
},
{ title: "企业名称", dataIndex: "customerName", ellipsis: true, width: 180 },
{ title: "评价类型", dataIndex: "evalTypeName", width: 120 },
{
title: "上传文档数量",
width: 110,
render: (_, record) => {
const map = record.projectDocUrlMap || {};
const count = Object.values(map).reduce((sum, arr) => sum + (arr?.length || 0), 0);
return {count};
},
},
{
title: "操作",
width: 100,
fixed: "right",
render: (_, record) => (
),
},
];
return (