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 }[] = [ const types: { value: LeadType | 'all'; label: string }[] = [
{ value: 'all', label: 'Все типы' }, { value: 'all', label: 'Все типы' },
{ value: 'inbound', label: 'Inbound' }, { value: 'inbound', label: 'Входящие' },
{ value: 'outbound', label: 'Outbound' }, { value: 'outbound', label: 'Исходящие' },
]; ];
const stages: { value: DealStage | 'all'; label: string }[] = [ const stages: { value: DealStage | 'all'; label: string }[] = [

View File

@ -260,7 +260,7 @@ function exportCsv() {
{{ formatDate(lead.next_action_date) }} {{ formatDate(lead.next_action_date) }}
</td> </td>
<td class="px-4 py-3 text-gray-500 text-xs uppercase tracking-wider"> <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>
<td class="px-4 py-3 text-gray-600 text-xs">{{ lead.created_by }}</td> <td class="px-4 py-3 text-gray-600 text-xs">{{ lead.created_by }}</td>
<td class="px-4 py-3 text-right"> <td class="px-4 py-3 text-right">

View File

@ -260,7 +260,7 @@ onMounted(load);
</p> </p>
</div> </div>
<p class="text-xs text-gray-500 mt-3"> <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) }} {{ lead.created_by }} · {{ formatDateTime(lead.created_at) }}
</p> </p>
</div> </div>

View File

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