fix: добавлена инициализация AJAX загрузки документов

- Добавлен импорт initDocumentListHandler в documentList.js
- Инициализация documentListHandler с правильными параметрами
- Считывание scope и ack_status из URL параметров
- Добавление scope в API запрос
- Передача userId и canManage через data-атрибуты
- Автоматическое применение scope при инициализации
This commit is contained in:
admin i 2025-12-05 13:13:43 +03:00
parent 74dd738e12
commit e1acebdb34
3 changed files with 47 additions and 6 deletions

View File

@ -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 });

View File

@ -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(

View File

@ -212,6 +212,11 @@
{% endblock %}
{% block extra_js %}
<script>
// Передаем данные для инициализации страницы
document.body.dataset.userId = '{{ user.id }}';
document.body.dataset.canManageDocuments = '{{ can_manage_documents|yesno:"true,false" }}';
</script>
<script type="module">
import { initDocumentListPage } from "{% static 'js/pages/documentList.js' %}";