fix(ui): гард деления на ноль в прогрессе проекта (NaN%) + битый класс gap-N→ga-N (Vuetify)

This commit is contained in:
Дмитрий
2026-06-21 12:44:19 +03:00
parent 177051857c
commit 720eaafc5e
4 changed files with 12 additions and 10 deletions
@@ -1,7 +1,7 @@
<template>
<v-card class="bulk-actions-bar" elevation="6">
<DevIndexBadge :index="20" label="BulkActionsBar" :dialog-mode="true" style="top: 4px; right: 4px" />
<v-card-text class="d-flex align-center gap-3 flex-wrap">
<v-card-text class="d-flex align-center ga-3 flex-wrap">
<strong>Выбрано: {{ store.selectedIds.size }}</strong>
<v-divider vertical />
@@ -5,7 +5,7 @@
<v-card-text>
<div class="mb-4">
<div class="text-caption text-success font-weight-medium mb-2"> Добавить дни</div>
<div class="d-flex gap-2">
<div class="d-flex ga-2">
<v-btn
v-for="d in WEEKDAYS"
:key="`add-${d.bit}`"
@@ -20,7 +20,7 @@
</div>
<div>
<div class="text-caption text-error font-weight-medium mb-2"> Убрать дни</div>
<div class="d-flex gap-2">
<div class="d-flex ga-2">
<v-btn
v-for="d in WEEKDAYS"
:key="`remove-${d.bit}`"
@@ -110,9 +110,11 @@ const identifierDisplay = computed(() => {
}
return props.project.signal_identifier ?? '';
});
const progressPercent = computed(() =>
Math.min(100, Math.round((props.project.delivered_today / props.project.daily_limit_target) * 100)),
);
const progressPercent = computed(() => {
// Гард деления на ноль: активный проект с лимитом 0 возможен → без гарда «NaN%».
const limit = props.project.daily_limit_target;
return limit > 0 ? Math.min(100, Math.round((props.project.delivered_today / limit) * 100)) : 0;
});
const progressColor = computed(() => (progressPercent.value >= 90 ? 'success' : 'primary'));
const syncStatusLabel = computed(
() => ({ ok: 'Sync OK', pending: 'Sync pending', failed: 'Sync failed' })[props.project.sync_status],
+4 -4
View File
@@ -13,7 +13,7 @@
border="start"
class="mb-4"
>
<div class="d-flex justify-space-between align-start gap-2">
<div class="d-flex justify-space-between align-start ga-2">
<span>
Важно: изменения по проектам (добавление, удаление, лимиты, рабочие дни, регионы) вносите
<strong>до 18:00 МСК</strong>. Изменения после 18:00 применяются при следующей синхронизации на
@@ -30,7 +30,7 @@
</div>
</v-alert>
<div class="d-flex flex-wrap gap-3 mb-4">
<div class="d-flex flex-wrap ga-3 mb-4">
<v-select
v-model="store.filters.signal_type"
:items="typeFilters"
@@ -101,7 +101,7 @@
</div>
<!-- #6: Селектор количества на странице (паттерн как в DealsView). -->
<div class="perpage mb-3 d-flex align-center gap-3">
<div class="perpage mb-3 d-flex align-center ga-3">
<span class="text-body-2 text-medium-emphasis">Показывать по:</span>
<v-btn-toggle
v-model="store.filters.per_page"
@@ -116,7 +116,7 @@
</v-btn-toggle>
</div>
<div v-if="!store.loading && store.items.length > 0" class="projects-toolbar d-flex align-center gap-3 mb-3">
<div v-if="!store.loading && store.items.length > 0" class="projects-toolbar d-flex align-center ga-3 mb-3">
<label class="toolbar-check" data-testid="select-all-toggle">
<input
type="checkbox"