Большое обновление
1. Создание личных проектов 2. Управление командой 3. Приглашение участников 4. Уведомления и многое другое...
This commit is contained in:
@@ -78,6 +78,7 @@
|
||||
@stats-updated="stats = $event"
|
||||
@open-task="openTaskPanel"
|
||||
@create-task="openNewTaskPanel"
|
||||
@cards-moved="onCardsMoved"
|
||||
/>
|
||||
</main>
|
||||
|
||||
@@ -158,6 +159,11 @@ const onProjectChange = async () => {
|
||||
await fetchCards()
|
||||
}
|
||||
|
||||
// После перемещения карточки — тихо обновляем данные с сервера
|
||||
const onCardsMoved = async () => {
|
||||
await fetchCards(true)
|
||||
}
|
||||
|
||||
// ==================== СТАТИСТИКА ====================
|
||||
const stats = ref({ total: 0, inProgress: 0, done: 0 })
|
||||
|
||||
@@ -231,15 +237,26 @@ const onProjectSaved = async (projectId) => {
|
||||
}
|
||||
|
||||
// ==================== АВТООБНОВЛЕНИЕ (POLLING) ====================
|
||||
const REFRESH_INTERVAL = (window.APP_CONFIG?.IDLE_REFRESH_SECONDS ?? 30) * 1000
|
||||
const CARDS_REFRESH_INTERVAL = (window.APP_CONFIG?.REFRESH_INTERVALS?.cards ?? 30) * 1000
|
||||
const INVITES_REFRESH_INTERVAL = (window.APP_CONFIG?.REFRESH_INTERVALS?.invites ?? 30) * 1000
|
||||
let pollTimer = null
|
||||
let invitesPollTimer = null
|
||||
|
||||
const startPolling = () => {
|
||||
// Polling карточек
|
||||
if (pollTimer) clearInterval(pollTimer)
|
||||
pollTimer = setInterval(async () => {
|
||||
// Не обновляем когда открыта модалка — это может прерывать клики
|
||||
if (panelOpen.value || projectPanelOpen.value) return
|
||||
console.log('[AutoRefresh] Обновление данных...')
|
||||
await fetchCards(true) // silent = true, без Loader
|
||||
}, REFRESH_INTERVAL)
|
||||
}, CARDS_REFRESH_INTERVAL)
|
||||
|
||||
// Polling приглашений (для бейджа)
|
||||
if (invitesPollTimer) clearInterval(invitesPollTimer)
|
||||
invitesPollTimer = setInterval(async () => {
|
||||
await store.fetchPendingInvitesCount()
|
||||
}, INVITES_REFRESH_INTERVAL)
|
||||
}
|
||||
|
||||
const stopPolling = () => {
|
||||
@@ -247,11 +264,15 @@ const stopPolling = () => {
|
||||
clearInterval(pollTimer)
|
||||
pollTimer = null
|
||||
}
|
||||
if (invitesPollTimer) {
|
||||
clearInterval(invitesPollTimer)
|
||||
invitesPollTimer = null
|
||||
}
|
||||
}
|
||||
|
||||
// ==================== ИНИЦИАЛИЗАЦИЯ ====================
|
||||
onMounted(async () => {
|
||||
// Store уже мог быть инициализирован при логине (prefetch)
|
||||
// Store уже мог быть инициализирован при логине (prefetch) или в роутере
|
||||
await store.init()
|
||||
|
||||
// Проверяем предзагруженные карточки
|
||||
|
||||
Reference in New Issue
Block a user