Files
evening_detective_frontend/dist/assets/ScreenView-Co5ch0GJ.js
T
2026-09-10 12:02:06 +07:00

1 line
5.2 KiB
JavaScript

import{B as e,D as t,Dt as n,E as r,H as i,Q as a,S as o,T as s,a as c,b as l,it as u,lt as d,p as f,v as p,x as m,y as h,z as g}from"./vue-router-bPs2Bq2h.js";import{t as _}from"./Card-CQdukemP.js";import{t as v}from"./Button-zUtycQAQ.js";import{t as y}from"./Select-B7yX2ha_.js";import{t as b}from"./use-message-BLMKznjM.js";import{t as ee}from"./QrCode-c3qDqmj4.js";import{i as x,n as S,t as C}from"./HeaderMenu-DYpd2XW2.js";import{t as w}from"./datetime-BJNH0M1T.js";var T={key:0,class:`screen-center`},E={key:1,class:`screen-page`},D={key:0,class:`screen-center`},O={key:0,class:`screen-center`},k={key:0,class:`screen-qr`},A={key:1,class:`screen-content`},j={key:0,class:`screen-message`},M={key:1,class:`screen-message`},N={key:2,class:`screen-cover`},te=[`src`],ne={class:`cover-label`},P=`evening-detective-screen-session`,F=S(t({__name:`ScreenPage`,setup(t){let S=x(),F=b(),I=c(),L=u(``),R=u(``),z=u(),B=u([]),V=u(null),H=u(!1),U=u(!0),W=u(!1),G=u(!1),K=null,q=p(()=>!!(I.query.screenId&&I.query.accessToken)),J=p(()=>{if(!L.value||!R.value)return``;let e=new URL(`/screen`,window.location.origin);return e.searchParams.set(`screenId`,L.value),e.searchParams.set(`accessToken`,R.value),e.toString()}),Y=p(()=>B.value.map(e=>({label:`${w(e.startAt).split(`,`)[0]||`дата не указана`} — ${e.name||`Игра ${e.id}`}`,value:e.id}))),X=p(()=>z.value?.mode||`SCREEN_MODE_COVER`);function re(){sessionStorage.setItem(P,JSON.stringify({screenId:L.value,accessToken:R.value}))}function ie(){try{let e=JSON.parse(sessionStorage.getItem(P)||`{}`);L.value=e.screenId||``,R.value=e.accessToken||``}catch{sessionStorage.removeItem(P)}}async function Z(){let e=await S.CreateScreenSession({});if(e.error||!e.screenId||!e.accessToken)throw Error(e.error||`Не удалось создать сессию экрана`);L.value=e.screenId,R.value=e.accessToken,re()}async function Q(){if(!(!L.value||!R.value))try{let e=await S.GetScreenState({screenId:L.value,accessToken:R.value});if(e.error)throw Error(e.error);z.value=e.state}catch(e){F.error(e instanceof Error?e.message:`Не удалось получить состояние экрана`)}}async function ae(){try{let e=await S.GetGames({});if(e.error)throw Error(e.error);B.value=e.games||[]}catch(e){F.error(e instanceof Error?e.message:`Не удалось загрузить игры`)}}async function oe(){if(!(!V.value||!I.query.screenId||!I.query.accessToken)){W.value=!0;try{let e=await S.BindScreen({screenId:String(I.query.screenId),accessToken:String(I.query.accessToken),gameId:V.value});if(e.error)throw Error(e.error);G.value=!0}catch(e){F.error(e instanceof Error?e.message:`Не удалось привязать экран`)}finally{W.value=!1}}}async function $(){try{await document.documentElement.requestFullscreen?.()}catch{F.warning(`Полноэкранный режим недоступен в этом браузере`)}H.value=!0}return g(async()=>{if(q.value){await ae(),U.value=!1;return}ie();try{(!L.value||!R.value)&&await Z(),await Q(),K=window.setInterval(Q,1e3)}catch(e){F.error(e instanceof Error?e.message:`Не удалось подготовить экран`)}finally{U.value=!1}}),e(()=>{K!=null&&window.clearInterval(K)}),(e,t)=>(i(),o(f,null,[q.value?(i(),o(`div`,T,[r(d(_),{class:`binding-card`,title:`Привязка экрана`},{default:a(()=>[G.value?(i(),o(f,{key:0},[t[1]||=h(`p`,null,`Экран привязан к игре.`,-1),t[2]||=h(`p`,null,`Можно закрыть эту страницу.`,-1)],64)):(i(),o(f,{key:1},[t[4]||=h(`p`,null,`Выберите игру, к которой привязать экран.`,-1),r(d(y),{value:V.value,"onUpdate:value":t[0]||=e=>V.value=e,options:Y.value,placeholder:`Игра`},null,8,[`value`,`options`]),r(d(v),{type:`primary`,loading:W.value,disabled:V.value==null,onClick:oe},{default:a(()=>[...t[3]||=[s(` Привязать `,-1)]]),_:1},8,[`loading`,`disabled`])],64))]),_:1})])):(i(),o(`div`,E,[U.value?(i(),o(`div`,D,`Подготовка экрана…`)):(i(),o(f,{key:1},[z.value?.gameId?(i(),o(`div`,A,[X.value===`SCREEN_MODE_INTRO_DONE`?(i(),o(`div`,j,`Успехов`)):X.value===`SCREEN_MODE_CONCLUSION_DONE`?(i(),o(`div`,M,`Спасибо за игру!`)):(i(),o(`div`,N,[z.value.coverImage?(i(),o(`img`,{key:0,src:z.value.coverImage,class:`cover-image`,alt:`Обложка дела`},null,8,te)):m(``,!0),h(`p`,ne,n(z.value.gameName||`Игра №${z.value.gameId}`),1),t[8]||=h(`p`,null,`Обложка дела`,-1),H.value?m(``,!0):(i(),l(d(v),{key:1,type:`primary`,onClick:$},{default:a(()=>[...t[7]||=[s(`Подготовить экран`,-1)]]),_:1}))]))])):(i(),o(`div`,O,[r(d(_),{class:`qr-card`,title:`Подключение экрана`},{default:a(()=>[J.value?(i(),o(`div`,k,[r(d(ee),{value:J.value,size:260,padding:0},null,8,[`value`])])):m(``,!0),t[6]||=h(`p`,null,`Отсканируйте QR телефоном организатора и выберите игру.`,-1),H.value?m(``,!0):(i(),l(d(v),{key:1,type:`primary`,onClick:$},{default:a(()=>[...t[5]||=[s(`Подготовить экран`,-1)]]),_:1}))]),_:1})]))],64))])),q.value?(i(),l(C,{key:2,active:`games`})):m(``,!0)],64))}}),[[`__scopeId`,`data-v-5b9ddcab`]]),I=t({__name:`ScreenView`,setup(e){return(e,t)=>(i(),l(F))}});export{I as default};