本文档描述APR(自动程序检索,Automatic Program Retrieval)参数在不同场景下的获取、设置和下发流程。
触发条件: 用户选择新的体位
当前实现:
setSelectedBodyPosition
actionaprConfig
数据SetAPR
API下发到后端设备实现位置:
src/states/exam/aprSlice.ts
- extraReducers
中的 setSelectedBodyPosition
处理数据流:
用户选择体位
→ dispatch(setSelectedBodyPosition)
→ aprSlice extraReducer监听
→ 使用当前aprConfig构建参数
→ SetAPR API下发到设备
状态: ✅ 已完整实现
触发条件: 用户更改患者体型(如从Medium改为Large)
当前实现:
setBodysize
actiongetAprExposureParams
API获取新的APR参数setAprConfig
更新Redux storeSetAPR
下发到后端设备实现位置:
src/states/exam/aprSlice.ts
- aprMiddleware
中间件src/pages/exam/ContentAreaLarge.tsx
- UI触发点数据流:
用户更改体型
→ dispatch(setBodysize)
→ aprMiddleware拦截
→ getAprExposureParams获取新参数
→ setAprConfig更新store
→ UI显示更新
❌ 缺少:SetAPR下发到设备
状态: ⚠️ 部分实现,缺少设备下发步骤
触发条件: 用户更改工作位(如从立位改为卧位)
当前实现:
setWorkstation
actiongetAprExposureParams
API获取新的APR参数setAprConfig
更新Redux storeSetAPR
下发到后端设备实现位置:
src/states/exam/aprSlice.ts
- aprMiddleware
中间件src/pages/exam/ContentAreaLarge.tsx
- UI触发点数据流:
用户更改工作位
→ dispatch(setWorkstation)
→ aprMiddleware拦截
→ getAprExposureParams获取新参数
→ setAprConfig更新store
→ UI显示更新
❌ 缺少:SetAPR下发到设备
状态: ⚠️ 部分实现,缺少设备下发步骤
三个场景的实现逻辑不一致:
场景 | 获取APR参数 | 更新UI | 下发到设备 |
---|---|---|---|
更改体位 | N/A(使用已有) | ✅ | ✅ |
更新体型 | ✅ | ✅ | ❌ |
更改工作位 | ✅ | ✅ | ❌ |
UI与设备状态不同步:
用户体验不一致:
在 aprMiddleware
中:
setBodysize
和 setWorkstation
actionSetAPR
下发到设备优点:
缺点:
当 setAprConfig
被调用时:
SetAPR
下发到设备优点:
缺点:
创建新的 thunk action updateAPR
:
优点:
缺点:
{
deviceUri: "DIOS/DEVICE/Generator",
reqName: "SetAPR",
reqParam: JSON.stringify({
P0: {
FOCUS: "0",
TECHMODE: "0",
AECFIELD: "101",
AECFILM: "0",
AECDENSITY: "0",
KV: string, // 从aprConfig获取
MA: string, // 从aprConfig获取
MS: string, // 从aprConfig获取
MAS: string, // 从aprConfig获取
KV2: "0.0",
MA2: "0.0",
MS2: "0.0",
DOSE: "0.0",
FILTER: "null",
TUBELOAD: "0.0",
WORKSTATION: number // 从selectedBodyPosition获取
}
})
}
API层:
src/API/exam/APRActions.ts
- APR相关API调用状态管理:
src/states/exam/aprSlice.ts
- APR状态和逻辑src/states/exam/bodyPositionListSlice.ts
- 体位状态UI组件:
src/pages/exam/ContentAreaLarge.tsx
- 体型和工作位选择器const aprMiddleware: Middleware = (store) => (next) => (action: any) => {
const result = next(action);
if (
action.type === aprSlice.actions.setBodysize.type ||
action.type === aprSlice.actions.setWorkstation.type
) {
// ... 获取APR参数
getAprExposureParams(id, workStationId, patientSize).then((data) => {
if (data) {
store.dispatch(setAprConfig(data));
// ❌ 缺少:调用 SetAPR 下发到设备
}
});
// ...
}
return result;
};
.addCase(setSelectedBodyPosition, (state, action) => {
const selectedBodyPosition = action.payload;
if (selectedBodyPosition) {
const reqParam = JSON.stringify({/* ... */});
SetAPR(reqParam) // ✅ 正确下发到设备
.then(() => console.log('SetAPR method called successfully'))
.catch((error) => console.error('Error calling SetAPR method:', error));
}
})
文档版本: 1.0
创建日期: 2025-10-08
最后更新: 2025-10-08
负责人: Development Team