Files
xk-doctor-wx/subPackages/sub_workbench/prescription_v2/utils/specialPrescription.js
2026-07-03 16:49:12 +08:00

108 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 从 patient-item 等接口响应中解析特色方选方记录
*/
export function pickSpecialPrescriptionRecord(data) {
if (!data || typeof data !== 'object') {
return null;
}
return (
data.special_prescription_patient_record
|| data.specialPrescriptionPatientRecord
|| null
);
}
/**
* 导入卡片规格文案SKU 套餐名或单剂
* @param record {{ sku_id?, sku_name? }|null}
*/
export function resolveSpecialPrescriptionPurchaseLabel(record) {
if (!record) return ''
return Number(record.sku_id) > 0
? (record.sku_name || 'SKU套餐')
: '单剂'
}
/**
* 是否已导入特色方并锁定药方编辑
* @param page 处方页实例
*/
export function isSpecialPrescriptionCartLocked(page) {
if (!page) return false
return Number(page.appliedSpecialPrescriptionId) > 0
}
/** 特色方锁定提示文案 */
export const SP_CART_LOCK_MSG = '特色方药方不可修改,请先清空药方'
/**
* 特色方锁定中则 toast 并返回 true
* @param page 处方页实例
*/
export function guardSpecialPrescriptionCartEdit(page) {
if (!isSpecialPrescriptionCartLocked(page)) return false
if (page.$toast) {
page.$toast(SP_CART_LOCK_MSG)
} else {
uni.showToast({ title: SP_CART_LOCK_MSG, icon: 'none' })
}
return true
}
/**
* 清空「已导入特色方」状态(普通开方/常用方时调用)
* @param page 处方页实例
*/
export function clearAppliedSpecialPrescription(page) {
if (!page) return
page.appliedSpecialPrescriptionId = 0
page.appliedSpecialPrescriptionExpectedTotal = null
page.appliedSpecialPrescriptionFreeShipping = false
}
/**
* 将 apply 接口返回的数据写入处方页 state
*/
export function applySpecialPrescriptionPayload(page, data) {
const categoryMap = { west: 2, chinese: 1, granular: 1 };
const prescriptionType = data.prescription_type || 'chinese';
page.activeCategory = categoryMap[prescriptionType] || 1;
page.loadCurrentCategoryDrugs();
const recipes = data.recipes || [];
page.currentDrugs.splice(0, page.currentDrugs.length);
recipes.forEach((recipe) => {
const drugId = recipe.drug_id || recipe.id;
page.currentDrugs.push(page.prepareDrugForCart({
index_id: recipe.id,
id: drugId,
drug_id: drugId,
drug_name: recipe.drug_name || recipe.name,
number: recipe.number || 1,
price: recipe.price || 0,
buy_price: recipe.buy_price,
way_id: recipe.way_id || 0,
}));
});
page.chineseConfig = {
...page.chineseConfig,
ruleType: data.rule_type ?? 1,
dosage: data.dosage ?? data.dose_count ?? 7,
dayDosage: data.day_dosage ?? 2,
packageMethodId: data.package_method_id ?? 2,
};
if (data.clinical_diagnose !== undefined && data.clinical_diagnose !== null) {
page.diagnosisText = data.clinical_diagnose;
const names = String(data.clinical_diagnose).split('').filter(Boolean);
page.diagnoses = names.map((name, index) => ({ id: `temp_${index}`, name }));
}
if (data.doctor_order !== undefined && data.doctor_order !== null) {
page.medicalAdvice = data.doctor_order;
}
page.appliedSpecialPrescriptionId = data.special_prescription_id || 0;
page.appliedSpecialPrescriptionFreeShipping = Number(data.is_free_shipping) === 1;
page.appliedSpecialPrescriptionExpectedTotal = data.expected_total_price != null
? parseFloat(data.expected_total_price)
: null;
page.saveToLocalStorage();
}