PageSourceSearch

https://sciaccainrete.it/build/assets/OrganizerTicketValidationModule.CVQqh8tS.js

js sciaccainrete.it collected 2026-10-02 01:59:41 UTC 9,854 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index.PNxng0gL.js","assets/_commonjsHelpers.Cpj98o6Y.js"])))=>i.map(i=>d[i]);
2import{a as K,l as W,r as i,b as X,o as Y,w as Z,d as r,f as n,g as e,e as C,t as d,H as ee,z as V,A as te,J as ae,I as se,F as le,i as oe,B as re,x as ne,_ as ie,C as de}from"./app.Btm2sMGp.js";const ce={class:"ticket-validator mx-auto w-full max-w-6xl space-y-6 px-4 sm:px-6 lg:px-0"},ue={class:"grid gap-6 xl:grid-cols-[minmax(0,1fr)_minmax(24rem,0.95fr)]"},me={class:"inline-flex cursor-pointer items-center gap-2 text-sm font-semibold text-slate-600"},ve={class:"flex items-center gap-3"},pe=["disabled"],fe={key:0,class:"animate-spin"},xe={key:1},be={class:"w-full rounded-2xl border border-dashed border-slate-300 bg-slate-50/80 p-5 shadow-sm"},we={class:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between"},_e={class:"flex flex-wrap items-center gap-3"},ge=["disabled"],ke={key:0,class:"animate-spin"},he={key:1},ye={key:1,class:"camera-select flex w-full min-w-0 flex-col gap-1 sm:w-auto"},Ce=["disabled"],Se=["value"],Qe={key:0,class:"mt-3 text-sm text-rose-600"},Ie={key:1,class:"rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-600"},Re={key:2,class:"space-y-5 rounded-2xl border border-slate-200 bg-white/95 p-5 shadow-sm"},ze={class:"flex flex-col justify-between gap-3 md:flex-row md:items-center"},Ee={class:"space-y-1"},Fe={class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},Le={class:"text-base font-semibold text-slate-900 md:text-lg"},Ve={class:"grid gap-4 md:grid-cols-2"},Me={class:"text-xs uppercase tracking-wide text-slate-400"},Te={class:"text-sm font-medium text-slate-700 md:text-base"},Ae={class:"text-sm font-medium text-slate-700 md:text-base"},He={class:"text-sm font-medium text-slate-700 break-words md:text-base"},Ue={class:"text-sm font-medium text-slate-700 md:text-base"},N="ticket-qr-reader",De={__name:"OrganizerTicketValidationModule",setup(Ne){const m=W({code:"",mark_used:!0}),I=i(!1),S=i(""),l=i(null),R=i("ticket"),k=i(""),F=i(null),w=i(!1),_=i(!1),v=i(""),c=i([]),p=i(""),z=i(!1);let g=null,E=null;const M=async()=>{if(E)return E;if(typeof window>"u")throw new Error("browser-unavailable");const t=await ie(()=>import("./index.PNxng0gL.js"),__vite__mapDeps([0,1])),a=t.Html5Qrcode??t.default?.Html5Qrcode??t.default,s=t.Html5QrcodeSupportedFormats??t.default?.Html5QrcodeSupportedFormats??null;if(!a)throw new Error("library-unavailable");return E={Html5Qrcode:a,Html5QrcodeSupportedFormats:s},E},h=async()=>{if(!g){_.value=!1;return}try{await g.stop()}catch(t){console.error(t)}try{await g.clear()}catch(t){console.error(t)}g=null,_.value=!1},T=async()=>{try{const{Html5Qrcode:t}=await M(),a=await t.getCameras();if(!Array.isArray(a)||a.length===0){c.value=[],p.value="",z.value=!1;return}const s=new Map;c.value=a.map((o,y)=>{const f=o.id??o.deviceId??o.cameraId??`camera-${y}`,b=(o.label??"").trim(),Q=b.toLowerCase(),x=`${b} ${f}`.toLowerCase();let u=b!==""?b:`Fotocamera ${y+1}`;const U=x.includes("back")||x.includes("rear")||x.includes("posteriore"),D=x.includes("front")||x.includes("anteriore")||x.includes("frontale");b===""?U?u="Fotocamera posteriore":D&&(u="Fotocamera anteriore"):U&&!Q.includes("posteriore")?u=`${b} (posteriore)`:D&&!Q.includes("anteriore")&&!Q.includes("frontale")&&(u=`${b} (anteriore)`);const L=s.get(u)??0;s.set(u,L+1);const G=L===0?u:`${u} (${L+1})`;return{id:f,label:G}}),c.value.some(o=>o.id===p.value)||(z.value=!1,p.value=c.value[0]?.id??"")}catch(t){console.error(t)}},A=async(t=null,a={})=>{const{skipCameraReload:s=!1}=a;if(!(w.value||_.value)){v.value="",w.value=!0;try{const{Html5Qrcode:o,Html5QrcodeSupportedFormats:y}=await M();if((!s||c.value.length===0)&&await T(),!Array.isArray(c.value)||c.value.length===0)throw new Error("no-camera");let f=t;f||(z.value&&p.value?f=p.value:f=c.value.find(u=>u.label.toLowerCase().includes("back")||u.label.toLowerCase().includes("posteriore"))?.id??p.value??c.value[0]?.id??null),f&&(p.value=f);const b=y&&y.QR_CODE?{formatsToSupport:[y.QR_CODE]}:void 0;g=new o(N,b);const Q=f?{deviceId:{exact:f}}:{facingMode:"environment"};await g.start(Q,{fps:10,qrbox:{width:250,height:250}},x=>{x&&(m.code=x,h().then(()=>{H()}))},()=>{}),_.value=!0}catch(o){console.error(o),o?.message==="no-camera"?v.value="Nessuna fotocamera rilevata. Collega un dispositivo o verifica i permessi del browser.":o?.message==="library-unavailable"||o?.message==="browser-unavailable"?v.value="La funzione di scansione non è disponibile su questo dispositivo.":v.value="Non è stato possibile avviare la fotocamera. Controlla i permessi del browser.",await h()}finally{w.value=!1}}},$=async t=>{if(!(!t||w.value||!g)){v.value="";try{await h(),await A(t,{skipCameraReload:!0})}catch(a){console.error(a),v.value="Non è stato possibile cambiare fotocamera. Riprova."}}},B=()=>{z.value=!0},q=()=>{m.code="",m.mark_used=!0,S.value="",l.value=null,R.value="ticket",k.value="",v.value="",h().catch(()=>{})},O=()=>{de(()=>{F.value?.scrollIntoView&&F.value.scrollIntoView({behavior:"smooth",block:"start"})})},j=t=>{if(!t)return"—";const a=new Date(t);
2return Number.isNaN(a.getTime())?"—":a.toLocaleString("it-IT")},P=t=>{switch(t){case"issued":return"Emesso";case"used":return"Utilizzato";case"refunded":return"Rimborsato";case"expired":return"Scaduto";case"canceled":return"Annullato";case"pending":return"In attesa";default:return t}},J=t=>{switch(t){case"used":return"bg-emerald-100 text-emerald-700";case"refunded":case"canceled":return"bg-rose-100 text-rose-700";case"expired":return"bg-slate-200 text-slate-600";default:return"bg-amber-100 text-amber-700"}},H=async()=>{if(m.code){I.value=!0,S.value="",l.value=null,k.value="",v.value="";try{const{data:t}=await ne.post("/api/frontend/modules/organizer/tickets/validate",{code:m.code,mark_used:m.mark_used});l.value=t?.ticket??t?.coupon??null,R.value=t?.type??(t?.coupon?"coupon":"ticket"),k.value=t?.message??"",k.value&&O()}catch(t){console.error(t),S.value=t.response?.data?.message??"Impossibile verificare il ticket."}finally{I.value=!1}}};return X(()=>{h().catch(()=>{})}),Y(()=>{T().catch(()=>{})}),Z(p,(t,a)=>{!t||t===a||!_.value||$(t).catch(()=>{})},{flush:"post"}),(t,a)=>(n(),r("div",ce,[a[11]||(a[11]=e("header",null,[e("h2",{class:"text-xl font-semibold text-slate-900 md:text-2xl"},"Verifica QR code"),e("p",{class:"text-sm text-slate-600"},"Controlla la validità di ticket e coupon inserendo il codice o scansionando il QR.")],-1)),k.value?(n(),r("div",{key:0,ref_key:"alertRef",ref:F,class:"sticky top-3 z-20 rounded-xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm text-emerald-700 shadow-sm md:static"},d(k.value),513)):C("",!0),e("div",ue,[e("form",{class:"w-full space-y-4 rounded-2xl border border-slate-200 bg-white/90 p-5 shadow-sm",onSubmit:ee(H,["prevent"])},[e("div",null,[a[4]||(a[4]=e("label",{class:"text-sm font-semibold text-slate-700"},"Codice ticket o UUID",-1)),V(e("input",{"onUpdate:modelValue":a[0]||(a[0]=s=>m.code=s),type:"text",required:"",class:"form-input",placeholder:"Incolla il codice del QR o l'UUID"},null,512),[[te,m.code]])]),e("label",me,[V(e("input",{"onUpdate:modelValue":a[1]||(a[1]=s=>m.mark_used=s),type:"checkbox",class:"form-checkbox"},null,512),[[ae,m.mark_used]]),a[5]||(a[5]=e("span",null,"Segna il ticket come utilizzato se valido",-1))]),e("div",ve,[e("button",{type:"submit",class:"btn-primary",disabled:I.value},[I.value?(n(),r("span",fe,"⏳")):(n(),r("span",xe,"Verifica ticket"))],8,pe),e("button",{type:"button",class:"btn-secondary",onClick:q},"Reset")])],32),e("section",be,[e("div",we,[a[7]||(a[7]=e("div",{class:"space-y-1"},[e("h3",{class:"text-sm font-semibold text-slate-700"},"Scansiona con la fotocamera"),e("p",{class:"text-xs text-slate-500"}," Usa la fotocamera del dispositivo per leggere rapidamente il QR code e compilare il campo in automatico. ")],-1)),e("div",_e,[e("button",{type:"button",class:"btn-secondary",disabled:w.value||_.value,onClick:a[2]||(a[2]=()=>A())},[w.value?(n(),r("span",ke,"⏳")):(n(),r("span",he,"Avvia scansione"))],8,ge),_.value?(n(),r("button",{key:0,type:"button",class:"btn-danger",onClick:h},"Ferma")):C("",!0),c.value.length?(n(),r("div",ye,[a[6]||(a[6]=e("label",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Fotocamera",-1)),V(e("select",{"onUpdate:modelValue":a[3]||(a[3]=s=>p.value=s),class:"form-select w-full max-w-full overflow-hidden text-ellipsis sm:min-w-[14rem]",disabled:w.value,onChange:B},[(n(!0),r(le,null,oe(c.value,s=>(n(),r("option",{key:s.id,value:s.id},d(s.label),9,Se))),128))],40,Ce),[[se,p.value]])])):C("",!0)])]),e("div",{class:"mt-4 overflow-hidden rounded-xl bg-slate-900/5"},[e("div",{id:N,class:"h-64 w-full"})]),v.value?(n(),r("p",Qe,d(v.value),1)):C("",!0)])]),S.value?(n(),r("p",Ie,d(S.value),1)):C("",!0),l.value?(n(),r("div",Re,[e("div",ze,[e("div",Ee,[e("p",Fe,d(R.value==="coupon"?"Coupon":"Ticket"),1),e("p",Le,d(l.value.uuid||l.value.code),1)]),e("span",{class:re([J(l.value.status),"rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide"])},d(P(l.value.status)),3)]),e("dl",Ve,[e("div",null,[e("dt",Me,d(R.value==="coupon"?"Campagna":"Evento"),1),e("dd",Te,d(l.value.event_title||"Evento non disponibile"),1)]),e("div",null,[a[8]||(a[8]=e("dt",{class:"text-xs uppercase tracking-wide text-slate-400"},"Intestatario",-1)),e("dd",Ae,d(l.value.holder_name||"—"),1)]),e("div",null,[a[9]||(a[9]=e("dt",{class:"text-xs uppercase tracking-wide text-slate-400"},"Email",-1)),e("dd",He,d(l.value.holder_email||"—"),1)]),e("div",null,[a[10]||(a[10]=e("dt",{class:"text-xs uppercase tracking-wide text-slate-400"},"Validato il",-1)),e("dd",Ue,d(l.value.used_at?j(l.value.used_at):"Non ancora validato"),1)])])])):C("",!0)]))}},Be=K(De,[["__scopeId","data-v-c8677c3d"]]);export{Be as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.