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
9.4 KiB
1 line
9.4 KiB
|
18 hours 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 y}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{i as b,o as x,r as S}from"./index-BLul_Qh8.js";import{n as C,t as w}from"./datetime-3T8f3S0H.js";import{n as T,t as E}from"./reservationStatus-DNE9Cq6e.js";import{n as D,t as O}from"./h5Http-BaUTUr0i.js";var ee={class:`m-scan`},k={class:`m-scan-head`},te={key:0,class:`m-scan-venue`},ne={class:`m-scan-stats`,"aria-label":`今日预约统计`},re={key:0,class:`m-scan-stats-loading`},ie={class:`m-scan-stat`},ae={class:`m-scan-stat-num`},oe={class:`m-scan-stat m-scan-stat--verified`},se={class:`m-scan-stat-num`},ce={class:`m-scan-main`},le=[`disabled`],ue={class:`cam-wrap`},de={key:0,class:`today-modal-summary`},A={key:1,class:`today-list`},fe={class:`today-row`},pe={class:`today-name`},me={class:`today-act`},he={class:`today-meta`},j=x(v({__name:`VerifyScan`,setup(v){let x=b(),j=S(),M=f(()=>j.path.startsWith(`/m/`)?`/m/verify/login`:`/h5/verify/login`),N=u(!1),P=u(!1),F=u(!1),I=u(null),L=u(null),R=null,z=u(``),B=u(``),V=u(null),H=u(!1),U=u(!1),ge=()=>{let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`},W=u([]),G=u(!1),K=u(null),q=f(()=>{if(K.value)return K.value;let e=0,t=0;for(let n of W.value)n.status!==`cancelled`&&(e+=1),n.status===`verified`&&(t+=1);return{total_orders:e,verified_orders:t}}),J=u(null),Y=f(()=>{let e=J.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 _e(){try{let{data:e}=await D.get(`/me`);J.value=e}catch{J.value=null}}function ve(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 X(){G.value=!0;try{let e=ge(),[t,n]=await Promise.allSettled([D.get(`/reservations`,{params:{status:`all`,start_date:e,end_date:e,date_field:`activity_day`}}),D.get(`/reservations/today-summary`)]);if(t.status===`rejected`)throw t.reason;let r=t.value.data;W.value=Array.isArray(r)?r:[],n.status===`fulfilled`?K.value=n.value.data:K.value=null}catch(t){e.error(t?.response?.data?.message??`加载今日报名失败`),W.value=[],K.value=null}finally{G.value=!1}}async function Z(t){let n=ve(t);if(!n){e.warning(`未能识别二维码内容`);return}B.value=n,H.value=!0,V.value=null;try{let{data:e}=await D.get(`/reservations/preview`,{params:{qr_token:n}});V.value=e,P.value=!0,$()}catch(t){let n=t?.response?.data?.message??`查询预约失败`;e.error(n)}finally{H.value=!1}}async function ye(){if(B.value){U.value=!0;try{let{data:t}=await D.post(`/reservations/verify`,{qr_token:B.value});e.success(t?.message??`核销成功`),V.value={reservation:t.reservation,can_verify:!1,verify_block_reason:null},await X()}catch(t){let n=t?.response?.data?.message??`核销失败`;e.error(n),B.value&&await Z(B.value)}finally{U.value=!1}}}async function be(){return!V.value||!V.value.can_verify?(Q(),!0):(await ye(),!1)}function Q(){P.value=!1,V.value=null,B.value=``}function $(){N.value=!1,R&&=(window.clearInterval(R),null),L.value&&=(L.value.getTracks().forEach(e=>e.stop()),null)}async function xe(){if(!localStorage.getItem(`szkp_h5_verify_token`)){x.replace(M.value);return}if(!navigator.mediaDevices?.getUserMedia){e.warning(`当前环境不支持摄像头,请使用支持摄像头的手机浏览器`);return}z.value=``,N.value=!0;try{L.value=await navigator.mediaDevices.getUserMedia({video:{facingMode:`environment`},audio:!1}),await new Promise(e=>requestAnimationFrame(e)),I.value&&(I.value.srcObject=L.value,await I.value.play()),Se()}catch{e.error(`无法打开摄像头,请检查权限设置`),$()}}function Se(){let t=window.BarcodeDetector;i
|