fixed:项目对接资质证照

master
dearLin 2026-01-19 18:08:04 +08:00
parent 086d1187a1
commit 814738b466
4 changed files with 180 additions and 131 deletions

View File

@ -10,11 +10,22 @@ import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
const ViewProjectReviewUserModal = (props) => { const ViewProjectReviewUserModal = (props) => {
const [form] = Form.useForm(); const [form] = Form.useForm();
const [realData, setRealData] = useState([]);
const { loading: getFileLoading, getFile } = useGetFile(); const { loading: getFileLoading, getFile } = useGetFile();
const { tableProps } = useTable(props["userQualificationInfo"], { const { tableProps } = useTable(props["userQualificationInfo"], {
form, form,
params: { params: {
eqUserld: props.data.id, eqUserId: props.data.userRealId ? props.data.userRealId : props.data.id,
},
useStorageQueryCriteria: false,
onSuccess: async (data) => {
const list = data.list;
for (let i = 0; i < list.length; i++) {
const fileItems = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["159"], eqForeignKey: list[i].userCertificateId });
list[i].files = fileItems;
}
setRealData(list);
}, },
}); });
const [tableData, setTableData] = useState([]); const [tableData, setTableData] = useState([]);
@ -69,16 +80,19 @@ const ViewProjectReviewUserModal = (props) => {
]} ]}
> >
<Table <Table
options={false}
disabledResizer={true}
columns={[ columns={[
{ title: "姓名", dataIndex: "userName" }, { title: "姓名", dataIndex: "name" },
{ title: "证书名称", dataIndex: "qualificationName" }, { title: "证书名称", dataIndex: "certificateName" },
{ title: "证书作业类别", dataIndex: "qualificationinfoCategoryName" }, { title: "行业类别", dataIndex: "industryCategoryName" },
{ title: "操作项目", dataIndex: "operatingProjectName" }, { title: "操作项目", dataIndex: "industryOperatingItemsName" },
{ title: "证书编号", dataIndex: "certificateNo" }, { title: "证书编号", dataIndex: "certificateCode" },
{ title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) }, { title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) },
]} ]}
{...enhancedTableProps} {...enhancedTableProps}
dataSource={realData}
/> />
</Modal> </Modal>
); );

View File

@ -14,10 +14,10 @@ import Table from "zy-react-library/components/Table";
import Upload from "zy-react-library/components/Upload"; import Upload from "zy-react-library/components/Upload";
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 useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import useDeleteFile from "zy-react-library/hooks/useDeleteFile"; import useDeleteFile from "zy-react-library/hooks/useDeleteFile";
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 useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import useUploadFile from "zy-react-library/hooks/useUploadFile"; import useUploadFile from "zy-react-library/hooks/useUploadFile";
import { getLabelName, validatorEndTime } from "zy-react-library/utils"; import { getLabelName, validatorEndTime } from "zy-react-library/utils";
@ -29,7 +29,7 @@ function Add(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const [form] = Form.useForm(); const [form] = Form.useForm();
const [userInfo, setUserInfo] = useState({}); const [userInfo, setUserInfo] = useState({});
const [currentStep, setCurrentStep] = useState(1); const [currentStep, setCurrentStep] = useState(2);
const [formValues, setFormValues] = useState({}); const [formValues, setFormValues] = useState({});
const [projectFileAddCmdList, setProjectFileAddCmdList] = useState([]); // 项目资料 const [projectFileAddCmdList, setProjectFileAddCmdList] = useState([]); // 项目资料
const [usercontentAddCmdList, setUsercontentAddCmdList] = useState([]); // 项目审核人员 const [usercontentAddCmdList, setUsercontentAddCmdList] = useState([]); // 项目审核人员
@ -152,9 +152,9 @@ const StepOneComponent = (props) => {
const { data } = id ? await props["userListByDeptId"]({ id }) : []; const { data } = id ? await props["userListByDeptId"]({ id }) : [];
// 去重 // 去重
const uniqueUsers = data.filter((item, index, self) => const uniqueUsers = data.filter((item, index, self) =>
index === self.findIndex((t) => ( index === self.findIndex(t => (
t.userId === item.userId && t.userName === item.userName t.userId === item.userId && t.userName === item.userName
)) )),
); );
setUserList(uniqueUsers); setUserList(uniqueUsers);
}; };
@ -240,11 +240,16 @@ const StepOneComponent = (props) => {
{ label: "项目基础信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "项目基础信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ name: "projectName", label: "项目名称" }, { name: "projectName", label: "项目名称" },
{ {
name: "userId", label: "项目负责人", render: ( name: "userId",
label: "项目负责人",
render: (
<PersonnelSelect <PersonnelSelect
isNeedCorpInfoId={true} isNeedCorpInfoId={true}
params={{ corpinfoId: props.userInfo?.corpinfoId || "" }} params={{ corpinfoId: props.userInfo?.corpinfoId || "" }}
isNeedDepartmentId={false} isNeedDepartmentId={false}
extraParams={{
noMain: 1,
}}
onGetLabel={(label) => { onGetLabel={(label) => {
form.setFieldValue("userName", label); form.setFieldValue("userName", label);
}} }}
@ -271,7 +276,7 @@ const StepOneComponent = (props) => {
} }
}} }}
/> />
) ),
}, },
{ name: "userName", label: "项目负责人", onlyForLabel: true }, { name: "userName", label: "项目负责人", onlyForLabel: true },
{ name: "initiationTime", label: "立项时间", render: FORM_ITEM_RENDER_ENUM.DATE }, { name: "initiationTime", label: "立项时间", render: FORM_ITEM_RENDER_ENUM.DATE },
@ -285,7 +290,10 @@ const StepOneComponent = (props) => {
{ name: "specialFlag", label: "是否包含特殊作业", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] }, { name: "specialFlag", label: "是否包含特殊作业", labelCol: { span: 8 }, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
{ label: "项目审核信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { label: "项目审核信息", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ {
name: "qualificationsTypeId", label: "项目类别", span: 24, wrapperCol: { span: 5 }, name: "qualificationsTypeId",
label: "项目类别",
span: 24,
wrapperCol: { span: 5 },
items: qualificationsTypeList, items: qualificationsTypeList,
render: FORM_ITEM_RENDER_ENUM.SELECT, render: FORM_ITEM_RENDER_ENUM.SELECT,
itemsField: { valueKey: "qualificationsTypeId", labelKey: "qualificationsTypeName" }, itemsField: { valueKey: "qualificationsTypeId", labelKey: "qualificationsTypeName" },
@ -296,7 +304,7 @@ const StepOneComponent = (props) => {
status: event, status: event,
idKey: "qualificationsTypeId", idKey: "qualificationsTypeId",
nameKey: "qualificationsTypeName", nameKey: "qualificationsTypeName",
})) }));
if (form.getFieldValue("isLocalCompany") === 0) { if (form.getFieldValue("isLocalCompany") === 0) {
getDeptList(event); getDeptList(event);
} }
@ -328,7 +336,12 @@ const StepOneComponent = (props) => {
{ name: "qualificationsTypeName", label: "项目类别名称", onlyForLabel: true }, { name: "qualificationsTypeName", label: "项目类别名称", onlyForLabel: true },
{ name: "subcontractFlag", label: "是否存在分包项目", span: 24, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] }, { name: "subcontractFlag", label: "是否存在分包项目", span: 24, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }] },
{ {
name: "isLocalCompany", label: "是否为属地公司推荐", span: 24, render: FORM_ITEM_RENDER_ENUM.RADIO, items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }], componentProps: { name: "isLocalCompany",
label: "是否为属地公司推荐",
span: 24,
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: [{ bianma: 1, name: "是" }, { bianma: 0, name: "否" }],
componentProps: {
onChange: (event) => { onChange: (event) => {
if (event.target.value === 0) { if (event.target.value === 0) {
getDeptList(qualificationsTypeId); getDeptList(qualificationsTypeId);
@ -346,7 +359,7 @@ const StepOneComponent = (props) => {
manageUserNames: "", manageUserNames: "",
}); });
}, },
} },
}, },
{ {
span: 24, span: 24,
@ -518,7 +531,10 @@ const StepOneComponent = (props) => {
}, },
{ name: "approvalUserNames", label: "项目执行属地公司人员名称", onlyForLabel: true }, { name: "approvalUserNames", label: "项目执行属地公司人员名称", onlyForLabel: true },
{ {
name: "projectFiles", label: "安全管理协议", span: 24, render: ( name: "projectFiles",
label: "安全管理协议",
span: 24,
render: (
<Upload <Upload
fileType="image" fileType="image"
maxCount={5} maxCount={5}
@ -528,7 +544,7 @@ const StepOneComponent = (props) => {
form.setFieldValue("deleteProjectFileAddCmdList", [...(form.getFieldValue("deleteProjectFileAddCmdList") || []), file]); form.setFieldValue("deleteProjectFileAddCmdList", [...(form.getFieldValue("deleteProjectFileAddCmdList") || []), file]);
}} }}
/> />
) ),
}, },
{ name: "deleteProjectFileAddCmdList", label: "删除的安全管理协议", onlyForLabel: true }, { name: "deleteProjectFileAddCmdList", label: "删除的安全管理协议", onlyForLabel: true },
{ name: "agreementFileUuid", label: "安全协议uuid", onlyForLabel: true }, { name: "agreementFileUuid", label: "安全协议uuid", onlyForLabel: true },
@ -564,7 +580,7 @@ const StepTwoComponent = (props) => {
const [viewProjectReviewUserModalData, setViewProjectReviewUserModalData] = useState({}); // 查看安全人员证书列表 const [viewProjectReviewUserModalData, setViewProjectReviewUserModalData] = useState({}); // 查看安全人员证书列表
const { loading: getFileLoading, getFile } = useGetFile(); const { loading: getFileLoading, getFile } = useGetFile();
const [chooseFilsListModalOpen, setChooseFilsListModalOpen] = useState(false); const [chooseFilsListModalOpen, setChooseFilsListModalOpen] = useState(false);
const [setChooseFilsListModalData] = useState({}); const [, setChooseFilsListModalData] = useState([]);
const getData = async () => { const getData = async () => {
for (let i = 0; i < projectFileList.length; i++) { for (let i = 0; i < projectFileList.length; i++) {
const files = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["148"], eqForeignKey: projectFileList[i].projectFileId }); const files = await getFile({ eqType: UPLOAD_FILE_TYPE_ENUM["148"], eqForeignKey: projectFileList[i].projectFileId });
@ -656,6 +672,11 @@ const StepTwoComponent = (props) => {
message.error(`请新增项目相关资料`); message.error(`请新增项目相关资料`);
return; return;
} }
if (uploadFileModalData.length === 0) {
message.error(`请新增项目相关资料`);
return;
}
if (usercontentList.length === 0) { if (usercontentList.length === 0) {
message.error(`请新增项目人员`); message.error(`请新增项目人员`);
return; return;
@ -868,6 +889,7 @@ const StepTwoComponent = (props) => {
{chooseFilsListModalOpen && ( {chooseFilsListModalOpen && (
<ChooseFilsList <ChooseFilsList
data={projectFileList} data={projectFileList}
qualificationsTypeId={props.qualificationsTypeId}
onSubmit={handleChooseFilsSubmit} // 使用新的处理函数 onSubmit={handleChooseFilsSubmit} // 使用新的处理函数
onCancel={() => { onCancel={() => {
setChooseFilsListModalOpen(false); setChooseFilsListModalOpen(false);

View File

@ -367,7 +367,8 @@ function Review(props) {
onClick={() => { onClick={() => {
setViewProjectReviewUserModalOpen(true); setViewProjectReviewUserModalOpen(true);
setViewProjectReviewUserModalData({ setViewProjectReviewUserModalData({
...record ...record,
userRealId: record.userId,
}); });
}} }}
> >

View File

@ -8,6 +8,7 @@ import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import ViewProjectReviewUserModal from "~/components/ViewProjectReviewUserModal";
import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace"; import { NS_QUALIFICATION_STATISTICS } from "~/enumerate/namespace";
function UserChange(props) { function UserChange(props) {
@ -16,6 +17,8 @@ function UserChange(props) {
const { tableProps: allData } = useTable(props["projectUserList"], { params: { eqProjectId: query.id, pageIndex: 1, pageSize: 999999 } }); const { tableProps: allData } = useTable(props["projectUserList"], { params: { eqProjectId: query.id, pageIndex: 1, pageSize: 999999 } });
const [usercontentOpen, setUsercontentOpen] = useState(false); // 选择项目审核人员弹窗显示 const [usercontentOpen, setUsercontentOpen] = useState(false); // 选择项目审核人员弹窗显示
const [fetchUserList, setFetchUserList] = useState([]); // 已存在的项目人员数据 const [fetchUserList, setFetchUserList] = useState([]); // 已存在的项目人员数据
const [viewProjectReviewUserModalOpen, setViewProjectReviewUserModalOpen] = useState(false);
const [viewProjectReviewUserModalData, setViewProjectReviewUserModalData] = useState({}); // 查看安全人员证书列表
const onDelete = (record) => { const onDelete = (record) => {
Modal.confirm({ Modal.confirm({
@ -102,6 +105,11 @@ function UserChange(props) {
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
setViewProjectReviewUserModalOpen(true);
setViewProjectReviewUserModalData({
...record,
userRealId: record.userId,
});
// 查看特种证书逻辑 // 查看特种证书逻辑
}} }}
> >
@ -122,6 +130,8 @@ function UserChange(props) {
]} ]}
{...tableProps} {...tableProps}
/> />
{viewProjectReviewUserModalOpen
&& <ViewProjectReviewUserModal onCancel={() => setViewProjectReviewUserModalOpen(false)} data={viewProjectReviewUserModalData} />}
{usercontentOpen && ( {usercontentOpen && (
<UserSelect <UserSelect
data={fetchUserList} data={fetchUserList}
@ -150,6 +160,7 @@ const UserSelectComponent = (props) => {
likeName: "", likeName: "",
likeUserIdCard: "", likeUserIdCard: "",
inDepartmentId, inDepartmentId,
noMain: 1,
eqEmploymentFlag: 1, // 在职 eqEmploymentFlag: 1, // 在职
}, },
useStorageQueryCriteria: false, useStorageQueryCriteria: false,
@ -168,7 +179,8 @@ const UserSelectComponent = (props) => {
...item, ...item,
// 统一字段名 // 统一字段名
id: item.id, id: item.id,
name: item.username || item.name, name: item.name,
username: item.username,
}); });
existingUserIds.add(item.id); existingUserIds.add(item.id);
}); });