This commit is contained in:
2026-10-04 02:58:15 +07:00
parent a2269afe2d
commit a5a0b66ec2
+17 -7
View File
@@ -5,13 +5,15 @@ import { useRoute } from 'vue-router'
import { getAuthClient } from '@/api/auth_client'
import type { Game, ScreenState, TeamResult } from '@/api/generated/crabs/evening_detective_server'
import { buildClient } from '@/api/generated/crabs/evening_detective_server/client'
import HeaderMenu from '@/components/HeaderMenu.vue'
import { useSimplePolling } from '@/composables/useSimplePolling'
import { applicationFileURL } from '@/utils/application'
import { formatGameDateTime } from '@/utils/datetime'
const sessionKey = 'evening-detective-screen-session'
const client = getAuthClient()
const screenClient = buildClient()
const authClient = getAuthClient()
const message = useMessage()
const route = useRoute()
@@ -100,28 +102,36 @@ function readSession() {
}
async function createSession() {
const res = await client.CreateScreenSession({})
const res = await screenClient.CreateScreenSession({})
if (!res.screenID || !res.accessToken) throw new Error('Не удалось создать сессию экрана')
screenId.value = res.screenID
accessToken.value = res.accessToken
saveSession()
}
async function loadState() {
async function loadState(recreateOnUnauthorized = true) {
if (!screenId.value || !accessToken.value) return
try {
const res = await client.GetScreenState({ screenID: screenId.value, accessToken: accessToken.value })
const res = await screenClient.GetScreenState({ screenID: screenId.value, accessToken: accessToken.value })
state.value = res.state
syncTimer(state.value)
if (state.value?.gameID && state.value.mode === 'SCREEN_MODE_RESULTS') await loadResults()
} catch (err) {
if (recreateOnUnauthorized && err instanceof Error && err.message === 'unauthorized') {
sessionStorage.removeItem(sessionKey)
screenId.value = ''
accessToken.value = ''
await createSession()
await loadState(false)
return
}
message.error(err instanceof Error ? err.message : 'Не удалось получить состояние экрана')
}
}
async function loadResults() {
if (!screenId.value || !accessToken.value) return
const res = await client.GetScreenResults({ screenID: screenId.value, accessToken: accessToken.value })
const res = await screenClient.GetScreenResults({ screenID: screenId.value, accessToken: accessToken.value })
resultQuestions.value = res.questions || []
resultTeams.value = res.teams || []
if (!resultsScrollStarted) {
@@ -143,7 +153,7 @@ async function loadResults() {
async function loadGames() {
try {
const res = await client.GetGames({})
const res = await authClient.GetGames({})
games.value = res.games || []
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры')
@@ -182,7 +192,7 @@ async function bind() {
if (!selectedGameId.value || !route.query.screenID || !route.query.accessToken) return
binding.value = true
try {
await client.BindScreen({
await authClient.BindScreen({
screenID: String(route.query.screenID),
accessToken: String(route.query.accessToken),
gameID: selectedGameId.value,