feat(calls): callStatusLabel channel-aware + callTypeLabel WA + 补 WA/微信语音字段 label

call_status 极性随 channel 不同(phone 0未接/2接通;voice/WA 1接通/2未接通),
仅值 2 按 channel 分支。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
浅念
2026-08-07 11:54:38 +08:00
parent 28d8448f62
commit 7a5bb9927e
3 changed files with 32 additions and 10 deletions
+11
View File
@@ -55,6 +55,17 @@ export const CALL_FIELD_LABELS: Record<string, string> = {
// 关联与版本 // 关联与版本
planCustomerName: '关联客户', planCustomerName: '关联客户',
version: '版本', version: '版本',
// 微信/WA 语音
userWeChatNickName: '员工微信昵称',
userWeChatAlias: '员工微信号',
userPhone: '员工手机',
talker: '客户号',
talkerNickName: '客户昵称',
talkerAlias: '客户微信号',
weChatId: '员工微信ID',
callFileId: '录音文件ID',
from: '通话来源',
isRoom: '是否群通话',
} }
/** /**
+18 -7
View File
@@ -82,13 +82,15 @@ export function wechatTypeLabel(typeRaw?: number | null): string {
// Phone / voice call rendering // Phone / voice call rendering
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/** Call-type (PhoneCall.channel) label — 电话 vs 语音通话. */ /** Call-type (PhoneCall.channel) label — 电话 vs 语音通话 vs WA 语音通话. */
export function callTypeLabel(channel?: string | null): string { export function callTypeLabel(channel?: string | null): string {
switch (channel) { switch (channel) {
case 'phone_call': case 'phone_call':
return '电话' return '电话'
case 'voice_call': case 'voice_call':
return '语音通话' return '语音通话'
case 'wa_voice_call':
return 'WA 语音通话'
default: default:
return channel ?? '未知' return channel ?? '未知'
} }
@@ -101,17 +103,26 @@ export function callDirectionLabel(incoming?: number | null): string {
} }
/** /**
* Call status. The upstream schema uses 1 = 已接通 (answered/connected) and * Call connected/missed label. The upstream ``call_status`` polarity differs by
* 0 = 未接通 (missed/failed); other codes fall back to the raw value so the UI * channel (verified against smoke.db recording correlation + scraper code):
* never hides information. * • phone_call: 0 = 未接通, 2 = 已接通.
* • voice_call / wa_voice_call: 1 = 已接通, 2 = 未接通.
* Value 2 is the only code that flips meaning across channels, so it alone
* branches on ``channel``; 0/1 are stable. Unknown codes pass through so the
* UI never hides information.
*/ */
export function callStatusLabel(status?: number | null): string { export function callStatusLabel(
status?: number | null,
channel?: string | null,
): string {
if (status == null) return '--' if (status == null) return '--'
switch (status) { switch (status) {
case 1:
return '已接通'
case 0: case 0:
return '未接通' return '未接通'
case 1:
return '已接通'
case 2:
return channel === 'phone_call' ? '已接通' : '未接通'
default: default:
return `状态 ${status}` return `状态 ${status}`
} }
+3 -3
View File
@@ -160,7 +160,7 @@ onMounted(load)
<template v-if="callType === 'voice_call'"> <template v-if="callType === 'voice_call'">
<el-table-column label="通话信息" min-width="150"> <el-table-column label="通话信息" min-width="150">
<template #default="{ row }"> <template #default="{ row }">
<div>通话状态:{{ callStatusLabel(row.call_status) }}</div> <div>通话状态:{{ callStatusLabel(row.call_status, row.channel) }}</div>
<div class="yk-cell__sub">类型:{{ callTypeLabel(row.channel) }}</div> <div class="yk-cell__sub">类型:{{ callTypeLabel(row.channel) }}</div>
<div class="yk-cell__sub">来源:{{ cell(row, 'from') || '--' }}</div> <div class="yk-cell__sub">来源:{{ cell(row, 'from') || '--' }}</div>
</template> </template>
@@ -196,7 +196,7 @@ onMounted(load)
<template v-if="callType === 'wa_voice_call'"> <template v-if="callType === 'wa_voice_call'">
<el-table-column label="状态" width="160"> <el-table-column label="状态" width="160">
<template #default="{ row }"> <template #default="{ row }">
<div>{{ callStatusLabel(row.call_status) }}</div> <div>{{ callStatusLabel(row.call_status, row.channel) }}</div>
<div class="yk-cell__sub">时长 {{ formatCallDuration(row.call_duration) }}</div> <div class="yk-cell__sub">时长 {{ formatCallDuration(row.call_duration) }}</div>
</template> </template>
</el-table-column> </el-table-column>
@@ -246,7 +246,7 @@ onMounted(load)
<template #default="{ row }">{{ formatCallDuration(row.call_duration) }}</template> <template #default="{ row }">{{ formatCallDuration(row.call_duration) }}</template>
</el-table-column> </el-table-column>
<el-table-column label="状态" width="90"> <el-table-column label="状态" width="90">
<template #default="{ row }">{{ callStatusLabel(row.call_status) }}</template> <template #default="{ row }">{{ callStatusLabel(row.call_status, row.channel) }}</template>
</el-table-column> </el-table-column>
<el-table-column label="录音" width="100" align="center"> <el-table-column label="录音" width="100" align="center">
<template #default="{ row }"> <template #default="{ row }">