fix(#569): 请修复 Bug #569:[一般] [住院护士站-医嘱管理] 各业务节点状态名称与《药品医嘱状态映射表》不一致,存在严重歧义

根因:
- 后端 `requestStatus_enumText` 返回旧枚举值(如"已发送""已完成"),前端部分组件直接使用原始枚举文本而未做名称映射,导致界面显示与标准映射表不一致。
- ### 关键映射关系(按《药品医嘱状态映射表》修订版)
- | 业务节点 | 规范名称 | 旧枚举文本 |
- |---|---|---|
- | 开具 | 待签发 | 待发送 |
- | 签发 | 已签发 | 已发送/已发送/待执行 |
- | 校对 | 已校对 | 已完成 |
- | 汇总申请(护士站) | 已提交 | 待配药/已汇总 |
- | 发药(护士站→药房) | 已发药/已完成 | 已发放 |
- ### 修改文件
- 1. `src/views/inpatientNurse/medicalOrderProofread/components/prescriptionList.vue`**

修复:
- 将 `STATUS_DISPLAY_BY_TAB`(基于页签过滤条件的显示)替换为行级别的状态映射
- 新增 `REQUEST_STATUS_DISPLAY`:按 `row.requestStatus` 数值映射规范名称(待签发/已签发/已校对/已停止)
- 新增 `DISPENSE_STATUS_DISPLAY`:按 `row.dispenseStatus` 映射发药状态(已提交/已发药)
- 新增 `LEGACY_STATUS_TEXT`:兼容旧后端返回的 "已发送"→"已签发"、"已完成"→"已校对" 等
- 2. `src/views/drug/inpatientMedicationDispensing/components/MedicationDetails.vue`**
- 新增 `DRUG_STATUS_DISPLAY` + `LEGACY_DRUG_STATUS_TEXT` 映射
- `statusEnum=2` 显示"待配药"(原显示"已提交"),`statusEnum=4` 显示"已发药"
- 3. `src/views/drug/inpatientMedicationDispensing/components/DetailMedicationTable.vue`**
- 新增 `DETAIL_DRUG_STATUS_DISPLAY` + `DETAIL_LEGACY_STATUS_TEXT` 映射
- ### 已存在的正确映射(无需修改)
- `medicalOrderExecution/components/prescriptionList.vue` — 已有完整映射
- `drugDistribution/components/summaryMedicineList.vue` — 已有 `SUMMARY_STATUS_DISPLAY`
- `inpatientMedicationDispensing/components/MedicationSummary.vue` — 已有 `SUMMARY_STATUS_DISPLAY`
- ### 验证
-  ESLint 检查通过(无新增错误)
-  `vite build` 编译成功
This commit is contained in:
2026-05-29 01:31:59 +08:00
parent 447153a5a0
commit e225aa8941
3 changed files with 79 additions and 16 deletions

View File

@@ -105,7 +105,7 @@
min-width="100"
>
<template #default="scope">
{{ scope.row.statusEnum_enumText || scope.row.statusEnum || '-' }}
{{ formatDetailDrugStatus(scope.row) }}
</template>
</el-table-column>
<el-table-column
@@ -241,6 +241,25 @@
</template>
<script setup>
/** 发药状态 → 规范状态名称映射(与《药品医嘱状态映射表》保持一致) */
const DETAIL_DRUG_STATUS_DISPLAY = {
2: '待配药',
4: '已发药',
};
const DETAIL_LEGACY_STATUS_TEXT = {
已提交: '待配药',
已发放: '已发药',
已完成: '已发药',
};
function formatDetailDrugStatus(row) {
const code = Number(row?.statusEnum);
if (DETAIL_DRUG_STATUS_DISPLAY[code]) {
return DETAIL_DRUG_STATUS_DISPLAY[code];
}
return DETAIL_LEGACY_STATUS_TEXT[row?.statusEnum_enumText] || row?.statusEnum_enumText || '-';
}
import {computed, getCurrentInstance, ref, watch} from 'vue';
import {ElMessage} from 'element-plus';
import {totalReturnDrug, totalSendDrug} from './api';

View File

@@ -208,7 +208,7 @@
>
<template #default="scope">
<el-tag :type="tagType(scope.row.statusEnum)">
{{ scope.row.statusEnum_enumText }}
{{ formatDrugStatusText(scope.row) }}
</el-tag>
</template>
</el-table-column>
@@ -760,6 +760,26 @@ function formatPrice(row, column, cellValue) {
return cellValue.toFixed(2) + ' 元'; // 保留两位小数
}
/** 发药状态 → 规范状态名称映射(与《药品医嘱状态映射表》保持一致) */
const DRUG_STATUS_DISPLAY = {
2: '待配药',
4: '已发药',
};
const LEGACY_DRUG_STATUS_TEXT = {
已提交: '待配药',
已发放: '已发药',
已完成: '已发药',
};
function formatDrugStatusText(row) {
const code = Number(row?.statusEnum);
if (DRUG_STATUS_DISPLAY[code]) {
return DRUG_STATUS_DISPLAY[code];
}
return LEGACY_DRUG_STATUS_TEXT[row?.statusEnum_enumText] || row?.statusEnum_enumText || '-';
}
function tagType(statusEnum) {
if (statusEnum == 2 || statusEnum == 2) {
return 'primary';

View File

@@ -243,17 +243,47 @@ const loading = ref(false);
const chooseAll = ref(false);
const selectionTrigger = ref(0);
/** 各页签对应的医嘱状态展示文案(与后端枚举值解耦,贴合校对业务语义 */
const STATUS_DISPLAY_BY_TAB = {
[RequestStatus.ACTIVE]: { text: '签发', type: 'primary' },
[RequestStatus.COMPLETED]: { text: '已校对', type: 'success' },
[RequestStatus.DRAFT]: { text: '待签发', type: 'info' },
[RequestStatus.STOPPED]: { text: '已停止', type: 'danger' },
/** 请求状态 → 医嘱状态映射表(与《药品医嘱状态映射表》保持一致 */
const REQUEST_STATUS_DISPLAY = {
[RequestStatus.DRAFT]: '签发',
[RequestStatus.ACTIVE]: '已签发',
[RequestStatus.COMPLETED]: '已校对',
[RequestStatus.STOPPED]: '已停止',
};
/** 发药状态 → 医嘱状态映射表 */
const DISPENSE_STATUS_DISPLAY = {
8: '已提交',
4: '已发药',
};
/** 旧后端枚举文本 → 规范状态名称映射 */
const LEGACY_STATUS_TEXT = {
待发送: '待签发',
已发送: '已签发',
'已发送/待执行': '已签发',
已完成: '已校对',
待配药: '已提交',
已汇总: '已提交',
已发放: '已发药',
};
const getStatusDisplayText = (row) => {
// 1. 优先使用发药状态
const dispenseCode = Number(row?.dispenseStatus);
if (DISPENSE_STATUS_DISPLAY[dispenseCode]) {
return DISPENSE_STATUS_DISPLAY[dispenseCode];
}
// 2. 使用行级别请求状态
const requestCode = Number(row?.requestStatus);
if (REQUEST_STATUS_DISPLAY[requestCode]) {
return REQUEST_STATUS_DISPLAY[requestCode];
}
// 3. 兼容旧后端枚举文本(如"已发送"→"已签发"
return LEGACY_STATUS_TEXT[row?.requestStatus_enumText] || row?.requestStatus_enumText || '';
};
const getStatusType = (status) => {
const tabType = STATUS_DISPLAY_BY_TAB[props.requestStatus]?.type;
if (tabType) return tabType;
const map = {
1: 'info',
2: 'primary',
@@ -265,12 +295,6 @@ const getStatusType = (status) => {
};
return map[status] || 'info';
};
const getStatusDisplayText = (row) => {
const tabText = STATUS_DISPLAY_BY_TAB[props.requestStatus]?.text;
if (tabText) return tabText;
return row.requestStatus_enumText || '';
};
const hasDispensedSelected = computed(() => {
selectionTrigger.value;
return getSelectRows().some(item => item.dispenseStatus === 4);