Files
xk-doctor-wx/subPackages/sub_workbench/prescription_v2/utils/specialPrescription.js

108 lines
3.4 KiB
JavaScript
Raw Normal View History

2026-07-03 07:57:26 +08:00
/**
* patient-item 等接口响应中解析特色方选方记录
*/
export function pickSpecialPrescriptionRecord(data) {
if (!data || typeof data !== 'object') {
return null;
}
return (
data.special_prescription_patient_record
|| data.specialPrescriptionPatientRecord
|| null
);
}
2026-07-03 16:49:12 +08:00
/**
* 导入卡片规格文案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
}
2026-07-03 07:57:26 +08:00
/**
* 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,
};
2026-07-03 16:49:12 +08:00
if (data.clinical_diagnose !== undefined && data.clinical_diagnose !== null) {
2026-07-03 07:57:26 +08:00
page.diagnosisText = data.clinical_diagnose;
const names = String(data.clinical_diagnose).split('').filter(Boolean);
page.diagnoses = names.map((name, index) => ({ id: `temp_${index}`, name }));
}
2026-07-03 16:49:12 +08:00
if (data.doctor_order !== undefined && data.doctor_order !== null) {
2026-07-03 07:57:26 +08:00
page.medicalAdvice = data.doctor_order;
}
2026-07-03 16:49:12 +08:00
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;
2026-07-03 07:57:26 +08:00
page.saveToLocalStorage();
}