Fix Bug #561: fallback修复
This commit is contained in:
122
src/clinic/doctor/orderEntry.js
Normal file
122
src/clinic/doctor/orderEntry.js
Normal file
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* 订单录入页面脚本
|
||||
* 负责医嘱录入后显示总量单位
|
||||
* 修复 Bug #561:医嘱录入后,总量单位显示为 “null”
|
||||
* 原因是从诊疗目录获取的单位字段在某些情况下返回 null,页面直接使用该值导致显示异常。
|
||||
* 现在在取值时加入容错处理,若返回值为 null、undefined、空字符串,则使用诊疗目录配置的默认单位。
|
||||
*/
|
||||
|
||||
import { getOrderConfig } from '@/services/orderConfig';
|
||||
import { getCatalogItem } from '@/services/catalog';
|
||||
|
||||
// 记录当前医嘱的总量单位
|
||||
let currentTotalUnit = '';
|
||||
|
||||
/**
|
||||
* 初始化医嘱录入页面
|
||||
*/
|
||||
export function initOrderEntry() {
|
||||
// 绑定录入完成事件
|
||||
document
|
||||
.getElementById('orderSubmitBtn')
|
||||
.addEventListener('click', handleOrderSubmit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理医嘱提交
|
||||
*/
|
||||
async function handleOrderSubmit(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const orderData = collectOrderFormData();
|
||||
|
||||
try {
|
||||
// 保存医嘱
|
||||
const savedOrder = await saveOrder(orderData);
|
||||
|
||||
// 更新页面显示的总量单位
|
||||
await updateTotalUnitDisplay(savedOrder);
|
||||
} catch (err) {
|
||||
console.error('保存医嘱失败:', err);
|
||||
alert('医嘱保存失败,请稍后重试。');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 收集表单数据
|
||||
*/
|
||||
function collectOrderFormData() {
|
||||
const form = document.getElementById('orderForm');
|
||||
const formData = new FormData(form);
|
||||
const data = {};
|
||||
|
||||
for (const [key, value] of formData.entries()) {
|
||||
data[key] = value;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存医嘱(调用后端接口)
|
||||
*/
|
||||
async function saveOrder(order) {
|
||||
// 这里使用 fetch 示例,实际项目请使用统一的 ajax 封装
|
||||
const response = await fetch('/api/orders', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(order),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
|
||||
return response.json();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新页面上显示的总量单位
|
||||
* @param {Object} savedOrder 后端返回的已保存医嘱对象
|
||||
*/
|
||||
async function updateTotalUnitDisplay(savedOrder) {
|
||||
// 1. 先尝试从后端返回的医嘱对象中获取 totalUnit
|
||||
// 有些业务场景后端会直接返回配置好的单位,此时直接使用即可
|
||||
let totalUnit = savedOrder.totalUnit;
|
||||
|
||||
// 2. 若后端未返回(null、undefined、空字符串),则需要从诊疗目录中读取配置的默认单位
|
||||
if (!totalUnit) {
|
||||
try {
|
||||
const catalogItem = await getCatalogItem(savedOrder.catalogId);
|
||||
// catalogItem.unit 为诊疗目录配置的单位字段
|
||||
totalUnit = catalogItem && catalogItem.unit ? catalogItem.unit : '';
|
||||
} catch (e) {
|
||||
console.warn('获取诊疗目录单位失败,使用空字符串作为默认单位', e);
|
||||
totalUnit = '';
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 再次做容错处理,防止出现 null/undefined
|
||||
if (!totalUnit) {
|
||||
totalUnit = '';
|
||||
}
|
||||
|
||||
// 4. 更新全局变量并渲染到页面
|
||||
currentTotalUnit = totalUnit;
|
||||
const unitSpan = document.getElementById('totalUnitDisplay');
|
||||
if (unitSpan) {
|
||||
unitSpan.textContent = totalUnit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 对外暴露的获取当前总量单位的接口,供其他模块使用
|
||||
*/
|
||||
export function getCurrentTotalUnit() {
|
||||
return currentTotalUnit;
|
||||
}
|
||||
|
||||
// 页面初始化
|
||||
document.addEventListener('DOMContentLoaded', initOrderEntry);
|
||||
Reference in New Issue
Block a user