From c7b4133282c6c316f41d67b028243fff6ddace8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 5 Dec 2025 12:54:34 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D1=82?= =?UTF-8?q?=D0=B2=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D1=83?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=B1=D0=B5=D1=81=D0=BA=D0=BE=D0=BD=D0=B5?= =?UTF-8?q?=D1=87=D0=BD=D0=BE=D0=B9=20=D0=BF=D1=80=D0=BE=D0=BA=D1=80=D1=83?= =?UTF-8?q?=D1=82=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена проверка nextUrl при append=true - Если nextUrl пуст при подгрузке - останавливаем загрузку - Добавлено логирование для отладки процесса загрузки - Предотвращает повторную загрузку с начала списка --- backend/static/js/components/employeesList.js | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/static/js/components/employeesList.js b/backend/static/js/components/employeesList.js index 8fd1661b..9a444a5d 100644 --- a/backend/static/js/components/employeesList.js +++ b/backend/static/js/components/employeesList.js @@ -94,6 +94,13 @@ export class EmployeesList { * Загрузка следующей порции сотрудников */ async loadMore() { + console.log('loadMore: triggered', { + hasMore: this.hasMore, + loading: this.loading, + nextUrl: this.nextUrl, + currentCount: this.employees.length + }); + try { await this.loadEmployees(true); // append = true this.render(true); // append = true @@ -108,7 +115,10 @@ export class EmployeesList { */ async loadEmployees(append = false) { // Проверяем hasMore только при подгрузке - if (this.loading || (append && !this.hasMore)) return; + if (this.loading || (append && !this.hasMore)) { + console.log('loadEmployees: skipped', { loading: this.loading, append, hasMore: this.hasMore }); + return; + } this.loading = true; this.showLoadingSpinner(); @@ -118,12 +128,20 @@ export class EmployeesList { let url; if (append && this.nextUrl) { url = this.nextUrl; + console.log('loadEmployees: using nextUrl', url); + } else if (append && !this.nextUrl) { + // При подгрузке без nextUrl - это ошибка + console.warn('loadEmployees: append=true but no nextUrl, stopping'); + this.loading = false; + this.hideLoadingSpinner(); + return; } else { const params = new URLSearchParams(); Object.entries(this.params).forEach(([key, value]) => { if (value) params.append(key, value); }); url = `${this.apiUrl}?${params}`; + console.log('loadEmployees: initial load', url); } const response = await fetch(url); @@ -134,6 +152,13 @@ export class EmployeesList { const data = await response.json(); const newEmployees = data.results || data; + console.log('loadEmployees: received', { + newCount: newEmployees.length, + totalCount: data.count, + hasNext: !!data.next, + currentEmployees: this.employees.length + }); + // Сохраняем метаданные this.totalCount = data.count || newEmployees.length; this.nextUrl = data.next || null; @@ -142,9 +167,11 @@ export class EmployeesList { if (append) { // Добавляем к существующим this.employees = [...this.employees, ...newEmployees]; + console.log('loadEmployees: appended, total now:', this.employees.length); } else { // Заменяем this.employees = newEmployees; + console.log('loadEmployees: replaced, total now:', this.employees.length); } this.loading = false;