This commit is contained in:
Your Name
2026-05-07 18:31:52 +08:00
parent 6c997559a2
commit 3f05a610b3
2 changed files with 100 additions and 9 deletions
@@ -977,7 +977,7 @@
<span class="font-medium text-[15px]">履约与收货信息</span>
</template>
<el-descriptions :column="3" border size="small" class="po-desc">
<el-descriptions-item label="诊单ID">
<el-descriptions-item label="诊单ID" :span="3">
<span class="font-mono">{{ detailData.diagnosis_id }}</span>
<el-button
v-if="Number(detailData.diagnosis_id) > 0"
@@ -990,7 +990,41 @@
查看患者信息
</el-button>
</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ formatTime(detailData.create_time) }}</el-descriptions-item>
<el-descriptions-item label="创建时间" :span="1">{{ formatTime(detailData.create_time) }}</el-descriptions-item>
<el-descriptions-item label="业务订单创建人" :span="2">
<div v-if="Number(detailData.creator_id) > 0 || detailData.creator_name" class="text-[13px] space-y-1">
<div>
<span class="font-medium text-gray-900">{{ detailData.creator_name || '—' }}</span>
<span v-if="Number(detailData.creator_id) > 0" class="text-gray-500 ml-2 font-mono text-xs"
>ID {{ detailData.creator_id }}</span
>
</div>
<div v-if="detailOrderCreatorMetaLine" class="text-gray-600 text-xs leading-relaxed">
{{ detailOrderCreatorMetaLine }}
</div>
</div>
<span v-else class="text-gray-400">—</span>
</el-descriptions-item>
<el-descriptions-item label="创建人所属部门" :span="3">
<div v-if="detailOrderCreatorDeptBreadcrumbs.length" class="space-y-1.5">
<div
v-for="(segments, idx) in detailOrderCreatorDeptBreadcrumbs"
:key="idx"
class="min-w-0"
>
<el-breadcrumb
v-if="segments.length"
class="po-diagnosis-creator-dept-breadcrumb text-[13px] leading-relaxed"
separator="/"
>
<el-breadcrumb-item v-for="(name, j) in segments" :key="j">
<span class="text-gray-800 break-all">{{ name }}</span>
</el-breadcrumb-item>
</el-breadcrumb>
</div>
</div>
<span v-else class="text-gray-400">—</span>
</el-descriptions-item>
<el-descriptions-item label="收货人">{{ detailData.recipient_name }}</el-descriptions-item>
<el-descriptions-item label="挂号关联" :span="3">
@@ -1009,8 +1043,8 @@
<span v-if="detailLinkedAppointment.doctor_name"
>接诊:{{detailLinkedAppointment.doctor_name }}</span
>
<span v-if="detailLinkedAppointment.channel_source" class="text-gray-500"
>渠道:{{ detailLinkedAppointment.channel_source }}</span
<span v-if="detailLinkedAppointmentChannelText" class="text-gray-500"
>渠道:{{ detailLinkedAppointmentChannelText }}</span
>
<el-tag v-if="detailLinkedAppointmentResolvedFromTag" size="small" effect="plain">{{
detailLinkedAppointmentResolvedFromTag
@@ -3230,6 +3264,46 @@ const detailOrderPhoneDisplay = computed(() => {
return s || '—'
})
/** 详情:业务订单创建人部门面包屑(与 edit 表单同结构;后端 order_creator_dept_path / diagnosis_creator_dept_path */
const detailOrderCreatorDeptBreadcrumbs = computed(() => {
const raw = String(
(detailData.value as Record<string, unknown> | null)?.order_creator_dept_path ??
(detailData.value as Record<string, unknown> | null)?.diagnosis_creator_dept_path ??
''
).trim()
if (!raw) {
return [] as string[][]
}
return raw
.split('')
.map((s) => s.trim())
.filter(Boolean)
.map((p) => {
if (p.includes(' / ')) {
return p
.split(' / ')
.map((x) => x.trim())
.filter(Boolean)
}
return p
.split('/')
.map((x) => x.trim())
.filter(Boolean)
})
.filter((segs) => segs.length > 0)
})
const detailOrderCreatorMetaLine = computed(() => {
const d = detailData.value as Record<string, unknown> | null
if (!d) return ''
const account = String(d.creator_account ?? '').trim()
const mobile = String(d.creator_mobile ?? '').trim()
const parts: string[] = []
if (account) parts.push(`登录账号:${account}`)
if (mobile) parts.push(`手机:${mobile}`)
return parts.join(' · ')
})
const detailLinkedAppointment = computed(() => {
const a = detailData.value?.linked_appointment
return a && typeof a === 'object' ? a : null
@@ -3242,6 +3316,15 @@ const detailLinkedAppointmentResolvedFromTag = computed(() => {
return ''
})
/** 渠道展示:后端 linked_appointment.channel_source_desc(字典名),缺省回退原值 */
const detailLinkedAppointmentChannelText = computed(() => {
const a = detailLinkedAppointment.value
if (!a) return ''
const desc = String(a.channel_source_desc ?? '').trim()
if (desc) return desc
return String(a.channel_source ?? '').trim()
})
const detailRxHerbs = computed(() => normalizeSlipHerbs(detailPrescription.value?.herbs))
/** false=无权限;true/缺省兼容旧接口(旧版未下发该字段时仍展示药材) */