Files
prod/frontend/dist/assets/TicketScannerView-D9gx2edM.js
T
2026-10-04 23:08:13 +07:00

1 line
4.2 KiB
JavaScript

import{Ct as e,D as t,E as n,G as r,H as i,M as a,N as o,O as s,T as c,Vt as l,X as u,j as d,q as f,st as p,u as m,vt as h,w as g,y as _}from"./client-CmW03vy2.js";import{t as v}from"./Card-DtY5Kv4W.js";import{t as y}from"./Button-DuLGZXNV.js";import{t as b}from"./Input-QIg_CI3m.js";import{t as x}from"./Alert-Byy2NOEo.js";import{n as S,r as C}from"./es-BkmQwXAV.js";import{t as w}from"./Space-8uRJkrEf.js";import{nt as T,t as E}from"./index-DVruj17R.js";import{t as D}from"./HeaderMenu-CYpYLGGt.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=m(),F=S(),I=C(),L=h(``),R=h(),z=h(``),B=h(!1),V=h(),H=h(!1),U,W=0,G=g(()=>{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 i(),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`)}),r(Y),(r,i)=>(u(),s(_,null,[a(D,{active:`games`}),c(`div`,A,[a(e(v),{title:`Проверка билета`,class:`scanner-card`},{default:p(()=>[a(e(w),{vertical:``},{default:p(()=>[H.value?(u(),s(`video`,{key:0,ref_key:`video`,ref:V,class:`scanner-video`,muted:``,playsinline:``},null,512)):t(``,!0),H.value?(u(),n(e(y),{key:2,onClick:Y},{default:p(()=>[...i[2]||=[d(`Остановить камеру`,-1)]]),_:1})):(u(),n(e(y),{key:1,onClick:J},{default:p(()=>[...i[1]||=[d(`Сканировать камерой`,-1)]]),_:1})),a(e(b),{value:L.value,"onUpdate:value":i[0]||=e=>L.value=e,placeholder:`Или вставьте ссылку на билет`,onKeyup:T(K,[`enter`])},null,8,[`value`]),a(e(y),{type:`primary`,loading:B.value,onClick:K},{default:p(()=>[...i[3]||=[d(`Проверить билет`,-1)]]),_:1},8,[`loading`]),z.value?(u(),n(e(x),{key:3,type:`error`},{default:p(()=>[d(l(z.value),1)]),_:1})):t(``,!0),R.value?(u(),s(_,{key:4},[a(e(x),{type:R.value.status===`active`?`success`:`warning`},{default:p(()=>[d(l(R.value.gameName),1),i[4]||=c(`br`,null,null,-1),d(` Статус: `+l(R.value.status===`active`?`действителен`:`уже использован`)+` `,1),R.value.usedBy?(u(),s(`span`,j,` · `+l(R.value.usedBy),1)):t(``,!0),R.value.usedAt?(u(),s(`br`,M)):t(``,!0),R.value.usedAt?(u(),s(`span`,N,`Использован: `+l(e(k)(R.value.usedAt)),1)):t(``,!0)]),_:1},8,[`type`]),R.value.status===`active`&&R.value.gameStatus!==`finish`?(u(),n(e(y),{key:0,type:`primary`,loading:B.value,onClick:q},{default:p(()=>[...i[5]||=[d(` Принять билет `,-1)]]),_:1},8,[`loading`])):t(``,!0)],64)):t(``,!0)]),_:1})]),_:1})])],64))}}),[[`__scopeId`,`data-v-42390d77`]]),F=o({__name:`TicketScannerView`,setup(e){return(e,t)=>(u(),n(P))}});export{F as default};