Compare commits

...

2 Commits

2 changed files with 34 additions and 2 deletions

22
analysis_469.md Normal file
View File

@@ -0,0 +1,22 @@
# 分析报告 — 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 置回 0needRefund/needExecute 置回 false

View File

@@ -348,7 +348,8 @@ const adviceTypeList = computed(() => {
return val === 3 || val === 4;
}).map(item => ({
label: item.label,
value: parseInt(item.value)
// drord_doctor_type 中耗材是 4但 /advice-base-info 后端耗材类型是 2
value: parseInt(item.value) === 4 ? 2 : parseInt(item.value)
}));
return [...filtered, { label: '全部', value: '' }];
}
@@ -483,8 +484,9 @@ watch(
(visible) => {
if (visible) {
executeTime.value = formatDateStr(new Date(), 'YYYY-MM-DD HH:mm:ss');
// 弹窗打开时重新加载科室和位置选项,确保数据最新
// 弹窗打开时按当前患者科室重新加载,避免复用上一次患者/登录科室的结果
loadDepartmentOptions();
getAdviceBaseInfos();
getDiseaseInitLoc(16);
} else {
resetData();
@@ -565,6 +567,8 @@ function getAdviceBaseInfos() {
queryParams.value.adviceTypes = [1, 2, 3];
}
queryParams.value.organizationId = orgId.value;
queryParams.value.adviceTypes = normalizeAdviceTypesForQuery(adviceType.value);
queryParams.value.organizationId = props.patientInfo.organizationId || orgId.value;
queryParams.value.pricingFlag = 1; // 划价标记
getAdviceBaseInfo(queryParams.value)
.then((res) => {
@@ -620,6 +624,12 @@ function getItemType_Text(type) {
const map = { 2: '耗材', 3: '诊疗' };
return map[type] || '其他';
}
function normalizeAdviceTypesForQuery(type) {
if (type === '' || type === undefined || type === null) {
return '2,3';
}
return Number(type) === 4 ? 2 : type;
}
function getUnitCodeOptions(row) {
const unitCodes = [];
// 大单位:优先用 codecode 缺失时用字典文本兜底