更新
This commit is contained in:
@@ -858,31 +858,94 @@
|
|||||||
</el-tag>
|
</el-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="用量">
|
<el-descriptions-item label="用量">
|
||||||
<template v-if="detailPrescription.dosage_amount">
|
<div class="flex flex-col gap-1 text-sm leading-relaxed">
|
||||||
{{ detailPrescription.dosage_amount }}{{ detailPrescription.dosage_unit || 'g' }}
|
<div>
|
||||||
<template v-if="detailPrescription.prescription_type === '浓缩水丸'">
|
<span v-if="detailHasAuxHerbs" class="text-gray-500 mr-1">主方:</span>
|
||||||
· {{ Number(detailPrescription.dosage_bag_count) > 0 ? Number(detailPrescription.dosage_bag_count) : 1 }}袋
|
<template v-if="detailPrescription.dosage_amount">
|
||||||
</template>
|
{{ detailPrescription.dosage_amount }}{{ detailPrescription.dosage_unit || 'g' }}
|
||||||
<span v-if="detailPrescription.prescription_type === '饮片' && detailPrescription.need_decoction !== null" class="ml-2 text-gray-500">
|
<template v-if="detailPrescription.prescription_type === '浓缩水丸'">
|
||||||
({{ detailPrescription.need_decoction ? '代煎' : '不代煎' }})
|
· {{ Number(detailPrescription.dosage_bag_count) > 0 ? Number(detailPrescription.dosage_bag_count) : 1 }}袋
|
||||||
</span>
|
</template>
|
||||||
</template>
|
<span v-if="detailPrescription.prescription_type === '饮片' && detailPrescription.need_decoction !== null" class="ml-2 text-gray-500">
|
||||||
<template v-else>—</template>
|
({{ detailPrescription.need_decoction ? '代煎' : '不代煎' }})
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>—</template>
|
||||||
|
</div>
|
||||||
|
<div v-if="detailHasAuxHerbs && detailAuxUsage">
|
||||||
|
<span class="text-gray-500 mr-1">辅方:</span>
|
||||||
|
<template v-if="detailAuxUsage.dosage_amount != null && detailAuxUsage.dosage_amount !== 0">
|
||||||
|
{{ detailAuxUsage.dosage_amount }}{{ detailPrescription.dosage_unit || 'g' }}
|
||||||
|
<template v-if="detailPrescription.prescription_type === '浓缩水丸'">
|
||||||
|
· {{ Number(detailAuxUsage.dosage_bag_count) > 0 ? Number(detailAuxUsage.dosage_bag_count) : 1 }}袋
|
||||||
|
</template>
|
||||||
|
<span v-if="detailPrescription.prescription_type === '饮片'" class="ml-2 text-gray-500">
|
||||||
|
({{ detailAuxUsage.need_decoction ? '代煎' : '不代煎' }})
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>—</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="服用方式">
|
<el-descriptions-item>
|
||||||
|
<template #label>
|
||||||
|
<div class="flex items-center gap-1 flex-wrap">
|
||||||
|
<span>服用方式</span>
|
||||||
|
<el-button
|
||||||
|
v-if="
|
||||||
|
detailData.prescription_id &&
|
||||||
|
detailPrescription &&
|
||||||
|
!String(detailData.prescription_detail_error || '').trim()
|
||||||
|
"
|
||||||
|
v-perms="['tcm.prescriptionOrder/patchPrescriptionUsage']"
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
link
|
||||||
|
@click="openPatchUsageDialog"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<div class="flex flex-col gap-1.5 text-sm leading-relaxed">
|
<div class="flex flex-col gap-1.5 text-sm leading-relaxed">
|
||||||
<div>
|
<template v-if="detailHasAuxHerbs">
|
||||||
<span class="text-gray-500">每天次数:</span>
|
<div>
|
||||||
{{ detailPrescription.times_per_day ? detailPrescription.times_per_day + ' 次' : '—' }}
|
<span class="text-gray-500 mr-1">主方:</span>
|
||||||
</div>
|
每天
|
||||||
<div>
|
{{ detailPrescription.times_per_day ? detailPrescription.times_per_day + ' 次' : '— 次' }}
|
||||||
<span class="text-gray-500">处方开立:</span>
|
· 处方开立
|
||||||
{{
|
{{
|
||||||
detailPrescription.usage_days != null && detailPrescription.usage_days !== ''
|
detailPrescription.usage_days != null && detailPrescription.usage_days !== ''
|
||||||
? detailPrescription.usage_days + ' 天'
|
? detailPrescription.usage_days + ' 天'
|
||||||
: '—'
|
: '— 天'
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="detailAuxUsage">
|
||||||
|
<span class="text-gray-500 mr-1">辅方:</span>
|
||||||
|
每天
|
||||||
|
{{ detailAuxUsage.times_per_day ? detailAuxUsage.times_per_day + ' 次' : '— 次' }}
|
||||||
|
· 处方开立
|
||||||
|
{{
|
||||||
|
detailAuxUsage.usage_days != null && Number(detailAuxUsage.usage_days) > 0
|
||||||
|
? detailAuxUsage.usage_days + ' 天'
|
||||||
|
: '— 天'
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div>
|
||||||
|
<span class="text-gray-500">每天次数:</span>
|
||||||
|
{{ detailPrescription.times_per_day ? detailPrescription.times_per_day + ' 次' : '—' }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="text-gray-500">处方开立:</span>
|
||||||
|
{{
|
||||||
|
detailPrescription.usage_days != null && detailPrescription.usage_days !== ''
|
||||||
|
? detailPrescription.usage_days + ' 天'
|
||||||
|
: '—'
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
<div>
|
<div>
|
||||||
<span class="text-gray-500">订单设置:</span>
|
<span class="text-gray-500">订单设置:</span>
|
||||||
{{
|
{{
|
||||||
@@ -2152,6 +2215,93 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 修改服用参数:主方 / 辅方 / 订单设置 -->
|
||||||
|
<el-dialog
|
||||||
|
v-model="patchUsageVisible"
|
||||||
|
title="修改服用参数"
|
||||||
|
width="92%"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
destroy-on-close
|
||||||
|
class="po-h5-dialog"
|
||||||
|
@closed="resetPatchUsageForm"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="patchUsageFormRef"
|
||||||
|
:model="patchUsageForm"
|
||||||
|
:rules="patchUsageRules"
|
||||||
|
label-width="96px"
|
||||||
|
>
|
||||||
|
<div v-if="detailHasAuxHerbs" class="text-xs font-medium text-gray-500 mb-3">主方</div>
|
||||||
|
<el-form-item label="每天次数" prop="times_per_day">
|
||||||
|
<el-input-number
|
||||||
|
v-model="patchUsageForm.times_per_day"
|
||||||
|
:min="1"
|
||||||
|
:max="6"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="处方开立" prop="usage_days">
|
||||||
|
<div class="flex items-center gap-1 w-full">
|
||||||
|
<el-input-number
|
||||||
|
v-model="patchUsageForm.usage_days"
|
||||||
|
:min="1"
|
||||||
|
:max="999"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="flex-1 min-w-0"
|
||||||
|
/>
|
||||||
|
<span class="text-gray-500 shrink-0">天</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<template v-if="detailHasAuxHerbs">
|
||||||
|
<div class="text-xs font-medium text-gray-500 mb-3 mt-2 pt-2 border-t border-gray-100">辅方</div>
|
||||||
|
<el-form-item label="每天次数" prop="aux_times_per_day">
|
||||||
|
<el-input-number
|
||||||
|
v-model="patchUsageForm.aux_times_per_day"
|
||||||
|
:min="1"
|
||||||
|
:max="6"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="w-full"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="处方开立" prop="aux_usage_days">
|
||||||
|
<div class="flex items-center gap-1 w-full">
|
||||||
|
<el-input-number
|
||||||
|
v-model="patchUsageForm.aux_usage_days"
|
||||||
|
:min="1"
|
||||||
|
:max="999"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="flex-1 min-w-0"
|
||||||
|
/>
|
||||||
|
<span class="text-gray-500 shrink-0">天</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<div class="text-xs font-medium text-gray-500 mb-3 mt-2 pt-2 border-t border-gray-100">订单设置</div>
|
||||||
|
<el-form-item label="服用天数" prop="medication_days">
|
||||||
|
<div class="flex items-center gap-1 w-full">
|
||||||
|
<el-input-number
|
||||||
|
v-model="patchUsageForm.medication_days"
|
||||||
|
:min="1"
|
||||||
|
:max="999"
|
||||||
|
:step="1"
|
||||||
|
controls-position="right"
|
||||||
|
class="flex-1 min-w-0"
|
||||||
|
/>
|
||||||
|
<span class="text-gray-500 shrink-0">天</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="patchUsageVisible = false">取消</el-button>
|
||||||
|
<el-button type="primary" :loading="patchUsageSaving" @click="submitPatchUsage">保存</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 处方详情查看(处方单样式) -->
|
<!-- 处方详情查看(处方单样式) -->
|
||||||
<el-drawer
|
<el-drawer
|
||||||
v-model="prescriptionViewVisible"
|
v-model="prescriptionViewVisible"
|
||||||
@@ -2566,6 +2716,7 @@ import {
|
|||||||
prescriptionOrderRevokeRxAudit,
|
prescriptionOrderRevokeRxAudit,
|
||||||
prescriptionOrderRevokePayAudit,
|
prescriptionOrderRevokePayAudit,
|
||||||
prescriptionOrderPatchPrescriptionPatient,
|
prescriptionOrderPatchPrescriptionPatient,
|
||||||
|
prescriptionOrderPatchPrescriptionUsage,
|
||||||
prescriptionOrderLinkPayOrder,
|
prescriptionOrderLinkPayOrder,
|
||||||
prescriptionOrderRequestCompletion,
|
prescriptionOrderRequestCompletion,
|
||||||
prescriptionOrderSubmitGancaoRecipel,
|
prescriptionOrderSubmitGancaoRecipel,
|
||||||
@@ -2580,7 +2731,9 @@ import {
|
|||||||
normalizeServicePackageOptions,
|
normalizeServicePackageOptions,
|
||||||
parseServicePackageValues,
|
parseServicePackageValues,
|
||||||
mergeServicePackageSelectOptions,
|
mergeServicePackageSelectOptions,
|
||||||
formatServicePackageLabels
|
formatServicePackageLabels,
|
||||||
|
normalizeSlipAuxUsageForm,
|
||||||
|
prescriptionHasAuxFormula
|
||||||
} from './components/prescription-order-utils'
|
} from './components/prescription-order-utils'
|
||||||
import html2canvas from 'html2canvas'
|
import html2canvas from 'html2canvas'
|
||||||
import { jsPDF } from 'jspdf'
|
import { jsPDF } from 'jspdf'
|
||||||
@@ -3618,6 +3771,16 @@ const detailLinkedAppointmentResolvedFromTag = computed(() => {
|
|||||||
|
|
||||||
const detailRxHerbs = computed(() => normalizeSlipHerbs(detailPrescription.value?.herbs))
|
const detailRxHerbs = computed(() => normalizeSlipHerbs(detailPrescription.value?.herbs))
|
||||||
|
|
||||||
|
const detailHasAuxHerbs = computed(() => prescriptionHasAuxFormula(detailPrescription.value as any))
|
||||||
|
|
||||||
|
const detailAuxUsage = computed(() => {
|
||||||
|
const rx = detailPrescription.value as any
|
||||||
|
if (!rx || !prescriptionHasAuxFormula(rx)) return null
|
||||||
|
const raw = rx.aux_usage
|
||||||
|
if (raw == null || raw === '' || (Array.isArray(raw) && raw.length === 0)) return null
|
||||||
|
return normalizeSlipAuxUsageForm(raw, rx.prescription_type || '浓缩水丸')
|
||||||
|
})
|
||||||
|
|
||||||
/** false=无权限;true/缺省兼容旧接口(旧版未下发该字段时仍展示药材) */
|
/** false=无权限;true/缺省兼容旧接口(旧版未下发该字段时仍展示药材) */
|
||||||
const detailHerbsVisible = computed(() => detailData.value?.prescription_detail_herbs_visible !== false)
|
const detailHerbsVisible = computed(() => detailData.value?.prescription_detail_herbs_visible !== false)
|
||||||
|
|
||||||
@@ -3844,6 +4007,101 @@ const patchRxPatientRules: FormRules = {
|
|||||||
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }]
|
phone: [{ required: true, message: '请输入手机号', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const patchUsageVisible = ref(false)
|
||||||
|
const patchUsageSaving = ref(false)
|
||||||
|
const patchUsageFormRef = ref<FormInstance>()
|
||||||
|
const patchUsageForm = reactive({
|
||||||
|
times_per_day: 3 as number | undefined,
|
||||||
|
usage_days: 7 as number | undefined,
|
||||||
|
aux_times_per_day: 3 as number | undefined,
|
||||||
|
aux_usage_days: 7 as number | undefined,
|
||||||
|
medication_days: undefined as number | undefined
|
||||||
|
})
|
||||||
|
const patchUsageRules = computed<FormRules>(() => {
|
||||||
|
const rules: FormRules = {
|
||||||
|
times_per_day: [{ required: true, message: '请填写主方每天次数', trigger: 'change' }],
|
||||||
|
usage_days: [{ required: true, message: '请填写主方开立天数', trigger: 'change' }],
|
||||||
|
medication_days: [{ required: true, message: '请填写订单服用天数', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
if (detailHasAuxHerbs.value) {
|
||||||
|
rules.aux_times_per_day = [{ required: true, message: '请填写辅方每天次数', trigger: 'change' }]
|
||||||
|
rules.aux_usage_days = [{ required: true, message: '请填写辅方开立天数', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
return rules
|
||||||
|
})
|
||||||
|
|
||||||
|
function openPatchUsageDialog() {
|
||||||
|
const rx = detailPrescription.value
|
||||||
|
const ord = detailData.value
|
||||||
|
if (!rx || !ord?.id || !ord.prescription_id) {
|
||||||
|
feedback.msgWarning('无处方数据')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const aux = detailAuxUsage.value
|
||||||
|
patchUsageForm.times_per_day =
|
||||||
|
Number(rx.times_per_day) > 0 ? Number(rx.times_per_day) : 3
|
||||||
|
patchUsageForm.usage_days =
|
||||||
|
Number(rx.usage_days) > 0 ? Number(rx.usage_days) : 7
|
||||||
|
patchUsageForm.aux_times_per_day =
|
||||||
|
aux && Number(aux.times_per_day) > 0 ? Number(aux.times_per_day) : 3
|
||||||
|
patchUsageForm.aux_usage_days =
|
||||||
|
aux && Number(aux.usage_days) > 0 ? Number(aux.usage_days) : 7
|
||||||
|
const md = Number(ord.medication_days)
|
||||||
|
patchUsageForm.medication_days = md > 0 ? md : Number(rx.usage_days) > 0 ? Number(rx.usage_days) : 7
|
||||||
|
patchUsageVisible.value = true
|
||||||
|
nextTick(() => patchUsageFormRef.value?.clearValidate())
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetPatchUsageForm() {
|
||||||
|
patchUsageForm.times_per_day = 3
|
||||||
|
patchUsageForm.usage_days = 7
|
||||||
|
patchUsageForm.aux_times_per_day = 3
|
||||||
|
patchUsageForm.aux_usage_days = 7
|
||||||
|
patchUsageForm.medication_days = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
async function submitPatchUsage() {
|
||||||
|
const form = patchUsageFormRef.value
|
||||||
|
if (!form) return
|
||||||
|
try {
|
||||||
|
await form.validate()
|
||||||
|
} catch {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const ordId = detailData.value?.id
|
||||||
|
if (!ordId) return
|
||||||
|
patchUsageSaving.value = true
|
||||||
|
try {
|
||||||
|
const payload: {
|
||||||
|
id: number
|
||||||
|
times_per_day: number
|
||||||
|
usage_days: number
|
||||||
|
medication_days: number
|
||||||
|
aux_times_per_day?: number
|
||||||
|
aux_usage_days?: number
|
||||||
|
} = {
|
||||||
|
id: ordId,
|
||||||
|
times_per_day: Number(patchUsageForm.times_per_day),
|
||||||
|
usage_days: Number(patchUsageForm.usage_days),
|
||||||
|
medication_days: Number(patchUsageForm.medication_days)
|
||||||
|
}
|
||||||
|
if (detailHasAuxHerbs.value) {
|
||||||
|
payload.aux_times_per_day = Number(patchUsageForm.aux_times_per_day)
|
||||||
|
payload.aux_usage_days = Number(patchUsageForm.aux_usage_days)
|
||||||
|
}
|
||||||
|
await prescriptionOrderPatchPrescriptionUsage(payload)
|
||||||
|
feedback.msgSuccess('保存成功')
|
||||||
|
patchUsageVisible.value = false
|
||||||
|
await refreshCurrentPrescriptionOrderDetail()
|
||||||
|
await fetchLogs(ordId)
|
||||||
|
getLists()
|
||||||
|
} catch {
|
||||||
|
/* 拦截器已提示 */
|
||||||
|
} finally {
|
||||||
|
patchUsageSaving.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function openPatchRxPatientDialog() {
|
function openPatchRxPatientDialog() {
|
||||||
const rx = detailPrescription.value
|
const rx = detailPrescription.value
|
||||||
const ord = detailData.value
|
const ord = detailData.value
|
||||||
|
|||||||
Reference in New Issue
Block a user