Files
evening_detective_frontend/dist/assets/ScreenView-Bct3o8E7.js
T
2026-09-10 12:19:55 +07:00

1 line
6.4 KiB
JavaScript

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