generated from VLADIMIR/template_frontend
1 line
4.6 KiB
JavaScript
1 line
4.6 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-BJm6ZyX4.js";import{t as v}from"./Button-CQhak1JU.js";import{t as y}from"./Select-DikcSvU3.js";import{t as b}from"./use-message-uEq7LuSg.js";import{t as x}from"./QrCode-c3qDqmj4.js";import{i as S,n as C,t as w}from"./HeaderMenu-CNP1EQA-.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:1,class:`screen-center`},A=`evening-detective-screen-session`,j=C(t({__name:`ScreenPage`,setup(t){let C=S(),j=b(),M=c(),N=u(``),P=u(``),F=u(),I=u([]),L=u(null),R=u(!1),z=u(!0),B=u(!1),V=u(!1),H=null,U=p(()=>!!(M.query.screenId&&M.query.accessToken)),W=p(()=>{if(!N.value||!P.value)return``;let e=new URL(`/screen`,window.location.origin);return e.searchParams.set(`screenId`,N.value),e.searchParams.set(`accessToken`,P.value),e.toString()}),G=p(()=>I.value.map(e=>({label:e.name||`Игра ${e.id}`,value:e.id})));function K(){sessionStorage.setItem(A,JSON.stringify({screenId:N.value,accessToken:P.value}))}function q(){try{let e=JSON.parse(sessionStorage.getItem(A)||`{}`);N.value=e.screenId||``,P.value=e.accessToken||``}catch{sessionStorage.removeItem(A)}}async function J(){let e=await C.CreateScreenSession({});if(e.error||!e.screenId||!e.accessToken)throw Error(e.error||`Не удалось создать сессию экрана`);N.value=e.screenId,P.value=e.accessToken,K()}async function Y(){if(!(!N.value||!P.value))try{let e=await C.GetScreenState({screenId:N.value,accessToken:P.value});if(e.error)throw Error(e.error);F.value=e.state}catch(e){j.error(e instanceof Error?e.message:`Не удалось получить состояние экрана`)}}async function X(){try{let e=await C.GetGames({});if(e.error)throw Error(e.error);I.value=e.games||[]}catch(e){j.error(e instanceof Error?e.message:`Не удалось загрузить игры`)}}async function Z(){if(!(!L.value||!M.query.screenId||!M.query.accessToken)){B.value=!0;try{let e=await C.BindScreen({screenId:String(M.query.screenId),accessToken:String(M.query.accessToken),gameId:L.value});if(e.error)throw Error(e.error);V.value=!0}catch(e){j.error(e instanceof Error?e.message:`Не удалось привязать экран`)}finally{B.value=!1}}}async function Q(){try{await document.documentElement.requestFullscreen?.()}catch{j.warning(`Полноэкранный режим недоступен в этом браузере`)}R.value=!0}return g(async()=>{if(U.value){await X(),z.value=!1;return}q();try{(!N.value||!P.value)&&await J(),await Y(),H=window.setInterval(Y,1e3)}catch(e){j.error(e instanceof Error?e.message:`Не удалось подготовить экран`)}finally{z.value=!1}}),e(()=>{H!=null&&window.clearInterval(H)}),(e,t)=>(i(),o(f,null,[U.value?(i(),o(`div`,T,[r(d(_),{class:`binding-card`,title:`Привязка экрана`},{default:a(()=>[V.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:L.value,"onUpdate:value":t[0]||=e=>L.value=e,options:G.value,placeholder:`Игра`},null,8,[`value`,`options`]),r(d(v),{type:`primary`,loading:B.value,disabled:L.value==null,onClick:Z},{default:a(()=>[...t[3]||=[s(` Привязать `,-1)]]),_:1},8,[`loading`,`disabled`])],64))]),_:1})])):(i(),o(`div`,E,[z.value?(i(),o(`div`,D,`Подготовка экрана…`)):(i(),o(f,{key:1},[F.value?.gameId?(i(),o(`div`,k,[r(d(_),{class:`ready-card`},{default:a(()=>[t[8]||=h(`p`,{class:`ready-title`},`Экран подключён`,-1),h(`p`,null,`Игра №`+n(F.value.gameId),1),R.value?m(``,!0):(i(),l(d(v),{key:0,type:`primary`,onClick:Q},{default:a(()=>[...t[7]||=[s(`Подготовить экран`,-1)]]),_:1}))]),_:1})])):(i(),o(`div`,O,[r(d(_),{class:`qr-card`,title:`Подключение экрана`},{default:a(()=>[W.value?(i(),l(d(x),{key:0,value:W.value,size:260},null,8,[`value`])):m(``,!0),t[6]||=h(`p`,null,`Отсканируйте QR телефоном организатора и выберите игру.`,-1),R.value?m(``,!0):(i(),l(d(v),{key:1,type:`primary`,onClick:Q},{default:a(()=>[...t[5]||=[s(`Подготовить экран`,-1)]]),_:1}))]),_:1})]))],64))])),U.value?(i(),l(w,{key:2,active:`games`})):m(``,!0)],64))}}),[[`__scopeId`,`data-v-8f41c97f`]]),M=t({__name:`ScreenView`,setup(e){return(e,t)=>(i(),l(j))}});export{M as default}; |