This commit is contained in:
2026-10-03 02:38:11 +07:00
parent 38bad7fd00
commit 4737dce924
19 changed files with 184 additions and 573 deletions
+1 -5
View File
@@ -30,11 +30,7 @@ onMounted(async () => {
try {
const res = await fetchers[props.kind]()
if (res.error) {
error.value = res.error
} else {
text.value = res.text || ''
}
text.value = res.text || ''
} catch (err) {
error.value = err instanceof Error ? err.message : 'Не удалось загрузить документ'
} finally {
+21 -105
View File
@@ -136,10 +136,6 @@ let panState: { startX: number; startY: number; offsetX: number; offsetY: number
async function getGame(id: number) {
const res = await client.GetGame({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
}
game.value = res.game!
game.value.teams = game.value.teams?.sort((a, b) => {
let aLen = 0
@@ -172,9 +168,6 @@ getGame(Number(gameId))
async function getGameScreens() {
const res = await client.GetGameScreens({ gameID: Number(gameId) })
if (res.error != '') {
return
}
screens.value = res.screens || []
if (!timerFormInitialized.value && screens.value[0]) {
timerDurationMinutes.value = Math.max(1, (screens.value[0].timerDurationSeconds || 600) / 60)
@@ -183,10 +176,8 @@ async function getGameScreens() {
}
if (previewScreen.value?.mode === 'SCREEN_MODE_RESULTS') {
const result = await client.GetGameResults({ gameID: Number(gameId) })
if (result.error == '') {
previewQuestions.value = result.questions || []
previewTeams.value = result.teams || []
}
previewQuestions.value = result.questions || []
previewTeams.value = result.teams || []
} else {
previewQuestions.value = []
previewTeams.value = []
@@ -197,14 +188,14 @@ getGameScreens()
async function getGameMap() {
if (dragState || mapSaving.value) return
const res = await client.GetGameMap({ gameID: Number(gameId) })
if (res.error == '') mapItems.value = res.items || []
mapItems.value = res.items || []
}
getGameMap()
async function saveMapItem(item: MapItem, hidden = item.hidden) {
mapSaving.value = true
try {
const res = await client.UpdateGameMapItem({
await client.UpdateGameMapItem({
gameID: Number(gameId),
kind: item.kind,
itemID: item.itemID,
@@ -212,7 +203,6 @@ async function saveMapItem(item: MapItem, hidden = item.hidden) {
y: Math.round(item.y || 0),
hidden,
})
if (res.error != '') message.error(res.error || 'Не удалось сохранить координаты')
} finally {
mapSaving.value = false
}
@@ -295,26 +285,17 @@ function zoomMap(event: WheelEvent) {
}
async function setSoundScreen(screen: ScreenState) {
const res = await client.SetScreenSound({ screenID: screen.ID, soundEnabled: true })
if (res.error != '') {
message.error(res.error!)
return
}
await client.SetScreenSound({ screenID: screen.ID, soundEnabled: true })
await getGameScreens()
}
async function unbindScreen(screen: ScreenState) {
const res = await client.UnbindScreen({ screenID: screen.ID })
if (res.error != '') {
message.error(res.error!)
return
}
await client.UnbindScreen({ screenID: screen.ID })
await getGameScreens()
}
async function setScreenMode(mode: ScreenMode) {
const res = await client.SetScreenMode({ gameID: Number(gameId), mode })
if (res.error != '') message.error(res.error || 'Не удалось изменить режим экранов')
await client.SetScreenMode({ gameID: Number(gameId), mode })
}
async function configureScreenTimer() {
@@ -324,15 +305,11 @@ async function configureScreenTimer() {
message.error('Укажите длительность и надпись таймера')
return
}
const res = await client.SetScreenTimer({
await client.SetScreenTimer({
gameID: Number(gameId),
durationSeconds: Math.round(durationMinutes * 60),
label,
})
if (res.error != '') {
message.error(res.error || 'Не удалось настроить таймер')
return
}
await getGameScreens()
}
@@ -340,13 +317,12 @@ async function sendScreenCommand(command: ScreenCommand) {
if (command === 'SCREEN_COMMAND_PLAY' || command === 'SCREEN_COMMAND_REPLAY') {
if (!window.confirm('Запустить медиа на всех экранах?')) return
}
const res = await client.SendScreenCommand({
await client.SendScreenCommand({
gameID: Number(gameId),
command,
positionMs: Math.max(0, Math.round(screenPosition.value * 1000)),
volume: Math.max(0, Math.min(100, Math.round(screenVolume.value))),
})
if (res.error != '') message.error(res.error || 'Не удалось выполнить команду экранов')
}
async function toTeamStory(id: number, password: string, newTab: boolean = false) {
@@ -397,7 +373,7 @@ function closeSettings() {
}
async function updateGame() {
const res = await client.UpdateGame({
await client.UpdateGame({
ID: game.value.ID,
name: settingsDraft.value.name,
description: settingsDraft.value.description,
@@ -406,10 +382,6 @@ async function updateGame() {
startAt: game.value.startAt,
scenarioID: game.value.scenario?.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
showSettingsModal.value = false
}
@@ -460,29 +432,21 @@ function giveApplication(team: Team, application: Application) {
}
async function addTeam() {
const res = await client.AddTeam({
await client.AddTeam({
gameID: game.value.ID,
name: newTeamName.value,
captainEmail: newTeamEmail.value.trim(),
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
showAddTeamModal.value = false
newTeamEmail.value = ''
}
async function confirmGiveApplication() {
const res = await client.GiveTeamApplications({
await client.GiveTeamApplications({
ID: giveApplicationTeam.value.ID,
name: giveApplicationApplication.value.name,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
showGiveApplicationModal.value = false
}
@@ -493,25 +457,17 @@ async function deleteTeam(team: Team) {
}
async function confirmDeleteTeam() {
const res = await client.DeleteTeam({
await client.DeleteTeam({
ID: deletedTeam.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
showDeleteTeamModal.value = false
}
async function deleteGame() {
const res = await client.DeleteGame({
await client.DeleteGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
message.success('Игра удалена')
router.push('/games')
}
@@ -540,10 +496,6 @@ async function issueTickets() {
gameID: game.value.ID,
count: ticketCount.value,
})
if (res.error != '') {
message.error(res.error!)
return
}
issuedTickets.value = res.tickets || []
message.success(`Выпущено билетов: ${issuedTickets.value.length}`)
} catch (err) {
@@ -560,57 +512,37 @@ useSimplePolling(() => {
}, 2000)
async function resetGame() {
const res = await client.ResetGame({
await client.ResetGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
}
async function startGame() {
const res = await client.StartGame({
await client.StartGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
}
async function pauseGame() {
const res = await client.PauseGame({
await client.PauseGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
}
async function playGame() {
const res = await client.PlayGame({
await client.PlayGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
}
async function finishGame() {
const res = await client.FinishGame({
await client.FinishGame({
ID: game.value.ID,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getGame(game.value.ID!)
}
@@ -640,10 +572,6 @@ function onScoreUpdate(key: string, value: number | null) {
async function loadGameAnswers() {
const res = await client.GetGameAnswers({ gameID: Number(gameId) })
if (res.error != '') {
message.error(res.error!)
return
}
answersQuestions.value = res.questions || []
answersTeams.value = res.teams || []
const next: Record<string, number | undefined> = {}
@@ -663,21 +591,13 @@ async function openAnswersModal() {
async function openReviewsModal() {
showReviewsModal.value = true
const res = await client.GetGameReviewsForModeration({ gameID: Number(gameId) })
if (res.error != '') {
message.error(res.error!)
return
}
gameReviews.value = res.reviews || []
reviewsAverage.value = res.averageRating || 0
reviewsCount.value = res.reviewsCount || 0
}
async function moderateReview(review: GameReview, status: string) {
const res = await client.ModerateGameReview({ ID: review.ID, status })
if (res.error != '') {
message.error(res.error!)
return
}
await client.ModerateGameReview({ ID: review.ID, status })
await openReviewsModal()
}
@@ -686,15 +606,11 @@ async function saveAllScores() {
for (const question of answersQuestions.value) {
for (const team of answersTeams.value) {
const score = scores.value[scoreKey(team.team?.ID, question.code)]
const res = await client.SetTeamAnswerScore({
await client.SetTeamAnswerScore({
ID: team.team?.ID,
questionCode: question.code,
score: score === undefined || score === null ? undefined : score,
})
if (res.error != '') {
message.error(res.error!)
return
}
}
}
message.success('Баллы сохранены')
-7
View File
@@ -41,13 +41,6 @@ async function loadGameResults() {
sessionIssue.value = false
try {
const res = await client.GetGameResults({ gameID: Number(gameId) })
if (res.error != '') {
// res.error может отсутствовать, если сервер ответил не-Rsp-ошибкой (например, 403)
loadError.value = res.error || 'Не удалось загрузить результаты'
message.error(loadError.value)
loadFailed.value = true
return
}
questions.value = res.questions || []
teams.value = res.teams || []
loaded.value = true
+6 -15
View File
@@ -25,13 +25,13 @@ const router = useRouter()
const games = ref<Game[]>([])
async function getGames() {
games.value = []
const res = await client.GetGames({})
if (res.error != '') {
message.error(res.error!)
return
try {
games.value = []
const res = await client.GetGames({})
games.value = res.games || []
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры')
}
games.value = res.games || []
}
getGames()
@@ -68,11 +68,6 @@ async function getCatalogScenarios() {
catalogError.value = false
try {
const res = await client.GetScenariosCatalog({})
if (res.error != '') {
catalogError.value = true
message.error(res.error!)
return
}
catalogScenarios.value = res.scenarios || []
} catch (err) {
catalogError.value = true
@@ -111,10 +106,6 @@ async function createGame() {
startAt: new Date(startAtMs).toISOString(),
scenarioID: scenarioId,
})
if (res.error != '') {
message.error(res.error!)
return
}
message.success('Игра создана')
showCreateGameModal.value = false
router.push('/games/' + res.ID!)
+2 -12
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { NButton, NCard, NSpace, useMessage } from 'naive-ui'
import { NButton, NCard, NSpace } from 'naive-ui'
import { onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
@@ -15,7 +15,6 @@ const token = params.get('token') || ''
const answer = ref(params.get('answer') === 'cancelled' ? 'cancelled' : 'confirmed')
const client = buildClient()
const authStore = useAuthStore()
const message = useMessage()
const participation = ref<ParticipationRsp>()
const loading = ref(false)
const error = ref('')
@@ -25,11 +24,6 @@ async function load() {
error.value = ''
try {
const res = await client.GetParticipation({ token })
if (res.error) {
error.value = res.error
message.error(res.error)
return
}
participation.value = res
} catch {
error.value = 'Не удалось загрузить данные. Попробуйте ещё раз.'
@@ -44,11 +38,7 @@ async function submit() {
error.value = ''
try {
const res = await client.AnswerParticipation({ token, answer: answer.value })
if (res.status) participation.value = res
if (res.error) {
error.value = res.error
message.error(res.error)
}
participation.value = res
} catch {
error.value = 'Не удалось сохранить ответ. Попробуйте ещё раз.'
} finally {
+10 -10
View File
@@ -11,21 +11,21 @@ const message = useMessage()
const reviews = ref<GameReview[]>([])
async function loadReviews() {
const res = await client.GetReviewsForModeration({})
if (res.error != '') {
message.error(res.error!)
return
try {
const res = await client.GetReviewsForModeration({})
reviews.value = res.reviews || []
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить отзывы')
}
reviews.value = res.reviews || []
}
async function moderate(review: GameReview, status: string) {
const res = await client.ModerateGameReview({ ID: review.ID, status })
if (res.error != '') {
message.error(res.error!)
return
try {
await client.ModerateGameReview({ ID: review.ID, status })
await loadReviews()
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось изменить отзыв')
}
await loadReviews()
}
loadReviews()
+10 -10
View File
@@ -28,22 +28,22 @@ const scenario = ref<Scenario>({
})
async function getScenario(id: number) {
const res = await client.GetScenario({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
try {
const res = await client.GetScenario({ ID: id })
scenario.value = res.scenario!
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить сценарий')
}
scenario.value = res.scenario!
}
getScenario(Number(scenarioId))
async function getReviews(id: number) {
const res = await client.GetScenarioReviews({ scenarioID: id })
if (res.error != '') {
message.error(res.error!)
return
try {
const res = await client.GetScenarioReviews({ scenarioID: id })
reviews.value = res.reviews || []
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить отзывы')
}
reviews.value = res.reviews || []
}
getReviews(Number(scenarioId))
</script>
+14 -87
View File
@@ -101,11 +101,7 @@ async function updateConclusion(remove = false) {
video = uploaded.filename
}
const saved = remove ? { text: '', video: '' } : { text: conclusion.value.text, video }
const res = await client.UpdateScenarioConclusion({ ID: scenario.value.ID, conclusion: saved })
if (res.error) {
message.error(res.error!)
return
}
await client.UpdateScenarioConclusion({ ID: scenario.value.ID, conclusion: saved })
scenario.value.story!.conclusion = saved
resetConclusion()
message.success(remove ? 'Закрывашка удалена' : 'Закрывашка сохранена')
@@ -148,10 +144,6 @@ const editorQuestions = computed<EditableQuestion[]>(() => {
async function getScenario(id: number) {
const res = await client.GetFullScenario({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
}
scenario.value = res.scenario!
resetConclusion()
scenario.value.story?.places?.forEach((item) => {
@@ -170,20 +162,12 @@ async function getScenario(id: number) {
getScenario(Number(scenarioId))
async function deleteScenario(id: number) {
const res = await client.DeleteScenario({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
}
await client.DeleteScenario({ ID: id })
router.push('/scenarios')
}
async function publicScenario(id: number) {
const res = await client.PublicScenario({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
}
await client.PublicScenario({ ID: id })
await getScenario(Number(scenarioId))
statusScenarioName.value = ''
showSettingsModal.value = false
@@ -199,28 +183,16 @@ async function addGame(name: string, id: number) {
startAt: now,
scenarioID: id,
})
if (resAddGame.error != '') {
message.error(resAddGame.error!)
return
}
const resAddTeam = await client.AddTeam({
name: 'Тестовая команда',
captainEmail: '',
gameID: resAddGame.ID!,
})
if (resAddTeam.error != '') {
message.error(resAddTeam.error!)
return
}
router.push('/team-story/' + resAddTeam.ID! + '?password=' + resAddTeam.password!)
}
async function draftScenario(id: number) {
const res = await client.DraftScenario({ ID: id })
if (res.error != '') {
message.error(res.error!)
return
}
await client.DraftScenario({ ID: id })
await getScenario(Number(scenarioId))
statusScenarioName.value = ''
showSettingsModal.value = false
@@ -265,11 +237,6 @@ async function uploadFile(file: File | null, filename: string): Promise<UploadFi
filename: filename,
data: uint8ToBase64(bytes),
})
if (resUploadFile.error != '') {
message.error(resUploadFile.error!)
return { filename: '', fileType: '' }
}
// file_type возвращает сервер по содержимому файла (image | pdf | audio | video) —
// редактор сохраняет его на улике.
return {
@@ -292,16 +259,12 @@ async function updateScenario() {
resUploadFilename = uploaded.filename
}
const res = await client.UpdateScenario({
await client.UpdateScenario({
ID: scenario.value.ID,
name: scenario.value.name,
description: scenario.value.description,
image: resUploadFilename,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
showSettingsModal.value = false
}
@@ -328,7 +291,7 @@ const text = ref('')
const mode = ref('mini-add')
async function addPlace() {
const res = await client.AddScenarioPlace({
await client.AddScenarioPlace({
ID: scenario.value.ID,
place: {
code: code.value,
@@ -341,10 +304,6 @@ async function addPlace() {
keys: undefined,
},
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
code.value = ''
@@ -366,7 +325,7 @@ async function addNotFoundDoors(scenario: Scenario, place: EditablePlace) {
return place.code == door.code
})
if (place == undefined) {
const res = await client.AddScenarioPlace({
await client.AddScenarioPlace({
ID: scenario.ID,
place: {
code: door.code,
@@ -379,10 +338,6 @@ async function addNotFoundDoors(scenario: Scenario, place: EditablePlace) {
keys: undefined,
},
})
if (res.error != '') {
message.error(res.error!)
return
}
}
}
}
@@ -431,29 +386,21 @@ async function updatePlace(place: EditablePlace) {
}
await addNotFoundDoors(scenario.value, place)
const res = await client.UpdateScenarioPlace({
await client.UpdateScenarioPlace({
ID: scenario.value.ID,
code: place.oldCode,
place: place,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
place.mode = 'show-editor'
}
async function deletePlace(place: EditablePlace) {
const res = await client.DeleteScenarioPlace({
await client.DeleteScenarioPlace({
ID: scenario.value.ID,
code: place.oldCode,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
}
@@ -463,7 +410,7 @@ const newQuestionAnswer = ref('')
const questionMode = ref('mini-add')
async function addQuestion() {
const res = await client.AddScenarioQuestion({
await client.AddScenarioQuestion({
ID: scenario.value.ID,
question: {
code: newQuestionCode.value,
@@ -471,10 +418,6 @@ async function addQuestion() {
answer: newQuestionAnswer.value,
},
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
newQuestionCode.value = ''
@@ -491,7 +434,7 @@ async function cancelAddQuestion() {
}
async function updateQuestion(question: EditableQuestion) {
const res = await client.UpdateScenarioQuestion({
await client.UpdateScenarioQuestion({
ID: scenario.value.ID,
code: question.oldCode,
question: {
@@ -500,10 +443,6 @@ async function updateQuestion(question: EditableQuestion) {
answer: question.answer,
},
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
question.mode = 'show-editor'
@@ -516,14 +455,10 @@ async function cancelUpdateQuestion(question: EditableQuestion) {
}
async function deleteQuestion(question: EditableQuestion) {
const res = await client.DeleteScenarioQuestion({
await client.DeleteScenarioQuestion({
ID: scenario.value.ID,
code: question.oldCode,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
}
@@ -553,17 +488,13 @@ async function updateIntro() {
audio = toRawFilename(intro.value.audio)
}
const res = await client.UpdateScenarioIntro({
await client.UpdateScenarioIntro({
ID: scenario.value.ID,
introduction: {
text: intro.value.text,
audio: audio,
},
})
if (res.error != '') {
message.error(res.error!)
return
}
await getScenario(Number(scenarioId))
}
@@ -585,11 +516,7 @@ async function updateBackground(remove = false) {
}
background = uploaded.filename
}
const res = await client.UpdateScenarioBackground({ ID: scenario.value.ID, background })
if (res.error) {
message.error(res.error)
return
}
await client.UpdateScenarioBackground({ ID: scenario.value.ID, background })
await getScenario(Number(scenarioId))
backgroundFiles.value = []
} catch {
+12 -12
View File
@@ -39,18 +39,22 @@ const importFileList = ref<UploadFileInfo[]>([])
const isImporting = ref(false)
async function getScenarios() {
scenarios.value = []
const res = await client.GetMyScenarios({})
scenarios.value = res.scenarios!
try {
scenarios.value = []
const res = await client.GetMyScenarios({})
scenarios.value = res.scenarios!
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить сценарии')
}
}
async function addScenario(name: string) {
const res = await client.AddScenario({ name: name })
if (res.error != '') {
message.error(res.error!)
return
try {
const res = await client.AddScenario({ name: name })
await toScenarioEditor(res.ID!)
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось создать сценарий')
}
await toScenarioEditor(res.ID!)
}
async function toScenarioEditor(id: number) {
@@ -70,10 +74,6 @@ async function importScenario() {
isImporting.value = true
try {
const res = await archiveClient.uploadScenarioArchive(file)
if (res.error) {
message.error(res.error)
return
}
message.success('Сценарий импортирован из архива')
resetImport()
await toScenarioEditor(res.ID!)
+17 -24
View File
@@ -100,9 +100,7 @@ function readSession() {
async function createSession() {
const res = await client.CreateScreenSession({})
if (res.error || !res.screenID || !res.accessToken) {
throw new Error(res.error || 'Не удалось создать сессию экрана')
}
if (!res.screenID || !res.accessToken) throw new Error('Не удалось создать сессию экрана')
screenId.value = res.screenID
accessToken.value = res.accessToken
saveSession()
@@ -112,7 +110,6 @@ async function loadState() {
if (!screenId.value || !accessToken.value) return
try {
const res = await client.GetScreenState({ screenID: screenId.value, accessToken: accessToken.value })
if (res.error) throw new Error(res.error)
state.value = res.state
syncTimer(state.value)
if (state.value?.gameID && state.value.mode === 'SCREEN_MODE_RESULTS') await loadResults()
@@ -124,23 +121,21 @@ async function loadState() {
async function loadResults() {
if (!screenId.value || !accessToken.value) return
const res = await client.GetScreenResults({ screenID: screenId.value, accessToken: accessToken.value })
if (res.error == '') {
resultQuestions.value = res.questions || []
resultTeams.value = res.teams || []
if (!resultsScrollStarted) {
resultsScrollStarted = true
await nextTick()
const container = resultsContainer.value
if (container) {
container.scrollTop = container.scrollHeight
resultsScrollTimer = window.setInterval(() => {
container.scrollTop = Math.max(0, container.scrollTop - 32)
if (container.scrollTop === 0 && resultsScrollTimer != null) {
window.clearInterval(resultsScrollTimer)
resultsScrollTimer = undefined
}
}, 1000)
}
resultQuestions.value = res.questions || []
resultTeams.value = res.teams || []
if (!resultsScrollStarted) {
resultsScrollStarted = true
await nextTick()
const container = resultsContainer.value
if (container) {
container.scrollTop = container.scrollHeight
resultsScrollTimer = window.setInterval(() => {
container.scrollTop = Math.max(0, container.scrollTop - 32)
if (container.scrollTop === 0 && resultsScrollTimer != null) {
window.clearInterval(resultsScrollTimer)
resultsScrollTimer = undefined
}
}, 1000)
}
}
}
@@ -148,7 +143,6 @@ async function loadResults() {
async function loadGames() {
try {
const res = await client.GetGames({})
if (res.error) throw new Error(res.error)
games.value = res.games || []
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры')
@@ -183,12 +177,11 @@ async function bind() {
if (!selectedGameId.value || !route.query.screenID || !route.query.accessToken) return
binding.value = true
try {
const res = await client.BindScreen({
await client.BindScreen({
screenID: String(route.query.screenID),
accessToken: String(route.query.accessToken),
gameID: selectedGameId.value,
})
if (res.error) throw new Error(res.error)
bindSuccess.value = true
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось привязать экран')
+4 -29
View File
@@ -74,11 +74,6 @@ async function getStory() {
ID: Number(teamId),
password: password as string,
})
if (res.error != '') {
message.error(res.error!)
return
}
game.value = res.game
const wasAtBottom = isAtBottom()
@@ -121,15 +116,11 @@ getStory()
getAnswers()
async function addAction(newCode: string) {
const res = await client.AddTeamAction({
await client.AddTeamAction({
ID: Number(teamId),
password: password as string,
code: newCode,
})
if (res.error != '') {
message.error(res.error!)
return
}
await getStory()
code.value = ''
@@ -157,10 +148,6 @@ async function getAnswers() {
ID: Number(teamId),
password: password as string,
})
if (res.error != '') {
message.error(res.error!)
return
}
const next: Record<string, string> = {}
for (const answer of res.answers || []) {
next[answer.questionCode || ''] = answer.answer || ''
@@ -169,7 +156,7 @@ async function getAnswers() {
}
async function submitAnswers() {
const res = await client.SubmitTeamAnswers({
await client.SubmitTeamAnswers({
ID: Number(teamId),
password: password as string,
answers: (story.value.questions || []).map((question) => ({
@@ -177,10 +164,6 @@ async function submitAnswers() {
answer: answers.value[question.code || ''] || '',
})),
})
if (res.error != '') {
message.error(res.error!)
return
}
message.success('Ответы сохранены')
await getAnswers()
}
@@ -230,7 +213,7 @@ async function submitReview() {
return
}
reviewLoading.value = true
const res = await client.CreateGameReview({
await client.CreateGameReview({
gameID: Number(game.value?.ID),
teamID: Number(teamId),
password: password as string,
@@ -238,23 +221,15 @@ async function submitReview() {
text: reviewText.value.trim(),
})
reviewLoading.value = false
if (res.error != '') {
message.error(res.error!)
return
}
reviewSubmitted.value = true
localStorage.setItem(reviewKey, '1')
message.success('Спасибо за отзыв')
}
async function deleteLast() {
const res = await client.DeleteLastTeamAction({
await client.DeleteLastTeamAction({
ID: Number(teamId),
})
if (res.error != '') {
message.error(res.error!)
return
}
await getStory()
code.value = ''
}
+2 -2
View File
@@ -21,8 +21,8 @@ async function load() {
error.value = ''
try {
const result = await client.GetTicket({ token: token.value })
if (result.error || !result.ticket) {
error.value = result.error || 'Билет не найден'
if (!result.ticket) {
error.value = 'Билет не найден'
return
}
ticket.value = result.ticket
+2 -2
View File
@@ -39,7 +39,7 @@ async function findTicket() {
ticket.value = undefined
try {
const result = await client.GetTicket({ token: token.value })
if (result.error || !result.ticket) error.value = result.error || 'Билет не найден'
if (!result.ticket) error.value = 'Билет не найден'
else ticket.value = result.ticket
} catch (err) {
error.value = err instanceof Error ? err.message : 'Не удалось проверить билет'
@@ -54,7 +54,7 @@ async function acceptTicket() {
error.value = ''
try {
const result = await client.AcceptTicket({ token: token.value })
if (result.error || !result.ticket) error.value = result.error || 'Не удалось принять билет'
if (!result.ticket) error.value = 'Не удалось принять билет'
else {
ticket.value = result.ticket
message.success('Билет принят')
+15 -15
View File
@@ -46,31 +46,31 @@ async function changePassword() {
}
async function getUsers() {
const res = await client.GetUsers({})
if (res.error != '') {
message.error(res.error!)
return
try {
const res = await client.GetUsers({})
users.value = res.users!
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось загрузить пользователей')
}
users.value = res.users!
}
getUsers()
async function addRole(userId: number, role: string) {
const res = await client.AddUserRole({ ID: userId, role: role })
if (res.error != '') {
message.error(res.error!)
return
try {
await client.AddUserRole({ ID: userId, role: role })
await getUsers()
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось изменить роль')
}
await getUsers()
}
async function deleteRole(userId: number, role: string) {
const res = await client.DeleteUserRole({ ID: userId, role: role })
if (res.error != '') {
message.error(res.error!)
return
try {
await client.DeleteUserRole({ ID: userId, role: role })
await getUsers()
} catch (err) {
message.error(err instanceof Error ? err.message : 'Не удалось изменить роль')
}
await getUsers()
}
</script>