From 43f5fdddb8a081594d77dbd4abddc0b50c2d3435 Mon Sep 17 00:00:00 2001 From: huxuejian Date: Fri, 11 Sep 2026 15:10:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/consult/history-drugs/confirm-popup.vue | 25 ++++++-- pages/consult/info.vue | 57 ++++++++++++++++++- pages/consult/select-drug/edit-popup.vue | 33 +++++++---- 3 files changed, 98 insertions(+), 17 deletions(-) diff --git a/pages/consult/history-drugs/confirm-popup.vue b/pages/consult/history-drugs/confirm-popup.vue index 710a712..872682d 100644 --- a/pages/consult/history-drugs/confirm-popup.vue +++ b/pages/consult/history-drugs/confirm-popup.vue @@ -104,6 +104,9 @@ const usageList = computed(() => { const frequencyList = computed(() => { return props.consultType === 'onlineMedicinePurchase' ? onlineMedicine.value.frequencyList : storeMedicine.value.frequencyList; }) +const timeList = computed(() => { + return props.consultType === 'onlineMedicinePurchase' ? onlineMedicine.value.timeList : storeMedicine.value.timeList; +}) function close() { emits('close') @@ -163,9 +166,16 @@ function usePreUsageData(matchDrug, item) { matchDrug.usageCode = usage ? usage.code : ''; const dosage = item.dosage > 0 ? item.dosage : matchDrug.dosage; matchDrug.dosage = dosage; - const days = Number.isInteger(item.days) && item.days > 0 ? item.days : matchDrug.days; + const days = Number.isInteger(Number(item.days)) && Number(item.days) > 0 ? Number(item.days) : matchDrug.days; matchDrug.days = days; - const arr = [matchDrug.usageName, matchDrug.frequencyName, matchDrug.dosage ? `每次${matchDrug.dosage}${matchDrug.dosage_unit || ''}` : ''].filter(Boolean); + const time = timeList.value.find(i => i.name === item.dose_time_name); + matchDrug.dose_time_name = time ? time.name : ""; + const arr = [ + matchDrug.usageName, + matchDrug.frequencyName, + matchDrug.dosage ? `每次${matchDrug.dosage}${matchDrug.dosage_unit || ''}` : '', + matchDrug.dose_time_name ? `${matchDrug.dose_time_name}用药`:'' + ].filter(Boolean); matchDrug.memo = arr.join(','); return matchDrug; } @@ -180,9 +190,16 @@ function useStandardUsage(matchDrug, item) { matchDrug.usageCode = usage ? usage.code : ''; const dosage = item.dosage > 0 ? item.dosage : ''; matchDrug.dosage = dosage; - const days = Number.isInteger(item.days) && item.days > 0 ? item.days : matchDrug.days; + const days = Number.isInteger(Number(item.days)) && Number(item.days) > 0 ? Number(item.days) : matchDrug.days; matchDrug.days = days; - const arr = [matchDrug.usageName, matchDrug.frequencyName, matchDrug.dosage ? `每次${matchDrug.dosage}${matchDrug.dosage_unit || ''}` : ''].filter(Boolean); + const time = timeList.value.find(i => i.name === item.dose_time_name); + matchDrug.dose_time_name = time ? time.name : ""; + const arr = [ + matchDrug.usageName, + matchDrug.frequencyName, + matchDrug.dosage ? `每次${matchDrug.dosage}${matchDrug.dosage_unit || ''}` : '', + matchDrug.dose_time_name ? `${matchDrug.dose_time_name}用药`:'' + ].filter(Boolean); matchDrug.memo = arr.join(','); return matchDrug; } diff --git a/pages/consult/info.vue b/pages/consult/info.vue index d0fefd9..271cf77 100644 --- a/pages/consult/info.vue +++ b/pages/consult/info.vue @@ -191,7 +191,59 @@ const customConfirmData = ref({ }); const { elderMode, elderVarStyle } = useElder(); -const { attachMedicineConfig } = useDb(); +const medicineDb = useDb(); +const { onlineMedicine, storeMedicine } = storeToRefs(medicineDb); +const { attachMedicineConfig } = medicineDb; + +function isPositiveInteger(value) { + const number = Number(value); + return Number.isFinite(number) && Number.isInteger(number) && number > 0; +} + +function isPositiveNumber(value) { + const number = Number(value); + return Number.isFinite(number) && number > 0; +} + +function isInOptionList(value, options) { + return Array.isArray(options) && options.some(option => option && option.name === value); +} + +function validateDrugs() { + const medicine = order.value.consultType === 'onlineMedicinePurchase' + ? onlineMedicine.value + : storeMedicine.value; + + for (const drug of order.value.drugs) { + const drugName = drug.name || '药品'; + if (!isPositiveInteger(drug.quantity)) { + toast(`${drugName}:开药数量必须为正整数`); + return false; + } + if (!isInOptionList(drug.usageName, medicine.usageList)) { + toast(`${drugName}:请选择用药方式`); + return false; + } + if (!isPositiveNumber(drug.dosage)) { + toast(`${drugName}:单次剂量必须大于0`); + return false; + } + if (!isInOptionList(drug.frequencyName, medicine.frequencyList)) { + toast(`${drugName}:请选择用药频率`); + return false; + } + if (!isInOptionList(drug.dose_time_name, medicine.timeList)) { + toast(`${drugName}:请选择用药时机`); + return false; + } + if (!isPositiveInteger(drug.days)) { + toast(`${drugName}:用药天数必须为正整数`); + return false; + } + } + + return true; +} function changeDrug(drug) { const index = order.value.drugs.findIndex(item => item._id === drug._id) @@ -361,6 +413,9 @@ async function submit(ignoreUnsuit = false, ignoreRepeat = false) { toast('请添加药品'); return; } + if (!validateDrugs()) { + return; + } if (inappropriateDrugs.value.length && !ignoreUnsuit) { showUnsuitDrugPopup.value = true; return diff --git a/pages/consult/select-drug/edit-popup.vue b/pages/consult/select-drug/edit-popup.vue index 5e223da..5ca18df 100644 --- a/pages/consult/select-drug/edit-popup.vue +++ b/pages/consult/select-drug/edit-popup.vue @@ -52,6 +52,13 @@ + + 用药天数 + + + + + @@ -141,14 +148,21 @@ function confirm() { if (!(timeIndex.value >= 0)) { return toast('请选择用药时机', { mask: false }) } + const days = Number(current.value.days); + console.log('current: ', current.value.days) + console.log('days: ', days) + if (!(days > 0 && Number.isInteger(days))) { + return toast('请输入正确的用药天数', { mask: false }) + } + current.value.days = days; // 延迟执行是因为 单次剂量以及数量 手动输入的时候 值改变有延时 手机端可以可以出现 开发工具不行 setTimeout(() => { const arr = [ - current.value.usageName, - current.value.frequencyName, - current.value.dosage ? `每次${current.value.dosage}${current.value.dosage_unit || ''}` : '', - current.value.dose_time_name ? `${current.value.dose_time_name}用药`:'' - ].filter(Boolean); + current.value.usageName, + current.value.frequencyName, + current.value.dosage ? `每次${current.value.dosage}${current.value.dosage_unit || ''}` : '', + current.value.dose_time_name ? `${current.value.dose_time_name}用药` : '' + ].filter(Boolean); emits('change', { ...current.value, memo: arr.join(',') }) }, 500) } @@ -170,6 +184,8 @@ watch(() => props.visible, (val) => { timeIndex.value = timeList.value.findIndex(item => item.name === current.value.dose_time_name); const time = timeList.value[timeIndex.value]; current.value.dose_time_name = time ? time.name : ''; + const days = Number.isInteger(Number(current.value.days)) && current.value.days >= 0 ? current.value.days : 0; + current.value.days = days; } else { popup.value && popup.value.close() } @@ -195,13 +211,6 @@ function validateNumber(input, type = 'decimal') { } } -watch(() => current.value.quantity, (n, o) => { - const isAdd = !(n - 0 > (o || 0)); - if (props.visible && n > 0 && current.value.recommended_quantity && isAdd && n > current.value.recommended_quantity) { - uniConfirm('已超过建议开药数量', { showCancel: false }) - } - -})