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:
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user