master
LiuJiaNan 2026-02-27 16:27:45 +08:00
parent fa38164a47
commit 994dc3d26b
15 changed files with 96 additions and 42 deletions

View File

@ -30,7 +30,7 @@
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"zy-react-library": "^1.2.0" "zy-react-library": "^1.2.3"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^5.4.1", "@antfu/eslint-config": "^5.4.1",

View File

@ -2,6 +2,7 @@ import { setJJBCommonAntdMessage } from "@cqsjjb/jjb-common-lib";
import { setup } from "@cqsjjb/jjb-dva-runtime"; import { setup } from "@cqsjjb/jjb-dva-runtime";
import { message } from "antd"; import { message } from "antd";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { getFileUrlFromServer } from "zy-react-library/utils";
import "dayjs/locale/zh-cn"; import "dayjs/locale/zh-cn";
import "../blessed_by_buddha"; import "../blessed_by_buddha";
@ -13,6 +14,7 @@ setJJBCommonAntdMessage(message);
const app = setup(); const app = setup();
getFileUrlFromServer();
// 非底座环境运行 // 非底座环境运行
if (!window.__POWERED_BY_QIANKUN__) { if (!window.__POWERED_BY_QIANKUN__) {
// 云组件默认依赖 // 云组件默认依赖

View File

@ -0,0 +1,7 @@
import ReViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplicationTwo/ReView";
function ReView(props) {
return (<ReViewPage view="0" {...props} />);
}
export default ReView;

View File

@ -0,0 +1,5 @@
function ProjectFilingApplicationTwo(props) {
return (<div>{props.children}</div>);
}
export default ProjectFilingApplicationTwo;

View File

@ -25,6 +25,7 @@ function Add(props) {
const [currentStep, setCurrentStep] = useState(1); const [currentStep, setCurrentStep] = useState(1);
const [formValues, setFormValues] = useState({}); const [formValues, setFormValues] = useState({});
const [specialList, setSpecialList] = useState([]); const [specialList, setSpecialList] = useState([]);
const [qualificationsId, setQualificationsId] = useState("");
const getData = async () => { const getData = async () => {
const { data } = await props["qualificationApplyInfo"]({ id: query.id }); const { data } = await props["qualificationApplyInfo"]({ id: query.id });
@ -47,7 +48,7 @@ function Add(props) {
return ( return (
<Page headerTitle={query.resubmit ? "重新提交" : (query.id ? "编辑" : "新增")} isShowFooter={false}> <Page headerTitle={query.resubmit ? "重新提交" : (query.id ? "编辑" : "新增")} isShowFooter={false}>
{currentStep === 1 {currentStep === 1
&& <StepOne setFormValues={setFormValues} setCurrentStep={setCurrentStep} formValues={formValues} form={form} />} && <StepOne setFormValues={setFormValues} setCurrentStep={setCurrentStep} setQualificationsId={setQualificationsId} formValues={formValues} form={form} />}
{currentStep === 2 {currentStep === 2
&& ( && (
<StepTwo <StepTwo
@ -55,6 +56,7 @@ function Add(props) {
formValues={formValues} formValues={formValues}
query={query} query={query}
setSpecialList={setSpecialList} setSpecialList={setSpecialList}
qualificationsId={qualificationsId}
specialList={specialList} specialList={specialList}
/> />
)} )}
@ -68,6 +70,7 @@ const StepOneComponent = (props) => {
const stakeholderLevel = Form.useWatch("stakeholderLevel", form); const stakeholderLevel = Form.useWatch("stakeholderLevel", form);
const groupUnitId = Form.useWatch("groupUnitId", form); const groupUnitId = Form.useWatch("groupUnitId", form);
const groupUnitDept = Form.useWatch("groupUnitDept", form); const groupUnitDept = Form.useWatch("groupUnitDept", form);
const qualificationsId = Form.useWatch("qualificationsId", form);
// const [corpTypeList, setCorpTypeList] = useState([2]); // const [corpTypeList, setCorpTypeList] = useState([2]);
const [corpInfoList, setCorpInfoList] = useState([]); const [corpInfoList, setCorpInfoList] = useState([]);
@ -94,6 +97,10 @@ const StepOneComponent = (props) => {
else setQualificationsListAll([]); else setQualificationsListAll([]);
}, [qualificationsTypeId, stakeholderLevel]); }, [qualificationsTypeId, stakeholderLevel]);
useEffect(() => {
props.setQualificationsId(qualificationsId);
}, [qualificationsId]);
return ( return (
<FormBuilder <FormBuilder
form={form} form={form}
@ -251,15 +258,15 @@ const StepTwoComponent = (props) => {
setTypeGroup(Array.from(typeMap.values())); setTypeGroup(Array.from(typeMap.values()));
}; };
const getData = async () => { const getData = async () => {
if (!props.formValues.qualificationsId) if (!props.qualificationsId)
return; return;
if (specialList.length === 0) { if (specialList.length === 0) {
const { data } = await props["qualificationMaintenanceInfo"]({ id: props.formValues.qualificationsId }); const { data } = await props["qualificationMaintenanceInfo"]({ id: props.qualificationsId });
await getTypeGroup(data.details); await getTypeGroup(data.details);
setSpecialList(data.details || []); setSpecialList(data.details || []);
} }
else { else {
const { data } = await props["qualificationMaintenanceInfo"]({ id: props.formValues.qualificationsId }); const { data } = await props["qualificationMaintenanceInfo"]({ id: props.qualificationsId });
const newSpecialList = data.details.map((item) => { const newSpecialList = data.details.map((item) => {
const existsItem = specialList.find(specialItem => specialItem.qualificationsDetailId === item.id); const existsItem = specialList.find(specialItem => specialItem.qualificationsDetailId === item.id);
if (existsItem) { if (existsItem) {
@ -284,7 +291,7 @@ const StepTwoComponent = (props) => {
useEffect(() => { useEffect(() => {
getData(); getData();
}, [props.formValues.qualificationsId]); }, [props.qualificationsId]);
const onUploadFileOpen = (record, id, files) => { const onUploadFileOpen = (record, id, files) => {
setUploadFileModalData({ setUploadFileModalData({

View File

@ -25,7 +25,7 @@ function List(props) {
label: "资质类别", label: "资质类别",
render: (<DictionarySelect dictValue="qualificationsType" />), render: (<DictionarySelect dictValue="qualificationsType" />),
}, },
{ name: "stakeholderLevel", label: "资质等级", render: (<DictionarySelect dictValue="stakeholderLevel" />) }, // { name: "stakeholderLevel", label: "资质等级", render: (<DictionarySelect dictValue="stakeholderLevel" />) },
]} ]}
form={form} form={form}
onFinish={getData} onFinish={getData}
@ -35,7 +35,7 @@ function List(props) {
{ title: "相关方名称", dataIndex: "corpName" }, { title: "相关方名称", dataIndex: "corpName" },
{ title: "资质名称", dataIndex: "qualificationsName" }, { title: "资质名称", dataIndex: "qualificationsName" },
{ title: "资质类别", dataIndex: "qualificationsTypeName" }, { title: "资质类别", dataIndex: "qualificationsTypeName" },
{ title: "资质等级", dataIndex: "stakeholderLevelName" }, // { title: "资质等级", dataIndex: "stakeholderLevelName" },
{ title: "材料数", dataIndex: "materialNum" }, { title: "材料数", dataIndex: "materialNum" },
// { // {
// title: "资质状态", // title: "资质状态",

View File

@ -0,0 +1,7 @@
import ReViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplicationTwo/ReView";
function ReView(props) {
return (<ReViewPage view="0" {...props} />);
}
export default ReView;

View File

@ -0,0 +1,5 @@
function ProjectFilingApplicationTwo(props) {
return (<div>{props.children}</div>);
}
export default ProjectFilingApplicationTwo;

View File

@ -227,6 +227,9 @@ const StepOneComponent = (props) => {
} }
} }
}, [props.formValues]); }, [props.formValues]);
useEffect(() => {
props.setQualificationsTypeId(qualificationsTypeId);
}, [qualificationsTypeId]);
return ( return (
<FormBuilder <FormBuilder
labelCol={{ span: 6 }} labelCol={{ span: 6 }}
@ -309,7 +312,6 @@ const StepOneComponent = (props) => {
if (form.getFieldValue("isLocalCompany") === 0) { if (form.getFieldValue("isLocalCompany") === 0) {
getDeptList(event); getDeptList(event);
} }
props.setQualificationsTypeId(event);
form.setFieldsValue({ form.setFieldsValue({
recommendCorpId: "", recommendCorpId: "",
recommendCorpName: "", recommendCorpName: "",
@ -622,7 +624,7 @@ const StepTwoComponent = (props) => {
deleteFiles: values.deleteFiles || [], deleteFiles: values.deleteFiles || [],
startValidityPeriod: values.startValidityPeriod, startValidityPeriod: values.startValidityPeriod,
endValidityPeriod: values.endValidityPeriod, endValidityPeriod: values.endValidityPeriod,
createTime: dayjs().format("YYYY-MM-DD hh:mm:ss"), createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
existingFlag: 2, existingFlag: 2,
}; };
if (values.type === "add") { if (values.type === "add") {
@ -732,19 +734,14 @@ const StepTwoComponent = (props) => {
} }
}; };
const handleChooseFilsSubmit = (selectedRows) => { const handleChooseFilsSubmit = (selectedRows) => {
const existingIds = projectFileList const enterList = projectFileList.filter(item => !item.detailId);
.filter(item => item.detailId) const formattedRows = selectedRows.map(row => ({
.map(item => item.detailId);
const newRows = selectedRows.filter(row =>
row.detailId && !existingIds.includes(row.detailId),
);
const formattedRows = newRows.map(row => ({
...row, ...row,
existingFlag: 1, existingFlag: 1,
})); }));
// 合并到现有列表中 // 合并到现有列表中
setProjectFileList(prev => [...prev, ...formattedRows]); setProjectFileList([...enterList, ...formattedRows]);
setChooseFilsListModalOpen(false); setChooseFilsListModalOpen(false);
}; };
@ -791,7 +788,7 @@ const StepTwoComponent = (props) => {
title: "时效性", title: "时效性",
key: "validityPeriod", key: "validityPeriod",
dataIndex: "startValidityPeriod", dataIndex: "startValidityPeriod",
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}${record.endValidityPeriod}` : "-", render: (_, record) => record.startValidityPeriod ? `${dayjs(record.startValidityPeriod).format("YYYY-MM-DD")}${dayjs(record.endValidityPeriod).format("YYYY-MM-DD")}` : "-",
}, },
{ {
title: "操作", title: "操作",
@ -963,7 +960,7 @@ const ChooseFilsComponent = (props) => {
title: "时效性", title: "时效性",
key: "validityPeriod", key: "validityPeriod",
dataIndex: "startValidityPeriod", dataIndex: "startValidityPeriod",
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}${record.endValidityPeriod}` : "-", render: (_, record) => record.startValidityPeriod ? `${dayjs(record.startValidityPeriod).format("YYYY-MM-DD")}${dayjs(record.endValidityPeriod).format("YYYY-MM-DD")}` : "-",
}, },
]} ]}
{...tableProps} {...tableProps}

View File

@ -4,12 +4,13 @@ import { useEffect, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder"; import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page"; import Page from "zy-react-library/components/Page";
import PreviewImg from "zy-react-library/components/PreviewImg"; import PreviewImg from "zy-react-library/components/PreviewImg";
import PreviewPdf from "zy-react-library/components/PreviewPdf";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj"; import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useGetFile from "zy-react-library/hooks/useGetFile"; import useGetFile from "zy-react-library/hooks/useGetFile";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { getLabelName } from "zy-react-library/utils"; import { getFileSuffix, getLabelName } from "zy-react-library/utils";
import ViewProjectReviewDetailsModal from "~/components/ViewProjectReviewDetailsModal"; import ViewProjectReviewDetailsModal from "~/components/ViewProjectReviewDetailsModal";
import ViewProjectReviewUserModal from "~/components/ViewProjectReviewUserModal"; import ViewProjectReviewUserModal from "~/components/ViewProjectReviewUserModal";
import { PROJECT_STATUS_MAP } from "~/enumerate/constant"; import { PROJECT_STATUS_MAP } from "~/enumerate/constant";
@ -48,7 +49,8 @@ function Review(props) {
eqType: UPLOAD_FILE_TYPE_ENUM["156"], eqType: UPLOAD_FILE_TYPE_ENUM["156"],
eqForeignKey: projectData.agreementFileUuid, eqForeignKey: projectData.agreementFileUuid,
}); });
projectData.files = file; projectData.imgFiles = file.filter(item => getFileSuffix(item.name) !== "pdf");
projectData.pdfFiles = file.filter(item => getFileSuffix(item.name) === "pdf");
} }
setProjectFileAddCmdList(projectData.projectFileAddCmdList || []); setProjectFileAddCmdList(projectData.projectFileAddCmdList || []);
setProjectUserAddCmdList(projectData.projectUserAddCmdList || []); setProjectUserAddCmdList(projectData.projectUserAddCmdList || []);
@ -240,7 +242,7 @@ function Review(props) {
)} )}
> >
<div> <div>
{info.relatedProjectId && ( {(info.relatedProjectId && props.view !== "0") && (
<div style={{ "font-size": "16px" }}> <div style={{ "font-size": "16px" }}>
<Divider orientation="left">一级项目信息</Divider> <Divider orientation="left">一级项目信息</Divider>
<p> <p>
@ -284,7 +286,12 @@ function Review(props) {
{ label: "项目类别", children: info.qualificationsTypeName }, { label: "项目类别", children: info.qualificationsTypeName },
{ label: "是否存在分包项目", children: info.subcontractFlag === 1 ? "是" : "否" }, { label: "是否存在分包项目", children: info.subcontractFlag === 1 ? "是" : "否" },
{ label: "是否为属地公司推荐", children: info.isLocalCompany === 1 ? "是" : "否" }, { label: "是否为属地公司推荐", children: info.isLocalCompany === 1 ? "是" : "否" },
{ label: "安全管理协议", children: <PreviewImg files={info.files} /> }, { label: "安全管理协议", children: (
<>
<PreviewImg files={info.imgFiles} />
<PreviewPdf files={info.pdfFiles} />
</>
) },
]} ]}
/> />
</div> </div>

View File

@ -199,6 +199,9 @@ const StepOneComponent = (props) => {
} }
} }
}, [props.formValues]); }, [props.formValues]);
useEffect(() => {
props.setQualificationsTypeId(qualificationsTypeId);
}, [qualificationsTypeId]);
return ( return (
<FormBuilder <FormBuilder
labelCol={{ span: 6 }} labelCol={{ span: 6 }}
@ -284,7 +287,6 @@ const StepOneComponent = (props) => {
itemsField: { valueKey: "qualificationsTypeId", labelKey: "qualificationsTypeName" }, itemsField: { valueKey: "qualificationsTypeId", labelKey: "qualificationsTypeName" },
componentProps: { componentProps: {
onChange: (event) => { onChange: (event) => {
props.setQualificationsTypeId(event);
form.setFieldValue("qualificationsTypeName", getLabelName({ form.setFieldValue("qualificationsTypeName", getLabelName({
list: qualificationsTypeList, list: qualificationsTypeList,
status: event, status: event,
@ -428,7 +430,7 @@ const StepTwoComponent = (props) => {
deleteFiles: values.deleteFiles || [], deleteFiles: values.deleteFiles || [],
startValidityPeriod: values.startValidityPeriod, startValidityPeriod: values.startValidityPeriod,
endValidityPeriod: values.endValidityPeriod, endValidityPeriod: values.endValidityPeriod,
createTime: dayjs().format("YYYY-MM-DD hh:mm:ss"), createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
existingFlag: 2, existingFlag: 2,
}; };
if (values.type === "add") { if (values.type === "add") {
@ -538,19 +540,14 @@ const StepTwoComponent = (props) => {
} }
}; };
const handleChooseFilsSubmit = (selectedRows) => { const handleChooseFilsSubmit = (selectedRows) => {
const existingIds = projectFileList const enterList = projectFileList.filter(item => !item.detailId);
.filter(item => item.detailId) const formattedRows = selectedRows.map(row => ({
.map(item => item.detailId);
const newRows = selectedRows.filter(row =>
row.detailId && !existingIds.includes(row.detailId),
);
const formattedRows = newRows.map(row => ({
...row, ...row,
existingFlag: 1, existingFlag: 1,
})); }));
// 合并到现有列表中 // 合并到现有列表中
setProjectFileList(prev => [...prev, ...formattedRows]); setProjectFileList([...enterList, ...formattedRows]);
setChooseFilsListModalOpen(false); setChooseFilsListModalOpen(false);
}; };
return ( return (
@ -588,7 +585,7 @@ const StepTwoComponent = (props) => {
pagination={false} pagination={false}
options={false} options={false}
disabledResizer={true} disabledResizer={true}
rowKey={record => record.id || record.dataName} rowKey={record => record.id || record.detailId}
columns={[ columns={[
{ title: "材料名称", key: "dataName", dataIndex: "dataName" }, { title: "材料名称", key: "dataName", dataIndex: "dataName" },
{ title: "上传时间", key: "createTime", dataIndex: "createTime", render: (_, record) => record.createTime || "-" }, { title: "上传时间", key: "createTime", dataIndex: "createTime", render: (_, record) => record.createTime || "-" },
@ -596,7 +593,7 @@ const StepTwoComponent = (props) => {
title: "时效性", title: "时效性",
key: "validityPeriod", key: "validityPeriod",
dataIndex: "startValidityPeriod", dataIndex: "startValidityPeriod",
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}${record.endValidityPeriod}` : "-", render: (_, record) => record.startValidityPeriod ? `${dayjs(record.startValidityPeriod).format("YYYY-MM-DD")}${dayjs(record.endValidityPeriod).format("YYYY-MM-DD")}` : "-",
}, },
{ {
title: "操作", title: "操作",
@ -669,11 +666,7 @@ const StepTwoComponent = (props) => {
<div style={{ textAlign: "center", marginTop: 20 }}> <div style={{ textAlign: "center", marginTop: 20 }}>
<Space> <Space>
<Button onClick={() => { <Button onClick={() => {
Modal.confirm({ props.setCurrentStep(1);
title: "提示",
content: "填写的信息将被清除,确定要返回吗?",
onOk: () => props.setCurrentStep(1),
});
}} }}
> >
上一步 上一步
@ -771,7 +764,7 @@ const ChooseFilsComponent = (props) => {
title: "时效性", title: "时效性",
key: "validityPeriod", key: "validityPeriod",
dataIndex: "startValidityPeriod", dataIndex: "startValidityPeriod",
render: (_, record) => record.startValidityPeriod ? `${record.startValidityPeriod}${record.endValidityPeriod}` : "-", render: (_, record) => record.startValidityPeriod ? `${dayjs(record.startValidityPeriod).format("YYYY-MM-DD")}${dayjs(record.endValidityPeriod).format("YYYY-MM-DD")}` : "-",
}, },
]} ]}
{...tableProps} {...tableProps}

View File

@ -0,0 +1,7 @@
import ReViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplicationTwo/ReView";
function ReView(props) {
return (<ReViewPage view="0" {...props} />);
}
export default ReView;

View File

@ -0,0 +1,5 @@
function ProjectFilingApplicationTwo(props) {
return (<div>{props.children}</div>);
}
export default ProjectFilingApplicationTwo;

View File

@ -0,0 +1,7 @@
import ReViewPage from "~/pages/Container/Stakeholder/ProjectReview/ProjectFilingApplicationTwo/ReView";
function ReView(props) {
return (<ReViewPage view="0" {...props} />);
}
export default ReView;

View File

@ -0,0 +1,5 @@
function ProjectFilingApplicationTwo(props) {
return (<div>{props.children}</div>);
}
export default ProjectFilingApplicationTwo;