新增
This commit is contained in:
@@ -81,12 +81,20 @@
|
||||
<el-card v-loading="pager.loading" class="mt-3 table-card" shadow="never">
|
||||
<div class="pl-table-head">
|
||||
<span class="pl-table-head__title">处方列表</span>
|
||||
<el-button type="primary" @click="handleAdd" v-perms="['cf.prescription/add']">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增处方
|
||||
</el-button>
|
||||
<div class="flex items-center gap-2">
|
||||
<el-button
|
||||
v-perms="['tcm.prescriptionOrder/lists']"
|
||||
@click="goBusinessOrderList"
|
||||
>
|
||||
业务订单
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleAdd" v-perms="['cf.prescription/add']">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增处方
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
@@ -104,11 +112,31 @@
|
||||
|
||||
|
||||
|
||||
<el-table-column label="审核状态" min-width="100">
|
||||
<el-table-column label="审核状态" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="auditStatusTagType(row.audit_status)">
|
||||
{{ auditStatusLabel(row.audit_status) }}
|
||||
</el-tag>
|
||||
<div class="flex flex-col gap-1">
|
||||
<div class="flex flex-wrap items-center gap-1">
|
||||
<el-tag :type="listAuditStatusTagType(row)">
|
||||
{{ listAuditStatusLabel(row) }}
|
||||
</el-tag>
|
||||
<span
|
||||
v-if="Number(row.business_prescription_audit_rejected) === 1"
|
||||
class="text-xs text-gray-500"
|
||||
>
|
||||
(业务订单审核)
|
||||
</span>
|
||||
</div>
|
||||
<template v-if="listRejectReasonLines(row).length">
|
||||
<div
|
||||
v-for="(line, idx) in listRejectReasonLines(row)"
|
||||
:key="idx"
|
||||
class="text-xs text-red-600 leading-snug line-clamp-3"
|
||||
:title="line"
|
||||
>
|
||||
{{ line }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="作废" min-width="80">
|
||||
@@ -124,13 +152,22 @@
|
||||
{{ formatListCreateTime(row.create_time) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="260" fixed="right">
|
||||
<el-table-column label="操作" width="300" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="handleView(row)" v-perms="['cf.prescription/read']">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="!isApprovedActivePrescription(row)"
|
||||
v-if="!Number(row.has_prescription_order)"
|
||||
type="success"
|
||||
link
|
||||
v-perms="['tcm.prescriptionOrder/create']"
|
||||
@click="openCreateOrderFromPrescription(row)"
|
||||
>
|
||||
创建订单
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="!isApprovedActivePrescription(row) || Number(row.business_prescription_audit_rejected) === 1"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleEdit(row)"
|
||||
@@ -183,6 +220,12 @@
|
||||
<h2 class="cf-slip-title">{{ SLIP_HOSPITAL_NAME }}处方笺</h2>
|
||||
<div class="cf-slip-type">
|
||||
<el-tag v-if="Number(slipView.void_status) === 1" type="danger" size="small">已作废</el-tag>
|
||||
<el-tag
|
||||
v-else-if="Number(slipView.business_prescription_audit_rejected) === 1"
|
||||
type="danger"
|
||||
size="small"
|
||||
class="mr-1"
|
||||
>已驳回</el-tag>
|
||||
<el-tag
|
||||
v-else-if="Number(slipView.audit_status) === 1"
|
||||
type="success"
|
||||
@@ -205,6 +248,24 @@
|
||||
<div v-if="Number(slipView.void_status) === 1" class="cf-slip-void">
|
||||
作废人:{{ slipView.void_by_name || '—' }},作废时间:{{ formatVoidTime(slipView.void_time) }}
|
||||
</div>
|
||||
<div
|
||||
v-else-if="Number(slipView.business_prescription_audit_rejected) === 1"
|
||||
class="rounded border border-red-200 bg-red-50 text-red-800 text-sm px-3 py-2 mb-3"
|
||||
>
|
||||
<div class="font-medium">审核状态:已驳回(业务订单·处方审核)</div>
|
||||
<div v-if="slipView.business_prescription_audit_remark" class="mt-1">
|
||||
驳回意见:{{ slipView.business_prescription_audit_remark }}
|
||||
</div>
|
||||
<div v-else class="mt-1 text-red-600/80">暂无驳回意见说明。</div>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="Number(slipView.audit_status) === 2"
|
||||
class="rounded border border-red-200 bg-red-50 text-red-800 text-sm px-3 py-2 mb-3"
|
||||
>
|
||||
<div class="font-medium">消费者处方审核:已驳回</div>
|
||||
<div v-if="slipView.audit_remark" class="mt-1">驳回意见:{{ slipView.audit_remark }}</div>
|
||||
<div v-else class="mt-1 text-red-600/80">暂无文字意见,请联系审核人员。</div>
|
||||
</div>
|
||||
<div class="cf-slip-info">
|
||||
<div class="cf-slip-row">
|
||||
<span class="cf-slip-item"><em>日期</em>{{ slipView.prescription_date || '—' }}</span>
|
||||
@@ -293,6 +354,42 @@
|
||||
class="mb-4"
|
||||
title="保存修改后,该处方将重新进入「待审核」,需审核人员再次通过后方可生效。"
|
||||
/>
|
||||
<el-alert
|
||||
v-if="editMode === 'edit' && Number(editForm.audit_status) === 2"
|
||||
type="error"
|
||||
:closable="false"
|
||||
show-icon
|
||||
class="mb-4"
|
||||
>
|
||||
<template #title>当前消费者处方为「已驳回」</template>
|
||||
<div class="text-sm mt-1">
|
||||
保存修改后将清除驳回并变为「待审核」。{{
|
||||
editForm.audit_remark ? `上次意见:${editForm.audit_remark}` : ''
|
||||
}}
|
||||
</div>
|
||||
</el-alert>
|
||||
<el-alert
|
||||
v-if="
|
||||
editMode === 'edit' &&
|
||||
Number(editForm.business_prescription_audit_rejected) === 1 &&
|
||||
Number(editForm.audit_status) === 1
|
||||
"
|
||||
type="warning"
|
||||
:closable="false"
|
||||
show-icon
|
||||
class="mb-4"
|
||||
>
|
||||
<template #title>业务订单侧「处方审核」已驳回</template>
|
||||
<div class="text-sm mt-1">
|
||||
消费者处方仍为「已通过」;您修改并保存后,将重置关联业务订单的处方/支付单审核为「待审」,请在「处方业务订单」中继续处理。
|
||||
</div>
|
||||
<div
|
||||
v-if="String(editForm.business_prescription_audit_remark || '').trim()"
|
||||
class="text-sm mt-2 text-gray-800 font-medium"
|
||||
>
|
||||
驳回意见:{{ editForm.business_prescription_audit_remark }}
|
||||
</div>
|
||||
</el-alert>
|
||||
<el-alert
|
||||
v-if="editMode === 'edit' && editReviveHint"
|
||||
type="warning"
|
||||
@@ -600,6 +697,183 @@
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 从消费者处方创建业务订单(zyt_tcm_prescription_order,与支付单 zyt_order 分离) -->
|
||||
<el-dialog
|
||||
v-model="createOrderVisible"
|
||||
title="创建业务订单"
|
||||
width="640px"
|
||||
:close-on-click-modal="false"
|
||||
@close="resetCreateOrderForm"
|
||||
>
|
||||
<div v-if="createOrderPrescription" class="mb-4 rounded bg-gray-50 px-3 py-2 text-sm text-gray-700">
|
||||
<div class="font-medium text-gray-900">关联消费者处方</div>
|
||||
<div>
|
||||
处方 ID {{ createOrderPrescription.id }}
|
||||
<span v-if="createOrderPrescription.sn"> · 编号 {{ createOrderPrescription.sn }}</span>
|
||||
· {{ createOrderPrescription.patient_name || '—' }}
|
||||
</div>
|
||||
<div class="text-gray-500 mt-1 line-clamp-2">
|
||||
{{ createOrderHerbSummary }}
|
||||
</div>
|
||||
</div>
|
||||
<el-form
|
||||
ref="createOrderFormRef"
|
||||
:model="createOrderForm"
|
||||
:rules="createOrderRules"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-divider content-position="left">患者与收货</el-divider>
|
||||
<el-form-item label="诊单患者" prop="patient_id">
|
||||
<el-select
|
||||
v-model="createOrderForm.patient_id"
|
||||
class="w-full"
|
||||
placeholder="搜索姓名/手机/身份证"
|
||||
filterable
|
||||
remote
|
||||
:remote-method="searchPatientsForOrder"
|
||||
:loading="createOrderPatientLoading"
|
||||
@change="onCreateOrderPatientChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in createOrderPatientList"
|
||||
:key="item.id"
|
||||
:label="`${item.patient_name} (${item.phone || '无手机'})`"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="收货人" prop="recipient_name">
|
||||
<el-input v-model="createOrderForm.recipient_name" placeholder="可与诊单姓名一致" maxlength="50" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货手机" prop="recipient_phone">
|
||||
<el-input v-model="createOrderForm.recipient_phone" placeholder="用于物流联系与单号匹配" maxlength="20" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货地址" prop="shipping_address">
|
||||
<el-input
|
||||
v-model="createOrderForm.shipping_address"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="完整收货地址"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">服务信息</el-divider>
|
||||
<el-form-item label="是否复诊">
|
||||
<el-switch v-model="createOrderForm.is_follow_up" :active-value="1" :inactive-value="0" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用药疗程(天)">
|
||||
<el-input-number
|
||||
v-model="createOrderForm.medication_days"
|
||||
:min="1"
|
||||
:max="999"
|
||||
:step="1"
|
||||
placeholder="天数"
|
||||
class="w-full"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上次医生/医助">
|
||||
<el-input v-model="createOrderForm.prev_staff" placeholder="可选" maxlength="100" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务渠道">
|
||||
<el-input v-model="createOrderForm.service_channel" placeholder="可选" maxlength="100" />
|
||||
</el-form-item>
|
||||
<el-form-item label="服务套餐">
|
||||
<el-input v-model="createOrderForm.service_package" placeholder="可选" maxlength="100" />
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">物流</el-divider>
|
||||
<el-form-item label="快递公司">
|
||||
<el-select v-model="createOrderForm.express_company" placeholder="查物流用" class="w-full">
|
||||
<el-option label="自动识别" value="auto" />
|
||||
<el-option label="顺丰速运" value="sf" />
|
||||
<el-option label="京东快递" value="jd" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="快递单号">
|
||||
<el-input v-model="createOrderForm.tracking_number" placeholder="可创建时填写或发货前补录" maxlength="80" />
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">关联收款</el-divider>
|
||||
<el-form-item label="已支付单">
|
||||
<el-select
|
||||
v-model="createOrderForm.pay_order_ids"
|
||||
class="w-full"
|
||||
multiple
|
||||
collapse-tags
|
||||
collapse-tags-tooltip
|
||||
placeholder="多选本诊单下已支付收款单"
|
||||
:loading="createOrderPaidOrdersLoading"
|
||||
>
|
||||
<el-option
|
||||
v-for="o in createOrderPaidOrders"
|
||||
:key="o.id"
|
||||
:label="`${o.order_no} · ¥${o.amount}`"
|
||||
:value="o.id"
|
||||
/>
|
||||
</el-select>
|
||||
<div class="text-xs text-gray-400 mt-1">
|
||||
与「订单管理」中已支付订单一致;主管或本诊单医助可见该诊单全部已支付单,否则仅本人创建的收款单。已被其他有效业务订单占用的支付单不会出现在此列表。业务订单撤回后,本处方可再次创建订单并重新关联支付单。
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">金额</el-divider>
|
||||
<el-form-item label="费用类别" prop="fee_type">
|
||||
<el-select v-model="createOrderForm.fee_type" placeholder="请选择" class="w-full">
|
||||
<el-option label="挂号费" :value="1" />
|
||||
<el-option label="问诊费" :value="2" />
|
||||
<el-option label="药品费用" :value="3" />
|
||||
<el-option label="首付费用" :value="4" />
|
||||
<el-option label="尾款费用" :value="5" />
|
||||
<el-option label="其他费用" :value="6" />
|
||||
<el-option label="全部费用" :value="7" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单金额" prop="amount">
|
||||
<el-input-number
|
||||
v-model="createOrderForm.amount"
|
||||
:min="0"
|
||||
:step="0.01"
|
||||
:precision="2"
|
||||
class="w-full"
|
||||
placeholder="业务订单金额(元)"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-perms="['finance.account_log/lists']"
|
||||
label="内部成本"
|
||||
>
|
||||
<el-input-number
|
||||
v-model="createOrderForm.internal_cost"
|
||||
:min="0"
|
||||
:step="0.01"
|
||||
:precision="2"
|
||||
class="w-full"
|
||||
placeholder="仅财务角色写入库表"
|
||||
/>
|
||||
<div class="text-xs text-gray-400 mt-1">写入业务订单表字段;无财务权限时后端不会保存该值。</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注补充">
|
||||
<el-input
|
||||
v-model="createOrderForm.remark_extra"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="其他说明(可选)"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="createOrderVisible = false">取消</el-button>
|
||||
<el-button type="primary" :loading="createOrderSubmitLoading" @click="submitCreateOrderFromPrescription">
|
||||
创建业务订单
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="auditDialogVisible" title="处方审核" width="480px" destroy-on-close @closed="auditRemark = ''">
|
||||
<p class="text-sm text-gray-600 mb-3">
|
||||
通过:处方保持有效。驳回:将同时作废此处方(与诊间「驳回/作废处方」一致)。
|
||||
@@ -633,15 +907,19 @@ import {
|
||||
prescriptionDelete,
|
||||
prescriptionAudit,
|
||||
prescriptionDetail,
|
||||
prescriptionOrderCreate,
|
||||
prescriptionOrderPaidPayOrders,
|
||||
getDoctors
|
||||
} from '@/api/tcm'
|
||||
import { searchPatients as searchPatientsAPI } from '@/api/order'
|
||||
import { roleAll } from '@/api/perms/role'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
import feedback from '@/utils/feedback'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import DaterangePicker from '@/components/daterange-picker/index.vue'
|
||||
import { computed, onMounted, watch } from 'vue'
|
||||
import { computed, onMounted, reactive, ref, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
/** 与 server/config/project.php prescription_audit_roles 保持一致 */
|
||||
const PRESCRIPTION_AUDIT_ROLE_IDS = [0, 3]
|
||||
@@ -652,6 +930,16 @@ const SLIP_COMPANY_LINE = '成都双流甄养堂互联网医院有限公司 联
|
||||
const SLIP_ADDRESS_LINE = '地址:四川省成都市双流区黄甲街道黄龙大道二段280号'
|
||||
|
||||
const userStore = useUserStore()
|
||||
const router = useRouter()
|
||||
|
||||
function goBusinessOrderList() {
|
||||
const hit = router.getRoutes().find((r) => r.meta?.perms === 'tcm.prescriptionOrder/lists')
|
||||
if (hit?.path) {
|
||||
router.push(hit.path)
|
||||
} else {
|
||||
feedback.msgWarning('未配置「处方业务订单」菜单,请在权限管理中执行菜单 SQL 或手动添加路由')
|
||||
}
|
||||
}
|
||||
|
||||
// 表单数据(与列表接口查询参数一致)
|
||||
const formData = reactive({
|
||||
@@ -684,6 +972,212 @@ const auditTargetId = ref(0)
|
||||
const auditRemark = ref('')
|
||||
const auditLoading = ref(false)
|
||||
|
||||
/** 从消费者处方创建订单 */
|
||||
const createOrderVisible = ref(false)
|
||||
const createOrderPrescription = ref<any>(null)
|
||||
const createOrderFormRef = ref<FormInstance>()
|
||||
const createOrderSubmitLoading = ref(false)
|
||||
const createOrderPatientLoading = ref(false)
|
||||
const createOrderPatientList = ref<any[]>([])
|
||||
const createOrderPaidOrders = ref<Array<{ id: number; order_no?: string; amount?: number | string }>>([])
|
||||
const createOrderPaidOrdersLoading = ref(false)
|
||||
|
||||
const createOrderForm = reactive({
|
||||
patient_id: '' as number | string,
|
||||
recipient_name: '',
|
||||
recipient_phone: '',
|
||||
shipping_address: '',
|
||||
is_follow_up: 0,
|
||||
medication_days: undefined as number | undefined,
|
||||
prev_staff: '',
|
||||
service_channel: '',
|
||||
service_package: '',
|
||||
express_company: 'auto',
|
||||
tracking_number: '',
|
||||
fee_type: 3,
|
||||
amount: 0,
|
||||
internal_cost: undefined as number | undefined,
|
||||
remark_extra: '',
|
||||
pay_order_ids: [] as number[]
|
||||
})
|
||||
|
||||
const createOrderRules: FormRules = {
|
||||
patient_id: [{ required: true, message: '请选择诊单患者', trigger: 'change' }],
|
||||
recipient_name: [{ required: true, message: '请输入收货人', trigger: 'blur' }],
|
||||
recipient_phone: [{ required: true, message: '请输入收货手机', trigger: 'blur' }],
|
||||
shipping_address: [{ required: true, message: '请输入收货地址', trigger: 'blur' }],
|
||||
fee_type: [{ required: true, message: '请选择费用类别', trigger: 'change' }],
|
||||
amount: [{ required: true, message: '请输入订单金额', trigger: 'blur' }]
|
||||
}
|
||||
|
||||
const createOrderHerbSummary = computed(() => {
|
||||
const row = createOrderPrescription.value
|
||||
const herbs = normalizeSlipHerbs(row?.herbs)
|
||||
if (!herbs.length) return '暂无药材明细'
|
||||
const s = herbs.map((h) => `${h.name} ${h.dosage}g`).join('、')
|
||||
return s.length > 120 ? `${s.slice(0, 120)}…` : s
|
||||
})
|
||||
|
||||
function resetCreateOrderForm() {
|
||||
createOrderForm.patient_id = ''
|
||||
createOrderForm.recipient_name = ''
|
||||
createOrderForm.recipient_phone = ''
|
||||
createOrderForm.shipping_address = ''
|
||||
createOrderForm.is_follow_up = 0
|
||||
createOrderForm.medication_days = undefined
|
||||
createOrderForm.prev_staff = ''
|
||||
createOrderForm.service_channel = ''
|
||||
createOrderForm.service_package = ''
|
||||
createOrderForm.express_company = 'auto'
|
||||
createOrderForm.tracking_number = ''
|
||||
createOrderForm.fee_type = 3
|
||||
createOrderForm.amount = 0
|
||||
createOrderForm.internal_cost = undefined
|
||||
createOrderForm.remark_extra = ''
|
||||
createOrderForm.pay_order_ids = []
|
||||
createOrderPatientList.value = []
|
||||
createOrderPaidOrders.value = []
|
||||
createOrderPrescription.value = null
|
||||
createOrderFormRef.value?.clearValidate()
|
||||
}
|
||||
|
||||
async function loadCreateOrderPaidOrders() {
|
||||
const did = Number(createOrderForm.patient_id)
|
||||
if (!did) {
|
||||
createOrderPaidOrders.value = []
|
||||
return
|
||||
}
|
||||
try {
|
||||
createOrderPaidOrdersLoading.value = true
|
||||
const res: any = await prescriptionOrderPaidPayOrders({ diagnosis_id: did })
|
||||
const lists = res?.lists ?? res?.data?.lists ?? []
|
||||
createOrderPaidOrders.value = Array.isArray(lists) ? lists : []
|
||||
} catch {
|
||||
createOrderPaidOrders.value = []
|
||||
} finally {
|
||||
createOrderPaidOrdersLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => createOrderForm.patient_id,
|
||||
() => {
|
||||
createOrderForm.pay_order_ids = []
|
||||
void loadCreateOrderPaidOrders()
|
||||
}
|
||||
)
|
||||
|
||||
async function openCreateOrderFromPrescription(row: any) {
|
||||
resetCreateOrderForm()
|
||||
createOrderPrescription.value = row
|
||||
const did = Number(row.diagnosis_id) || 0
|
||||
if (did > 0) {
|
||||
createOrderForm.patient_id = did
|
||||
createOrderForm.recipient_name = row.patient_name || ''
|
||||
createOrderForm.recipient_phone = String(row.phone || '').trim()
|
||||
createOrderPatientList.value = [
|
||||
{
|
||||
id: did,
|
||||
patient_name: row.patient_name || '',
|
||||
phone: String(row.phone || '').trim()
|
||||
}
|
||||
]
|
||||
}
|
||||
const ud = Number(row.usage_days)
|
||||
if (ud > 0) {
|
||||
createOrderForm.medication_days = ud
|
||||
}
|
||||
createOrderVisible.value = true
|
||||
void loadCreateOrderPaidOrders()
|
||||
const rxId = row.id
|
||||
if (rxId && !createOrderForm.recipient_phone) {
|
||||
try {
|
||||
const d = (await prescriptionDetail({ id: rxId })) as Record<string, unknown> | null
|
||||
const phone = d && typeof d.phone === 'string' ? d.phone.trim() : ''
|
||||
if (phone && createOrderPrescription.value?.id === rxId) {
|
||||
createOrderForm.recipient_phone = phone
|
||||
const first = createOrderPatientList.value[0]
|
||||
if (first && Number(first.id) === did) {
|
||||
first.phone = phone
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
/* 列表无电话时尽力补全,失败忽略 */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function searchPatientsForOrder(query: string) {
|
||||
if (!query) {
|
||||
createOrderPatientList.value = []
|
||||
return
|
||||
}
|
||||
try {
|
||||
createOrderPatientLoading.value = true
|
||||
const res: any = await searchPatientsAPI({
|
||||
keyword: query,
|
||||
page_no: 1,
|
||||
page_size: 10
|
||||
})
|
||||
createOrderPatientList.value = res?.lists || []
|
||||
} catch {
|
||||
createOrderPatientList.value = []
|
||||
} finally {
|
||||
createOrderPatientLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function onCreateOrderPatientChange(id: number | string) {
|
||||
const p = createOrderPatientList.value.find((x) => Number(x.id) === Number(id))
|
||||
if (p) {
|
||||
createOrderForm.recipient_name = p.patient_name || ''
|
||||
createOrderForm.recipient_phone = p.phone || ''
|
||||
}
|
||||
}
|
||||
|
||||
async function submitCreateOrderFromPrescription() {
|
||||
if (!createOrderFormRef.value || !createOrderPrescription.value) return
|
||||
try {
|
||||
await createOrderFormRef.value.validate()
|
||||
createOrderSubmitLoading.value = true
|
||||
const diagnosisId = Number(createOrderForm.patient_id)
|
||||
const payload: Record<string, unknown> = {
|
||||
prescription_id: createOrderPrescription.value.id,
|
||||
diagnosis_id: diagnosisId,
|
||||
recipient_name: createOrderForm.recipient_name,
|
||||
recipient_phone: createOrderForm.recipient_phone,
|
||||
shipping_address: createOrderForm.shipping_address,
|
||||
is_follow_up: createOrderForm.is_follow_up,
|
||||
prev_staff: createOrderForm.prev_staff || '',
|
||||
service_channel: createOrderForm.service_channel || '',
|
||||
service_package: createOrderForm.service_package || '',
|
||||
express_company: createOrderForm.express_company || 'auto',
|
||||
tracking_number: createOrderForm.tracking_number || '',
|
||||
fee_type: createOrderForm.fee_type,
|
||||
amount: createOrderForm.amount,
|
||||
remark_extra: createOrderForm.remark_extra || ''
|
||||
}
|
||||
if (createOrderForm.medication_days != null && createOrderForm.medication_days > 0) {
|
||||
payload.medication_days = createOrderForm.medication_days
|
||||
}
|
||||
if (createOrderForm.internal_cost != null && createOrderForm.internal_cost > 0) {
|
||||
payload.internal_cost = createOrderForm.internal_cost
|
||||
}
|
||||
if (createOrderForm.pay_order_ids.length) {
|
||||
payload.pay_order_ids = [...createOrderForm.pay_order_ids]
|
||||
}
|
||||
const res: any = await prescriptionOrderCreate(payload)
|
||||
const row = res?.data ?? res
|
||||
const orderNo = row?.order_no
|
||||
feedback.msgSuccess(orderNo ? `业务订单已创建,单号:${orderNo}` : '业务订单已创建')
|
||||
createOrderVisible.value = false
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
} finally {
|
||||
createOrderSubmitLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 正在编辑的这条是否原为已作废 / 已驳回(用于提示) */
|
||||
const editingWasVoid = ref(false)
|
||||
const editingWasRejected = ref(false)
|
||||
@@ -739,7 +1233,10 @@ const editForm = reactive({
|
||||
audit_time: null as number | null,
|
||||
audit_by_name: '',
|
||||
audit_remark: '',
|
||||
diagnosis_id: 0
|
||||
diagnosis_id: 0,
|
||||
/** 列表带入:业务订单「处方审核」驳回(消费者处方本身可能仍为已通过) */
|
||||
business_prescription_audit_rejected: 0,
|
||||
business_prescription_audit_remark: ''
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
@@ -891,6 +1388,35 @@ function auditStatusTagType(v: number | undefined) {
|
||||
return 'success'
|
||||
}
|
||||
|
||||
/** 业务订单处方审核驳回时,列表「审核状态」主标签显示为已驳回 */
|
||||
function listAuditStatusLabel(row: { audit_status?: number; business_prescription_audit_rejected?: number }) {
|
||||
if (Number(row.business_prescription_audit_rejected) === 1) return '已驳回'
|
||||
return auditStatusLabel(row.audit_status)
|
||||
}
|
||||
|
||||
function listAuditStatusTagType(row: { audit_status?: number; business_prescription_audit_rejected?: number }) {
|
||||
if (Number(row.business_prescription_audit_rejected) === 1) return 'danger'
|
||||
return auditStatusTagType(row.audit_status)
|
||||
}
|
||||
|
||||
function listRejectReasonLines(row: {
|
||||
audit_status?: number
|
||||
audit_remark?: string
|
||||
business_prescription_audit_rejected?: number
|
||||
business_prescription_audit_remark?: string
|
||||
}): string[] {
|
||||
const out: string[] = []
|
||||
if (Number(row.business_prescription_audit_rejected) === 1) {
|
||||
const t = String(row.business_prescription_audit_remark || '').trim()
|
||||
out.push(t ? `业务订单审核驳回意见:${t}` : '业务订单审核驳回意见:—')
|
||||
}
|
||||
if (Number(row.audit_status) === 2) {
|
||||
const t = String(row.audit_remark || '').trim()
|
||||
out.push(t ? `消费者处方审核驳回意见:${t}` : '消费者处方审核驳回意见:—')
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
/** 已通过审核且未作废:仅可查看,不可编辑/删除(与预约列表「查看」一致) */
|
||||
function isApprovedActivePrescription(row: { audit_status?: number; void_status?: number }) {
|
||||
return Number(row.audit_status) === 1 && Number(row.void_status) !== 1
|
||||
@@ -1043,6 +1569,8 @@ const resetForm = () => {
|
||||
editForm.audit_by_name = ''
|
||||
editForm.audit_remark = ''
|
||||
editForm.diagnosis_id = 0
|
||||
editForm.business_prescription_audit_rejected = 0
|
||||
editForm.business_prescription_audit_remark = ''
|
||||
}
|
||||
|
||||
// 新增处方
|
||||
@@ -1112,6 +1640,8 @@ const handleEdit = (row: any) => {
|
||||
editForm.audit_by_name = row.audit_by_name || ''
|
||||
editForm.audit_remark = row.audit_remark || ''
|
||||
editForm.diagnosis_id = row.diagnosis_id ?? 0
|
||||
editForm.business_prescription_audit_rejected = Number(row.business_prescription_audit_rejected) === 1 ? 1 : 0
|
||||
editForm.business_prescription_audit_remark = String(row.business_prescription_audit_remark || '')
|
||||
showEdit.value = true
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user