From ff5e78c5a9a2ad6ad4451f6d3501f4a266842522 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 2 Feb 2026 13:24:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A0=87=E6=B3=A8=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=EF=BC=8C=E6=97=A0=E9=9C=80=E7=82=B9=E5=87=BB=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/canvas/nodes/ImageNode.tsx | 72 +++------------------------ 1 file changed, 7 insertions(+), 65 deletions(-) diff --git a/components/canvas/nodes/ImageNode.tsx b/components/canvas/nodes/ImageNode.tsx index 89ec554..4d2f416 100644 --- a/components/canvas/nodes/ImageNode.tsx +++ b/components/canvas/nodes/ImageNode.tsx @@ -160,15 +160,12 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { // 当前节点是否处于拾取模式 const isThisNodePicking = isPickerMode && pickerTargetNodeId === node.id; - // 已标注的物品列表(本地状态) - const [pickedMarkers, setPickedMarkers] = useState([]); // 当前正在识别的点击位置 const [currentClick, setCurrentClick] = useState<{ x: number; y: number } | null>(null); - // 退出拾取模式时清空标记 + // 退出拾取模式时清空状态 useEffect(() => { if (!isThisNodePicking) { - setPickedMarkers([]); setCurrentClick(null); } }, [isThisNodePicking]); @@ -222,15 +219,10 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { addPendingPickedObject(picked); - setPickedMarkers(prev => [...prev, { - clickX, - clickY, - objectName: result.object.name, - index: prev.length + 1, - }]); - - toast.success(`已添加: ${result.object.name}`); + // 标注成功后自动关闭拾取模式,直接生成标签 + setPickerMode(false); setCurrentClick(null); + toast.success(`已添加: ${result.object.name}`); } else { toast.error(result.error || '未能识别物品'); setCurrentClick(null); @@ -242,15 +234,7 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { } finally { setPickerLoading(false); } - }, [isThisNodePicking, isPickerLoading, data.src, node.id, setPickerLoading, addPendingPickedObject]); - - // 🆕 完成标注 - const handleFinishPicking = useCallback(() => { - setPickerMode(false); - if (pickedMarkers.length > 0) { - toast.success(`已完成 ${pickedMarkers.length} 个物品标注`); - } - }, [setPickerMode, pickedMarkers.length]); + }, [isThisNodePicking, isPickerLoading, data.src, node.id, setPickerLoading, addPendingPickedObject, setPickerMode]); // 🆕 取消标注 const handleCancelPicking = useCallback(() => { @@ -637,31 +621,6 @@ export function ImageNode({ node, isSelected }: ImageNodeProps) { }} /> - {/* 🆕 拾取模式:显示已标注的物品标记 */} - {isThisNodePicking && pickedMarkers.map((marker) => ( -
- {/* 序号标记 */} -
-
-
- {marker.index} -
-
- {/* 物品名称 */} -
- {marker.objectName} -
-
- ))} - {/* 🆕 拾取模式:当前点击位置(正在识别) */} {isThisNodePicking && currentClick && (
- {isPickerLoading - ? '正在识别...' - : pickedMarkers.length > 0 - ? `已标注 ${pickedMarkers.length} 个` - : '点击标注物品'} + {isPickerLoading ? '正在识别...' : '点击标注物品'} - {pickedMarkers.length > 0 && ( - - )}