You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
10 KiB

2 weeks ago
import{n as e}from"./axios-CiYFffbI.js";import{A as t,I as n,N as r,V as i,Y as a,_ as o,d as s,f as c,i as l,it as u,kt as d,l as f,p,q as m,u as h,ut as g,v as _,y as v,z as ee}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{i as y,o as b,r as x}from"./index-YPNNx9fb.js";import{n as S,t as C}from"./datetime-3T8f3S0H.js";import{n as w,t as T}from"./reservationStatus-DNE9Cq6e.js";import{n as E,t as D}from"./h5Http-FFo2bPQ0.js";function O(){if(typeof navigator>`u`)return null;let e=navigator.mediaDevices;if(e?.getUserMedia)return t=>e.getUserMedia(t);let t=navigator,n=t.getUserMedia||t.webkitGetUserMedia||t.mozGetUserMedia||t.msGetUserMedia;return n?e=>new Promise((t,r)=>{try{n.call(navigator,e,t,r)}catch(e){r(e)}}):null}function te(){return typeof window>`u`?`no-api`:!window.isSecureContext&&window.location.hostname!==`localhost`&&window.location.hostname!==`127.0.0.1`?`insecure`:O()?null:`no-api`}var ne={class:`m-scan`},re={class:`m-scan-head`},k={key:0,class:`m-scan-venue`},ie={class:`m-scan-stats`,"aria-label":`今日预约统计`},ae={key:0,class:`m-scan-stats-loading`},oe={class:`m-scan-stat`},se={class:`m-scan-stat-num`},ce={class:`m-scan-stat m-scan-stat--verified`},le={class:`m-scan-stat-num`},ue={class:`m-scan-main`},de=[`disabled`],fe={class:`cam-wrap`},pe={key:0,class:`today-modal-summary`},me={key:1,class:`today-list`},he={class:`today-row`},ge={class:`today-name`},_e={class:`today-act`},ve={class:`today-meta`},A=b(v({__name:`VerifyScan`,setup(v){let b=y(),A=x(),j=f(()=>A.path.startsWith(`/m/`)?`/m/verify/login`:`/h5/verify/login`),M=u(!1),N=u(!1),P=u(!1),F=u(null),I=u(null),L=null,R=u(``),z=u(``),B=u(null),V=u(!1),H=u(!1),ye=()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`},U=u([]),W=u(!1),G=u(null),K=f(()=>{if(G.value)return G.value;let e=0,t=0;for(let n of U.value)n.status!==`cancelled`&&(e+=1),n.status===`verified`&&(t+=1);return{total_orders:e,verified_orders:t}}),q=u(null),J=f(()=>{let e=q.value;if(!e)return``;let t=e.venues??[];if(e.role===`super_admin`&&t.length===0)return`全部场馆`;let n=t.map(e=>e.name).filter(Boolean);return n.length?n.join(``):`未绑定场馆`});async function be(){try{let{data:e}=await E.get(`/me`);q.value=e}catch{q.value=null}}function xe(e){let t=e.trim();if(!t)return``;let n=t.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);if(n)return n[0];try{let e=new URL(t,window.location.origin),n=e.searchParams.get(`token`)||e.searchParams.get(`qr_token`)||e.searchParams.get(`t`);if(n)return n.trim()}catch{}return t}async function Y(){W.value=!0;try{let e=ye(),[t,n]=await Promise.allSettled([E.get(`/reservations`,{params:{status:`all`,start_date:e,end_date:e,date_field:`activity_day`}}),E.get(`/reservations/today-summary`)]);if(t.status===`rejected`)throw t.reason;let r=t.value.data;U.value=Array.isArray(r)?r:[],n.status===`fulfilled`?G.value=n.value.data:G.value=null}catch(t){e.error(t?.response?.data?.message??`加载今日报名失败`),U.value=[],G.value=null}finally{W.value=!1}}async function X(t){let n=xe(t);if(!n){e.warning(`未能识别二维码内容`);return}z.value=n,V.value=!0,B.value=null;try{let{data:e}=await E.get(`/reservations/preview`,{params:{qr_token:n}});B.value=e,N.value=!0,$()}catch(t){let n=t?.response?.data?.message??`查询预约失败`;e.error(n)}finally{V.value=!1}}async function Se(){if(z.value){H.value=!0;try{let{data:t}=await E.post(`/reservations/verify`,{qr_token:z.value});e.success(t?.message??`核销成功`),B.value={reservation:t.reservation,can_verify:!1,verify_block_reason:null},await Y()}catch(t){let n=t?.response?.data?.message??`核销失败`;e.error(n),z.value&&await X(z.value)}finally{H.value=!1}}}async function Z(){return!B.value||!B.value.can_verify?(Q(),!0):(await Se(),!1)}function Q(){N.value=!1,B.value=null,z.value=``}function $(){M.value=!1,L&&=(window.clearInterval(L),null),I.value&&=(I.value.getTracks().forEach(e=>e.stop()),null)}async function Ce(){if(!localStorage.getItem(`szkp_h5_verify_token`)){b.replace(j.value);return}