generated from VLADIMIR/template_frontend
add results for screen
This commit is contained in:
@@ -640,6 +640,7 @@ useSimplePolling(() => {
|
||||
<n-button size="small" @click="setScreenMode('SCREEN_MODE_INTRO_DONE')">Успехов</n-button>
|
||||
<n-button size="small" @click="setScreenMode('SCREEN_MODE_CONCLUSION')">Закрывашка</n-button>
|
||||
<n-button size="small" @click="setScreenMode('SCREEN_MODE_CONCLUSION_DONE')">Спасибо за игру!</n-button>
|
||||
<n-button v-if="game.status === 'finish'" size="small" @click="setScreenMode('SCREEN_MODE_RESULTS')">Результаты</n-button>
|
||||
</n-space>
|
||||
<n-space class="screen-mode-controls">
|
||||
<n-button size="small" @click="sendScreenCommand('SCREEN_COMMAND_PLAY')">Запуск</n-button>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
import { getAuthClient } from '@/api/auth_client'
|
||||
import type { Game, ScreenState } from '@/api/generated/crabs/evening_detective_server'
|
||||
import type { Game, ScreenState, TeamResult } from '@/api/generated/crabs/evening_detective_server'
|
||||
import HeaderMenu from '@/components/HeaderMenu.vue'
|
||||
import { applicationFileURL } from '@/utils/application'
|
||||
import { formatGameDateTime } from '@/utils/datetime'
|
||||
@@ -17,6 +17,7 @@ const route = useRoute()
|
||||
const screenId = ref('')
|
||||
const accessToken = ref('')
|
||||
const state = ref<ScreenState>()
|
||||
const resultTeams = ref<TeamResult[]>([])
|
||||
const games = ref<Game[]>([])
|
||||
const selectedGameId = ref<number | null>(null)
|
||||
const prepared = ref(false)
|
||||
@@ -86,11 +87,18 @@ async function loadState() {
|
||||
const res = await client.GetScreenState({ screenId: screenId.value, accessToken: accessToken.value })
|
||||
if (res.error) throw new Error(res.error)
|
||||
state.value = res.state
|
||||
if (state.value?.mode === 'SCREEN_MODE_RESULTS') await loadResults()
|
||||
} catch (err) {
|
||||
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 })
|
||||
if (res.error == '') resultTeams.value = res.teams || []
|
||||
}
|
||||
|
||||
async function loadGames() {
|
||||
try {
|
||||
const res = await client.GetGames({})
|
||||
@@ -257,6 +265,20 @@ onUnmounted(() => {
|
||||
<div v-else-if="screenMode === 'SCREEN_MODE_CONCLUSION'" class="screen-message">Видео закрывашки не задано</div>
|
||||
<div v-else-if="screenMode === 'SCREEN_MODE_INTRO_DONE'" class="screen-message">Успехов</div>
|
||||
<div v-else-if="screenMode === 'SCREEN_MODE_CONCLUSION_DONE'" class="screen-message">Спасибо за игру!</div>
|
||||
<div v-else-if="screenMode === 'SCREEN_MODE_RESULTS'" class="results-screen">
|
||||
<h1>Результаты</h1>
|
||||
<table>
|
||||
<thead><tr><th>Место</th><th>Команда</th><th>Баллы</th><th>Ходы</th></tr></thead>
|
||||
<tbody>
|
||||
<tr v-for="result in resultTeams" :key="result.team?.id">
|
||||
<td>{{ result.place }}</td>
|
||||
<td>{{ result.team?.name }}</td>
|
||||
<td>{{ result.totalScore }}</td>
|
||||
<td>{{ result.actionsCount }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div v-else class="screen-cover">
|
||||
<img v-if="state.coverImage" :src="state.coverImage" class="cover-image" alt="Обложка дела" />
|
||||
<p class="cover-label">{{ state.gameName || `Игра №${state.gameId}` }}</p>
|
||||
|
||||
Reference in New Issue
Block a user