130 lines
4.6 KiB
JavaScript
130 lines
4.6 KiB
JavaScript
/**
|
|
* 解析转诊处方数据,输出与 PC TransferPrescriptionCard 一致的药品列表与诊断/医嘱。
|
|
* @param {object|string} transferData 接口返回的 transfer 对象或 JSON 字符串
|
|
* @returns {{ clinical_diagnose: string, doctor_order: string, drugList: array, prescription_type: number } | null}
|
|
*/
|
|
export function parseTransferPrescriptionContent(transferData) {
|
|
let transferInfo = transferData;
|
|
if (typeof transferInfo === 'string') {
|
|
try {
|
|
transferInfo = JSON.parse(transferInfo);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
if (!transferInfo || typeof transferInfo !== 'object') return null;
|
|
|
|
let prescriptionType = 1;
|
|
if (transferInfo.prescription_type != null) {
|
|
prescriptionType = Number(transferInfo.prescription_type) || 1;
|
|
}
|
|
|
|
if (transferInfo.prescription && transferInfo.prescription.content && Array.isArray(transferInfo.prescription.content)) {
|
|
return {
|
|
clinical_diagnose: transferInfo.prescription.clinical_diagnose || '',
|
|
doctor_order: transferInfo.prescription.doctor_order || '',
|
|
drugList: transferInfo.prescription.content,
|
|
prescription_type: transferInfo.prescription.prescription_type != null ? Number(transferInfo.prescription.prescription_type) : prescriptionType
|
|
};
|
|
}
|
|
|
|
const content = transferInfo.content;
|
|
if (!content) return null;
|
|
|
|
let drugList = [];
|
|
if (typeof content === 'object' && !Array.isArray(content)) {
|
|
if (content.repice && Array.isArray(content.repice)) {
|
|
for (const recipe of content.repice) {
|
|
if (recipe.content) {
|
|
let recipeContent = recipe.content;
|
|
if (typeof recipeContent === 'string') {
|
|
try {
|
|
recipeContent = JSON.parse(recipeContent);
|
|
} catch {
|
|
recipeContent = [];
|
|
}
|
|
}
|
|
if (Array.isArray(recipeContent)) {
|
|
drugList = drugList.concat(recipeContent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const orig = transferInfo.original_prescription || {};
|
|
return {
|
|
clinical_diagnose: content.clinical_diagnose || orig.clinical_diagnose || '',
|
|
doctor_order: content.doctor_order || orig.doctor_order || '',
|
|
drugList,
|
|
prescription_type: prescriptionType
|
|
};
|
|
}
|
|
if (Array.isArray(content)) {
|
|
const orig = transferInfo.original_prescription || {};
|
|
return {
|
|
clinical_diagnose: orig.clinical_diagnose || '',
|
|
doctor_order: orig.doctor_order || '',
|
|
drugList: content,
|
|
prescription_type: prescriptionType
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 转诊处方接口 payload 归一化:空对象、无实质字段时视为无转诊卡,避免 v-if 误判为 true。
|
|
* @param {object|null|undefined} data
|
|
* @returns {object|null}
|
|
*/
|
|
export function normalizeTransferCardPayload(data) {
|
|
if (data == null || typeof data !== 'object' || Array.isArray(data)) return null;
|
|
const keys = Object.keys(data);
|
|
if (keys.length === 0) return null;
|
|
const has =
|
|
(data.prescription_no != null && String(data.prescription_no).trim() !== '') ||
|
|
(data.prescription && typeof data.prescription === 'object') ||
|
|
(data.content != null && data.content !== '') ||
|
|
(data.transfer_reason != null && String(data.transfer_reason).trim() !== '') ||
|
|
(data.delegate_store && (data.delegate_store.name || data.delegate_store.id)) ||
|
|
(data.transfer_store && (data.transfer_store.name || data.transfer_store.id)) ||
|
|
(data.id != null &&
|
|
data.id !== '' &&
|
|
(data.status !== undefined && data.status !== null));
|
|
if (!has) return null;
|
|
return data;
|
|
}
|
|
|
|
/**
|
|
* 转接方药品行 → 小程序中药处方行(对齐 PC convertDrugDataForImport + handleSelectSimpleProduct 最小字段)
|
|
*/
|
|
export function transferDrugToChineseRow(drug, prescriptionType) {
|
|
const pt = prescriptionType != null ? Number(prescriptionType) : 1;
|
|
const drugId = drug.drug_id || drug.id || 0;
|
|
const name = drug.name || drug.drug_name || '';
|
|
return {
|
|
index_id: drug.id || drugId,
|
|
id: drugId,
|
|
drug_id: drugId,
|
|
drug_name: name,
|
|
number: drug.number != null ? Number(drug.number) : 1,
|
|
price: drug.price != null ? parseFloat(drug.price) : 0,
|
|
image: drug.image || '',
|
|
instruction: drug.instruction || '',
|
|
type: drug.type != null ? drug.type : pt,
|
|
select_number: drug.select_number != null ? Number(drug.select_number) : drug.number != null ? Number(drug.number) : 1,
|
|
specification: drug.specification || '',
|
|
// 带上真实单位,避免导入后标签云仍显示默认 g
|
|
unit_id: drug.unit_id || (drug.unit && drug.unit.id) || 0,
|
|
unit: drug.unit || null,
|
|
way_id: drug.way_id || 0,
|
|
};
|
|
}
|
|
|
|
export function canImportTransferPrescription(transferCard) {
|
|
const card = normalizeTransferCardPayload(transferCard);
|
|
if (!card) return false;
|
|
if (card.status === 3) return false;
|
|
if (card.status === 2) return false;
|
|
return true;
|
|
}
|