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 [form] = Form.useForm();
const [realData, setRealData] = useState([]);
const { loading: getFileLoading, getFile } = useGetFile();
const { tableProps } = useTable(props["userQualificationInfo"], {
form,
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([]);
@ -69,16 +80,19 @@ const ViewProjectReviewUserModal = (props) => {
]}
>
<Table
options={false}
disabledResizer={true}
columns={[
{ title: "姓名", dataIndex: "userName" },
{ title: "证书名称", dataIndex: "qualificationName" },
{ title: "证书作业类别", dataIndex: "qualificationinfoCategoryName" },
{ title: "操作项目", dataIndex: "operatingProjectName" },
{ title: "证书编号", dataIndex: "certificateNo" },
{ title: "姓名", dataIndex: "name" },
{ title: "证书名称", dataIndex: "certificateName" },
{ title: "行业类别", dataIndex: "industryCategoryName" },
{ title: "操作项目", dataIndex: "industryOperatingItemsName" },
{ title: "证书编号", dataIndex: "certificateCode" },
{ title: "图片", dataIndex: "files", render: (_, record) => (<TooltipPreviewImg files={record.files} />) },
]}
{...enhancedTableProps}
dataSource={realData}
/>
</Modal>
);

View File

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

View File

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