diff --git a/backend/static/js/components/documentListHandler.js b/backend/static/js/components/documentListHandler.js
index c575c63a..24477a90 100644
--- a/backend/static/js/components/documentListHandler.js
+++ b/backend/static/js/components/documentListHandler.js
@@ -31,14 +31,17 @@ export function initDocumentListHandler(options) {
}
// Текущее состояние
- let currentScope = 'mine'; // 'mine' | 'all'
- let currentAckStatus = ''; // '' | 'acked' | 'not_acked'
+ const urlParams = new URLSearchParams(window.location.search);
+ let currentScope = urlParams.get('scope') || 'mine'; // 'mine' | 'all'
+ let currentAckStatus = urlParams.get('ack_status') || ''; // '' | 'acked' | 'not_acked'
let allDocuments = []; // Все загруженные документы
let loading = false;
let hasMore = true;
let nextUrl = null;
let totalCount = 0;
+ console.log('documentListHandler: init with scope =', currentScope, 'ack_status =', currentAckStatus);
+
// Intersection Observer для бесконечной прокрутки
let observerTarget = null;
let observer = null;
@@ -68,8 +71,15 @@ export function initDocumentListHandler(options) {
hideLoadingSpinner();
return [];
} else {
- url = apiListUrl;
- console.log('loadDocuments: initial load', url);
+ // Формируем URL с параметрами scope
+ const params = new URLSearchParams();
+ if (currentScope === 'mine') {
+ params.append('scope', 'mine');
+ }
+ // ack_status фильтруется на клиенте, не в API
+
+ url = `${apiListUrl}?${params}`;
+ console.log('loadDocuments: initial load', url, 'scope:', currentScope);
}
const response = await fetch(url, { headers });
diff --git a/backend/static/js/pages/documentList.js b/backend/static/js/pages/documentList.js
index be3cc127..ca068967 100644
--- a/backend/static/js/pages/documentList.js
+++ b/backend/static/js/pages/documentList.js
@@ -6,6 +6,7 @@
import { RecipientPicker } from '../components/recipientPickerHandler.js';
import { initDocumentCrud } from '../components/documentCrudHandler.js';
import { initDocumentAcks } from '../components/documentAcksHandler.js';
+import { initDocumentListHandler } from '../components/documentListHandler.js';
/**
* Инициализирует страницу списка документов
@@ -29,14 +30,39 @@ export function initDocumentListPage(config) {
const accessMeta = document.querySelector('meta[name="api-access"]');
const ACCESS = accessMeta ? accessMeta.content : '';
const headers = ACCESS ? { 'Authorization': 'Bearer ' + ACCESS } : {};
+
+ // Получаем ID текущего пользователя
+ const userId = parseInt(document.body.dataset.userId || '0', 10);
+ const canManage = document.body.dataset.canManageDocuments === 'true';
+
+ // Получаем текущий scope из URL
+ const urlParams = new URLSearchParams(window.location.search);
+ const currentScope = urlParams.get('scope') || 'mine';
- console.log('Document CRUD initialization:', {
+ console.log('Document page initialization:', {
apiListUrl,
apiDetailBase,
employeesApi,
departmentsApi,
- hasAuth: !!ACCESS
+ hasAuth: !!ACCESS,
+ userId,
+ canManage,
+ currentScope
});
+
+ // Инициализация списка документов (AJAX загрузка с бесконечной прокруткой)
+ const documentListHandler = initDocumentListHandler({
+ apiListUrl,
+ acknowledgeUrlTemplate: '/documents/ack/{id}/',
+ userId,
+ canManage,
+ headers
+ });
+
+ // Устанавливаем начальный scope
+ if (currentScope && documentListHandler.setScope) {
+ documentListHandler.setScope(currentScope);
+ }
// Инициализация RecipientPicker для формы создания
const createPicker = new RecipientPicker(
diff --git a/backend/templates/documents/document_list.html b/backend/templates/documents/document_list.html
index 17d10ba5..1962b6e8 100644
--- a/backend/templates/documents/document_list.html
+++ b/backend/templates/documents/document_list.html
@@ -212,6 +212,11 @@
{% endblock %}
{% block extra_js %}
+