i18n: localise Inbound/Outbound labels to Входящий/Исходящий

User-facing labels only — DB enum values inbound/outbound stay.
- FilterBar chip labels: "Входящие" / "Исходящие"
- LeadCardView meta line: "Входящий · создан ..."
- LeadsTable Тип column: full word instead of "In"/"Out"
- StatsView "Входящие vs Исходящие" heading and row label
- StatsView sourceLabels: refreshed for scoring v2 enum
  (ad, content, demo-request added; n/a label renamed)
This commit is contained in:
Telecom 2026-05-22 14:00:08 +05:00
parent 21ee17a831
commit a49c8340fd
4 changed files with 13 additions and 10 deletions

View File

@ -19,8 +19,8 @@ const statuses: { value: LeadStatus | 'all'; label: string }[] = [
const types: { value: LeadType | 'all'; label: string }[] = [
{ value: 'all', label: 'Все типы' },
{ value: 'inbound', label: 'Inbound' },
{ value: 'outbound', label: 'Outbound' },
{ value: 'inbound', label: 'Входящие' },
{ value: 'outbound', label: 'Исходящие' },
];
const stages: { value: DealStage | 'all'; label: string }[] = [

View File

@ -260,7 +260,7 @@ function exportCsv() {
{{ formatDate(lead.next_action_date) }}
</td>
<td class="px-4 py-3 text-gray-500 text-xs uppercase tracking-wider">
{{ lead.lead_type === 'inbound' ? 'In' : 'Out' }}
{{ lead.lead_type === 'inbound' ? 'Входящий' : 'Исходящий' }}
</td>
<td class="px-4 py-3 text-gray-600 text-xs">{{ lead.created_by }}</td>
<td class="px-4 py-3 text-right">

View File

@ -260,7 +260,7 @@ onMounted(load);
</p>
</div>
<p class="text-xs text-gray-500 mt-3">
{{ lead.lead_type === 'inbound' ? 'Inbound' : 'Outbound' }} · создан
{{ lead.lead_type === 'inbound' ? 'Входящий' : 'Исходящий' }} · создан
{{ lead.created_by }} · {{ formatDateTime(lead.created_at) }}
</p>
</div>

View File

@ -86,10 +86,13 @@ const stageBg: Record<string, string> = {
};
const sourceLabels: Record<string, string> = {
cold: 'Холодный',
referral: 'Реферал',
website: 'Сайт',
'n/a': 'Outbound',
cold: 'Холодный список',
ad: 'Реклама',
content: 'Скачал материал',
referral: 'Рекомендация',
website: 'Сайт / форма',
'demo-request': 'Запросил демо',
'n/a': 'Исходящие',
};
const funnelMax = computed(() =>
@ -360,14 +363,14 @@ function tickX(date: string, i: number): { x: number; label: string } | null {
<div class="card p-5">
<div class="flex items-center justify-between">
<h2 class="text-xs font-semibold text-gray-400 uppercase tracking-widest">
Inbound vs Outbound
Входящие vs Исходящие
</h2>
</div>
<div v-if="types.length === 0" class="text-xs text-gray-400 mt-4">—</div>
<div v-else class="mt-3 space-y-3">
<div v-for="t in types" :key="t.lead_type" class="text-sm">
<div class="flex items-center justify-between mb-1">
<span class="font-medium capitalize">{{ t.lead_type }}</span>
<span class="font-medium">{{ t.lead_type === 'inbound' ? 'Входящие' : 'Исходящие' }}</span>
<span class="text-xs text-gray-500 tabular-nums">
{{ t.total }} лидов · конв. {{ t.conversion_rate }}%
</span>