fix(inspection): 修复检查功能中的多个问题并优化代码格式

- 修复API端点路径错误,将hiddenConfirmUser/list改为listAll
- 扩展隐藏列表接受状态范围,支持state 400的情况
- 修正部门选择组件参数格式,enterpriseType从数字改为数组形式
- 格式化代码样式,统一导入语句和对象属性的空格格式
- 修复隐患数据处理逻辑,确保正确的数据返回和赋值
- 更新导出功能API端点,使用正确的检查记录导出路径
- 修正计划管理状态判断逻辑,准确识别已完成状态
- 优化企业信息获取参数,保持enterpriseType参数一致性
master
fangjiakai 2026-01-26 11:14:59 +08:00
parent 21961d1cd8
commit 365a3adb30
6 changed files with 79 additions and 81 deletions

View File

@ -58,7 +58,7 @@ export const hiddenList = declareRequest(
);
export const hiddenConfirmUserAllList = declareRequest(
"confirmUserLoading",
`Post > @/hidden/hiddenConfirmUser/list`,
`Post > @/hidden/hiddenConfirmUser/listAll`,
);
export const hiddenAssign = declareRequest(
"assignLoading",

View File

@ -37,7 +37,7 @@ function HiddenList(props) {
>
查看
</Button>
{record.state === 301 && <Button
{(record.state === 301 || record.state === 400) && <Button
type="link"
onClick={() => {
props.history.push(`./acceptance?hiddenId=${record.hiddenId}&id=${record.id}`);

View File

@ -38,7 +38,7 @@ function List(props) {
{ name: "inspectionUserName", label: "检查人" },
{ name: "type", label: "检查类型", render: <DictionarySelectTree dictValue="inspectionType" onlyLastLevel /> },
{ name: "checkTime", label: "检查时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
{ name: "inspectedDepartmentId", label: "被检查单位", render: <DepartmentSelectTree searchType={props.corpSearchType} params={{ enterpriseType: 2 }}/> },
{ name: "inspectedDepartmentId", label: "被检查单位", render: <DepartmentSelectTree searchType={props.corpSearchType} params={{ enterpriseType: [2] }}/> },
{ name: "inspectedUserName", label: "被检查单位现场负责人" },
]}
form={form}

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,14 +85,13 @@ 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,
@ -124,7 +123,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,
@ -133,17 +132,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;
}
@ -156,11 +155,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;
}
@ -190,7 +189,7 @@ function Add(props) {
...values,
situationList,
inspectorList,
initiator: { ...values.initiator, signature: signaturePath },
initiator: {...values.initiator, signature: signaturePath},
isDraft,
source: props.source || "5",
deleteSignature: undefined,
@ -212,7 +211,7 @@ function Add(props) {
files: hiddenList[index].deleteHiddenVideoFiles,
});
const { id } = await uploadFile({
const {id} = await uploadFile({
single: false,
files: hiddenList[index].hiddenImageFiles,
params: {
@ -231,7 +230,8 @@ function Add(props) {
});
if (hiddenList[index].hiddenPartType === "input") {
await props["partAdd"]({ hiddenregion: hiddenList[index].hiddenPart });
const { data } = await props["partAdd"]({hiddenregion: hiddenList[index].hiddenPart});
hiddenList[index].hiddenPart = data
}
const hiddenImageFiles = await getFile({
@ -252,7 +252,7 @@ function Add(props) {
special: 1,
extension: 1,
}),
hiddenImgAddCmds: hiddenImageFiles.map(item => ({ url: item.url })),
hiddenImgAddCmds: hiddenImageFiles.map(item => ({url: item.url})),
hiddenUserId: "",
});
};
@ -261,7 +261,7 @@ function Add(props) {
const handleHiddenData = async (traceId, isDraft) => {
// 删除隐患
if (deleteHiddenIds.current.length > 0) {
props["hiddenDelete"]({ ids: deleteHiddenIds.current.join(",") });
props["hiddenDelete"]({ids: deleteHiddenIds.current.join(",")});
}
// 删除隐患附件
@ -270,13 +270,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});
}
// 新增/更新隐患
@ -287,7 +287,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);
@ -299,7 +299,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);
// 处理隐患数据
await handleHiddenData(traceId, isDraft);
@ -322,7 +322,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)}
@ -350,19 +350,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"],
@ -370,7 +370,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"], "");
@ -379,20 +379,20 @@ function Add(props) {
/>
),
},
{ 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)}
/>
),
formItemProps: { labelCol: { span: 6 } },
formItemProps: {labelCol: {span: 6}},
},
{ name: ["personUnderInspection", "userName"], label: "被检查单位现场负责人名称", onlyForLabel: true },
{ name: "place", label: "检查场所", span: 24 },
{name: ["personUnderInspection", "userName"], label: "被检查单位现场负责人名称", onlyForLabel: true},
{name: "place", label: "检查场所", span: 24},
{
name: "type",
label: "检查类型",
@ -405,25 +405,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,
@ -438,7 +438,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"], "");
@ -449,14 +449,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)}
/>
),
@ -465,7 +465,7 @@ function Add(props) {
),
},
},
{ label: "检查情况", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{label: "检查情况", render: FORM_ITEM_RENDER_ENUM.DIVIDER},
{
name: "situationList",
span: 24,
@ -473,8 +473,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: "图片",
@ -494,14 +494,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}
@ -520,7 +520,7 @@ function Add(props) {
)}
dataSource={hiddenList}
columns={[
{ title: "问题描述", dataIndex: "hiddenDesc" },
{title: "问题描述", dataIndex: "hiddenDesc"},
{
title: "操作",
width: 120,
@ -531,9 +531,8 @@ function Add(props) {
onClick={async () => {
if (record.hiddenId) {
getCurrentHiddenInfo(record.id, record.hiddenId);
}
else {
setCurrentHiddenInfo({ ...record });
} else {
setCurrentHiddenInfo({...record});
}
setHiddenDiscovererUserList(getHiddenDiscovererUserList());
currentHiddenIndex.current = index;
@ -567,13 +566,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}
@ -588,8 +587,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},
]}
/>
{
@ -604,8 +603,7 @@ function Add(props) {
onConfirm={(values) => {
if (currentHiddenIndex.current === -1) {
setHiddenList([...hiddenList, values]);
}
else {
} else {
setHiddenList(
hiddenList.map((item, index) => {
if (index === currentHiddenIndex.current)

View File

@ -153,7 +153,7 @@ function List(props) {
onClick={async () => {
const exportParams = getUrlCriteriaQuery("searchFormKeys", "searchFormValues");
await downloadBlob("/accident/accident/export", { params: { ...exportParams, eqType: props?.type } });
await downloadBlob("/inspection/safetyEnvironmentalInspection/exportList", { params: { ...exportParams} });
}}
>
导出

View File

@ -124,12 +124,12 @@ function List(props) {
title: "计划状态",
dataIndex: "status",
render: (_, record) => {
const { planExecuteTotal, userExecuteNum,userExecuteTotal, planStartTime, planEndTime } = record;
const { planExecuteTotal, userExecuteNum, planStartTime, planEndTime } = record;
const currentTime = dayjs();
let statusText = "";
if (userExecuteTotal <= userExecuteNum && planExecuteTotal > 0) {
if (planExecuteTotal === userExecuteNum && planExecuteTotal > 0) {
statusText = "已完成";
}
else if (currentTime.isBefore(planStartTime, "day")) {
@ -231,7 +231,7 @@ const AddModalComponent = (props) => {
const { getUserInfo } = useGetUserInfo();
const getCorpInfoList = async () => {
const { data } = await props["corpInfoList"]({ pageSize: 9999, pageIndex: 1, enterpriseType: 2 });
const { data } = await props["corpInfoList"]({ pageSize: 9999, pageIndex: 1, enterpriseType: [2] });
setCorpInfoList(data);
};