import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import { saveReportThunk } from './saveReportThunk'; import { previewReportThunk } from './previewReportThunk'; import { Task } from '@/domain/work'; import { ReportContent } from '@/API/report/ReportActions'; interface DiagnosticReportState { // eslint-disable-next-line @typescript-eslint/no-explicit-any report: any; // eslint-disable-next-line @typescript-eslint/no-explicit-any previewResponse: any; isPreviewing: boolean; isSaving: boolean; isFinished: boolean; visible: boolean; needsPreview: boolean; currentWork: Task | null; // 当前选中的工作 } const initialState: DiagnosticReportState = { report: null, previewResponse: null, isPreviewing: false, isSaving: false, isFinished: false, visible: false, needsPreview: false, currentWork: null, }; const diagnosticReportSlice = createSlice({ name: 'diagnosticReport', initialState, reducers: { finishReport(state) { state.isFinished = true; }, setVisible(state, action: PayloadAction) { if (typeof action.payload === 'boolean') { state.visible = action.payload; } else { state.visible = action.payload.visible; if (action.payload.work) { state.currentWork = action.payload.work; } } }, toggleVisible(state) { state.visible = !state.visible; }, setNeedsPreview(state, action: PayloadAction) { state.needsPreview = action.payload; }, setReport(state, action: PayloadAction) { state.report = action.payload; }, }, extraReducers: (builder) => { builder .addCase(saveReportThunk.pending, (state) => { state.isSaving = true; }) .addCase(saveReportThunk.fulfilled, (state) => { state.isSaving = false; state.isFinished = true; }) .addCase(saveReportThunk.rejected, (state) => { state.isSaving = false; }) .addCase(previewReportThunk.pending, (state) => { state.isPreviewing = true; }) .addCase(previewReportThunk.fulfilled, (state, action) => { state.isPreviewing = false; state.needsPreview = true; state.previewResponse = action.payload; // Store the response in the new field }) .addCase(previewReportThunk.rejected, (state) => { state.isPreviewing = false; }); }, }); export const { finishReport, setVisible, toggleVisible, setNeedsPreview, setReport, } = diagnosticReportSlice.actions; export default diagnosticReportSlice.reducer;