Files
evening_detective_frontend/dist/assets/ScreenView-CRAU4Jpv.js
T
2026-09-10 12:07:58 +07:00

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