/** * 订单录入页面脚本 * 负责医嘱录入后显示总量单位 * 修复 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);