From 302018f631b6af0f45f4038e16b49d2ce65b6901 Mon Sep 17 00:00:00 2001 From: Misaka Date: Wed, 4 Mar 2026 22:56:00 +0800 Subject: [PATCH] Feat: Add extraction complete status indicator with success message --- src/renderer/src/hooks/useExtractor.ts | 7 ++++++- src/renderer/src/pages/ExtractorPage.tsx | 12 ++++++++++-- src/renderer/src/stores/extractorStore.ts | 7 ++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/renderer/src/hooks/useExtractor.ts b/src/renderer/src/hooks/useExtractor.ts index 4e3818d..eeec7ea 100644 --- a/src/renderer/src/hooks/useExtractor.ts +++ b/src/renderer/src/hooks/useExtractor.ts @@ -4,12 +4,14 @@ import { useExtractorStore } from '../stores/extractorStore' export function useExtractor() { const { isRunning, + isComplete, progress, error, logs, setRunning, setProgress, setError, + setComplete, addLog, clearLogs, resetState @@ -79,6 +81,7 @@ export function useExtractor() { } finally { setRunning(false) setProgress(null) + setComplete(true) } } @@ -87,8 +90,10 @@ export function useExtractor() { progress, error, logs, + isComplete, startExtraction, clearLogs, - setError + setError, + setComplete } } diff --git a/src/renderer/src/pages/ExtractorPage.tsx b/src/renderer/src/pages/ExtractorPage.tsx index 51db56f..7f02db3 100644 --- a/src/renderer/src/pages/ExtractorPage.tsx +++ b/src/renderer/src/pages/ExtractorPage.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react' -import { Download, Play } from 'lucide-react' +import { Download, Play, CheckCircle } from 'lucide-react' import OrderNumberInput from '../components/OrderNumberInput' import { useExtractor } from '../hooks/useExtractor' import LogPanel from '../components/ui/LogPanel' @@ -10,7 +10,8 @@ const ExtractorPage: React.FC = () => { return sessionStorage.getItem('extractor_orderNumbers') || '' }) - const { isRunning, progress, error, logs, startExtraction, clearLogs, setError } = useExtractor() + const { isRunning, progress, error, logs, startExtraction, clearLogs, setError, isComplete } = + useExtractor() useEffect(() => { sessionStorage.setItem('extractor_orderNumbers', orderNumbers) @@ -75,6 +76,13 @@ const ExtractorPage: React.FC = () => { + {!isRunning && isComplete && ( +
+ +

提取完毕

+
+ )} + {isRunning && progress && ( void setProgress: (progress: ExtractionProgress | null) => void setError: (error: string | null) => void + setComplete: (isComplete: boolean) => void addLog: (level: LogLevel, message: string) => void clearLogs: () => void resetState: () => void @@ -43,7 +45,8 @@ const initialState: ExtractorState = { isRunning: false, progress: null, error: null, - logs: [] + logs: [], + isComplete: false } export const useExtractorStore = create((set) => ({ @@ -55,6 +58,8 @@ export const useExtractorStore = create((set) setError: (error: string | null) => set({ error }), + setComplete: (isComplete: boolean) => set({ isComplete }), + addLog: (level: LogLevel, message: string) => set((state) => { const timestamp = new Date().toLocaleTimeString('zh-CN', { hour12: false })