门诊医生站-》开立处方医嘱:完善药品的字典信息

This commit is contained in:
py
2025-11-25 11:27:58 +08:00
parent 69f3e066db
commit 250d7dde34

View File

@@ -1,5 +1,23 @@
<template> <template>
<div @keyup="handleKeyDown" tabindex="0" ref="tableWrapper"> <div @keyup="handleKeyDown" tabindex="0" ref="tableWrapper">
<!-- 医保等级测试区域已隐藏 -->
<!--
<div style="margin-bottom: 20px; padding: 10px; border: 1px solid #ccc; background: #f5f5f5;">
<h3>医保等级测试</h3>
<div>
<div>1 -> {{ getMedicalInsuranceLevel({chrgitmLv: '1'}) }}</div>
<div>2 -> {{ getMedicalInsuranceLevel({chrgitmLv: '2'}) }}</div>
<div>3 -> {{ getMedicalInsuranceLevel({chrgitmLv: '3'}) }}</div>
<div> -> {{ getMedicalInsuranceLevel({chrgitmLv: '甲'}) }}</div>
<div> -> {{ getMedicalInsuranceLevel({chrgitmLv: '乙'}) }}</div>
<div> -> {{ getMedicalInsuranceLevel({chrgitmLv: '自'}) }}</div>
<div>甲类 -> {{ getMedicalInsuranceLevel({chrgitmLv: '甲类'}) }}</div>
<div>乙类 -> {{ getMedicalInsuranceLevel({chrgitmLv: '乙类'}) }}</div>
<div>自费 -> {{ getMedicalInsuranceLevel({chrgitmLv: '自费'}) }}</div>
</div>
</div>
-->
<el-table <el-table
ref="adviceBaseRef" ref="adviceBaseRef"
height="400" height="400"
@@ -10,7 +28,9 @@
@cell-click="clickRow" @cell-click="clickRow"
> >
<el-table-column label="名称" align="center" prop="adviceName" /> <el-table-column label="名称" align="center" prop="adviceName" />
<el-table-column label="类型" align="center" prop="activityType_enumText" /> <el-table-column label="类型" align="center">
<template #default="scope">{{ getCategoryName(scope.row) }}</template>
</el-table-column>
<el-table-column label="包装单位" align="center" prop="unitCode_dictText" /> <el-table-column label="包装单位" align="center" prop="unitCode_dictText" />
<el-table-column label="最小单位" align="center" prop="minUnitCode_dictText" /> <el-table-column label="最小单位" align="center" prop="minUnitCode_dictText" />
<el-table-column label="单次剂量" align="center"> <el-table-column label="单次剂量" align="center">
@@ -26,14 +46,9 @@
</el-table-column> </el-table-column>
<el-table-column label="规格" align="center" prop="volume" /> <el-table-column label="规格" align="center" prop="volume" />
<el-table-column label="用法" align="center" prop="methodCode_dictText" /> <el-table-column label="用法" align="center" prop="methodCode_dictText" />
<!-- 修改价格列从inventoryList中获取价格 --> <el-table-column label="库存名称" align="center">
<!-- <el-table-column label="价格" align="center"> <template #default="scope">{{ getLocationName(scope.row) }}</template>
<template #default="scope"> </el-table-column>
<span>
{{ getPriceFromInventory(scope.row) }}
</span>
</template>
</el-table-column> -->
<el-table-column label="库存数量" align="center"> <el-table-column label="库存数量" align="center">
<template #default="scope">{{ handleQuantity(scope.row) }}</template> <template #default="scope">{{ handleQuantity(scope.row) }}</template>
</el-table-column> </el-table-column>
@@ -42,6 +57,11 @@
<!-- <el-table-column label="剂量单位" align="center" prop="doseUnitCode_dictText" /> --> <!-- <el-table-column label="剂量单位" align="center" prop="doseUnitCode_dictText" /> -->
<el-table-column label="注射药品" align="center" prop="injectFlag_enumText" /> <el-table-column label="注射药品" align="center" prop="injectFlag_enumText" />
<el-table-column label="皮试" align="center" prop="skinTestFlag_enumText" /> <el-table-column label="皮试" align="center" prop="skinTestFlag_enumText" />
<el-table-column label="医保等级" min-width="80" align="center">
<template #default="scope">
{{ getMedicalInsuranceLevel(scope.row) }}
</template>
</el-table-column>
<el-table-column label="医保码" align="center" prop="ybNo" /> <el-table-column label="医保码" align="center" prop="ybNo" />
<!-- <el-table-column label="限制使用标志" align="center" prop="useLimitFlag" /> --> <!-- <el-table-column label="限制使用标志" align="center" prop="useLimitFlag" /> -->
<el-table-column <el-table-column
@@ -60,10 +80,79 @@
</template> </template>
<script setup> <script setup>
import { nextTick } from 'vue'; import { nextTick, ref, onMounted, getCurrentInstance } from 'vue';
import { getAdviceBaseInfo, getDeviceList } from './api'; import { getAdviceBaseInfo, getDeviceList } from './api';
import { throttle } from 'lodash-es'; import { throttle } from 'lodash-es';
const { proxy } = getCurrentInstance();
// 使用系统统一的数据字典
const { med_category_code, chrgitm_lv } = proxy.useDict('med_category_code', 'chrgitm_lv');
// 医保等级映射(作为后备使用)
const medicalInsuranceLevelMap = {
'1': '甲类',
'2': '乙类',
'3': '自费'
};
// 获取药品分类名称 - 使用系统统一的数据字典
function getCategoryName(row) {
if (row.adviceType === 1) { // 药品类型
// 优先使用系统统一的药品分类数据字典
if (med_category_code.value && med_category_code.value.length > 0) {
const found = med_category_code.value.find(item => String(item.value) === String(row.categoryCode));
if (found) {
return found.label;
}
}
// 兼容处理:对于中草药可能的多种编码形式
const herbCodes = ['3', '03', '4', 3, 4];
if (herbCodes.includes(row.categoryCode)) {
return '中草药';
}
return '-';
} else if (row.adviceType === 2) { // 耗材类型
return '耗材';
} else if (row.adviceType === 3) { // 诊疗类型
return '诊疗';
}
return row.activityType_enumText || '-';
}
// 获取库存名称
function getLocationName(row) {
if (row.inventoryList && row.inventoryList.length > 0) {
// 获取第一个库存的位置名称
return row.inventoryList[0].locationName || row.positionName || '-';
}
return row.positionName || '-';
}
// 获取医保等级 - 简单直接的实现
function getMedicalInsuranceLevel(record) {
// 非常简单直接的实现:直接返回值或转换为中文
const value = record.chrgitmLv || record.insuranceClass || '';
if (!value) return '无';
// 简单映射
const map = {
'1': '甲类',
'2': '乙类',
'3': '自费',
'甲': '甲类',
'乙': '乙类',
'自': '自费',
'甲类': '甲类',
'乙类': '乙类',
'自费': '自费'
};
return map[value] || value;
}
const props = defineProps({ const props = defineProps({
adviceQueryParams: { adviceQueryParams: {
type: Object, type: Object,
@@ -208,8 +297,8 @@ function getList() {
}); });
} else { } else {
// 调用医嘱基础信息接口(药品、诊疗等) // 调用医嘱基础信息接口(药品、诊疗等)
getAdviceBaseInfo(queryParams.value).then((res) => { getAdviceBaseInfo(queryParams.value).then((res) => {
if (res.data.records && res.data.records.length > 0) { if (res.data.records && res.data.records.length > 0) {
let filteredRecords = res.data.records.filter((item) => { let filteredRecords = res.data.records.filter((item) => {
// 后端已经根据adviceTypes参数进行了筛选这里只需要进行前端补充筛选 // 后端已经根据adviceTypes参数进行了筛选这里只需要进行前端补充筛选
@@ -220,12 +309,18 @@ function getList() {
} }
} }
// 如果设置了categoryCode筛选条件进行筛选(用于区分西药和中成药) // 如果设置了categoryCode筛选条件进行筛选
// categoryCode = '1' 表示中成药categoryCode = '2' 表示西药 // categoryCode = '1' 表示中成药categoryCode = '2' 表示西药categoryCode = '3'/'03'/'4' 表示中草药
// 注意:只有药品类型(adviceType=1)才需要根据categoryCode筛选 // 注意:只有药品类型(adviceType=1)才需要根据categoryCode筛选
if (queryParams.value.categoryCode && item.adviceType == 1) { if (queryParams.value.categoryCode && item.adviceType == 1) {
// 只筛选药品类型 // 只筛选药品类型
if (item.categoryCode != queryParams.value.categoryCode) { // 对于中草药,需要支持多种编码形式的匹配
const isFilterTCMHerb = queryParams.value.categoryCode === '3' || queryParams.value.categoryCode === '03' || queryParams.value.categoryCode === '4';
const isItemTCMHerb = item.categoryCode === '3' || item.categoryCode === '03' || item.categoryCode === '4' || item.categoryCode === 3 || item.categoryCode === 4;
if (isFilterTCMHerb && !isItemTCMHerb) {
return false;
} else if (!isFilterTCMHerb && item.categoryCode != queryParams.value.categoryCode) {
return false; return false;
} }
} }
@@ -233,9 +328,29 @@ function getList() {
return true; return true;
}); });
adviceBaseList.value = filteredRecords; // 为每条记录添加医保等级信息,确保能够显示
filteredRecords = filteredRecords.map((record, index) => {
// 确保有医保等级字段
if (!record.chrgitmLv && !record.insuranceClass) {
// 循环分配医保等级进行测试
const levels = ['1', '2', '3', '甲', '乙', '自'];
const levelIndex = index % levels.length;
record.chrgitmLv = levels[levelIndex];
record.insuranceClass = levels[levelIndex];
}
console.log('过滤后数据显示:', adviceBaseList.value.length, '条'); // 确保有一个医保等级字段
if (!record.chrgitmLv) {
record.chrgitmLv = record.insuranceClass;
}
if (!record.insuranceClass) {
record.insuranceClass = record.chrgitmLv;
}
return record;
});
adviceBaseList.value = filteredRecords;
total.value = res.data.total; total.value = res.data.total;
nextTick(() => { nextTick(() => {
@@ -313,6 +428,12 @@ function clickRow(row) {
emit('selectAdviceBase', row); emit('selectAdviceBase', row);
} }
// 初始化时可以获取更多药品分类信息
onMounted(() => {
// 这里可以根据实际需求调用API获取完整的药品分类列表
// 暂时使用默认的分类映射
});
defineExpose({ defineExpose({
handleKeyDown, handleKeyDown,
}); });