更新
This commit is contained in:
@@ -181,9 +181,44 @@
|
||||
<template #default="{ row }">¥ {{ formatDoctorDailyMoney(row.deal_amount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deal_order_count" label="接诊诊单" min-width="88" align="right" />
|
||||
<el-table-column
|
||||
prop="appointment_total"
|
||||
label="总挂号"
|
||||
min-width="88"
|
||||
align="right"
|
||||
>
|
||||
<template #header>
|
||||
<span>总挂号</span>
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
placement="top"
|
||||
content="区间内该医生 doctor_appointment 全部状态合计(已预约/已完成/已过号/已取消);选部门时仅计经手医助归属在所选部门子树的挂号(与业绩看板「预约诊单」医助口径一致)"
|
||||
>
|
||||
<el-icon class="doctor-daily-th__hint"><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="appointment_completed" label="挂号完成" min-width="88" align="right" />
|
||||
<el-table-column prop="appointment_missed" label="过号" min-width="72" align="right" />
|
||||
<el-table-column prop="appointment_cancelled" label="取消" min-width="72" align="right" />
|
||||
<el-table-column
|
||||
prop="appointment_conversion_rate"
|
||||
label="挂号率"
|
||||
min-width="92"
|
||||
align="right"
|
||||
>
|
||||
<template #header>
|
||||
<span>挂号率</span>
|
||||
<el-tooltip
|
||||
effect="dark"
|
||||
placement="top"
|
||||
content="挂号率 = 成交单数 / 总挂号数 × 100;总挂号为 0 时显示「—」"
|
||||
>
|
||||
<el-icon class="doctor-daily-th__hint"><InfoFilled /></el-icon>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template #default="{ row }">{{ formatDoctorDailyRate(row.appointment_conversion_rate) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-empty v-else description="当前账号无医生统计权限" />
|
||||
@@ -2078,6 +2113,10 @@ function buildDoctorDailyRequestParams(): Record<string, any> {
|
||||
if (selectedChannel.value) {
|
||||
p.channel_code = selectedChannel.value
|
||||
}
|
||||
// 选中父级时由后端 resolvePrimaryDepts 自动展开所有子级,再用 admin_dept 收窄医生集合。
|
||||
if (selectedDeptIds.value.length > 0) {
|
||||
p.dept_ids = selectedDeptIds.value.join(',')
|
||||
}
|
||||
if (customRange.value?.[0] && customRange.value?.[1]) {
|
||||
p.start_date = customRange.value[0]
|
||||
p.end_date = customRange.value[1]
|
||||
@@ -2096,6 +2135,15 @@ function formatDoctorDailyMoney(n: number | string | undefined) {
|
||||
return x.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
||||
}
|
||||
|
||||
/** 挂号率展示:null 或非有限数显示「—」;保留 2 位小数 + % 后缀 */
|
||||
function formatDoctorDailyRate(v: number | string | null | undefined): string {
|
||||
if (v === null || v === undefined || v === '') return '—'
|
||||
const n = Number(v)
|
||||
if (!Number.isFinite(n)) return '—'
|
||||
|
||||
return `${n.toFixed(2)}%`
|
||||
}
|
||||
|
||||
function getDoctorDailySummaries(param: { columns: any[] }) {
|
||||
const t = doctorDailyTotal.value
|
||||
const sums: string[] = []
|
||||
@@ -2118,6 +2166,9 @@ function getDoctorDailySummaries(param: { columns: any[] }) {
|
||||
case 'deal_order_count':
|
||||
sums[index] = String(t.deal_order_count ?? 0)
|
||||
break
|
||||
case 'appointment_total':
|
||||
sums[index] = String(t.appointment_total ?? 0)
|
||||
break
|
||||
case 'appointment_completed':
|
||||
sums[index] = String(t.appointment_completed ?? 0)
|
||||
break
|
||||
@@ -2127,6 +2178,9 @@ function getDoctorDailySummaries(param: { columns: any[] }) {
|
||||
case 'appointment_cancelled':
|
||||
sums[index] = String(t.appointment_cancelled ?? 0)
|
||||
break
|
||||
case 'appointment_conversion_rate':
|
||||
sums[index] = formatDoctorDailyRate(t.appointment_conversion_rate)
|
||||
break
|
||||
default:
|
||||
sums[index] = ''
|
||||
}
|
||||
@@ -4100,6 +4154,19 @@ onMounted(async () => {
|
||||
background: var(--yj-accent-soft) !important;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.doctor-daily-th__hint {
|
||||
margin-left: 4px;
|
||||
color: var(--yj-muted);
|
||||
cursor: help;
|
||||
vertical-align: -2px;
|
||||
font-size: 13px;
|
||||
transition: color 0.15s;
|
||||
|
||||
&:hover {
|
||||
color: var(--yj-brand);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter-surface {
|
||||
|
||||
Reference in New Issue
Block a user