From 9b16bab9ddda1120261efdf5c754ff2151b87111 Mon Sep 17 00:00:00 2001 From: LiuJiaNan <15703339975@163.com> Date: Thu, 4 Dec 2025 17:29:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=90=E6=82=A3=E4=BF=AE=E6=94=B9=2012.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BranchCompany/Average/Ledger/Add/index.js | 176 ++++++++++++++++-- 1 file changed, 159 insertions(+), 17 deletions(-) diff --git a/src/pages/Container/BranchCompany/Average/Ledger/Add/index.js b/src/pages/Container/BranchCompany/Average/Ledger/Add/index.js index 59ed6ab..f012fa2 100644 --- a/src/pages/Container/BranchCompany/Average/Ledger/Add/index.js +++ b/src/pages/Container/BranchCompany/Average/Ledger/Add/index.js @@ -1,5 +1,5 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime"; -import { Button, Form, Input, message, Modal } from "antd"; +import { Button, Col, Form, Image, Input, message, Modal, Row } from "antd"; import { useEffect, useRef, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import HeaderBack from "zy-react-library/components/HeaderBack"; @@ -38,6 +38,10 @@ function Add(props) { const [aiHiddenModalOpen, setAiHiddenModalOpen] = useState(false); const [selectHiddens, setSelectHiddens] = useState([]); const [currentProcessHiddenIndex, setCurrentProcessHiddenIndex] = useState(-1); + const [imageSelectModalOpen, setImageSelectModalOpen] = useState(false); + const [uploadedImages, setUploadedImages] = useState([]); + const [processedImages, setProcessedImages] = useState([]); + const [modalTitle, setModalTitle] = useState("选择图片进行AI识别"); const [hiddenPartType, setHiddenPartType] = useState("select"); const [confirmUserList, setConfirmUserList] = useState([]); @@ -99,27 +103,83 @@ function Add(props) { getConfirmUserList(); }, []); - const getAIHiddenImageRecognize = async () => { + const getAIHiddenImageRecognize = async (selectedImage = null) => { const hiddenImageFiles = form.getFieldValue("hiddenImageFiles"); - if (!hiddenImageFiles || hiddenImageFiles.length === 0) { - message.warning("请上传图片"); - return; - } - if (hiddenImageFiles.length > 1) { - message.warning("只能上传一张图片"); - return; + + const imageToProcess = selectedImage || hiddenImageFiles[0]; + + if (imageToProcess && !processedImages.includes(imageToProcess)) { + setProcessedImages([...processedImages, imageToProcess]); } + if (!aiHiddenImageRecognizeFilePath.current) { - // const { filePath } = await uploadFile({ files: hiddenImageFiles, params: { type: UPLOAD_FILE_TYPE_ENUM["3"] } }); + // const { filePath } = await uploadFile({ files: [imageToProcess], params: { type: UPLOAD_FILE_TYPE_ENUM["3"] } }); // aiHiddenImageRecognizeFilePath.current = filePath; aiHiddenImageRecognizeFilePath.current = "https://pic.rmb.bdstatic.com/bjh/news/0a68c2681805fcaea506d922f024420c.png"; } const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: "https://pic.rmb.bdstatic.com/bjh/news/0a68c2681805fcaea506d922f024420c.png" }); // const { data } = await props["hiddenAiRecognize"]({ hiddenUrl: getFileUrl() + aiHiddenImageRecognizeFilePath.current }); - setAiHiddens(data.aiHiddens.map(item => ({ ...JSON.parse(item), id: createGuid() }))); + setAiHiddens((data?.aiHiddens || []).map(item => ({ ...JSON.parse(item), id: createGuid() }))); setAiHiddenModalOpen(true); // await deleteFile({ files: [{ filePath: aiHiddenImageRecognizeFilePath.current }] }); }; + const handleAiRecognizeClick = () => { + const hiddenImageFiles = form.getFieldValue("hiddenImageFiles"); + if (!hiddenImageFiles || hiddenImageFiles.length === 0) { + message.warning("请上传图片"); + return; + } + + setProcessedImages([]); + setAiHiddens([]); + setSelectHiddens([]); + setCurrentProcessHiddenIndex(-1); + form.setFieldValue("isAi", ""); + form.setFieldValue("hiddenDesc", ""); + form.setFieldValue("legalBasis", ""); + form.setFieldValue("rectificationDescr", ""); + + if (hiddenImageFiles.length === 1) { + getAIHiddenImageRecognize(hiddenImageFiles[0]); + } + else { + setUploadedImages(hiddenImageFiles); + setModalTitle("选择图片进行AI识别"); + setImageSelectModalOpen(true); + } + }; + + const handleSelectOtherImage = () => { + Modal.confirm({ + title: "确认切换图片", + content: "当前有未处理完的隐患信息,确认后进入选择图片,选择图片重新AI识别,将丢弃之前没有处理完的隐患", + onOk: () => { + setAiHiddens([]); + setSelectHiddens([]); + setCurrentProcessHiddenIndex(-1); + form.setFieldValue("isAi", ""); + form.setFieldValue("hiddenDesc", ""); + form.setFieldValue("legalBasis", ""); + form.setFieldValue("rectificationDescr", ""); + + const hiddenImageFiles = form.getFieldValue("hiddenImageFiles"); + const unprocessedImages = hiddenImageFiles.filter(img => + !processedImages.includes(img), + ); + + setUploadedImages(unprocessedImages); + setModalTitle("选择其他图片进行AI识别"); + setImageSelectModalOpen(true); + }, + }); + }; + + const getUnprocessedImagesCount = () => { + const hiddenImageFiles = form.getFieldValue("hiddenImageFiles") || []; + return hiddenImageFiles.filter(img => + !processedImages.includes(img), + ).length; + }; const onMergeHidden = (selectedRowKeys) => { const toBeMerged = aiHiddens.filter(hidden => selectedRowKeys.includes(hidden.id)); @@ -206,16 +266,30 @@ function Add(props) { form={form} loading={deleteFileLoading || uploadFileLoading || getFileLoading || props.ledger.ledgerLoading} values={defaultValues} - submitButtonText={isExistNextOneHidden() ? "下一个" : "提交"} onFinish={onSubmit} + showSubmitButton={false} + showCancelButton={false} + extraActionButtons={[ + , + ...(isAi === 1 && processedImages.length > 0 && getUnprocessedImagesCount() > 0 + ? [ + , + ] + : []), + , + ]} options={[ { name: "hiddenImageFiles", label: "隐患图片", render: ( 0} + listType="picture-card" onRemove={() => { if (isAi === 1) { form.setFieldValue("isAi", ""); @@ -239,14 +313,12 @@ function Add(props) { src={ai_recognize} alt="ai_recognize" style={{ width: 150, height: 30, cursor: "pointer", marginBottom: 10 }} - onClick={getAIHiddenImageRecognize} + onClick={handleAiRecognizeClick} /> ) }
- 最多上传 - {isAi === 1 ? 1 : 4} - 个文件,并且只能上传jpg、jpeg、png格式的文件。 + 最多上传4个文件,并且只能上传jpg、jpeg、png格式的文件。
)} @@ -596,6 +668,18 @@ function Add(props) { /> ) } + { + imageSelectModalOpen && ( + setImageSelectModalOpen(false)} + onConfirm={(selectedImage) => { + getAIHiddenImageRecognize(selectedImage); + }} + /> + ) + } ); } @@ -670,4 +754,62 @@ const AiHiddenModal = (props) => { ); }; +const ImageSelectModal = (props) => { + const [selectedImage, setSelectedImage] = useState(null); + + const handleConfirm = () => { + if (!selectedImage) { + message.warning("请选择一张图片进行AI识别"); + return; + } + props.onConfirm(selectedImage); + props.onCancel(); + }; + + return ( + + + {props.images.map((image, index) => ( + +
setSelectedImage(image)} + > + {`图片 +
+ + ))} +
+
+ ); +}; + export default Connect([NS_LEDGER, NS_CONFIRM_USER, NS_PART], true)(Add);