import { createSlice, PayloadAction } from '@reduxjs/toolkit'; interface FunctionAreaState { action: string | null; actionTrigger: number; activeTools: Record; // 工具激活状态映射 } const initialState: FunctionAreaState = { action: null, actionTrigger: 0, activeTools: {}, // 初始化为空对象 }; // 需要互斥的鼠标左键绑定工具列表 const MOUSE_BINDING_TOOLS = [ 'Adjust Brightness and Contrast', 'Magnifier', 'Zoom Image', 'Pan' ] as const; const functionAreaSlice = createSlice({ name: 'functionArea', initialState, reducers: { setAction: (state, action: PayloadAction) => { state.action = action.payload; state.actionTrigger += 1; }, clearAction: (state) => { state.action = null; }, setToolActive: (state, action: PayloadAction) => { state.activeTools[action.payload] = true; }, setToolInactive: (state, action: PayloadAction) => { state.activeTools[action.payload] = false; }, // 切换工具状态(自动处理互斥) toggleTool: (state, action: PayloadAction) => { const toolName = action.payload; const currentlyActive = state.activeTools[toolName]; // 如果工具已激活,停用它 if (currentlyActive) { state.activeTools[toolName] = false; state.action = `Deactivate:${toolName}`; } else { // 停用所有其他工具(互斥) MOUSE_BINDING_TOOLS.forEach(tool => { state.activeTools[tool] = false; }); // 激活当前工具 state.activeTools[toolName] = true; state.action = `Activate:${toolName}`; } state.actionTrigger += 1; }, // 停用所有工具 deactivateAllTools: (state) => { MOUSE_BINDING_TOOLS.forEach(tool => { state.activeTools[tool] = false; }); state.action = 'DeactivateAll'; state.actionTrigger += 1; }, }, }); export const { setAction, clearAction, setToolActive, setToolInactive, toggleTool, deactivateAllTools } = functionAreaSlice.actions; export default functionAreaSlice.reducer;