优化:隐患部位根据被检查企业查询、只有监管端才在改变被检查单位的时候清除隐患

master
LiuJiaNan 2026-02-04 13:42:23 +08:00
parent 8c629309b3
commit b364742157
2 changed files with 85 additions and 79 deletions

View File

@ -86,7 +86,7 @@ function HiddenAddModal(props) {
<Form.Item name="hiddenPart" noStyle>
{
hiddenPartType === "select"
? <HiddenPartSelectTree />
? <HiddenPartSelectTree isNeedCorpInfoId={true} params={{ eqCorpinfoId: props.personUnderInspectionCorpId }} />
: <Input placeholder="请输入隐患部位" />
}
</Form.Item>

View File

@ -1,7 +1,7 @@
import {Connect} from "@cqsjjb/jjb-dva-runtime";
import {Button, Form, message, Modal, Space} from "antd";
import {cloneDeep} from "lodash-es";
import {useEffect, useRef, useState} from "react";
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space } from "antd";
import { cloneDeep } from "lodash-es";
import { useEffect, useRef, useState } from "react";
import FormBuilder from "zy-react-library/components/FormBuilder";
import Page from "zy-react-library/components/Page";
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
@ -10,8 +10,8 @@ import DictionarySelectTree from "zy-react-library/components/SelectTree/Diction
import Signature from "zy-react-library/components/Signature";
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 { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import { UPLOAD_FILE_TYPE_ENUM } from "zy-react-library/enum/uploadFile/gwj";
import useDeleteFile from "zy-react-library/hooks/useDeleteFile";
import useGetFile from "zy-react-library/hooks/useGetFile";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
@ -19,19 +19,19 @@ import useGetUserInfo from "zy-react-library/hooks/useGetUserInfo";
import useIdle from "zy-react-library/hooks/useIdle";
import useIsExistenceDuplicateSelection from "zy-react-library/hooks/useIsExistenceDuplicateSelection";
import useUploadFile from "zy-react-library/hooks/useUploadFile";
import {getFileUrl, validatorEndTime} from "zy-react-library/utils";
import {INSPECTION_QUESTION_ENUM, PLAN_ENUM} from "~/enumerate/constant";
import {NS_INSPECTION, NS_PLAN} from "~/enumerate/namespace";
import { getFileUrl, validatorEndTime } from "zy-react-library/utils";
import { INSPECTION_QUESTION_ENUM, PLAN_ENUM } from "~/enumerate/constant";
import { NS_INSPECTION, NS_PLAN } from "~/enumerate/namespace";
import HiddenAddModal from "./components/HiddenAdd";
function Add(props) {
const query = useGetUrlQuery();
const {getUserInfo} = useGetUserInfo();
const {loading: deleteFileLoading, deleteFile} = useDeleteFile();
const {loading: getFileLoading, getFile} = useGetFile();
const {loading: uploadFileLoading, uploadFile} = useUploadFile();
const {isExistenceDuplicateSelection} = useIsExistenceDuplicateSelection();
const isIdle = useIdle({timeout: 50000});
const { getUserInfo } = useGetUserInfo();
const { loading: deleteFileLoading, deleteFile } = useDeleteFile();
const { loading: getFileLoading, getFile } = useGetFile();
const { loading: uploadFileLoading, uploadFile } = useUploadFile();
const { isExistenceDuplicateSelection } = useIsExistenceDuplicateSelection();
const isIdle = useIdle({ timeout: 50000 });
const [form] = Form.useForm();
const personUnderInspectionDepartmentId = Form.useWatch(["personUnderInspection", "departmentId"], form);
@ -52,7 +52,7 @@ function Add(props) {
const currentHiddenIndex = useRef(-1);
const getPlanList = async () => {
const {data} = await props["planListAll"]();
const { data } = await props["planListAll"]();
setPlanList(data);
};
@ -61,7 +61,7 @@ function Add(props) {
setUserInfo(userInfo);
if (query.id) {
const situationList = [];
const {data} = await props["inspectionView"]({inspectionId: query.id});
const { data } = await props["inspectionView"]({ inspectionId: query.id });
situationList.push(...data.content);
for (let i = 0; i < situationList.length; i++) {
if (situationList[i].contentId) {
@ -76,7 +76,7 @@ function Add(props) {
setSignatureFilePath(currentInspectorUser?.signature ? getFileUrl() + currentInspectorUser.signature : "");
form.setFieldsValue({
...data,
situationList: situationList.length > 0 ? situationList : [{content: undefined}],
situationList: situationList.length > 0 ? situationList : [{ content: undefined }],
inspectorList: data.inspectorVerificationList,
personUnderInspection: data.inspectedPartyConfirmation,
initiator: {
@ -85,13 +85,14 @@ function Add(props) {
signatureTime: currentInspectorUser.signatureTime,
},
});
const {data: hiddenList} = await props["hiddenList"]({
const { data: hiddenList } = await props["hiddenList"]({
foreignKey: query.inspectionId,
pageIndex: 1,
pageSize: 999,
});
setHiddenList(hiddenList);
} else {
}
else {
form.setFieldsValue({
inspectorList: [{
departmentId: userInfo.departmentId,
@ -123,7 +124,7 @@ function Add(props) {
};
const getCurrentHiddenInfo = async (id, hiddenId) => {
const {data} = await props["hiddenView"]({id});
const { data } = await props["hiddenView"]({ id });
const hiddenImageFiles = await getFile({
eqType: UPLOAD_FILE_TYPE_ENUM["3"],
eqForeignKey: hiddenId,
@ -132,17 +133,17 @@ function Add(props) {
eqType: UPLOAD_FILE_TYPE_ENUM["102"],
eqForeignKey: hiddenId,
});
setCurrentHiddenInfo({...data, hiddenImageFiles, hiddenVideoFiles});
setCurrentHiddenInfo({ ...data, hiddenImageFiles, hiddenVideoFiles });
};
// 处理签名逻辑
const handleSignature = async (values) => {
await deleteFile({single: false, files: [{filePath: values.deleteSignature}]});
await deleteFile({ single: false, files: [{ filePath: values.deleteSignature }] });
if (typeof values.initiator.signature !== "string") {
const {filePath} = await uploadFile({
files: [{originFileObj: values.initiator.signature}],
params: {type: UPLOAD_FILE_TYPE_ENUM["139"]},
const { filePath } = await uploadFile({
files: [{ originFileObj: values.initiator.signature }],
params: { type: UPLOAD_FILE_TYPE_ENUM["139"] },
});
return filePath;
}
@ -155,11 +156,11 @@ function Add(props) {
const situationList = cloneDeep(values.situationList.filter(Boolean));
for (let i = 0; i < situationList.length; i++) {
await deleteFile({single: false, files: situationList[i].deleteFiles});
const {id} = await uploadFile({
await deleteFile({ single: false, files: situationList[i].deleteFiles });
const { id } = await uploadFile({
single: false,
files: situationList[i].files,
params: {type: UPLOAD_FILE_TYPE_ENUM["140"], foreignKey: situationList[i].contentId},
params: { type: UPLOAD_FILE_TYPE_ENUM["140"], foreignKey: situationList[i].contentId },
});
situationList[i].imgId = id;
}
@ -189,7 +190,7 @@ function Add(props) {
...values,
situationList,
inspectorList,
initiator: {...values.initiator, signature: signaturePath},
initiator: { ...values.initiator, signature: signaturePath },
isDraft,
source: props.source || "5",
deleteSignature: undefined,
@ -211,7 +212,7 @@ function Add(props) {
files: hiddenList[index].deleteHiddenVideoFiles,
});
const {id} = await uploadFile({
const { id } = await uploadFile({
single: false,
files: hiddenList[index].hiddenImageFiles,
params: {
@ -230,8 +231,8 @@ function Add(props) {
});
if (hiddenList[index].hiddenPartType === "input") {
const {data} = await props["partAdd"]({hiddenregion: hiddenList[index].hiddenPart});
hiddenList[index].hiddenPart = data
const { data } = await props["partAdd"]({ hiddenregion: hiddenList[index].hiddenPart });
hiddenList[index].hiddenPart = data;
}
const hiddenImageFiles = await getFile({
@ -245,7 +246,7 @@ function Add(props) {
hiddenId: id,
state: isDraft === 0 ? 102 : 98,
foreignKey: traceId,
corpId: corpId,
corpId,
tenantId: corpId,
hiddenJson: JSON.stringify({
confirm: 1,
@ -254,7 +255,7 @@ function Add(props) {
special: 1,
extension: 1,
}),
hiddenImgAddCmds: hiddenImageFiles.map(item => ({url: item.url})),
hiddenImgAddCmds: hiddenImageFiles.map(item => ({ url: item.url })),
hiddenUserId: "",
});
};
@ -263,7 +264,7 @@ function Add(props) {
const handleHiddenData = async (traceId, isDraft, corpId) => {
// 删除隐患
if (deleteHiddenIds.current.length > 0) {
props["hiddenDelete"]({ids: deleteHiddenIds.current.join(",")});
props["hiddenDelete"]({ ids: deleteHiddenIds.current.join(",") });
}
// 删除隐患附件
@ -272,13 +273,13 @@ function Add(props) {
eqType: UPLOAD_FILE_TYPE_ENUM["3"],
eqForeignKey: deleteHiddenIds.current[i],
});
await deleteFile({single: false, files: hiddenImageFiles});
await deleteFile({ single: false, files: hiddenImageFiles });
const hiddenVideoFiles = await getFile({
eqType: UPLOAD_FILE_TYPE_ENUM["102"],
eqForeignKey: deleteHiddenIds.current[i],
});
await deleteFile({single: false, files: hiddenVideoFiles});
await deleteFile({ single: false, files: hiddenVideoFiles });
}
// 新增/更新隐患
@ -289,7 +290,7 @@ function Add(props) {
const onSubmit = async (values, isDraft) => {
// 检查重复选择
await isExistenceDuplicateSelection({data: values.inspectorList, key: "userId", message: "检查人员存在重复项"});
await isExistenceDuplicateSelection({ data: values.inspectorList, key: "userId", message: "检查人员存在重复项" });
// 处理签名
const signatureResult = await handleSignature(values);
@ -301,7 +302,7 @@ function Add(props) {
const inspectorList = handleInspectorList(values);
// 提交主表单数据
const {traceId} = await submitInspectionData(values, situationList, inspectorList, signatureResult, isDraft);
const { traceId } = await submitInspectionData(values, situationList, inspectorList, signatureResult, isDraft);
// 处理隐患数据 {name: ["personUnderInspection", "corpId"], label: "被检查单位现场负责人企业id", onlyForLabel: true},
await handleHiddenData(traceId, isDraft, values.personUnderInspection?.corpId);
@ -324,7 +325,7 @@ function Add(props) {
planId: query.planId,
type: query.type,
typeName: query.typeName,
situationList: [{content: undefined}],
situationList: [{ content: undefined }],
}}
loading={deleteFileLoading || getFileLoading || uploadFileLoading || props.inspection.inspectionLoading}
onFinish={values => onSubmit(values, 0)}
@ -352,19 +353,19 @@ function Add(props) {
name: "planType",
label: "计划属性",
render: FORM_ITEM_RENDER_ENUM.RADIO,
items: PLAN_ENUM.map(item => ({...item, bianma: +item.bianma})),
items: PLAN_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
span: planType === 0 ? 24 : 12,
componentProps: {disabled: true},
componentProps: { disabled: true },
},
{
name: "planId",
label: "计划名称",
render: FORM_ITEM_RENDER_ENUM.SELECT,
items: planList,
itemsField: {labelKey: "planName", valueKey: "id"},
itemsField: { labelKey: "planName", valueKey: "id" },
dependencies: ["planType"],
hidden: formValues => !(formValues.planType === 1),
componentProps: {disabled: true},
componentProps: { disabled: true },
},
{
name: ["personUnderInspection", "departmentId"],
@ -372,7 +373,7 @@ function Add(props) {
render: (
<DepartmentSelectTree
searchType={props.corpSearchType}
params={{enterpriseType: [2]}}
params={{ enterpriseType: [2] }}
onGetLabel={label => form.setFieldValue(["personUnderInspection", "departmentName"], label)}
onChange={() => {
form.setFieldValue(["personUnderInspection", "userId"], "");
@ -380,19 +381,21 @@ function Add(props) {
form.setFieldValue(["personUnderInspection", "corpId"], "");
form.setFieldValue(["personUnderInspection", "corpName"], "");
deleteHiddenIds.current.push(...hiddenList.map(item => item.id).filter(Boolean))
setHiddenList([])
if (props.source === "4") {
deleteHiddenIds.current.push(...hiddenList.map(item => item.id).filter(Boolean));
setHiddenList([]);
}
}}
/>
),
},
{name: ["personUnderInspection", "departmentName"], label: "被检查单位名称", onlyForLabel: true},
{ name: ["personUnderInspection", "departmentName"], label: "被检查单位名称", onlyForLabel: true },
{
name: ["personUnderInspection", "userId"],
label: "被检查单位现场负责人",
render: (
<PersonnelSelect
params={{departmentId: personUnderInspectionDepartmentId}}
params={{ departmentId: personUnderInspectionDepartmentId }}
onGetLabel={label => form.setFieldValue(["personUnderInspection", "userName"], label)}
onGetOption={(option) => {
form.setFieldValue(["personUnderInspection", "corpId"], option.corpinfoId);
@ -400,12 +403,12 @@ function Add(props) {
}}
/>
),
formItemProps: {labelCol: {span: 6}},
formItemProps: { labelCol: { span: 6 } },
},
{name: ["personUnderInspection", "userName"], label: "被检查单位现场负责人名称", onlyForLabel: true},
{name: ["personUnderInspection", "corpId"], label: "被检查单位现场负责人企业id", onlyForLabel: true},
{name: ["personUnderInspection", "corpName"], label: "被检查单位现场负责人企业名称", onlyForLabel: true},
{name: "place", label: "检查场所", span: 24},
{ name: ["personUnderInspection", "userName"], label: "被检查单位现场负责人名称", onlyForLabel: true },
{ name: ["personUnderInspection", "corpId"], label: "被检查单位现场负责人企业id", onlyForLabel: true },
{ name: ["personUnderInspection", "corpName"], label: "被检查单位现场负责人企业名称", onlyForLabel: true },
{ name: "place", label: "检查场所", span: 24 },
{
name: "type",
label: "检查类型",
@ -418,25 +421,25 @@ function Add(props) {
disabled={!!query.planId}
/>
),
formItemProps: {labelCol: {span: 6}},
formItemProps: { labelCol: { span: 6 } },
},
{name: "typeName", label: "检查类型名称", onlyForLabel: true},
{ name: "typeName", label: "检查类型名称", onlyForLabel: true },
{
name: "timeStart",
label: "检查开始时间",
span: 8,
render: FORM_ITEM_RENDER_ENUM.DATETIME,
formItemProps: {labelCol: {span: 6}},
formItemProps: { labelCol: { span: 6 } },
},
{
name: "timeEnd",
label: "检查结束时间",
span: 8,
render: FORM_ITEM_RENDER_ENUM.DATETIME,
formItemProps: {labelCol: {span: 6}},
formItemProps: { labelCol: { span: 6 } },
rules: [validatorEndTime(timeStart)],
},
{label: "检查人员", render: FORM_ITEM_RENDER_ENUM.DIVIDER},
{ label: "检查人员", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "inspectorList",
span: 24,
@ -451,7 +454,7 @@ function Add(props) {
render: (
<DepartmentSelectTree
searchType={props.corpSearchType}
params={{inType: [0, 1, 2, 6]}}
params={{ inType: [0, 1, 2, 6] }}
onChange={() => {
form.setFieldValue(["inspectorList", field.name, "userId"], "");
form.setFieldValue(["inspectorList", field.name, "userName"], "");
@ -462,14 +465,14 @@ function Add(props) {
/>
),
},
{name: [field.name, "departmentName"], label: "检查人员部门名称", onlyForLabel: true},
{name: [field.name, "userName"], label: "检查人员名称", onlyForLabel: true},
{ name: [field.name, "departmentName"], label: "检查人员部门名称", onlyForLabel: true },
{ name: [field.name, "userName"], label: "检查人员名称", onlyForLabel: true },
{
name: [field.name, "userId"],
label: "检查人员",
render: (
<PersonnelSelect
params={{departmentId: inspectorList?.[field.name]?.departmentId || ""}}
params={{ departmentId: inspectorList?.[field.name]?.departmentId || "" }}
onGetLabel={label => form.setFieldValue(["inspectorList", field.name, "userName"], label)}
/>
),
@ -478,7 +481,7 @@ function Add(props) {
),
},
},
{label: "检查情况", render: FORM_ITEM_RENDER_ENUM.DIVIDER},
{ label: "检查情况", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
name: "situationList",
span: 24,
@ -486,8 +489,8 @@ function Add(props) {
formListUniqueProps: {
addButtonText: "添加检查情况",
options: field => ([
{name: [field.name, "content"], label: "检查情况", render: FORM_ITEM_RENDER_ENUM.TEXTAREA},
{name: [field.name, "deleteFiles"], label: "删除的图片", onlyForLabel: true},
{ name: [field.name, "content"], label: "检查情况", render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
{ name: [field.name, "deleteFiles"], label: "删除的图片", onlyForLabel: true },
{
name: [field.name, "files"],
label: "图片",
@ -507,14 +510,14 @@ function Add(props) {
]),
},
},
{label: "发现问题", render: FORM_ITEM_RENDER_ENUM.DIVIDER},
{ label: "发现问题", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{
key: "hiddenList",
customizeRender: true,
span: 24,
render: (
<Table
style={{marginBottom: 20}}
style={{ marginBottom: 20 }}
pagination={false}
options={false}
disabledResizer={true}
@ -523,7 +526,7 @@ function Add(props) {
type="primary"
onClick={() => {
if (!form.getFieldValue(["personUnderInspection", "corpId"])) {
message.warning("请选择被检查人员")
message.warning("请选择被检查人员");
return;
}
setHiddenDiscovererUserList(getHiddenDiscovererUserList());
@ -537,7 +540,7 @@ function Add(props) {
)}
dataSource={hiddenList}
columns={[
{title: "问题描述", dataIndex: "hiddenDesc"},
{ title: "问题描述", dataIndex: "hiddenDesc" },
{
title: "操作",
width: 120,
@ -548,8 +551,9 @@ function Add(props) {
onClick={async () => {
if (record.hiddenId) {
getCurrentHiddenInfo(record.id, record.hiddenId);
} else {
setCurrentHiddenInfo({...record});
}
else {
setCurrentHiddenInfo({ ...record });
}
setHiddenDiscovererUserList(getHiddenDiscovererUserList());
currentHiddenIndex.current = index;
@ -583,13 +587,13 @@ function Add(props) {
/>
),
},
{name: ["initiator", "userRemarks"], label: "检查人意见", render: FORM_ITEM_RENDER_ENUM.TEXTAREA, span: 24},
{ name: ["initiator", "userRemarks"], label: "检查人意见", render: FORM_ITEM_RENDER_ENUM.TEXTAREA, span: 24 },
{
name: ["initiator", "signature"],
label: "检查人",
span: 24,
required: false,
rules: [{required: true, message: "请签名"}],
rules: [{ required: true, message: "请签名" }],
render: (
<Signature
url={signatureFilePath}
@ -604,8 +608,8 @@ function Add(props) {
/>
),
},
{name: ["initiator", "signatureTime"], label: "签字时间", onlyForLabel: true},
{name: "deleteSignature", label: "删除的签字图片", onlyForLabel: true},
{ name: ["initiator", "signatureTime"], label: "签字时间", onlyForLabel: true },
{ name: "deleteSignature", label: "删除的签字图片", onlyForLabel: true },
]}
/>
{
@ -617,10 +621,12 @@ function Add(props) {
setHiddenAddModalOpen(false);
setCurrentHiddenInfo({});
}}
personUnderInspectionCorpId={form.getFieldValue(["personUnderInspection", "corpId"])}
onConfirm={(values) => {
if (currentHiddenIndex.current === -1) {
setHiddenList([...hiddenList, values]);
} else {
}
else {
setHiddenList(
hiddenList.map((item, index) => {
if (index === currentHiddenIndex.current)