From 807861d2076d972138b2762333dc9a3209934595 Mon Sep 17 00:00:00 2001 From: icarus Date: Fri, 22 Aug 2025 14:35:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(store):=20=E6=B7=BB=E5=8A=A0OCR=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=AE=A1=E7=90=86=E5=88=87=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现OCR提供商的增删改查功能,使用Redux Toolkit管理OCR相关状态 --- src/renderer/src/store/ocr.ts | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/renderer/src/store/ocr.ts diff --git a/src/renderer/src/store/ocr.ts b/src/renderer/src/store/ocr.ts new file mode 100644 index 0000000000..a3ae44a1dd --- /dev/null +++ b/src/renderer/src/store/ocr.ts @@ -0,0 +1,39 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import { BUILTIN_OCR_PROVIDERS, DEFAULT_OCR_PROVIDER } from '@renderer/config/ocr' +import { OcrProvider } from '@renderer/types/ocr' + +export interface OcrState { + providers: OcrProvider[] + imageProvider: OcrProvider +} + +const initialState: OcrState = { + providers: BUILTIN_OCR_PROVIDERS, + imageProvider: DEFAULT_OCR_PROVIDER.image +} + +const ocrSlice = createSlice({ + name: 'ocr', + initialState, + reducers: { + setOcrProviders(state, action: PayloadAction) { + state.providers = action.payload + }, + addOcrProvider(state, action: PayloadAction) { + state.providers.push(action.payload) + }, + removeOcrProvider(state, action: PayloadAction) { + state.providers = state.providers.filter((provider) => provider.id !== action.payload.id) + }, + updatePreprocessProvider(state, action: PayloadAction>) { + const index = state.providers.findIndex((provider) => provider.id === action.payload.id) + if (index !== -1) { + Object.assign(state.providers[index], action.payload) + } + } + } +}) + +export const { setOcrProviders, addOcrProvider, removeOcrProvider, updatePreprocessProvider } = ocrSlice.actions + +export default ocrSlice.reducer