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