[ВОЛК] управление публикацией площадок
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-25 20:59:18 +03:00
parent 0490135d9e
commit 2284fd3263
3 changed files with 53 additions and 8 deletions
+36 -3
View File
@@ -700,6 +700,7 @@
<tr>
<th class="sortable-header">ID</th>
<th class="sortable-header">Название</th>
<th class="sortable-header">Статус</th>
</tr>
</thead>
</table>
@@ -709,7 +710,7 @@
<table class="table table-hover mb-0">
<tbody id="categories-table">
<tr>
<td colspan="2" class="text-center py-5">
<td colspan="3" class="text-center py-5">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Загрузка...</span>
</div>
@@ -1846,7 +1847,7 @@
if (categories.length === 0) {
tableBody.innerHTML = `
<tr>
<td colspan="2" class="text-center py-5 text-muted">
<td colspan="3" class="text-center py-5 text-muted">
<i class="fas fa-inbox fa-3x mb-3"></i>
<p>Нет доступных площадок</p>
</td>
@@ -1855,10 +1856,17 @@
}
tableBody.innerHTML = '';
categories.forEach(category => {
const publicationBadge = category.marked_for_publication
? '<span class="badge bg-warning status-badge">Для публикации</span>'
: '';
const publishedBadge = category.is_tg_published
? '<span class="badge bg-primary status-badge ms-1">Опубликовано</span>'
: '';
const row = `
<tr class="category-row" data-id="${category.id}">
<td>${category.id || '-'}</td>
<td class="category-name-preview" title="${category.title || ''}">${category.title || 'Без названия'}</td>
<td>${publicationBadge}${publishedBadge}</td>
</tr>`;
tableBody.innerHTML += row;
});
@@ -1878,7 +1886,7 @@
} catch (error) {
tableBody.innerHTML = `
<tr>
<td colspan="2" class="text-center py-5 text-danger">
<td colspan="3" class="text-center py-5 text-danger">
<i class="fas fa-exclamation-triangle fa-2x mb-3"></i>
<p>Ошибка загрузки данных</p>
<button class="btn btn-sm btn-outline-primary mt-2" onclick="loadCategoriesList()">
@@ -1922,6 +1930,20 @@
throw new Error('Площадка не найдена');
}
const category = await response.json();
// Форматируем дату из UTC в локальное время
const formatDateTime = (dateStr) => {
if (!dateStr) return '';
// Парсим дату как UTC и конвертируем в локальное время
const date = new Date(dateStr + (dateStr.includes('Z') ? '' : 'Z'));
return date.toLocaleString('ru-RU', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
timeZoneName: 'short'
});
};
// Создаем HTML для деталей
let detailsHtml = `
<div style="position: relative;">
@@ -1939,6 +1961,17 @@
<div class="mb-2">
<strong>Название:</strong> ${category.title || 'Не указано'}
</div>
<div class="mb-2">
<strong>Статус:</strong>
${category.marked_for_publication && !category.is_tg_published ? '<span class="badge bg-warning">Для публикации</span>' : ''}
${!category.marked_for_publication && !category.is_tg_published ? '<span class="badge bg-secondary">Не для публикации</span>' : ''}
${category.is_tg_published ? '<span class="badge bg-primary">Опубликовано</span>' : ''}
</div>
${category.is_tg_published ? `
<div class="mb-2">
<strong>Опубликовано в TG</strong> ${category.tg_id ? `[ID ${category.tg_id}]` : ''} ${category.tg_published_date ? formatDateTime(category.tg_published_date) : ''}
</div>
` : ''}
<div class="mb-2">
<strong>Количество событий:</strong> ${category.event_count || 0}
</div>