Files
prod/frontend/dist/assets/TicketScannerView-Dw-5tEPD.js
T
2026-10-05 00:25:39 +07:00

1 line
4.2 KiB
JavaScript

import{D as e,E as t,G as n,H as r,Ht as i,M as a,N as o,O as s,T as c,X as l,ct as u,j as d,q as f,u as p,w as m,wt as h,y as g,yt as _}from"./client-CT8bsOZT.js";import{t as v}from"./Card-C1X2ZnwV.js";import{t as y}from"./Button-1FFigNxK.js";import{t as b}from"./Input-xP5aZ3SD.js";import{t as x}from"./Alert-CCXXvV4A.js";import{n as S,r as C}from"./es-CbnhZj9z.js";import{t as w}from"./Space-CgIUNUNi.js";import{nt as T,t as E}from"./index-DNdwunR3.js";import{t as D}from"./HeaderMenu-BpBPHzqw.js";import{t as O}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as k}from"./datetime-BJNH0M1T.js";var A={class:`center-block-custom center-middle-block-custom scanner-page`},j={key:0},M={key:1},N={key:2},P=O(o({__name:`TicketScannerPage`,setup(o){let O=E(),P=p(),F=S(),I=C(),L=_(``),R=_(),z=_(``),B=_(!1),V=_(),H=_(!1),U,W=0,G=m(()=>{try{return new URL(L.value.trim()).pathname.match(/\/tickets\/([^/]+)/)?.[1]||``}catch{return L.value.trim()}});async function K(){if(!(!G.value||B.value)){B.value=!0,z.value=``,R.value=void 0;try{let e=await F.GetTicket({token:G.value});e.ticket?R.value=e.ticket:z.value=`Билет не найден`}catch(e){z.value=e instanceof Error?e.message:`Не удалось проверить билет`}finally{B.value=!1}}}async function q(){if(!(!G.value||B.value)){B.value=!0,z.value=``;try{let e=await F.AcceptTicket({token:G.value});e.ticket?(R.value=e.ticket,I.success(`Билет принят`)):z.value=`Не удалось принять билет`}catch(e){z.value=e instanceof Error?e.message:`Не удалось принять билет`}finally{B.value=!1}}}async function J(){let e=window.BarcodeDetector;if(!e||!navigator.mediaDevices?.getUserMedia){z.value=`Сканирование камерой не поддерживается. Введите ссылку вручную.`;return}try{U=await navigator.mediaDevices.getUserMedia({video:{facingMode:`environment`}}),H.value=!0,await r(),V.value&&(V.value.srcObject=U,await V.value.play());let t=new e,n=async()=>{if(!H.value||!V.value)return;let e=await t.detect(V.value);if(e[0]?.rawValue){L.value=e[0].rawValue,Y(),await K();return}W=requestAnimationFrame(n)};W=requestAnimationFrame(n)}catch{z.value=`Не удалось открыть камеру. Введите ссылку вручную.`}}function Y(){H.value=!1,cancelAnimationFrame(W),U?.getTracks().forEach(e=>e.stop()),U=void 0}return f(()=>{O.isAuthenticated||P.replace(`/login`)}),n(Y),(n,r)=>(l(),s(g,null,[a(D,{active:`games`}),c(`div`,A,[a(h(v),{title:`Проверка билета`,class:`scanner-card`},{default:u(()=>[a(h(w),{vertical:``},{default:u(()=>[H.value?(l(),s(`video`,{key:0,ref_key:`video`,ref:V,class:`scanner-video`,muted:``,playsinline:``},null,512)):e(``,!0),H.value?(l(),t(h(y),{key:2,onClick:Y},{default:u(()=>[...r[2]||=[d(`Остановить камеру`,-1)]]),_:1})):(l(),t(h(y),{key:1,onClick:J},{default:u(()=>[...r[1]||=[d(`Сканировать камерой`,-1)]]),_:1})),a(h(b),{value:L.value,"onUpdate:value":r[0]||=e=>L.value=e,placeholder:`Или вставьте ссылку на билет`,onKeyup:T(K,[`enter`])},null,8,[`value`]),a(h(y),{type:`primary`,loading:B.value,onClick:K},{default:u(()=>[...r[3]||=[d(`Проверить билет`,-1)]]),_:1},8,[`loading`]),z.value?(l(),t(h(x),{key:3,type:`error`},{default:u(()=>[d(i(z.value),1)]),_:1})):e(``,!0),R.value?(l(),s(g,{key:4},[a(h(x),{type:R.value.status===`active`?`success`:`warning`},{default:u(()=>[d(i(R.value.gameName),1),r[4]||=c(`br`,null,null,-1),d(` Статус: `+i(R.value.status===`active`?`действителен`:`уже использован`)+` `,1),R.value.usedBy?(l(),s(`span`,j,` · `+i(R.value.usedBy),1)):e(``,!0),R.value.usedAt?(l(),s(`br`,M)):e(``,!0),R.value.usedAt?(l(),s(`span`,N,`Использован: `+i(h(k)(R.value.usedAt)),1)):e(``,!0)]),_:1},8,[`type`]),R.value.status===`active`&&R.value.gameStatus!==`finish`?(l(),t(h(y),{key:0,type:`primary`,loading:B.value,onClick:q},{default:u(()=>[...r[5]||=[d(` Принять билет `,-1)]]),_:1},8,[`loading`])):e(``,!0)],64)):e(``,!0)]),_:1})]),_:1})])],64))}}),[[`__scopeId`,`data-v-42390d77`]]),F=o({__name:`TicketScannerView`,setup(e){return(e,n)=>(l(),t(P))}});export{F as default};