| | |
| | | import { defineStore } from "pinia"; |
| | | import { loadDetectionArtifacts, loadTrajectoryArtifacts, type DetectionCase, type TrajectoryCase } from "@/api/artifacts"; |
| | | |
| | | interface ArtifactState { detectionCases: Record<string, DetectionCase>; trajectoryCases: Record<string, TrajectoryCase>; loading: boolean; error: string | null; } |
| | | import { |
| | | loadDetectionArtifacts, |
| | | loadSemanticArtifacts, |
| | | loadTrajectoryArtifacts, |
| | | type DetectionCase, |
| | | type SemanticCase, |
| | | type TrajectoryCase |
| | | } from "@/api/artifacts"; |
| | | |
| | | interface ArtifactState { |
| | | detectionCases: Record<string, DetectionCase>; |
| | | trajectoryCases: Record<string, TrajectoryCase>; |
| | | semanticCases: Record<string, SemanticCase>; |
| | | loading: boolean; |
| | | error: string | null; |
| | | } |
| | | |
| | | export const useArtifactStore = defineStore("artifacts", { |
| | | getters: { |
| | | detectionRun: (state) => Object.values(state.detectionCases)[0]?.run ?? null, |
| | | detectionImages: (state) => Object.values(state.detectionCases)[0]?.images ?? [] |
| | | }, |
| | | state: (): ArtifactState => ({ detectionCases: {}, trajectoryCases: {}, loading: false, error: null }), |
| | | state: (): ArtifactState => ({ detectionCases: {}, trajectoryCases: {}, semanticCases: {}, loading: false, error: null }), |
| | | actions: { |
| | | async loadDetection(force = false) { if (!force && Object.keys(this.detectionCases).length) return; this.loading = true; this.error = null; try { this.detectionCases = await loadDetectionArtifacts(); } catch (error) { this.error = error instanceof Error ? error.message : "目标检测结果读取失败"; } finally { this.loading = false; } }, |
| | | async loadTrajectory(force = false) { if (!force && Object.keys(this.trajectoryCases).length) return; this.loading = true; this.error = null; try { this.trajectoryCases = await loadTrajectoryArtifacts(); } catch (error) { this.error = error instanceof Error ? error.message : "轨迹分析结果读取失败"; } finally { this.loading = false; } } |
| | | async loadDetection(force = false) { |
| | | if (!force && Object.keys(this.detectionCases).length) return; |
| | | this.loading = true; this.error = null; |
| | | try { this.detectionCases = await loadDetectionArtifacts(); } |
| | | catch (error) { this.error = error instanceof Error ? error.message : "目标检测结果读取失败"; } |
| | | finally { this.loading = false; } |
| | | }, |
| | | async loadTrajectory(force = false) { |
| | | if (!force && Object.keys(this.trajectoryCases).length) return; |
| | | this.loading = true; this.error = null; |
| | | try { this.trajectoryCases = await loadTrajectoryArtifacts(); } |
| | | catch (error) { this.error = error instanceof Error ? error.message : "轨迹分析结果读取失败"; } |
| | | finally { this.loading = false; } |
| | | }, |
| | | async loadSemantic(force = false) { |
| | | if (!force && Object.keys(this.semanticCases).length) return; |
| | | this.loading = true; this.error = null; |
| | | try { this.semanticCases = await loadSemanticArtifacts(); } |
| | | catch (error) { this.error = error instanceof Error ? error.message : "语义分割结果读取失败"; } |
| | | finally { this.loading = false; } |
| | | } |
| | | } |
| | | }); |