Доработка отображения текущего плана
This commit is contained in:
+3
@@ -165,6 +165,9 @@ class SlotService(webClientBuilderProvider: ObjectProvider<WebClient.Builder>) {
|
|||||||
.block()
|
.block()
|
||||||
?: emptyList()
|
?: emptyList()
|
||||||
|
|
||||||
|
fun bookedByIds(bookedSlotIds: List<Long>): List<BookedSlotDetailsDTO> =
|
||||||
|
bookedDetailsByIds(bookedSlotIds)
|
||||||
|
|
||||||
fun bookedDetailsByIds(bookedSlotIds: List<Long>): List<BookedSlotDetailsDTO> {
|
fun bookedDetailsByIds(bookedSlotIds: List<Long>): List<BookedSlotDetailsDTO> {
|
||||||
val ids = bookedSlotIds.filter { it > 0 }.distinct().toSet()
|
val ids = bookedSlotIds.filter { it > 0 }.distinct().toSet()
|
||||||
if (ids.isEmpty()) {
|
if (ids.isEmpty()) {
|
||||||
|
|||||||
@@ -329,16 +329,41 @@
|
|||||||
|
|
||||||
function bookedSlotDetails(mode) {
|
function bookedSlotDetails(mode) {
|
||||||
const slotIds = Array.isArray(mode.bookedSlotIds) ? mode.bookedSlotIds : [];
|
const slotIds = Array.isArray(mode.bookedSlotIds) ? mode.bookedSlotIds : [];
|
||||||
const slots = slotIds.map((slotId) => {
|
const rows = slotIds.map((slotId) => {
|
||||||
const slot = state.bookedSlotsById[slotId];
|
const slot = state.bookedSlotsById[slotId];
|
||||||
if (!slot) {
|
if (!slot) {
|
||||||
return `<span class="current-plans-detail-token">#${escapeHtml(slotId)}</span>`;
|
return `<tr><td class="current-plans-id">#${escapeHtml(slotId)}</td><td colspan="6">Детали слота не найдены</td></tr>`;
|
||||||
}
|
}
|
||||||
return `<span class="current-plans-detail-token">#${escapeHtml(slot.bookedSlotId)} · slot ${escapeHtml(slot.slotNum)} · cycle ${escapeHtml(slot.cycle)} · sat ${escapeHtml(slot.satelliteId)}</span>`;
|
return `
|
||||||
|
<tr>
|
||||||
|
<td class="current-plans-id">#${escapeHtml(slot.bookedSlotId)}</td>
|
||||||
|
<td>${formatDateTime(slot.timeStart)}</td>
|
||||||
|
<td>${formatDuration(slot.durationSeconds)}</td>
|
||||||
|
<td>${escapeHtml(slot.slotNum ?? '—')}</td>
|
||||||
|
<td>${escapeHtml(slot.cycle ?? '—')}</td>
|
||||||
|
<td>${escapeHtml(slot.satelliteId ?? '—')}</td>
|
||||||
|
<td>${escapeHtml(slot.status || '—')}</td>
|
||||||
|
</tr>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="current-plans-detail-title">Забронированные слоты (${slotIds.length})</div>
|
<div class="current-plans-detail-title">Забронированные слоты (${slotIds.length})</div>
|
||||||
<div class="current-plans-detail-list">${slots}</div>`;
|
<div class="table-responsive">
|
||||||
|
<table class="table table-sm mb-0 current-plans-detail-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Начало</th>
|
||||||
|
<th>Длительность</th>
|
||||||
|
<th>Слот</th>
|
||||||
|
<th>Цикл</th>
|
||||||
|
<th>Спутник</th>
|
||||||
|
<th>Статус</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>${rows}</tbody>
|
||||||
|
</table>
|
||||||
|
</div>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function dropDetails(mode) {
|
function dropDetails(mode) {
|
||||||
@@ -741,6 +766,21 @@
|
|||||||
return number.toLocaleString('ru-RU', {maximumFractionDigits: 2});
|
return number.toLocaleString('ru-RU', {maximumFractionDigits: 2});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatDuration(seconds) {
|
||||||
|
const totalSeconds = Number(seconds);
|
||||||
|
if (!Number.isFinite(totalSeconds)) return '—';
|
||||||
|
|
||||||
|
const rounded = Math.max(0, Math.round(totalSeconds));
|
||||||
|
const hours = Math.floor(rounded / 3600);
|
||||||
|
const minutes = Math.floor((rounded % 3600) / 60);
|
||||||
|
const remainingSeconds = rounded % 60;
|
||||||
|
const pad = (number) => String(number).padStart(2, '0');
|
||||||
|
|
||||||
|
return hours > 0
|
||||||
|
? `${hours}:${pad(minutes)}:${pad(remainingSeconds)}`
|
||||||
|
: `${minutes}:${pad(remainingSeconds)}`;
|
||||||
|
}
|
||||||
|
|
||||||
function toDateTimeLocalValue(date) {
|
function toDateTimeLocalValue(date) {
|
||||||
const pad = (number) => String(number).padStart(2, '0');
|
const pad = (number) => String(number).padStart(2, '0');
|
||||||
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
||||||
|
|||||||
Reference in New Issue
Block a user