43 lines
2.3 KiB
Markdown
43 lines
2.3 KiB
Markdown
# 分析报告 — Bug #469
|
||
|
||
## 问题描述
|
||
检验申请列表的【操作】列仅显示固定的"打印"和"删除"按钮,未根据申请单状态动态切换操作权限。
|
||
|
||
## 根因分析
|
||
文件 `openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue` 第97-104行:
|
||
- 操作列模板中固定渲染"打印"和"删除"按钮,没有任何状态判断逻辑
|
||
- 缺少"修改"和"撤回"按钮
|
||
|
||
## 状态机设计
|
||
| 状态 | 条件 | 允许的操作 |
|
||
|------|------|-----------|
|
||
| 待开立 | applyStatus == 0 | 修改、删除 |
|
||
| 已开立 | applyStatus == 1 && needExecute != true | 撤回 |
|
||
| 已执行 | applyStatus == 1 && needExecute == true | 无(仅打印) |
|
||
|
||
## 修复方案
|
||
1. **前端 Vue**: 操作列改为 `v-if` 条件渲染按钮(修改/删除/撤回/打印)
|
||
2. **前端 API**: 新增撤回接口 `withdrawInspectionApplication(applyNo)`
|
||
3. **后端 Controller**: 新增 `POST /withdraw/{applyNo}` 端点
|
||
4. **后端 Service**: 新增 `withdrawInspectionLabApply` 方法,将 applyStatus 置回 0,needRefund/needExecute 置回 false
|
||
|
||
## 修复结果
|
||
✅ 成功,共14行改动(2个commit完成)
|
||
|
||
### 修复详情
|
||
1. **commit c643a78b** - 初始修复:将操作列从静态"打印/删除"改为基于状态的动态按钮(修改/删除/撤回/详情),10行改动
|
||
2. **commit f369ea41** - 跟进修复:将"详情"按钮包裹在 `<template v-else>` 中,避免对所有状态始终渲染,4行改动
|
||
|
||
### 状态机实现
|
||
| 状态 | 条件 | 显示按钮 |
|
||
|------|------|---------|
|
||
| 待签发 | billStatus == '0' | 修改 + 删除 |
|
||
| 已签发 | billStatus == '1' | 撤回 |
|
||
| 其他状态 | 已采证/已送检/报告已出/已作废 | 详情 |
|
||
|
||
### 涉及文件
|
||
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue` - 前端操作列动态按钮
|
||
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/api.js` - 前端API(deleteRequestForm, withdrawRequestForm)
|
||
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java` - 后端Controller(/delete, /withdraw 端点)
|
||
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java` - 后端Service实现
|