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> <span class="font-medium text-[15px]">履约与收货信息</span>
</template> </template>
<el-descriptions :column="3" border size="small" class="po-desc"> <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> <span class="font-mono">{{ detailData.diagnosis_id }}</span>
<el-button <el-button
v-if="Number(detailData.diagnosis_id) > 0" v-if="Number(detailData.diagnosis_id) > 0"
@@ -990,7 +990,41 @@
查看患者信息 查看患者信息
</el-button> </el-button>
</el-descriptions-item> </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="收货人">{{ detailData.recipient_name }}</el-descriptions-item>
<el-descriptions-item label="挂号关联" :span="3"> <el-descriptions-item label="挂号关联" :span="3">
@@ -1009,8 +1043,8 @@
<span v-if="detailLinkedAppointment.doctor_name" <span v-if="detailLinkedAppointment.doctor_name"
>接诊:{{detailLinkedAppointment.doctor_name }}</span >接诊:{{detailLinkedAppointment.doctor_name }}</span
> >
<span v-if="detailLinkedAppointment.channel_source" class="text-gray-500" <span v-if="detailLinkedAppointmentChannelText" class="text-gray-500"
>渠道:{{ detailLinkedAppointment.channel_source }}</span >渠道:{{ detailLinkedAppointmentChannelText }}</span
> >
<el-tag v-if="detailLinkedAppointmentResolvedFromTag" size="small" effect="plain">{{ <el-tag v-if="detailLinkedAppointmentResolvedFromTag" size="small" effect="plain">{{
detailLinkedAppointmentResolvedFromTag detailLinkedAppointmentResolvedFromTag
@@ -3230,6 +3264,46 @@ const detailOrderPhoneDisplay = computed(() => {
return s || '—' 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 detailLinkedAppointment = computed(() => {
const a = detailData.value?.linked_appointment const a = detailData.value?.linked_appointment
return a && typeof a === 'object' ? a : null return a && typeof a === 'object' ? a : null
@@ -3242,6 +3316,15 @@ const detailLinkedAppointmentResolvedFromTag = computed(() => {
return '' 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)) const detailRxHerbs = computed(() => normalizeSlipHerbs(detailPrescription.value?.herbs))
/** false=无权限;true/缺省兼容旧接口(旧版未下发该字段时仍展示药材) */ /** false=无权限;true/缺省兼容旧接口(旧版未下发该字段时仍展示药材) */
@@ -690,13 +690,19 @@ class PrescriptionOrderLogic
self::maskRemarkExtraIfNeeded($arr, $adminInfo); self::maskRemarkExtraIfNeeded($arr, $adminInfo);
self::attachLinkedPayOrders($arr); self::attachLinkedPayOrders($arr);
// 添加创建人姓名 // 添加创建人姓名、登录账号(业务订单 creator_id;la_admin 无手机列则不发手机号)
$creatorId = (int) ($arr['creator_id'] ?? 0); $creatorId = (int) ($arr['creator_id'] ?? 0);
$arr['creator_name'] = '';
$arr['creator_account'] = '';
$arr['creator_mobile'] = '';
if ($creatorId > 0) { if ($creatorId > 0) {
$creatorName = Admin::where('id', $creatorId)->value('name'); // 须包含 idAdmin 模型 $append 在 toArray 时会依赖 data['id']
$arr['creator_name'] = $creatorName ? (string) $creatorName : ''; $adm = Admin::where('id', $creatorId)->whereNull('delete_time')->field(['id', 'name', 'account'])->find();
} else { if ($adm !== null) {
$arr['creator_name'] = ''; $a = $adm->toArray();
$arr['creator_name'] = (string) ($a['name'] ?? '');
$arr['creator_account'] = (string) ($a['account'] ?? '');
}
} }
$rxId = (int) ($arr['prescription_id'] ?? 0); $rxId = (int) ($arr['prescription_id'] ?? 0);
@@ -774,6 +780,8 @@ class PrescriptionOrderLogic
} }
} }
$arr['diagnosis_creator_dept_path'] = $deptPath; $arr['diagnosis_creator_dept_path'] = $deptPath;
/** 与 diagnosis_creator_dept_path 相同语义:业务订单创建人所属部门(多部门「;」、路径「 / 」),便于前端字段自解释 */
$arr['order_creator_dept_path'] = $deptPath;
// 挂号预约摘要:优先处方 appointment_id;否则按诊单 id 匹配预约表 patient_id(诊单) // 挂号预约摘要:优先处方 appointment_id;否则按诊单 id 匹配预约表 patient_id(诊单)
$arr['linked_appointment'] = null; $arr['linked_appointment'] = null;