1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-qr-DtLopZEl.js","assets/vendor-misc-n0lGrltt.js"])))=>i.map(i=>d[i]); 2import{b as oe,u as de,n as $,d as ce,B as c,i as me,N,e as D,k as ue,D as ge,M as he,F as ke,j as be,o as I,a as q,h as O,f as fe,_ as pe}from"./index-Cmnwd2_o.js";import{r as o,R as t,aQ as we,T as ve,e as Ee,a2 as ye,bH as V,O as _e,b4 as Ae,bI as U,g as Ce,a4 as xe,ak as Ne}from"./vendor-react-CUEPAZCr.js";import{d as De,p as ze}from"./datum-BfmOgwZ0.js";import"./vendor-misc-n0lGrltt.js";const k={todo:"/members?card=todo",digital:"/members?card=digital",sent:"/members?card=sent"},z=[{id:"62x29",label:"62 à 29 mm (Brother DK-11209)",w:62,h:29},{id:"29x29",label:"29 à 29 mm quadratisch (Brother DK-11221)",w:29,h:29},{id:"54x25",label:"54 à 25 mm (Dymo 11352)",w:54,h:25},{id:"62x100",label:"62 à 100 mm (Brother DK-11202)",w:62,h:100}],Z=n=>Math.max(10,Math.min(n.w,n.h)-4),Te={aktiv:"Aktives Mitglied",passiv:"Passives Mitglied",antrag:"Antrag noch offen",gekuendigt:"Mitgliedschaft gekündigt",ausgetreten:"Ausgetreten",abgelehnt:"Antrag abgelehnt"},Y=n=>n.status==="aktiv"||n.status==="passiv";function X(n){return Y(n)?{tone:"ok",label:"Gültig"}:n.status==="antrag"?{tone:"warn",label:"Noch nicht gültig"}:{tone:"err",label:"Abgelaufen"}}const K=(n,r,s)=>`${n} ${n===1?r:s}`,P=n=>{const r=ze(n);return r?r.toLocaleDateString("de-DE"):null};function Be(n){const r=P(n);if(!r)return null;const s=De(n);return s==null||s>0?r:s===0?`${r} · heute`:s===-1?`${r} · gestern`:`${r} · vor ${s*-1} Tagen`}function J(n){const r=[n.zip,n.city].filter(Boolean).join(" ");return[n.street,r].filter(Boolean).join(", ")}const R=n=>Array.isArray(n)?n:[];function Ke(){const n=oe(),{hasPermission:r,user:s}=de(),T=(s==null?void 0:s.role)==="admin"||r("mitglieder.edit"),b=$(k.todo),f=$(k.digital),p=$(k.sent),g=o.useMemo(()=>R(b.data),[b.data]),h=o.useMemo(()=>R(f.data),[f.data]),w=o.useMemo(()=>R(p.data),[p.data]),[v,ee]=o.useState("todo"),[d,_]=o.useState(null),[a,E]=o.useState(null),[i,j]=o.useState(null),[m,te]=o.useState(z[0]),B=o.useMemo(()=>h.filter(e=>!e.card_issued_at),[h]),A=o.useMemo(()=>w.filter(e=>!Y(e)),[w]),ne=b.error||f.error||p.error,G=b.loading||f.loading||p.loading,Q=()=>me(k.todo,k.digital,k.sent),C=async(e,l,S)=>{var x;_(e.id);try{const y=await q.post(`/members/${e.id}/${l}`);Q(),n.ok(((x=y.data)==null?void 0:x.message)||S)}catch(y){n.fromError(y)}finally{_(null),E(null)}},W=async e=>{_(e.id);try{const l=await q.post(`/members/${e.id}/card-code`),{default:S}=await pe(async()=>{const{default:y}=await import("./vendor-qr-DtLopZEl.js").then(le=>le.b);return{default:y}},__vite__mapDeps([0,1])),x=await S.toDataURL(l.data.code,{margin:0,width:512,errorCorrectionLevel:"M"});j({...l.data,qr:x})}catch(l){n.fromError(l,"Der QR-Code konnte nicht erzeugt werden.")}finally{_(null)}},ae=()=>{if(!i)return;const e=document.createElement("a");e.href=i.qr,e.download=`ausweis-${i.member_no||i.name}.png`,e.click()},M={key:"name",header:"Mitglied",strong:!0,width:"26%",value:e=>[e.last_name,e.first_name].filter(Boolean).join(", "),render:e=>[e.first_name,e.last_name].filter(Boolean).join(" ")||t.createElement("span",{className:"a-muted"},"Ohne Namen")},L={key:"member_no",header:"Nr.",width:100,numeric:!0,value:e=>e.member_no||"",render:e=>e.member_no||t.createElement("span",{className:"a-muted"},"â")},F={key:"gueltig",header:"Gültigkeit",width:150,value:e=>X(e).label,render:e=>{const l=X(e);return t.createElement(O,{tone:l.tone,title:Te[e.status]||e.status},l.label)}},H={key:"card_verified_at",header:"Zuletzt geprüft",width:175,hideBelow:"md",value:e=>e.card_verified_at||"",render:e=>Be(e.card_verified_at)||t.createElement("span",{className:"a-muted"},"noch nie")},re=[M,L,{key:"anschrift",header:"Anschrift",hideBelow:"md",value:e=>J(e),render:e=>J(e)||t.createElement("span",{className:"a-muted"},"Keine Anschrift hinterlegt")},T&&{key:"__act",header:"",sortable:!1,export:!1,width:250,render:e=>t.createElement("div",{className:"a-row",style:{gap:6,flexWrap:"nowrap",justifyContent:"flex-end"}},t.createElement(c,{size:"sm",icon:U,disabled:d===e.id,onClick:()=>W(e)},"Etikett"),t.createElement(c,{size:"sm",variant:"primary",icon:V,disabled:d===e.id,onClick:()=>C(e,"card-sent","Ausweisversand vermerkt")},d===e.id&&t.createElement(fe,null),"Versendet"))}
2].filter(Boolean),ie=[M,L,F,{key:"card_issued_at",header:"Link ausgestellt",width:165,value:e=>e.card_issued_at||"",render:e=>P(e.card_issued_at)||t.createElement(O,{tone:"warn"},"noch nicht versendet")},H,T&&{key:"__act",header:"",sortable:!1,export:!1,width:210,render:e=>t.createElement("div",{className:"a-row",style:{gap:6,flexWrap:"nowrap",justifyContent:"flex-end"}},t.createElement(c,{size:"sm",icon:Ce,disabled:d===e.id,onClick:()=>E({m:e,art:"resend"})},"Link senden"),t.createElement(c,{size:"sm",variant:"ghost",icon:xe,title:"Ausweis sperren","aria-label":"Ausweis sperren",style:{color:"var(--a-err)"},disabled:d===e.id,onClick:()=>E({m:e,art:"revoke"})}))}].filter(Boolean),se=[M,L,F,{key:"card_sent_at",header:"Versendet",width:175,value:e=>e.card_sent_at||"",render:e=>t.createElement("span",null,P(e.card_sent_at)||"â",e.card_sent_by&&t.createElement("span",{className:"a-muted"}," · ",e.card_sent_by))},H,T&&{key:"__act",header:"",sortable:!1,export:!1,width:220,render:e=>t.createElement("div",{className:"a-row",style:{gap:6,flexWrap:"nowrap",justifyContent:"flex-end"}},t.createElement(c,{size:"sm",icon:U,disabled:d===e.id,onClick:()=>W(e)},"Etikett"),t.createElement(c,{size:"sm",variant:"ghost",icon:Ne,disabled:d===e.id,title:"Wieder als offen führen","aria-label":"Wieder als offen führen",onClick:()=>C(e,"card-open","Ausweis wieder als offen markiert")}))}].filter(Boolean),u={todo:{columns:re,rows:g,error:b.error,exportName:"ausweise-zu-verschicken",emptyTitle:"Alle Karten sind verschickt",emptyHint:"Hier erscheint jedes Mitglied, das den Ausweis als gedruckte Karte gewählt hat, sobald der Antrag angenommen ist.",search:"Name, Nummer, Anschriftâ¦"},digital:{columns:ie,rows:h,error:f.error,exportName:"ausweise-digital",emptyTitle:"Keine digitalen Ausweise",emptyHint:"Digitale Ausweise entstehen, sobald ein Mitglied mit dieser Ausweisart aufgenommen wird.",search:"Name, Nummerâ¦"},sent:{columns:se,rows:w,error:p.error,exportName:"ausweise-versendet",emptyTitle:"Noch keine Karte versendet",emptyHint:"Sobald eine gedruckte Karte als versendet vermerkt wird, steht sie hier als Nachweis.",search:"Name, Nummerâ¦"}}[v];return t.createElement(t.Fragment,null,t.createElement(ce,{title:"Mitgliedsausweise",subtitle:G?"Wird geladenâ¦":`${K(h.length,"digitaler Ausweis","digitale Ausweise")} · ${K(g.length,"Karte","Karten")} zu verschicken`},t.createElement(c,{icon:we,onClick:Q},"Aktualisieren")),ne&&t.createElement(N,{tone:"err",style:{marginBottom:16}},"Die Ausweislisten konnten nicht geladen werden. Bitte die Seite aktualisieren â bleibt es dabei, fehlt vermutlich die Berechtigung âMitglieder ansehenâ."),A.length>0&&t.createElement(N,{tone:"warn",style:{marginBottom:16}},t.createElement(ve,{size:16,strokeWidth:1.9,"aria-hidden":"true",style:{flexShrink:0,marginTop:1}}),t.createElement("span",null,t.createElement("strong",null,K(A.length,"versendete Karte","versendete Karten"))," gehören zu beendeten Mitgliedschaften. Diese Ausweise sind abgelaufen: der QR-Code wird beim Prüfen abgewiesen. Die Karte selbst lässt sich nicht einziehen â im Register âVersendetâ sind sie mit âAbgelaufenâ gekennzeichnet.")),t.createElement("div",{className:"a-grid a-grid--4",style:{marginBottom:20}},t.createElement(D,{label:"Digitale Ausweise",value:h.length,icon:Ee,hint:"Apple und Google Wallet"}),t.createElement(D,{label:"Karten zu verschicken",value:g.length,icon:ye,hint:g.length?"Etikett drucken und abhaken":"nichts offen",tone:g.length?"signal":void 0}),t.createElement(D,{label:"Karten versendet",value:w.length,icon:V,hint:A.length?`davon ${A.length} abgelaufen`:"alle gültig"}),t.createElement(D,{label:"Ohne Ausweis-Link",value:B.length,hint:B.length?"Link wurde nie versendet":"alle versorgt",tone:B.length?"signal":void 0})),t.createElement(ue,{value:v,onChange:ee,items:[{value:"todo",label:"Zu verschicken",count:g.length},{value:"digital",label:"Digitale Ausweise",count:h.length},{value:"sent",label:"Versendet",count:w.length}]}),v==="digital"&&t.createElement(N,{tone:"info",style:{margin:"14px 0"}},"Der Ausweis-Link ist persönlich. Ein erneut versendeter Link macht den bisherigen ungültig; ein gesperrter Ausweis verliert zusätzlich seinen QR-Code und muss neu ausgegeben werden."),t.createElement("div",{style:{marginTop:v==="digital"?0:14}},t.createElement(ge,{key:v,columns:u.columns,rows:u.rows,loading:G,error:u.error?"Diese Liste konnte nicht geladen werden.":null,pageSize:25,searchPlaceholder:u.search,exportName:u.exportName,emptyTitle:u.emptyTitle,emptyHint:u.emptyHint,initialSort:{key:"name",dir:"asc"}})),t.createElement(he,{open:!!i,onClose:()=>j(null),title:"Etikett für die gedruckte Karte",footer:t.createElement(t.Fragment,null,t.createElement(c,{icon:_e,onClick:ae},"QR als PNG"),t.createElement(c,{variant:"primary",icon:Ae,onClick:()=>window.print()},"Etikett drucken"))},i&&t.createElement("div",{className:"a-stack a-stack--4"},t.createElement("p",{style:{margin:0,fontSize:13.5,color:"var(--a-text-2)"}},"Für ",t.createElement("strong",{style:{color:"var(--a-text)"}},i.name),i.member_no?`, Nr. ${i.member_no}`:"",i.team_name?` · ${i.team_name}`:""),t.createElement(ke,{label:"EtikettengröÃe",htmlFor:"etikett-groesse"},t.createElement(be,{id:"etikett-groesse",value:m.id,onChange:e=>te(z.find(l=>l.id===e.target.value)||z[0])},z.map(e=>t.createElement("option",{key:e.id,value:e.id},e.label)))),t.createElement("div",{style:{background:"var(--a-surface-2)",border:"1px solid var(--a-line)",borderRadius:"var(--a-radius)",padding:16,display:"flex",justifyContent:"center"}},t.createElement("div",{id:"ausweis-etikett",style:{width:`${m.w}mm`,height:`${m.h}mm`,background:"#fff",display:"flex",alignItems:"center",justifyContent:"center",boxSizing:"border-box",border:"1px solid var(--a-line)"}},t.createElement("img",{src:i.qr,alt:"",style:{width:`${Z(m)}mm`,height:`${Z(m)}mm`}}))),t.createElement(N,{tone:"info"},"Der QR-Code enthält den signierten Prüfcode dieses Mitglieds â denselben wie im digitalen Ausweis. Im Druckdialog des Browsers die Skalierung auf 100 Prozent stellen, sonst stimmt die GröÃe auf dem Etikett nicht."))),t.createElement(I,{open:(a==null?void 0:a.art)==="resend",busy:d===(a==null?void 0:a.m.id),danger:!1,confirmLabel:"Link senden",title:"Neuen Ausweis-Link senden?",onCancel:()=>E(null),onConfirm:()=>C(a.m,"card-resend","Ausweis-Link erneut versendet")},a==null?void 0:a.m.first_name," ",a==null?void 0:a.m.last_name," bekommt einen neuen Ausweis-Link per E-Mail. Der bisherige Link wird damit ungültig â bereits gespeicherte Wallet
2-Ausweise bleiben aber bestehen."),t.createElement(I,{open:(a==null?void 0:a.art)==="revoke",busy:d===(a==null?void 0:a.m.id),confirmLabel:"Ausweis sperren",title:"Ausweis sperren?",onCancel:()=>E(null),onConfirm:()=>C(a.m,"card-revoke","Ausweis gesperrt")},"Der QR-Code von ",a==null?void 0:a.m.first_name," ",a==null?void 0:a.m.last_name," wird sofort ungültig und in der Prüfung als unbekannt abgewiesen. Gespeicherte Wallet-Ausweise verlieren ihren Zugang, gedruckte Karten mit diesem Code ebenfalls. Danach muss ein neuer Link verschickt oder ein neues Etikett gedruckt werden."),t.createElement("style",null,` 3 @media print { 4 body * { visibility: hidden !important; } 5 #ausweis-etikett, #ausweis-etikett * { visibility: visible !important; } 6 #ausweis-etikett { 7 position: fixed !important; left: 0; top: 0; margin: 0 !important; 8 border: none !important; box-shadow: none !important; 9 } 10 @page { size: ${m.w}mm ${m.h}mm; margin: 0; } 11 } 12 `))}export{Ke 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.