diff --git a/dist/assets/AdminDashboardView-B1X380mB.js b/dist/assets/AdminDashboardView-BdNbeNlS.js similarity index 99% rename from dist/assets/AdminDashboardView-B1X380mB.js rename to dist/assets/AdminDashboardView-BdNbeNlS.js index 44f4660..91c0d15 100644 --- a/dist/assets/AdminDashboardView-B1X380mB.js +++ b/dist/assets/AdminDashboardView-BdNbeNlS.js @@ -1 +1 @@ -import{d as $,q as F,m as g,c as o,a as t,i as I,j as P,t as a,b as C,s as T,v as R,F as S,x as B,e as D,f as q,r,l as K,o as l,p as A,n as W}from"./index-CVUlgynU.js";const Z={class:"min-h-screen bg-gray-100 dark:bg-gray-900"},G={class:"bg-white dark:bg-gray-800 shadow"},H={class:"max-w-7xl mx-auto px-4 py-4 flex items-center justify-between"},J={class:"max-w-7xl mx-auto px-4 py-8"},Q={key:0,class:"text-center py-12"},X={key:1,class:"card bg-red-50 text-red-700 text-center"},Y={key:2,class:"space-y-6"},tt={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},et={class:"card"},st={class:"text-3xl font-bold text-primary-600"},at={class:"card"},nt={class:"text-3xl font-bold text-green-600"},ot={class:"card"},lt={class:"text-3xl font-bold text-blue-600"},rt={class:"card"},it={class:"text-3xl font-bold text-purple-600"},dt={class:"card"},ct={class:"flex gap-4"},ut=["disabled"],gt={class:"card"},xt={class:"overflow-x-auto"},vt={class:"w-full"},mt={class:"divide-y dark:divide-gray-700"},yt={class:"py-3 font-medium text-gray-900 dark:text-white"},_t={class:"py-3 text-gray-500"},pt={class:"py-3"},ft={class:"py-3 text-gray-500"},bt={class:"py-3 text-gray-500"},ht={class:"py-3 text-gray-500"},kt={class:"py-3"},wt=["onClick"],zt={key:0,class:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4"},Ct={class:"bg-white dark:bg-gray-800 rounded-xl shadow-xl max-w-2xl w-full max-h-[80vh] overflow-y-auto"},St={class:"p-6"},Bt={class:"flex items-center justify-between mb-6"},Dt={class:"text-xl font-bold text-gray-900 dark:text-white"},At={key:0,class:"space-y-6"},Et={class:"grid grid-cols-3 gap-4"},Ot={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},Ut={class:"text-2xl font-bold"},Vt={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},Lt={class:"text-2xl font-bold"},Nt={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},jt={class:"text-2xl font-bold"},Mt={class:"space-y-2"},$t={class:"font-medium text-gray-900 dark:text-white"},Ft={key:0,class:"text-red-500 text-sm"},It={class:"text-sm text-gray-500"},Pt=["onClick"],Tt={key:1,class:"text-center py-8 text-gray-500"},Wt=$({__name:"AdminDashboardView",setup(Rt){const E=q(),v=r(!0),c=r(""),u=r({org_count:0,user_count:0,order_count:0,timesheet_count:0}),p=r([]),f=r(null),i=r(null),m=r(!1),d=r(""),y=r("info"),x=r(!1);F(async()=>{await O()});async function O(){v.value=!0,c.value="";try{const[n,e]=await Promise.all([g.get("/admin/dashboard"),g.get("/admin/organizations")]);u.value=n.data.stats,p.value=e.data.organizations}catch(n){c.value=n instanceof Error?n.message:"Laden fehlgeschlagen",c.value.includes("Super-Admin")&&E.push("/")}finally{v.value=!1}}async function U(n){f.value=n,m.value=!0;try{const e=await g.get(`/admin/organizations/${n.id}`);i.value=e.data}catch(e){console.error("Load org details failed:",e)}}async function V(n){if(confirm("Als dieser User einloggen?"))try{const e=await g.post(`/admin/impersonate/${n}`);localStorage.setItem("accessToken",e.data.token),localStorage.setItem("impersonating","true"),window.location.href="/"}catch(e){alert("Impersonation fehlgeschlagen: "+(e instanceof Error?e.message:"Unbekannter Fehler"))}}async function L(){if(d.value.trim()&&confirm("Nachricht an alle Organisationen senden?")){x.value=!0;try{await g.post("/admin/broadcast",{message:d.value,type:y.value}),alert("Broadcast gesendet!"),d.value=""}catch(n){alert("Fehler: "+(n instanceof Error?n.message:"Unbekannt"))}finally{x.value=!1}}}function N(n){return new Date(n).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric"})}function j(n){const e={free:"badge bg-gray-100 text-gray-800",starter:"badge bg-blue-100 text-blue-800",business:"badge bg-purple-100 text-purple-800",enterprise:"badge bg-yellow-100 text-yellow-800"};return e[n]||e.free}return(n,e)=>{var b,h,k,w;const M=K("router-link");return l(),o("div",Z,[t("header",G,[t("div",H,[e[4]||(e[4]=t("div",{class:"flex items-center gap-3"},[t("span",{class:"text-2xl"},"🛡️"),t("h1",{class:"text-xl font-bold text-gray-900 dark:text-white"}," SeCu Admin Panel ")],-1)),I(M,{to:"/",class:"btn btn-secondary text-sm"},{default:P(()=>[...e[3]||(e[3]=[A(" ← Zurück zur App ",-1)])]),_:1})])]),t("main",J,[v.value?(l(),o("div",Q,[...e[5]||(e[5]=[t("p",{class:"text-gray-500"},"Lädt...",-1)])])):c.value?(l(),o("div",X,a(c.value),1)):(l(),o("div",Y,[t("div",tt,[t("div",et,[t("div",st,a(u.value.org_count),1),e[6]||(e[6]=t("div",{class:"text-sm text-gray-500"},"Organisationen",-1))]),t("div",at,[t("div",nt,a(u.value.user_count),1),e[7]||(e[7]=t("div",{class:"text-sm text-gray-500"},"Benutzer",-1))]),t("div",ot,[t("div",lt,a(u.value.order_count),1),e[8]||(e[8]=t("div",{class:"text-sm text-gray-500"},"Aufträge",-1))]),t("div",rt,[t("div",it,a(u.value.timesheet_count),1),e[9]||(e[9]=t("div",{class:"text-sm text-gray-500"},"Stundenzettel",-1))])]),t("div",dt,[e[11]||(e[11]=t("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 📢 Broadcast an alle Kunden ",-1)),t("div",ct,[C(t("select",{"onUpdate:modelValue":e[0]||(e[0]=s=>y.value=s),class:"input w-32"},[...e[10]||(e[10]=[t("option",{value:"info"},"Info",-1),t("option",{value:"warning"},"Warnung",-1),t("option",{value:"success"},"Erfolg",-1)])],512),[[T,y.value]]),C(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>d.value=s),type:"text",class:"input flex-1",placeholder:"Nachricht eingeben..."},null,512),[[R,d.value]]),t("button",{onClick:L,disabled:x.value||!d.value.trim(),class:"btn btn-primary"},a(x.value?"Sendet...":"Senden"),9,ut)])]),t("div",gt,[e[13]||(e[13]=t("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 🏢 Organisationen ",-1)),t("div",xt,[t("table",vt,[e[12]||(e[12]=t("thead",{class:"text-left text-sm text-gray-500 border-b dark:border-gray-700"},[t("tr",null,[t("th",{class:"pb-3 font-medium"},"Organisation"),t("th",{class:"pb-3 font-medium"},"Slug"),t("th",{class:"pb-3 font-medium"},"Plan"),t("th",{class:"pb-3 font-medium"},"Users"),t("th",{class:"pb-3 font-medium"},"Aufträge"),t("th",{class:"pb-3 font-medium"},"Erstellt"),t("th",{class:"pb-3 font-medium"})])],-1)),t("tbody",mt,[(l(!0),o(S,null,B(p.value,s=>{var _,z;return l(),o("tr",{key:s.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800"},[t("td",yt,a(s.name),1),t("td",_t,a(s.slug),1),t("td",pt,[t("span",{class:W(j(((_=s.settings)==null?void 0:_.plan)||"free"))},a(((z=s.settings)==null?void 0:z.plan)||"free"),3)]),t("td",ft,a(s.user_count),1),t("td",bt,a(s.order_count),1),t("td",ht,a(N(s.created_at)),1),t("td",kt,[t("button",{onClick:qt=>U(s),class:"text-primary-600 hover:text-primary-800 text-sm"}," Details → ",8,wt)])])}),128))])])])])]))]),m.value?(l(),o("div",zt,[t("div",Ct,[t("div",St,[t("div",Bt,[t("h2",Dt,a((b=f.value)==null?void 0:b.name),1),t("button",{onClick:e[2]||(e[2]=s=>m.value=!1),class:"text-gray-400 hover:text-gray-600"}," ✕ ")]),i.value?(l(),o("div",At,[t("div",Et,[t("div",Ot,[t("div",Ut,a(((h=i.value.users)==null?void 0:h.length)||0),1),e[14]||(e[14]=t("div",{class:"text-sm text-gray-500"},"Benutzer",-1))]),t("div",Vt,[t("div",Lt,a(((k=i.value.stats)==null?void 0:k.order_count)||0),1),e[15]||(e[15]=t("div",{class:"text-sm text-gray-500"},"Aufträge",-1))]),t("div",Nt,[t("div",jt,a(((w=i.value.stats)==null?void 0:w.timesheet_count)||0),1),e[16]||(e[16]=t("div",{class:"text-sm text-gray-500"},"Stundenzettel",-1))])]),t("div",null,[e[17]||(e[17]=t("h3",{class:"font-semibold text-gray-900 dark:text-white mb-3"},"Benutzer",-1)),t("div",Mt,[(l(!0),o(S,null,B(i.value.users,s=>(l(),o("div",{key:s.id,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},[t("div",null,[t("div",$t,[A(a(s.first_name)+" "+a(s.last_name)+" ",1),s.active?D("",!0):(l(),o("span",Ft,"(inaktiv)"))]),t("div",It,a(s.email)+" • "+a(s.role),1)]),t("button",{onClick:_=>V(s.id),class:"text-sm text-primary-600 hover:text-primary-800"}," Als User einloggen ",8,Pt)]))),128))])])])):(l(),o("div",Tt," Lädt... "))])])])):D("",!0)])}}});export{Wt as default}; +import{d as $,q as F,m as g,c as o,a as t,i as I,j as P,t as a,b as C,s as T,v as R,F as S,x as B,e as D,f as q,r,l as K,o as l,p as A,n as W}from"./index-DFiGttzi.js";const Z={class:"min-h-screen bg-gray-100 dark:bg-gray-900"},G={class:"bg-white dark:bg-gray-800 shadow"},H={class:"max-w-7xl mx-auto px-4 py-4 flex items-center justify-between"},J={class:"max-w-7xl mx-auto px-4 py-8"},Q={key:0,class:"text-center py-12"},X={key:1,class:"card bg-red-50 text-red-700 text-center"},Y={key:2,class:"space-y-6"},tt={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},et={class:"card"},st={class:"text-3xl font-bold text-primary-600"},at={class:"card"},nt={class:"text-3xl font-bold text-green-600"},ot={class:"card"},lt={class:"text-3xl font-bold text-blue-600"},rt={class:"card"},it={class:"text-3xl font-bold text-purple-600"},dt={class:"card"},ct={class:"flex gap-4"},ut=["disabled"],gt={class:"card"},xt={class:"overflow-x-auto"},vt={class:"w-full"},mt={class:"divide-y dark:divide-gray-700"},yt={class:"py-3 font-medium text-gray-900 dark:text-white"},_t={class:"py-3 text-gray-500"},pt={class:"py-3"},ft={class:"py-3 text-gray-500"},bt={class:"py-3 text-gray-500"},ht={class:"py-3 text-gray-500"},kt={class:"py-3"},wt=["onClick"],zt={key:0,class:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4"},Ct={class:"bg-white dark:bg-gray-800 rounded-xl shadow-xl max-w-2xl w-full max-h-[80vh] overflow-y-auto"},St={class:"p-6"},Bt={class:"flex items-center justify-between mb-6"},Dt={class:"text-xl font-bold text-gray-900 dark:text-white"},At={key:0,class:"space-y-6"},Et={class:"grid grid-cols-3 gap-4"},Ot={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},Ut={class:"text-2xl font-bold"},Vt={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},Lt={class:"text-2xl font-bold"},Nt={class:"bg-gray-50 dark:bg-gray-700 rounded-lg p-4 text-center"},jt={class:"text-2xl font-bold"},Mt={class:"space-y-2"},$t={class:"font-medium text-gray-900 dark:text-white"},Ft={key:0,class:"text-red-500 text-sm"},It={class:"text-sm text-gray-500"},Pt=["onClick"],Tt={key:1,class:"text-center py-8 text-gray-500"},Wt=$({__name:"AdminDashboardView",setup(Rt){const E=q(),v=r(!0),c=r(""),u=r({org_count:0,user_count:0,order_count:0,timesheet_count:0}),p=r([]),f=r(null),i=r(null),m=r(!1),d=r(""),y=r("info"),x=r(!1);F(async()=>{await O()});async function O(){v.value=!0,c.value="";try{const[n,e]=await Promise.all([g.get("/admin/dashboard"),g.get("/admin/organizations")]);u.value=n.data.stats,p.value=e.data.organizations}catch(n){c.value=n instanceof Error?n.message:"Laden fehlgeschlagen",c.value.includes("Super-Admin")&&E.push("/")}finally{v.value=!1}}async function U(n){f.value=n,m.value=!0;try{const e=await g.get(`/admin/organizations/${n.id}`);i.value=e.data}catch(e){console.error("Load org details failed:",e)}}async function V(n){if(confirm("Als dieser User einloggen?"))try{const e=await g.post(`/admin/impersonate/${n}`);localStorage.setItem("accessToken",e.data.token),localStorage.setItem("impersonating","true"),window.location.href="/"}catch(e){alert("Impersonation fehlgeschlagen: "+(e instanceof Error?e.message:"Unbekannter Fehler"))}}async function L(){if(d.value.trim()&&confirm("Nachricht an alle Organisationen senden?")){x.value=!0;try{await g.post("/admin/broadcast",{message:d.value,type:y.value}),alert("Broadcast gesendet!"),d.value=""}catch(n){alert("Fehler: "+(n instanceof Error?n.message:"Unbekannt"))}finally{x.value=!1}}}function N(n){return new Date(n).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric"})}function j(n){const e={free:"badge bg-gray-100 text-gray-800",starter:"badge bg-blue-100 text-blue-800",business:"badge bg-purple-100 text-purple-800",enterprise:"badge bg-yellow-100 text-yellow-800"};return e[n]||e.free}return(n,e)=>{var b,h,k,w;const M=K("router-link");return l(),o("div",Z,[t("header",G,[t("div",H,[e[4]||(e[4]=t("div",{class:"flex items-center gap-3"},[t("span",{class:"text-2xl"},"🛡️"),t("h1",{class:"text-xl font-bold text-gray-900 dark:text-white"}," SeCu Admin Panel ")],-1)),I(M,{to:"/",class:"btn btn-secondary text-sm"},{default:P(()=>[...e[3]||(e[3]=[A(" ← Zurück zur App ",-1)])]),_:1})])]),t("main",J,[v.value?(l(),o("div",Q,[...e[5]||(e[5]=[t("p",{class:"text-gray-500"},"Lädt...",-1)])])):c.value?(l(),o("div",X,a(c.value),1)):(l(),o("div",Y,[t("div",tt,[t("div",et,[t("div",st,a(u.value.org_count),1),e[6]||(e[6]=t("div",{class:"text-sm text-gray-500"},"Organisationen",-1))]),t("div",at,[t("div",nt,a(u.value.user_count),1),e[7]||(e[7]=t("div",{class:"text-sm text-gray-500"},"Benutzer",-1))]),t("div",ot,[t("div",lt,a(u.value.order_count),1),e[8]||(e[8]=t("div",{class:"text-sm text-gray-500"},"Aufträge",-1))]),t("div",rt,[t("div",it,a(u.value.timesheet_count),1),e[9]||(e[9]=t("div",{class:"text-sm text-gray-500"},"Stundenzettel",-1))])]),t("div",dt,[e[11]||(e[11]=t("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 📢 Broadcast an alle Kunden ",-1)),t("div",ct,[C(t("select",{"onUpdate:modelValue":e[0]||(e[0]=s=>y.value=s),class:"input w-32"},[...e[10]||(e[10]=[t("option",{value:"info"},"Info",-1),t("option",{value:"warning"},"Warnung",-1),t("option",{value:"success"},"Erfolg",-1)])],512),[[T,y.value]]),C(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>d.value=s),type:"text",class:"input flex-1",placeholder:"Nachricht eingeben..."},null,512),[[R,d.value]]),t("button",{onClick:L,disabled:x.value||!d.value.trim(),class:"btn btn-primary"},a(x.value?"Sendet...":"Senden"),9,ut)])]),t("div",gt,[e[13]||(e[13]=t("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 🏢 Organisationen ",-1)),t("div",xt,[t("table",vt,[e[12]||(e[12]=t("thead",{class:"text-left text-sm text-gray-500 border-b dark:border-gray-700"},[t("tr",null,[t("th",{class:"pb-3 font-medium"},"Organisation"),t("th",{class:"pb-3 font-medium"},"Slug"),t("th",{class:"pb-3 font-medium"},"Plan"),t("th",{class:"pb-3 font-medium"},"Users"),t("th",{class:"pb-3 font-medium"},"Aufträge"),t("th",{class:"pb-3 font-medium"},"Erstellt"),t("th",{class:"pb-3 font-medium"})])],-1)),t("tbody",mt,[(l(!0),o(S,null,B(p.value,s=>{var _,z;return l(),o("tr",{key:s.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800"},[t("td",yt,a(s.name),1),t("td",_t,a(s.slug),1),t("td",pt,[t("span",{class:W(j(((_=s.settings)==null?void 0:_.plan)||"free"))},a(((z=s.settings)==null?void 0:z.plan)||"free"),3)]),t("td",ft,a(s.user_count),1),t("td",bt,a(s.order_count),1),t("td",ht,a(N(s.created_at)),1),t("td",kt,[t("button",{onClick:qt=>U(s),class:"text-primary-600 hover:text-primary-800 text-sm"}," Details → ",8,wt)])])}),128))])])])])]))]),m.value?(l(),o("div",zt,[t("div",Ct,[t("div",St,[t("div",Bt,[t("h2",Dt,a((b=f.value)==null?void 0:b.name),1),t("button",{onClick:e[2]||(e[2]=s=>m.value=!1),class:"text-gray-400 hover:text-gray-600"}," ✕ ")]),i.value?(l(),o("div",At,[t("div",Et,[t("div",Ot,[t("div",Ut,a(((h=i.value.users)==null?void 0:h.length)||0),1),e[14]||(e[14]=t("div",{class:"text-sm text-gray-500"},"Benutzer",-1))]),t("div",Vt,[t("div",Lt,a(((k=i.value.stats)==null?void 0:k.order_count)||0),1),e[15]||(e[15]=t("div",{class:"text-sm text-gray-500"},"Aufträge",-1))]),t("div",Nt,[t("div",jt,a(((w=i.value.stats)==null?void 0:w.timesheet_count)||0),1),e[16]||(e[16]=t("div",{class:"text-sm text-gray-500"},"Stundenzettel",-1))])]),t("div",null,[e[17]||(e[17]=t("h3",{class:"font-semibold text-gray-900 dark:text-white mb-3"},"Benutzer",-1)),t("div",Mt,[(l(!0),o(S,null,B(i.value.users,s=>(l(),o("div",{key:s.id,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},[t("div",null,[t("div",$t,[A(a(s.first_name)+" "+a(s.last_name)+" ",1),s.active?D("",!0):(l(),o("span",Ft,"(inaktiv)"))]),t("div",It,a(s.email)+" • "+a(s.role),1)]),t("button",{onClick:_=>V(s.id),class:"text-sm text-primary-600 hover:text-primary-800"}," Als User einloggen ",8,Pt)]))),128))])])])):(l(),o("div",Tt," Lädt... "))])])])):D("",!0)])}}});export{Wt as default}; diff --git a/dist/assets/AppLayout-Dn1Dax5w.js b/dist/assets/AppLayout-CUQVekGY.js similarity index 98% rename from dist/assets/AppLayout-Dn1Dax5w.js rename to dist/assets/AppLayout-CUQVekGY.js index 36bc847..edac834 100644 --- a/dist/assets/AppLayout-Dn1Dax5w.js +++ b/dist/assets/AppLayout-CUQVekGY.js @@ -1 +1 @@ -import{d as v,u as _,c as g,n as w,a as t,F as M,x as z,t as o,y as i,k as A,o as d,z as j,j as C,l as $,g as L,r as k,i as x,e as S,p as N,f as B}from"./index-CVUlgynU.js";const E={class:"mt-6 px-3"},V={class:"text-xl"},D={class:"font-medium"},O={class:"absolute bottom-0 left-0 right-0 p-4 border-t border-gray-200 dark:border-gray-700"},F={class:"flex items-center gap-3"},H={class:"w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},I={class:"text-primary-600 dark:text-primary-300 font-medium"},R={class:"flex-1 min-w-0"},T={class:"text-sm font-medium text-gray-900 dark:text-white truncate"},q={class:"text-xs text-gray-500 dark:text-gray-400 capitalize"},Q=v({__name:"AppSidebar",props:{open:{type:Boolean}},emits:["close"],setup(h){const n=L(),r=_(),a=A(()=>{const s=[{name:"Dashboard",href:"/",icon:"📊"},{name:"Aufträge",href:"/orders",icon:"📋"}];return r.canManageUsers&&s.push({name:"Mitarbeiter",href:"/users",icon:"👥"}),s.push({name:"Verfügbarkeit",href:"/availability",icon:"📅"},{name:"Stundenzettel",href:"/timesheets",icon:"⏱️"},{name:"Qualifikationen",href:"/qualifications",icon:"🎓"},{name:"Objekte",href:"/objects",icon:"🏢"}),r.isChef&&s.push({name:"Module",href:"/modules",icon:"⚙️"}),s.push({name:"Einstellungen",href:"/settings",icon:"🔧"},{name:"Hilfe",href:"/help",icon:"📚"}),s});function m(s){return s==="/"?n.path==="/":n.path.startsWith(s)}return(s,e)=>{var l,p,f,b,u;const c=$("router-link");return d(),g("aside",{class:w(["fixed inset-y-0 left-0 z-50 w-64 bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 transform transition-transform lg:translate-x-0",h.open?"translate-x-0":"-translate-x-full"])},[e[1]||(e[1]=t("div",{class:"h-16 flex items-center px-6 border-b border-gray-200 dark:border-gray-700"},[t("span",{class:"text-2xl font-bold text-primary-600"},"🔐 SeCu")],-1)),t("nav",E,[(d(!0),g(M,null,z(a.value,y=>(d(),j(c,{key:y.href,to:y.href,class:w(["flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors",m(y.href)?"bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-200":"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:e[0]||(e[0]=re=>s.$emit("close"))},{default:C(()=>[t("span",V,o(y.icon),1),t("span",D,o(y.name),1)]),_:2},1032,["to","class"]))),128))]),t("div",O,[t("div",F,[t("div",H,[t("span",I,o((p=(l=i(r).user)==null?void 0:l.first_name)==null?void 0:p[0])+o((b=(f=i(r).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("div",R,[t("p",T,o(i(r).fullName),1),t("p",q,o((u=i(r).user)==null?void 0:u.role),1)])])])],2)}}}),U={class:"h-16 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between px-4 lg:px-6"},W={class:"flex items-center gap-2"},G={class:"text-xl"},J={class:"relative"},K={class:"w-8 h-8 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},P={class:"text-primary-600 dark:text-primary-300 text-sm font-medium"},X={class:"hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-200"},Y=v({__name:"AppHeader",emits:["toggle-sidebar","logout"],setup(h){const n=_(),r=k(localStorage.getItem("darkMode")==="true"),a=k(!1);function m(){r.value=!r.value,localStorage.setItem("darkMode",String(r.value)),document.documentElement.classList.toggle("dark",r.value)}return r.value&&document.documentElement.classList.add("dark"),(s,e)=>{var l,p,f,b;const c=$("router-link");return d(),g("header",U,[t("button",{class:"lg:hidden p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:e[0]||(e[0]=u=>s.$emit("toggle-sidebar"))},[...e[4]||(e[4]=[t("span",{class:"text-2xl"},"☰",-1)])]),e[7]||(e[7]=t("div",{class:"flex-1 lg:ml-0"},[t("h1",{class:"text-lg font-semibold text-gray-900 dark:text-white hidden lg:block"}," Mitarbeiterverwaltung ")],-1)),t("div",W,[t("button",{class:"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:m},[t("span",G,o(r.value?"☀️":"🌙"),1)]),t("div",J,[t("button",{class:"flex items-center gap-2 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:e[1]||(e[1]=u=>a.value=!a.value)},[t("div",K,[t("span",P,o((p=(l=i(n).user)==null?void 0:l.first_name)==null?void 0:p[0])+o((b=(f=i(n).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("span",X,o(i(n).fullName),1)]),a.value?(d(),g("div",{key:0,class:"absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 z-50",onClick:e[3]||(e[3]=u=>a.value=!1)},[x(c,{to:"/settings",class:"block px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:C(()=>[...e[5]||(e[5]=[N(" ⚙️ Einstellungen ",-1)])]),_:1}),e[6]||(e[6]=t("hr",{class:"my-1 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"w-full text-left px-4 py-2 text-sm text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20",onClick:e[2]||(e[2]=u=>s.$emit("logout"))}," 🚪 Abmelden ")])):S("",!0)])])])}}}),Z={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},ee={class:"lg:pl-64"},te={class:"p-6"},ae=v({__name:"AppLayout",setup(h){const n=_(),r=B(),a=k(!1);async function m(){await n.logout(),r.push("/login")}return(s,e)=>{const c=$("router-view");return d(),g("div",Z,[a.value?(d(),g("div",{key:0,class:"fixed inset-0 z-40 bg-black/50 lg:hidden",onClick:e[0]||(e[0]=l=>a.value=!1)})):S("",!0),x(Q,{open:a.value,onClose:e[1]||(e[1]=l=>a.value=!1)},null,8,["open"]),t("div",ee,[x(Y,{onToggleSidebar:e[2]||(e[2]=l=>a.value=!a.value),onLogout:m}),t("main",te,[x(c)])])])}}});export{ae as default}; +import{d as v,u as _,c as g,n as w,a as t,F as M,x as z,t as o,y as i,k as A,o as d,z as j,j as C,l as $,g as L,r as k,i as x,e as S,p as N,f as B}from"./index-DFiGttzi.js";const E={class:"mt-6 px-3"},V={class:"text-xl"},D={class:"font-medium"},O={class:"absolute bottom-0 left-0 right-0 p-4 border-t border-gray-200 dark:border-gray-700"},F={class:"flex items-center gap-3"},H={class:"w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},I={class:"text-primary-600 dark:text-primary-300 font-medium"},R={class:"flex-1 min-w-0"},T={class:"text-sm font-medium text-gray-900 dark:text-white truncate"},q={class:"text-xs text-gray-500 dark:text-gray-400 capitalize"},Q=v({__name:"AppSidebar",props:{open:{type:Boolean}},emits:["close"],setup(h){const n=L(),r=_(),a=A(()=>{const s=[{name:"Dashboard",href:"/",icon:"📊"},{name:"Aufträge",href:"/orders",icon:"📋"}];return r.canManageUsers&&s.push({name:"Mitarbeiter",href:"/users",icon:"👥"}),s.push({name:"Verfügbarkeit",href:"/availability",icon:"📅"},{name:"Stundenzettel",href:"/timesheets",icon:"⏱️"},{name:"Qualifikationen",href:"/qualifications",icon:"🎓"},{name:"Objekte",href:"/objects",icon:"🏢"}),r.isChef&&s.push({name:"Module",href:"/modules",icon:"⚙️"}),s.push({name:"Einstellungen",href:"/settings",icon:"🔧"},{name:"Hilfe",href:"/help",icon:"📚"}),s});function m(s){return s==="/"?n.path==="/":n.path.startsWith(s)}return(s,e)=>{var l,p,f,b,u;const c=$("router-link");return d(),g("aside",{class:w(["fixed inset-y-0 left-0 z-50 w-64 bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 transform transition-transform lg:translate-x-0",h.open?"translate-x-0":"-translate-x-full"])},[e[1]||(e[1]=t("div",{class:"h-16 flex items-center px-6 border-b border-gray-200 dark:border-gray-700"},[t("span",{class:"text-2xl font-bold text-primary-600"},"🔐 SeCu")],-1)),t("nav",E,[(d(!0),g(M,null,z(a.value,y=>(d(),j(c,{key:y.href,to:y.href,class:w(["flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors",m(y.href)?"bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-200":"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:e[0]||(e[0]=re=>s.$emit("close"))},{default:C(()=>[t("span",V,o(y.icon),1),t("span",D,o(y.name),1)]),_:2},1032,["to","class"]))),128))]),t("div",O,[t("div",F,[t("div",H,[t("span",I,o((p=(l=i(r).user)==null?void 0:l.first_name)==null?void 0:p[0])+o((b=(f=i(r).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("div",R,[t("p",T,o(i(r).fullName),1),t("p",q,o((u=i(r).user)==null?void 0:u.role),1)])])])],2)}}}),U={class:"h-16 bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between px-4 lg:px-6"},W={class:"flex items-center gap-2"},G={class:"text-xl"},J={class:"relative"},K={class:"w-8 h-8 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},P={class:"text-primary-600 dark:text-primary-300 text-sm font-medium"},X={class:"hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-200"},Y=v({__name:"AppHeader",emits:["toggle-sidebar","logout"],setup(h){const n=_(),r=k(localStorage.getItem("darkMode")==="true"),a=k(!1);function m(){r.value=!r.value,localStorage.setItem("darkMode",String(r.value)),document.documentElement.classList.toggle("dark",r.value)}return r.value&&document.documentElement.classList.add("dark"),(s,e)=>{var l,p,f,b;const c=$("router-link");return d(),g("header",U,[t("button",{class:"lg:hidden p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:e[0]||(e[0]=u=>s.$emit("toggle-sidebar"))},[...e[4]||(e[4]=[t("span",{class:"text-2xl"},"☰",-1)])]),e[7]||(e[7]=t("div",{class:"flex-1 lg:ml-0"},[t("h1",{class:"text-lg font-semibold text-gray-900 dark:text-white hidden lg:block"}," Mitarbeiterverwaltung ")],-1)),t("div",W,[t("button",{class:"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:m},[t("span",G,o(r.value?"☀️":"🌙"),1)]),t("div",J,[t("button",{class:"flex items-center gap-2 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:e[1]||(e[1]=u=>a.value=!a.value)},[t("div",K,[t("span",P,o((p=(l=i(n).user)==null?void 0:l.first_name)==null?void 0:p[0])+o((b=(f=i(n).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("span",X,o(i(n).fullName),1)]),a.value?(d(),g("div",{key:0,class:"absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 z-50",onClick:e[3]||(e[3]=u=>a.value=!1)},[x(c,{to:"/settings",class:"block px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700"},{default:C(()=>[...e[5]||(e[5]=[N(" ⚙️ Einstellungen ",-1)])]),_:1}),e[6]||(e[6]=t("hr",{class:"my-1 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"w-full text-left px-4 py-2 text-sm text-red-600 hover:bg-red-50 dark:hover:bg-red-900/20",onClick:e[2]||(e[2]=u=>s.$emit("logout"))}," 🚪 Abmelden ")])):S("",!0)])])])}}}),Z={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},ee={class:"lg:pl-64"},te={class:"p-6"},ae=v({__name:"AppLayout",setup(h){const n=_(),r=B(),a=k(!1);async function m(){await n.logout(),r.push("/login")}return(s,e)=>{const c=$("router-view");return d(),g("div",Z,[a.value?(d(),g("div",{key:0,class:"fixed inset-0 z-40 bg-black/50 lg:hidden",onClick:e[0]||(e[0]=l=>a.value=!1)})):S("",!0),x(Q,{open:a.value,onClose:e[1]||(e[1]=l=>a.value=!1)},null,8,["open"]),t("div",ee,[x(Y,{onToggleSidebar:e[2]||(e[2]=l=>a.value=!a.value),onLogout:m}),t("main",te,[x(c)])])])}}});export{ae as default}; diff --git a/dist/assets/AvailabilityView-B7DXJOIF.js b/dist/assets/AvailabilityView-ZayOQ5mL.js similarity index 97% rename from dist/assets/AvailabilityView-B7DXJOIF.js rename to dist/assets/AvailabilityView-ZayOQ5mL.js index 9cdb9c9..a3d7df0 100644 --- a/dist/assets/AvailabilityView-B7DXJOIF.js +++ b/dist/assets/AvailabilityView-ZayOQ5mL.js @@ -1 +1 @@ -import{d as D,u as S,q as M,m as h,c as l,a as o,t as u,F,x as A,A as C,r as v,k as m,o as i,n as L}from"./index-CVUlgynU.js";const O={class:"space-y-6"},V={class:"card"},E={class:"flex items-center justify-between mb-6"},I={class:"text-lg font-semibold"},W={key:0,class:"text-center py-8 text-gray-500"},Y={key:1,class:"grid grid-cols-7 gap-2"},B={class:"text-xs text-gray-500 mb-1"},N=["onClick"],j=D({__name:"AvailabilityView",setup(T){const f=S(),a=v(new Date),y=v([]),g=v(!0),p=m(()=>{const n=a.value.getFullYear(),e=a.value.getMonth(),t=new Date(n,e+1,0).getDate();return Array.from({length:t},(s,r)=>{const d=new Date(n,e,r+1);return{date:d.toISOString().split("T")[0],dayOfWeek:d.toLocaleDateString("de-DE",{weekday:"short"}),day:r+1,isWeekend:d.getDay()===0||d.getDay()===6}})}),_=m(()=>a.value.toLocaleDateString("de-DE",{month:"long",year:"numeric"}));M(c);async function c(){g.value=!0;const n=a.value.getFullYear(),e=a.value.getMonth(),t=new Date(n,e,1).toISOString().split("T")[0],s=new Date(n,e+1,0).toISOString().split("T")[0];try{const r=await h.get(`/availability?from=${t}&to=${s}`);y.value=r.data.availability}catch(r){console.error(r)}finally{g.value=!1}}function b(n){return y.value.find(e=>{var t;return e.date===n&&e.user_id===((t=f.user)==null?void 0:t.id)})}async function k(n){const e=b(n),t=!(e!=null&&e.available);try{await h.post("/availability",{date:n,available:t}),await c()}catch(s){alert(s instanceof Error?s.message:"Fehler")}}function x(){a.value=new Date(a.value.getFullYear(),a.value.getMonth()-1),c()}function w(){a.value=new Date(a.value.getFullYear(),a.value.getMonth()+1),c()}return(n,e)=>(i(),l("div",O,[e[1]||(e[1]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"📅 Verfügbarkeit",-1)),o("div",V,[o("div",E,[o("button",{class:"btn btn-secondary",onClick:x},"←"),o("h2",I,u(_.value),1),o("button",{class:"btn btn-secondary",onClick:w},"→")]),g.value?(i(),l("div",W,"Lädt...")):(i(),l("div",Y,[(i(!0),l(F,null,A(p.value,t=>{var s;return i(),l("div",{key:t.date,class:"text-center"},[o("div",B,u(t.dayOfWeek),1),o("button",{class:L(["w-10 h-10 rounded-lg font-medium transition-colors",t.isWeekend?"bg-gray-100 dark:bg-gray-700":"",(s=b(t.date))!=null&&s.available?"bg-green-500 text-white hover:bg-green-600":"bg-gray-200 dark:bg-gray-600 hover:bg-gray-300 dark:hover:bg-gray-500"]),onClick:r=>k(t.date)},u(t.day),11,N)])}),128))])),e[0]||(e[0]=C('
Verfügbar
Nicht gemeldet
',1))])]))}});export{j as default}; +import{d as D,u as S,q as M,m as h,c as l,a as o,t as u,F,x as A,A as C,r as v,k as m,o as i,n as L}from"./index-DFiGttzi.js";const O={class:"space-y-6"},V={class:"card"},E={class:"flex items-center justify-between mb-6"},I={class:"text-lg font-semibold"},W={key:0,class:"text-center py-8 text-gray-500"},Y={key:1,class:"grid grid-cols-7 gap-2"},B={class:"text-xs text-gray-500 mb-1"},N=["onClick"],j=D({__name:"AvailabilityView",setup(T){const f=S(),a=v(new Date),y=v([]),g=v(!0),p=m(()=>{const n=a.value.getFullYear(),e=a.value.getMonth(),t=new Date(n,e+1,0).getDate();return Array.from({length:t},(s,r)=>{const d=new Date(n,e,r+1);return{date:d.toISOString().split("T")[0],dayOfWeek:d.toLocaleDateString("de-DE",{weekday:"short"}),day:r+1,isWeekend:d.getDay()===0||d.getDay()===6}})}),_=m(()=>a.value.toLocaleDateString("de-DE",{month:"long",year:"numeric"}));M(c);async function c(){g.value=!0;const n=a.value.getFullYear(),e=a.value.getMonth(),t=new Date(n,e,1).toISOString().split("T")[0],s=new Date(n,e+1,0).toISOString().split("T")[0];try{const r=await h.get(`/availability?from=${t}&to=${s}`);y.value=r.data.availability}catch(r){console.error(r)}finally{g.value=!1}}function b(n){return y.value.find(e=>{var t;return e.date===n&&e.user_id===((t=f.user)==null?void 0:t.id)})}async function k(n){const e=b(n),t=!(e!=null&&e.available);try{await h.post("/availability",{date:n,available:t}),await c()}catch(s){alert(s instanceof Error?s.message:"Fehler")}}function x(){a.value=new Date(a.value.getFullYear(),a.value.getMonth()-1),c()}function w(){a.value=new Date(a.value.getFullYear(),a.value.getMonth()+1),c()}return(n,e)=>(i(),l("div",O,[e[1]||(e[1]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"📅 Verfügbarkeit",-1)),o("div",V,[o("div",E,[o("button",{class:"btn btn-secondary",onClick:x},"←"),o("h2",I,u(_.value),1),o("button",{class:"btn btn-secondary",onClick:w},"→")]),g.value?(i(),l("div",W,"Lädt...")):(i(),l("div",Y,[(i(!0),l(F,null,A(p.value,t=>{var s;return i(),l("div",{key:t.date,class:"text-center"},[o("div",B,u(t.dayOfWeek),1),o("button",{class:L(["w-10 h-10 rounded-lg font-medium transition-colors",t.isWeekend?"bg-gray-100 dark:bg-gray-700":"",(s=b(t.date))!=null&&s.available?"bg-green-500 text-white hover:bg-green-600":"bg-gray-200 dark:bg-gray-600 hover:bg-gray-300 dark:hover:bg-gray-500"]),onClick:r=>k(t.date)},u(t.day),11,N)])}),128))])),e[0]||(e[0]=C('
Verfügbar
Nicht gemeldet
',1))])]))}});export{j as default}; diff --git a/dist/assets/DashboardView-Dm3JX8-R.js b/dist/assets/DashboardView-Dgd7yCO4.js similarity index 98% rename from dist/assets/DashboardView-Dm3JX8-R.js rename to dist/assets/DashboardView-Dgd7yCO4.js index 01f145c..0064023 100644 --- a/dist/assets/DashboardView-Dm3JX8-R.js +++ b/dist/assets/DashboardView-Dgd7yCO4.js @@ -1 +1 @@ -import{d as k,u as w,q as A,m as u,c as o,a as e,t as r,y as x,e as y,n as p,i as T,j as v,F as O,x as S,r as m,k as j,l as M,o as d,p as B,z as C}from"./index-CVUlgynU.js";const V={class:"space-y-6"},z={class:"card bg-gradient-to-r from-primary-500 to-primary-700 text-white"},D={class:"text-2xl font-bold"},N={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4"},G={class:"card"},L={class:"flex items-center gap-4"},R={class:"text-2xl font-bold text-gray-900 dark:text-white"},$={key:0,class:"card"},E={class:"flex items-center gap-4"},F={class:"text-2xl font-bold text-gray-900 dark:text-white"},H={key:1,class:"card"},I={class:"flex items-center gap-4"},U={class:"text-2xl font-bold text-gray-900 dark:text-white"},q={class:"card"},J={class:"flex items-center gap-4"},K={class:"text-2xl"},W={class:"text-lg font-medium text-gray-900 dark:text-white"},P={class:"card"},Q={class:"flex items-center justify-between mb-4"},X={key:0,class:"text-center py-8 text-gray-500"},Y={key:1,class:"text-center py-8 text-gray-500"},Z={key:2,class:"space-y-3"},ee={class:"flex items-center justify-between"},te={class:"font-medium text-gray-900 dark:text-white"},se={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ne=k({__name:"DashboardView",setup(ae){const i=w(),n=m({openOrders:0,myOrders:0,pendingTimesheets:0,availableToday:!1}),g=m([]),b=m(!0),f=j(()=>{const s=new Date().getHours();return s<12?"Guten Morgen":s<18?"Guten Tag":"Guten Abend"});A(async()=>{try{const s=await u.get("/orders");if(g.value=s.data.orders.slice(0,5),n.value.openOrders=s.data.orders.filter(l=>["published","in_progress"].includes(l.status)).length,i.isMitarbeiter&&(n.value.myOrders=s.data.orders.length),i.canManageUsers){const l=await u.get("/timesheets?status=pending");n.value.pendingTimesheets=l.data.timesheets.length}const t=new Date().toISOString().split("T")[0],c=await u.get(`/availability?from=${t}&to=${t}`);n.value.availableToday=c.data.availability.some(l=>{var a;return l.available&&l.user_id===((a=i.user)==null?void 0:a.id)})}catch(s){console.error("Dashboard load error:",s)}finally{b.value=!1}});function _(s){return{draft:"badge-secondary",published:"badge-primary",in_progress:"badge-warning",completed:"badge-success",cancelled:"badge-danger"}[s]||"badge-secondary"}function h(s){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt"}[s]||s}return(s,t)=>{var l;const c=M("router-link");return d(),o("div",V,[e("div",z,[e("h1",D,r(f.value)+", "+r((l=x(i).user)==null?void 0:l.first_name)+"! 👋 ",1),t[0]||(t[0]=e("p",{class:"mt-1 text-primary-100"}," Willkommen zurück bei SeCu. ",-1))]),e("div",N,[e("div",G,[e("div",L,[t[2]||(t[2]=e("div",{class:"w-12 h-12 rounded-lg bg-blue-100 dark:bg-blue-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"📋")],-1)),e("div",null,[t[1]||(t[1]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Offene Aufträge",-1)),e("p",R,r(n.value.openOrders),1)])])]),x(i).isMitarbeiter?(d(),o("div",$,[e("div",E,[t[4]||(t[4]=e("div",{class:"w-12 h-12 rounded-lg bg-green-100 dark:bg-green-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"✅")],-1)),e("div",null,[t[3]||(t[3]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Meine Aufträge",-1)),e("p",F,r(n.value.myOrders),1)])])])):y("",!0),x(i).canManageUsers?(d(),o("div",H,[e("div",I,[t[6]||(t[6]=e("div",{class:"w-12 h-12 rounded-lg bg-yellow-100 dark:bg-yellow-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"⏱️")],-1)),e("div",null,[t[5]||(t[5]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Ausstehende Stundenzettel",-1)),e("p",U,r(n.value.pendingTimesheets),1)])])])):y("",!0),e("div",q,[e("div",J,[e("div",{class:p(["w-12 h-12 rounded-lg flex items-center justify-center",n.value.availableToday?"bg-green-100 dark:bg-green-900":"bg-gray-100 dark:bg-gray-700"])},[e("span",K,r(n.value.availableToday?"✅":"❓"),1)],2),e("div",null,[t[7]||(t[7]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Heute verfügbar",-1)),e("p",W,r(n.value.availableToday?"Ja":"Nicht gemeldet"),1)])])])]),e("div",P,[e("div",Q,[t[9]||(t[9]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white"}," Aktuelle Aufträge ",-1)),T(c,{to:"/orders",class:"text-sm text-primary-600 hover:text-primary-700"},{default:v(()=>[...t[8]||(t[8]=[B(" Alle anzeigen → ",-1)])]),_:1})]),b.value?(d(),o("div",X," Lädt... ")):g.value.length===0?(d(),o("div",Y," Keine Aufträge vorhanden ")):(d(),o("div",Z,[(d(!0),o(O,null,S(g.value,a=>(d(),C(c,{key:a.id,to:`/orders/${a.id}`,class:"block p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors"},{default:v(()=>[e("div",ee,[e("div",null,[e("h3",te," #"+r(a.number)+" - "+r(a.title),1),a.location?(d(),o("p",se," 📍 "+r(a.location),1)):y("",!0)]),e("span",{class:p(["badge",_(a.status)])},r(h(a.status)),3)])]),_:2},1032,["to"]))),128))]))])])}}});export{ne as default}; +import{d as k,u as w,q as A,m as u,c as o,a as e,t as r,y as x,e as y,n as p,i as T,j as v,F as O,x as S,r as m,k as j,l as M,o as d,p as B,z as C}from"./index-DFiGttzi.js";const V={class:"space-y-6"},z={class:"card bg-gradient-to-r from-primary-500 to-primary-700 text-white"},D={class:"text-2xl font-bold"},N={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4"},G={class:"card"},L={class:"flex items-center gap-4"},R={class:"text-2xl font-bold text-gray-900 dark:text-white"},$={key:0,class:"card"},E={class:"flex items-center gap-4"},F={class:"text-2xl font-bold text-gray-900 dark:text-white"},H={key:1,class:"card"},I={class:"flex items-center gap-4"},U={class:"text-2xl font-bold text-gray-900 dark:text-white"},q={class:"card"},J={class:"flex items-center gap-4"},K={class:"text-2xl"},W={class:"text-lg font-medium text-gray-900 dark:text-white"},P={class:"card"},Q={class:"flex items-center justify-between mb-4"},X={key:0,class:"text-center py-8 text-gray-500"},Y={key:1,class:"text-center py-8 text-gray-500"},Z={key:2,class:"space-y-3"},ee={class:"flex items-center justify-between"},te={class:"font-medium text-gray-900 dark:text-white"},se={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ne=k({__name:"DashboardView",setup(ae){const i=w(),n=m({openOrders:0,myOrders:0,pendingTimesheets:0,availableToday:!1}),g=m([]),b=m(!0),f=j(()=>{const s=new Date().getHours();return s<12?"Guten Morgen":s<18?"Guten Tag":"Guten Abend"});A(async()=>{try{const s=await u.get("/orders");if(g.value=s.data.orders.slice(0,5),n.value.openOrders=s.data.orders.filter(l=>["published","in_progress"].includes(l.status)).length,i.isMitarbeiter&&(n.value.myOrders=s.data.orders.length),i.canManageUsers){const l=await u.get("/timesheets?status=pending");n.value.pendingTimesheets=l.data.timesheets.length}const t=new Date().toISOString().split("T")[0],c=await u.get(`/availability?from=${t}&to=${t}`);n.value.availableToday=c.data.availability.some(l=>{var a;return l.available&&l.user_id===((a=i.user)==null?void 0:a.id)})}catch(s){console.error("Dashboard load error:",s)}finally{b.value=!1}});function _(s){return{draft:"badge-secondary",published:"badge-primary",in_progress:"badge-warning",completed:"badge-success",cancelled:"badge-danger"}[s]||"badge-secondary"}function h(s){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt"}[s]||s}return(s,t)=>{var l;const c=M("router-link");return d(),o("div",V,[e("div",z,[e("h1",D,r(f.value)+", "+r((l=x(i).user)==null?void 0:l.first_name)+"! 👋 ",1),t[0]||(t[0]=e("p",{class:"mt-1 text-primary-100"}," Willkommen zurück bei SeCu. ",-1))]),e("div",N,[e("div",G,[e("div",L,[t[2]||(t[2]=e("div",{class:"w-12 h-12 rounded-lg bg-blue-100 dark:bg-blue-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"📋")],-1)),e("div",null,[t[1]||(t[1]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Offene Aufträge",-1)),e("p",R,r(n.value.openOrders),1)])])]),x(i).isMitarbeiter?(d(),o("div",$,[e("div",E,[t[4]||(t[4]=e("div",{class:"w-12 h-12 rounded-lg bg-green-100 dark:bg-green-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"✅")],-1)),e("div",null,[t[3]||(t[3]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Meine Aufträge",-1)),e("p",F,r(n.value.myOrders),1)])])])):y("",!0),x(i).canManageUsers?(d(),o("div",H,[e("div",I,[t[6]||(t[6]=e("div",{class:"w-12 h-12 rounded-lg bg-yellow-100 dark:bg-yellow-900 flex items-center justify-center"},[e("span",{class:"text-2xl"},"⏱️")],-1)),e("div",null,[t[5]||(t[5]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Ausstehende Stundenzettel",-1)),e("p",U,r(n.value.pendingTimesheets),1)])])])):y("",!0),e("div",q,[e("div",J,[e("div",{class:p(["w-12 h-12 rounded-lg flex items-center justify-center",n.value.availableToday?"bg-green-100 dark:bg-green-900":"bg-gray-100 dark:bg-gray-700"])},[e("span",K,r(n.value.availableToday?"✅":"❓"),1)],2),e("div",null,[t[7]||(t[7]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"},"Heute verfügbar",-1)),e("p",W,r(n.value.availableToday?"Ja":"Nicht gemeldet"),1)])])])]),e("div",P,[e("div",Q,[t[9]||(t[9]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white"}," Aktuelle Aufträge ",-1)),T(c,{to:"/orders",class:"text-sm text-primary-600 hover:text-primary-700"},{default:v(()=>[...t[8]||(t[8]=[B(" Alle anzeigen → ",-1)])]),_:1})]),b.value?(d(),o("div",X," Lädt... ")):g.value.length===0?(d(),o("div",Y," Keine Aufträge vorhanden ")):(d(),o("div",Z,[(d(!0),o(O,null,S(g.value,a=>(d(),C(c,{key:a.id,to:`/orders/${a.id}`,class:"block p-4 rounded-lg border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-colors"},{default:v(()=>[e("div",ee,[e("div",null,[e("h3",te," #"+r(a.number)+" - "+r(a.title),1),a.location?(d(),o("p",se," 📍 "+r(a.location),1)):y("",!0)]),e("span",{class:p(["badge",_(a.status)])},r(h(a.status)),3)])]),_:2},1032,["to"]))),128))]))])])}}});export{ne as default}; diff --git a/dist/assets/HelpView-D57TqZOy.js b/dist/assets/HelpView-DPdUNOsd.js similarity index 99% rename from dist/assets/HelpView-D57TqZOy.js rename to dist/assets/HelpView-DPdUNOsd.js index e0cde91..2ff494c 100644 --- a/dist/assets/HelpView-D57TqZOy.js +++ b/dist/assets/HelpView-DPdUNOsd.js @@ -1,4 +1,4 @@ -import{d as K,c as a,a as n,e as w,b as C,v as F,F as A,x,t as r,r as f,k as m,o as s}from"./index-CVUlgynU.js";const G={class:"space-y-6"},E={class:"flex items-center justify-between"},V={class:"flex items-center gap-3"},W={class:"relative"},N={key:0,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},$=["onClick"],Z={class:"text-3xl mb-3"},I={class:"text-lg font-semibold mb-1 text-gray-900 dark:text-white"},L={class:"text-sm text-gray-500 dark:text-gray-400"},T={class:"text-xs text-gray-400 mt-2"},H={key:1,class:"space-y-4"},O={class:"card bg-gray-50 dark:bg-gray-800"},R={class:"flex items-center gap-3"},q={class:"text-3xl"},j={class:"text-xl font-semibold text-gray-900 dark:text-white"},U={class:"text-sm text-gray-500 dark:text-gray-400"},J={class:"grid gap-3"},Q=["onClick"],X={class:"text-2xl"},Y={class:"font-medium text-gray-900 dark:text-white"},ee={key:2,class:"card"},ne={class:"flex items-center gap-3 mb-6 pb-4 border-b dark:border-gray-700"},te={class:"text-3xl"},ie={class:"text-xl font-semibold text-gray-900 dark:text-white"},re=["innerHTML"],le=K({__name:"HelpView",setup(ae){const l=f(""),u=f(null),o=f(null),g=[{id:"getting-started",name:"Erste Schritte",icon:"🚀",description:"Grundlagen und Einrichtung",articles:[{id:"overview",title:"Übersicht",icon:"📋",content:` +import{d as K,c as a,a as n,e as w,b as C,v as F,F as A,x,t as r,r as f,k as m,o as s}from"./index-DFiGttzi.js";const G={class:"space-y-6"},E={class:"flex items-center justify-between"},V={class:"flex items-center gap-3"},W={class:"relative"},N={key:0,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},$=["onClick"],Z={class:"text-3xl mb-3"},I={class:"text-lg font-semibold mb-1 text-gray-900 dark:text-white"},L={class:"text-sm text-gray-500 dark:text-gray-400"},T={class:"text-xs text-gray-400 mt-2"},H={key:1,class:"space-y-4"},O={class:"card bg-gray-50 dark:bg-gray-800"},R={class:"flex items-center gap-3"},q={class:"text-3xl"},j={class:"text-xl font-semibold text-gray-900 dark:text-white"},U={class:"text-sm text-gray-500 dark:text-gray-400"},J={class:"grid gap-3"},Q=["onClick"],X={class:"text-2xl"},Y={class:"font-medium text-gray-900 dark:text-white"},ee={key:2,class:"card"},ne={class:"flex items-center gap-3 mb-6 pb-4 border-b dark:border-gray-700"},te={class:"text-3xl"},ie={class:"text-xl font-semibold text-gray-900 dark:text-white"},re=["innerHTML"],le=K({__name:"HelpView",setup(ae){const l=f(""),u=f(null),o=f(null),g=[{id:"getting-started",name:"Erste Schritte",icon:"🚀",description:"Grundlagen und Einrichtung",articles:[{id:"overview",title:"Übersicht",icon:"📋",content:` ## Was ist SeCu? SeCu ist eine modulare Mitarbeiterverwaltung speziell für Sicherheitsunternehmen. Die Software hilft Ihnen bei: diff --git a/dist/assets/LoginView-Do3PQjab.js b/dist/assets/LoginView-B3ZkVUmI.js similarity index 98% rename from dist/assets/LoginView-Do3PQjab.js rename to dist/assets/LoginView-B3ZkVUmI.js index acf9343..e8e23e1 100644 --- a/dist/assets/LoginView-Do3PQjab.js +++ b/dist/assets/LoginView-B3ZkVUmI.js @@ -1 +1 @@ -import{d as h,u as q,r as a,c,a as e,t as g,w as B,b as r,v as n,F as N,e as k,f as R,g as U,o as f}from"./index-CVUlgynU.js";const A={class:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 py-12 px-4 sm:px-6 lg:px-8"},M={class:"max-w-md w-full space-y-8"},C={class:"card"},E={class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"},D={class:"grid grid-cols-2 gap-4"},F=["placeholder"],O={key:1,class:"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 rounded-lg text-sm"},T=["disabled"],j={class:"mt-4 text-center"},L=h({__name:"LoginView",setup(z){const w=R(),V=U(),m=q(),o=a(""),u=a(""),i=a(m.orgSlug||""),p=a(""),v=a(!1),s=a(!1),x=a(""),y=a(""),b=a("");async function S(){p.value="",v.value=!0;try{s.value?(await m.register({email:o.value,password:u.value,first_name:x.value,last_name:y.value,phone:b.value,org_slug:i.value}),await m.login(o.value,u.value,i.value)):await m.login(o.value,u.value,i.value);const d=V.query.redirect||"/";w.push(d)}catch(d){p.value=d instanceof Error?d.message:"Anmeldung fehlgeschlagen"}finally{v.value=!1}}return(d,t)=>(f(),c("div",A,[e("div",M,[t[13]||(t[13]=e("div",{class:"text-center"},[e("h1",{class:"text-4xl font-bold text-primary-600"},"🔐 SeCu"),e("p",{class:"mt-2 text-gray-600 dark:text-gray-400"},"Mitarbeiterverwaltung")],-1)),e("div",C,[e("h2",E,g(s.value?"Registrieren":"Anmelden"),1),e("form",{onSubmit:B(S,["prevent"]),class:"space-y-4"},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Organisation ",-1)),r(e("input",{"onUpdate:modelValue":t[0]||(t[0]=l=>i.value=l),type:"text",required:"",class:"input",placeholder:"z.B. demo"},null,512),[[n,i.value]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," E-Mail ",-1)),r(e("input",{"onUpdate:modelValue":t[1]||(t[1]=l=>o.value=l),type:"email",required:"",class:"input",placeholder:"name@firma.de"},null,512),[[n,o.value]])]),s.value?(f(),c(N,{key:0},[e("div",D,[e("div",null,[t[9]||(t[9]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Vorname ",-1)),r(e("input",{"onUpdate:modelValue":t[2]||(t[2]=l=>x.value=l),type:"text",required:"",class:"input"},null,512),[[n,x.value]])]),e("div",null,[t[10]||(t[10]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Nachname ",-1)),r(e("input",{"onUpdate:modelValue":t[3]||(t[3]=l=>y.value=l),type:"text",required:"",class:"input"},null,512),[[n,y.value]])])]),e("div",null,[t[11]||(t[11]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Telefon ",-1)),r(e("input",{"onUpdate:modelValue":t[4]||(t[4]=l=>b.value=l),type:"tel",class:"input",placeholder:"Optional"},null,512),[[n,b.value]])])],64)):k("",!0),e("div",null,[t[12]||(t[12]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort ",-1)),r(e("input",{"onUpdate:modelValue":t[5]||(t[5]=l=>u.value=l),type:"password",required:"",class:"input",placeholder:s.value?"Mindestens 8 Zeichen":""},null,8,F),[[n,u.value]])]),p.value?(f(),c("div",O,g(p.value),1)):k("",!0),e("button",{type:"submit",disabled:v.value,class:"btn btn-primary w-full"},g(v.value?"Bitte warten...":s.value?"Registrieren":"Anmelden"),9,T)],32),e("div",j,[e("button",{type:"button",class:"text-sm text-primary-600 hover:text-primary-700",onClick:t[6]||(t[6]=l=>s.value=!s.value)},g(s.value?"Bereits registriert? Anmelden":"Noch kein Konto? Registrieren"),1)])])])]))}});export{L as default}; +import{d as h,u as q,r as a,c,a as e,t as g,w as B,b as r,v as n,F as N,e as k,f as R,g as U,o as f}from"./index-DFiGttzi.js";const A={class:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 py-12 px-4 sm:px-6 lg:px-8"},M={class:"max-w-md w-full space-y-8"},C={class:"card"},E={class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"},D={class:"grid grid-cols-2 gap-4"},F=["placeholder"],O={key:1,class:"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 rounded-lg text-sm"},T=["disabled"],j={class:"mt-4 text-center"},L=h({__name:"LoginView",setup(z){const w=R(),V=U(),m=q(),o=a(""),u=a(""),i=a(m.orgSlug||""),p=a(""),v=a(!1),s=a(!1),x=a(""),y=a(""),b=a("");async function S(){p.value="",v.value=!0;try{s.value?(await m.register({email:o.value,password:u.value,first_name:x.value,last_name:y.value,phone:b.value,org_slug:i.value}),await m.login(o.value,u.value,i.value)):await m.login(o.value,u.value,i.value);const d=V.query.redirect||"/";w.push(d)}catch(d){p.value=d instanceof Error?d.message:"Anmeldung fehlgeschlagen"}finally{v.value=!1}}return(d,t)=>(f(),c("div",A,[e("div",M,[t[13]||(t[13]=e("div",{class:"text-center"},[e("h1",{class:"text-4xl font-bold text-primary-600"},"🔐 SeCu"),e("p",{class:"mt-2 text-gray-600 dark:text-gray-400"},"Mitarbeiterverwaltung")],-1)),e("div",C,[e("h2",E,g(s.value?"Registrieren":"Anmelden"),1),e("form",{onSubmit:B(S,["prevent"]),class:"space-y-4"},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Organisation ",-1)),r(e("input",{"onUpdate:modelValue":t[0]||(t[0]=l=>i.value=l),type:"text",required:"",class:"input",placeholder:"z.B. demo"},null,512),[[n,i.value]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," E-Mail ",-1)),r(e("input",{"onUpdate:modelValue":t[1]||(t[1]=l=>o.value=l),type:"email",required:"",class:"input",placeholder:"name@firma.de"},null,512),[[n,o.value]])]),s.value?(f(),c(N,{key:0},[e("div",D,[e("div",null,[t[9]||(t[9]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Vorname ",-1)),r(e("input",{"onUpdate:modelValue":t[2]||(t[2]=l=>x.value=l),type:"text",required:"",class:"input"},null,512),[[n,x.value]])]),e("div",null,[t[10]||(t[10]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Nachname ",-1)),r(e("input",{"onUpdate:modelValue":t[3]||(t[3]=l=>y.value=l),type:"text",required:"",class:"input"},null,512),[[n,y.value]])])]),e("div",null,[t[11]||(t[11]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Telefon ",-1)),r(e("input",{"onUpdate:modelValue":t[4]||(t[4]=l=>b.value=l),type:"tel",class:"input",placeholder:"Optional"},null,512),[[n,b.value]])])],64)):k("",!0),e("div",null,[t[12]||(t[12]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort ",-1)),r(e("input",{"onUpdate:modelValue":t[5]||(t[5]=l=>u.value=l),type:"password",required:"",class:"input",placeholder:s.value?"Mindestens 8 Zeichen":""},null,8,F),[[n,u.value]])]),p.value?(f(),c("div",O,g(p.value),1)):k("",!0),e("button",{type:"submit",disabled:v.value,class:"btn btn-primary w-full"},g(v.value?"Bitte warten...":s.value?"Registrieren":"Anmelden"),9,T)],32),e("div",j,[e("button",{type:"button",class:"text-sm text-primary-600 hover:text-primary-700",onClick:t[6]||(t[6]=l=>s.value=!s.value)},g(s.value?"Bereits registriert? Anmelden":"Noch kein Konto? Registrieren"),1)])])])]))}});export{L as default}; diff --git a/dist/assets/ModulesView-FSR3_RHO.js b/dist/assets/ModulesView-BE2FPScI.js similarity index 98% rename from dist/assets/ModulesView-FSR3_RHO.js rename to dist/assets/ModulesView-BE2FPScI.js index 8ee5eb7..47a9d8d 100644 --- a/dist/assets/ModulesView-FSR3_RHO.js +++ b/dist/assets/ModulesView-BE2FPScI.js @@ -1 +1 @@ -import{d as k,q as h,m as d,c as l,a as t,t as r,e as u,F as w,x as M,r as c,o as n,n as f}from"./index-CVUlgynU.js";const S={class:"space-y-6"},C={key:0,class:"card bg-gradient-to-r from-primary-500 to-primary-700 text-white"},B={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},V={class:"text-2xl font-bold"},z={class:"text-2xl font-bold"},A={class:"text-2xl font-bold"},F={class:"text-2xl font-bold"},D={class:"card"},E={key:0,class:"text-center py-8 text-gray-500"},L={key:1,class:"space-y-4"},N={class:"flex-1"},$={class:"flex items-center gap-2"},j={class:"font-medium text-gray-900 dark:text-white"},q={key:0,class:"badge badge-primary"},H={key:0,class:"text-sm text-gray-500 mt-1"},P=["disabled","onClick"],K=k({__name:"ModulesView",setup(G){const g=c([]),i=c(!0),o=c(null);h(async()=>{await Promise.all([b(),v()])});async function b(){i.value=!0;try{const s=await d.get("/modules/org");g.value=s.data.modules}catch(s){console.error(s)}finally{i.value=!1}}async function v(){try{const s=await d.get("/modules/developer/status");o.value=s.data}catch{console.log("Dev status not available")}}async function _(s){if(!s.is_core)try{await d.post(`/modules/${s.id}/toggle`,{enabled:!s.enabled}),s.enabled=!s.enabled}catch(e){alert(e instanceof Error?e.message:"Fehler")}}return(s,e)=>{var m,p,y,x;return n(),l("div",S,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"⚙️ Module",-1)),o.value?(n(),l("div",C,[e[4]||(e[4]=t("h2",{class:"text-lg font-semibold mb-4"},"System Status",-1)),t("div",B,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-primary-100 text-sm"},"Benutzer",-1)),t("p",V,r(((m=o.value.stats)==null?void 0:m.user_count)||0),1)]),t("div",null,[e[1]||(e[1]=t("p",{class:"text-primary-100 text-sm"},"Aufträge",-1)),t("p",z,r(((p=o.value.stats)==null?void 0:p.order_count)||0),1)]),t("div",null,[e[2]||(e[2]=t("p",{class:"text-primary-100 text-sm"},"Stundenzettel",-1)),t("p",A,r(((y=o.value.stats)==null?void 0:y.timesheet_count)||0),1)]),t("div",null,[e[3]||(e[3]=t("p",{class:"text-primary-100 text-sm"},"Aktive Module",-1)),t("p",F,r(((x=o.value.stats)==null?void 0:x.enabled_modules)||0),1)])])])):u("",!0),t("div",D,[e[5]||(e[5]=t("h2",{class:"text-lg font-semibold mb-4"},"Verfügbare Module",-1)),i.value?(n(),l("div",E,"Lädt...")):(n(),l("div",L,[(n(!0),l(w,null,M(g.value,a=>(n(),l("div",{key:a.id,class:"flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[t("div",N,[t("div",$,[t("h3",j,r(a.display_name),1),a.is_core?(n(),l("span",q,"Core")):u("",!0)]),a.description?(n(),l("p",H,r(a.description),1)):u("",!0)]),t("button",{disabled:a.is_core,class:f(["relative inline-flex h-6 w-11 items-center rounded-full transition-colors",a.enabled?"bg-primary-600":"bg-gray-200 dark:bg-gray-600",a.is_core?"opacity-50 cursor-not-allowed":"cursor-pointer"]),onClick:I=>_(a)},[t("span",{class:f(["inline-block h-4 w-4 transform rounded-full bg-white transition-transform",a.enabled?"translate-x-6":"translate-x-1"])},null,2)],10,P)]))),128))]))]),e[7]||(e[7]=t("div",{class:"card"},[t("h2",{class:"text-lg font-semibold mb-2"},"Hinweis"),t("p",{class:"text-gray-500 text-sm"}," Core-Module (Basis-System, Auftragsverwaltung) können nicht deaktiviert werden. Änderungen an Modulen werden sofort wirksam. ")],-1))])}}});export{K as default}; +import{d as k,q as h,m as d,c as l,a as t,t as r,e as u,F as w,x as M,r as c,o as n,n as f}from"./index-DFiGttzi.js";const S={class:"space-y-6"},C={key:0,class:"card bg-gradient-to-r from-primary-500 to-primary-700 text-white"},B={class:"grid grid-cols-2 md:grid-cols-4 gap-4"},V={class:"text-2xl font-bold"},z={class:"text-2xl font-bold"},A={class:"text-2xl font-bold"},F={class:"text-2xl font-bold"},D={class:"card"},E={key:0,class:"text-center py-8 text-gray-500"},L={key:1,class:"space-y-4"},N={class:"flex-1"},$={class:"flex items-center gap-2"},j={class:"font-medium text-gray-900 dark:text-white"},q={key:0,class:"badge badge-primary"},H={key:0,class:"text-sm text-gray-500 mt-1"},P=["disabled","onClick"],K=k({__name:"ModulesView",setup(G){const g=c([]),i=c(!0),o=c(null);h(async()=>{await Promise.all([b(),v()])});async function b(){i.value=!0;try{const s=await d.get("/modules/org");g.value=s.data.modules}catch(s){console.error(s)}finally{i.value=!1}}async function v(){try{const s=await d.get("/modules/developer/status");o.value=s.data}catch{console.log("Dev status not available")}}async function _(s){if(!s.is_core)try{await d.post(`/modules/${s.id}/toggle`,{enabled:!s.enabled}),s.enabled=!s.enabled}catch(e){alert(e instanceof Error?e.message:"Fehler")}}return(s,e)=>{var m,p,y,x;return n(),l("div",S,[e[6]||(e[6]=t("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"⚙️ Module",-1)),o.value?(n(),l("div",C,[e[4]||(e[4]=t("h2",{class:"text-lg font-semibold mb-4"},"System Status",-1)),t("div",B,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-primary-100 text-sm"},"Benutzer",-1)),t("p",V,r(((m=o.value.stats)==null?void 0:m.user_count)||0),1)]),t("div",null,[e[1]||(e[1]=t("p",{class:"text-primary-100 text-sm"},"Aufträge",-1)),t("p",z,r(((p=o.value.stats)==null?void 0:p.order_count)||0),1)]),t("div",null,[e[2]||(e[2]=t("p",{class:"text-primary-100 text-sm"},"Stundenzettel",-1)),t("p",A,r(((y=o.value.stats)==null?void 0:y.timesheet_count)||0),1)]),t("div",null,[e[3]||(e[3]=t("p",{class:"text-primary-100 text-sm"},"Aktive Module",-1)),t("p",F,r(((x=o.value.stats)==null?void 0:x.enabled_modules)||0),1)])])])):u("",!0),t("div",D,[e[5]||(e[5]=t("h2",{class:"text-lg font-semibold mb-4"},"Verfügbare Module",-1)),i.value?(n(),l("div",E,"Lädt...")):(n(),l("div",L,[(n(!0),l(w,null,M(g.value,a=>(n(),l("div",{key:a.id,class:"flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[t("div",N,[t("div",$,[t("h3",j,r(a.display_name),1),a.is_core?(n(),l("span",q,"Core")):u("",!0)]),a.description?(n(),l("p",H,r(a.description),1)):u("",!0)]),t("button",{disabled:a.is_core,class:f(["relative inline-flex h-6 w-11 items-center rounded-full transition-colors",a.enabled?"bg-primary-600":"bg-gray-200 dark:bg-gray-600",a.is_core?"opacity-50 cursor-not-allowed":"cursor-pointer"]),onClick:I=>_(a)},[t("span",{class:f(["inline-block h-4 w-4 transform rounded-full bg-white transition-transform",a.enabled?"translate-x-6":"translate-x-1"])},null,2)],10,P)]))),128))]))]),e[7]||(e[7]=t("div",{class:"card"},[t("h2",{class:"text-lg font-semibold mb-2"},"Hinweis"),t("p",{class:"text-gray-500 text-sm"}," Core-Module (Basis-System, Auftragsverwaltung) können nicht deaktiviert werden. Änderungen an Modulen werden sofort wirksam. ")],-1))])}}});export{K as default}; diff --git a/dist/assets/ObjectsView-CqpXdUlY.js b/dist/assets/ObjectsView-3IknzInA.js similarity index 99% rename from dist/assets/ObjectsView-CqpXdUlY.js rename to dist/assets/ObjectsView-3IknzInA.js index d70f4a7..7b23d62 100644 --- a/dist/assets/ObjectsView-CqpXdUlY.js +++ b/dist/assets/ObjectsView-3IknzInA.js @@ -1 +1 @@ -import{d as te,u as se,q as le,m as g,c as l,a as t,y as k,e as r,b as d,v as m,s as T,F as _,x as w,t as i,w as K,B as q,A as ne,r as c,k as oe,o as n,p as H,n as ae}from"./index-CVUlgynU.js";const ie={class:"space-y-6"},ue={class:"flex items-center justify-between"},de={class:"card"},re={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},me=["value"],pe={class:"flex items-end"},ce={class:"text-sm text-gray-500"},ve={key:0,class:"text-center py-12"},be={key:1,class:"card text-center py-12 text-gray-500"},ge={key:2,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},ye=["onClick"],xe={class:"flex items-start gap-4"},fe={class:"text-4xl"},ke={class:"flex-1 min-w-0"},_e={class:"font-semibold text-gray-900 dark:text-white truncate"},we={key:0,class:"text-sm text-gray-500"},he={key:1,class:"text-sm text-gray-500"},je={class:"flex gap-2 mt-2"},Ce={class:"text-xs bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded"},Ue={key:0,class:"text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded"},Ve={key:1,class:"text-xs bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 px-2 py-1 rounded"},Me=["onClick"],$e=["onClick"],Se={key:3,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},Oe={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-4xl mx-4 max-h-[90vh] overflow-y-auto"},Ne={class:"p-6"},ze={class:"flex items-start justify-between mb-6"},Ae={class:"flex items-center gap-4"},Fe={class:"text-4xl"},Te={class:"text-2xl font-bold text-gray-900 dark:text-white"},Ke={key:0,class:"text-gray-500"},De={class:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-6"},qe={key:0,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Be={class:"font-medium"},Ie={key:1,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Le={class:"font-medium truncate"},He={key:2,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Pe={class:"font-medium"},Ee={key:3,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Ze={class:"font-medium"},Re={key:0,class:"mb-6"},Qe={class:"text-gray-600 dark:text-gray-300 whitespace-pre-wrap"},Ge={key:1,class:"grid grid-cols-2 gap-4 mb-6"},Je={key:0,class:"bg-yellow-50 dark:bg-yellow-900/20 p-4 rounded"},We={class:"text-sm whitespace-pre-wrap"},Xe={key:1,class:"bg-blue-50 dark:bg-blue-900/20 p-4 rounded"},Ye={class:"text-sm whitespace-pre-wrap"},et={class:"mb-6"},tt={class:"flex items-center justify-between mb-3"},st={key:0,class:"text-gray-500 text-sm"},lt={key:1,class:"grid gap-2"},nt={class:"font-medium"},ot={key:0,class:"text-xs bg-blue-500 text-white px-1 rounded ml-1"},at={key:1,class:"text-xs bg-red-500 text-white px-1 rounded ml-1"},it={key:0,class:"text-sm text-gray-500"},ut={key:1,class:"text-sm"},dt=["onClick"],rt={class:"mb-6"},mt={class:"flex items-center justify-between mb-3"},pt={key:0,class:"text-gray-500 text-sm"},ct={key:1,class:"space-y-3"},vt={class:"flex items-start justify-between"},bt={class:"font-medium"},gt={class:"text-xs text-gray-500 ml-2"},yt={class:"text-sm mt-1 whitespace-pre-wrap text-gray-600 dark:text-gray-300"},xt=["onClick"],ft={key:2,class:"mb-6"},kt={class:"flex flex-wrap gap-2"},_t={class:"flex justify-end pt-4 border-t dark:border-gray-700"},wt={key:4,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},ht={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-2xl mx-4 max-h-[90vh] overflow-y-auto"},jt={class:"p-6"},Ct={class:"text-xl font-semibold mb-4"},Ut={class:"grid grid-cols-2 gap-4"},Vt={class:"col-span-2"},Mt=["value"],$t={class:"grid grid-cols-4 gap-4"},St={class:"col-span-2"},Ot={class:"col-span-2"},Nt={class:"grid grid-cols-2 gap-4"},zt={class:"flex gap-3 pt-4"},At=["disabled"],Ft={key:5,class:"fixed inset-0 z-[60] flex items-center justify-center bg-black/50"},Tt={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-md mx-4"},Kt={class:"p-6"},Dt={class:"grid grid-cols-2 gap-4"},qt={class:"grid grid-cols-2 gap-4"},Bt={class:"flex gap-4"},It={class:"flex items-center gap-2"},Lt={class:"flex items-center gap-2"},Ht={class:"flex gap-3"},Pt={key:6,class:"fixed inset-0 z-[60] flex items-center justify-center bg-black/50"},Et={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-md mx-4"},Zt={class:"p-6"},Rt={class:"flex items-center gap-2"},Qt={class:"flex gap-3"},Wt=te({__name:"ObjectsView",setup(Gt){const y=se(),B=c(!0),I=c([]),h=c([]),o=c(null),x=c(""),$=c(""),S=c("active"),j=c(!1),O=c(!1),C=c(null),u=c({name:"",short_name:"",object_number:"",object_type:"other",street:"",house_number:"",postal_code:"",city:"",phone:"",email:"",description:"",access_info:"",parking_info:"",customer_name:"",size_sqm:null,floors:null}),N=c(!1),z=c(!1),p=c({name:"",role:"",company:"",phone:"",mobile:"",email:"",availability:"",is_primary:!1,is_emergency:!1,notes:""}),A=c(!1),v=c({title:"",category:"general",content:"",is_critical:!1});le(async()=>{await Promise.all([f(),P()]),B.value=!1});async function f(){try{const a=new URLSearchParams;S.value&&a.append("status",S.value),$.value&&a.append("type",$.value),x.value&&a.append("search",x.value),I.value=await g.get(`/objects?${a}`)}catch(a){console.error("Failed to load objects:",a)}}async function P(){try{h.value=await g.get("/objects/types")}catch(a){console.error("Failed to load types:",a)}}async function U(a){try{o.value=await g.get(`/objects/${a}`),O.value=!0}catch(e){console.error("Failed to load object:",e)}}const D=oe(()=>{let a=[...I.value];if(x.value){const e=x.value.toLowerCase();a=a.filter(b=>{var V,M,s;return b.name.toLowerCase().includes(e)||((V=b.city)==null?void 0:V.toLowerCase().includes(e))||((M=b.object_number)==null?void 0:M.toLowerCase().includes(e))||((s=b.customer_name)==null?void 0:s.toLowerCase().includes(e))})}return a});function E(){C.value=null,u.value={name:"",short_name:"",object_number:"",object_type:"other",street:"",house_number:"",postal_code:"",city:"",phone:"",email:"",description:"",access_info:"",parking_info:"",customer_name:"",size_sqm:null,floors:null},j.value=!0}function Z(a){C.value=a,u.value={...a},j.value=!0}async function R(){if(u.value.name){N.value=!0;try{C.value?await g.put(`/objects/${C.value.id}`,u.value):await g.post("/objects",u.value),j.value=!1,await f()}catch(a){console.error("Failed to save:",a)}finally{N.value=!1}}}async function Q(a){if(confirm("Objekt wirklich archivieren?"))try{await g.delete(`/objects/${a}`),await f()}catch(e){console.error("Failed to delete:",e)}}async function G(){if(!(!p.value.name||!o.value))try{await g.post(`/objects/${o.value.id}/contacts`,p.value),await U(o.value.id),z.value=!1,p.value={name:"",role:"",company:"",phone:"",mobile:"",email:"",availability:"",is_primary:!1,is_emergency:!1,notes:""}}catch(a){console.error("Failed to add contact:",a)}}async function J(a){if(confirm("Kontakt löschen?"))try{await g.delete(`/objects/${o.value.id}/contacts/${a}`),await U(o.value.id)}catch(e){console.error("Failed to delete:",e)}}async function W(){if(!(!v.value.title||!v.value.content||!o.value))try{await g.post(`/objects/${o.value.id}/instructions`,v.value),await U(o.value.id),A.value=!1,v.value={title:"",category:"general",content:"",is_critical:!1}}catch(a){console.error("Failed to add instruction:",a)}}async function X(a){if(confirm("Dienstanweisung löschen?"))try{await g.delete(`/objects/${o.value.id}/instructions/${a}`),await U(o.value.id)}catch(e){console.error("Failed to delete:",e)}}function L(a){const e=h.value.find(b=>b.key===a);return(e==null?void 0:e.icon)||"📍"}function Y(a){const e=h.value.find(b=>b.key===a);return(e==null?void 0:e.name)||a}function ee(a){return{general:"Allgemein",patrol:"Rundgang",emergency:"Notfall",access:"Zugang",reporting:"Meldewesen"}[a]||a}return(a,e)=>{var b,V,M;return n(),l("div",ie,[t("div",ue,[e[37]||(e[37]=t("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🏢 Objekte",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:E,class:"btn btn-primary"}," ➕ Neues Objekt ")):r("",!0)]),t("div",de,[t("div",re,[t("div",null,[e[38]||(e[38]=t("label",{class:"block text-sm font-medium mb-1"},"🔍 Suche",-1)),d(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>x.value=s),type:"text",class:"input",placeholder:"Name, Stadt, Kunde...",onInput:f},null,544),[[m,x.value]])]),t("div",null,[e[40]||(e[40]=t("label",{class:"block text-sm font-medium mb-1"},"🏷️ Typ",-1)),d(t("select",{"onUpdate:modelValue":e[1]||(e[1]=s=>$.value=s),class:"input",onChange:f},[e[39]||(e[39]=t("option",{value:""},"Alle Typen",-1)),(n(!0),l(_,null,w(h.value,s=>(n(),l("option",{key:s.key,value:s.key},i(s.icon)+" "+i(s.name),9,me))),128))],544),[[T,$.value]])]),t("div",null,[e[42]||(e[42]=t("label",{class:"block text-sm font-medium mb-1"},"📊 Status",-1)),d(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>S.value=s),class:"input",onChange:f},[...e[41]||(e[41]=[t("option",{value:"active"},"Aktiv",-1),t("option",{value:"inactive"},"Inaktiv",-1),t("option",{value:"archived"},"Archiviert",-1),t("option",{value:"all"},"Alle",-1)])],544),[[T,S.value]])]),t("div",pe,[t("p",ce,i(D.value.length)+" Objekte ",1)])])]),B.value?(n(),l("div",ve,[...e[43]||(e[43]=[t("div",{class:"animate-spin text-4xl"},"⏳",-1)])])):D.value.length===0?(n(),l("div",be," Keine Objekte gefunden ")):(n(),l("div",ge,[(n(!0),l(_,null,w(D.value,s=>(n(),l("div",{key:s.id,class:"card hover:shadow-lg transition-all cursor-pointer",onClick:F=>U(s.id)},[t("div",xe,[t("div",fe,i(L(s.object_type)),1),t("div",ke,[t("h3",_e,i(s.name),1),s.city?(n(),l("p",we," 📍 "+i(s.postal_code)+" "+i(s.city),1)):r("",!0),s.customer_name?(n(),l("p",he," 👤 "+i(s.customer_name),1)):r("",!0),t("div",je,[t("span",Ce,i(Y(s.object_type)),1),s.contact_count?(n(),l("span",Ue," 👥 "+i(s.contact_count),1)):r("",!0),s.checkpoint_count?(n(),l("span",Ve," 📍 "+i(s.checkpoint_count)+" CP ",1)):r("",!0)])])]),k(y).canManageUsers?(n(),l("div",{key:0,class:"flex gap-2 mt-4 pt-3 border-t dark:border-gray-700",onClick:e[3]||(e[3]=K(()=>{},["stop"]))},[t("button",{onClick:F=>Z(s),class:"text-sm text-blue-600 hover:underline"}," ✏️ Bearbeiten ",8,Me),t("button",{onClick:F=>Q(s.id),class:"text-sm text-red-600 hover:underline"}," 🗑️ Archivieren ",8,$e)])):r("",!0)],8,ye))),128))])),O.value&&o.value?(n(),l("div",Se,[t("div",Oe,[t("div",Ne,[t("div",ze,[t("div",Ae,[t("span",Fe,i(L(o.value.object_type)),1),t("div",null,[t("h2",Te,i(o.value.name),1),o.value.city?(n(),l("p",Ke,i(o.value.street)+" "+i(o.value.house_number)+", "+i(o.value.postal_code)+" "+i(o.value.city),1)):r("",!0)])]),t("button",{onClick:e[4]||(e[4]=s=>O.value=!1),class:"text-2xl hover:bg-gray-100 dark:hover:bg-gray-700 p-2 rounded"}," ✕ ")]),t("div",De,[o.value.phone?(n(),l("div",qe,[e[44]||(e[44]=t("p",{class:"text-xs text-gray-500"},"📞 Telefon",-1)),t("p",Be,i(o.value.phone),1)])):r("",!0),o.value.email?(n(),l("div",Ie,[e[45]||(e[45]=t("p",{class:"text-xs text-gray-500"},"📧 E-Mail",-1)),t("p",Le,i(o.value.email),1)])):r("",!0),o.value.customer_name?(n(),l("div",He,[e[46]||(e[46]=t("p",{class:"text-xs text-gray-500"},"👤 Kunde",-1)),t("p",Pe,i(o.value.customer_name),1)])):r("",!0),o.value.object_number?(n(),l("div",Ee,[e[47]||(e[47]=t("p",{class:"text-xs text-gray-500"},"# Objektnummer",-1)),t("p",Ze,i(o.value.object_number),1)])):r("",!0)]),o.value.description?(n(),l("div",Re,[e[48]||(e[48]=t("h3",{class:"font-semibold mb-2"},"📝 Beschreibung",-1)),t("p",Qe,i(o.value.description),1)])):r("",!0),o.value.access_info||o.value.parking_info?(n(),l("div",Ge,[o.value.access_info?(n(),l("div",Je,[e[49]||(e[49]=t("h3",{class:"font-semibold mb-2"},"🔑 Zugang",-1)),t("p",We,i(o.value.access_info),1)])):r("",!0),o.value.parking_info?(n(),l("div",Xe,[e[50]||(e[50]=t("h3",{class:"font-semibold mb-2"},"🅿️ Parken",-1)),t("p",Ye,i(o.value.parking_info),1)])):r("",!0)])):r("",!0),t("div",et,[t("div",tt,[e[51]||(e[51]=t("h3",{class:"font-semibold"},"👥 Ansprechpartner",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:e[5]||(e[5]=s=>z.value=!0),class:"text-sm text-blue-600 hover:underline"}," ➕ Hinzufügen ")):r("",!0)]),(b=o.value.contacts)!=null&&b.length?(n(),l("div",lt,[(n(!0),l(_,null,w(o.value.contacts,s=>(n(),l("div",{key:s.id,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700 p-3 rounded"},[t("div",null,[t("p",nt,[H(i(s.name)+" ",1),s.is_primary?(n(),l("span",ot,"Haupt")):r("",!0),s.is_emergency?(n(),l("span",at,"Notfall")):r("",!0)]),s.role?(n(),l("p",it,i(s.role),1)):r("",!0),s.phone||s.mobile?(n(),l("p",ut," 📞 "+i(s.phone||s.mobile),1)):r("",!0)]),k(y).canManageUsers?(n(),l("button",{key:0,onClick:F=>J(s.id),class:"text-red-500 hover:text-red-700"}," 🗑️ ",8,dt)):r("",!0)]))),128))])):(n(),l("div",st," Keine Kontakte hinterlegt "))]),t("div",rt,[t("div",mt,[e[52]||(e[52]=t("h3",{class:"font-semibold"},"📋 Dienstanweisungen",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:e[6]||(e[6]=s=>A.value=!0),class:"text-sm text-blue-600 hover:underline"}," ➕ Hinzufügen ")):r("",!0)]),(V=o.value.instructions)!=null&&V.length?(n(),l("div",ct,[(n(!0),l(_,null,w(o.value.instructions,s=>(n(),l("div",{key:s.id,class:ae(["p-4 rounded border-l-4",s.is_critical?"border-red-500 bg-red-50 dark:bg-red-900/20":"border-gray-300 bg-gray-50 dark:bg-gray-700"])},[t("div",vt,[t("div",null,[t("p",bt,[H(i(s.title)+" ",1),t("span",gt,i(ee(s.category)),1)]),t("p",yt,i(s.content),1)]),k(y).canManageUsers?(n(),l("button",{key:0,onClick:F=>X(s.id),class:"text-red-500 hover:text-red-700 ml-2"}," 🗑️ ",8,xt)):r("",!0)])],2))),128))])):(n(),l("div",pt," Keine Dienstanweisungen hinterlegt "))]),(M=o.value.checkpoints)!=null&&M.length?(n(),l("div",ft,[e[53]||(e[53]=t("h3",{class:"font-semibold mb-3"},"📍 Kontrollpunkte",-1)),t("div",kt,[(n(!0),l(_,null,w(o.value.checkpoints,s=>(n(),l("span",{key:s.id,class:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 px-3 py-1 rounded text-sm"},i(s.name),1))),128))])])):r("",!0),t("div",_t,[t("button",{onClick:e[7]||(e[7]=s=>O.value=!1),class:"btn"}," Schließen ")])])])])):r("",!0),j.value?(n(),l("div",wt,[t("div",ht,[t("div",jt,[t("h2",Ct,i(C.value?"✏️ Objekt bearbeiten":"➕ Neues Objekt"),1),t("form",{onSubmit:K(R,["prevent"]),class:"space-y-4"},[t("div",Ut,[t("div",Vt,[e[54]||(e[54]=t("label",{class:"block text-sm font-medium mb-1"},"Name *",-1)),d(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>u.value.name=s),type:"text",class:"input",required:""},null,512),[[m,u.value.name]])]),t("div",null,[e[55]||(e[55]=t("label",{class:"block text-sm font-medium mb-1"},"Kurzname",-1)),d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>u.value.short_name=s),type:"text",class:"input"},null,512),[[m,u.value.short_name]])]),t("div",null,[e[56]||(e[56]=t("label",{class:"block text-sm font-medium mb-1"},"Objektnummer",-1)),d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=s=>u.value.object_number=s),type:"text",class:"input"},null,512),[[m,u.value.object_number]])]),t("div",null,[e[57]||(e[57]=t("label",{class:"block text-sm font-medium mb-1"},"Typ",-1)),d(t("select",{"onUpdate:modelValue":e[11]||(e[11]=s=>u.value.object_type=s),class:"input"},[(n(!0),l(_,null,w(h.value,s=>(n(),l("option",{key:s.key,value:s.key},i(s.icon)+" "+i(s.name),9,Mt))),128))],512),[[T,u.value.object_type]])]),t("div",null,[e[58]||(e[58]=t("label",{class:"block text-sm font-medium mb-1"},"Kunde",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>u.value.customer_name=s),type:"text",class:"input"},null,512),[[m,u.value.customer_name]])])]),e[68]||(e[68]=t("hr",{class:"dark:border-gray-700"},null,-1)),t("div",$t,[t("div",St,[e[59]||(e[59]=t("label",{class:"block text-sm font-medium mb-1"},"Straße",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>u.value.street=s),type:"text",class:"input"},null,512),[[m,u.value.street]])]),t("div",null,[e[60]||(e[60]=t("label",{class:"block text-sm font-medium mb-1"},"Nr.",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>u.value.house_number=s),type:"text",class:"input"},null,512),[[m,u.value.house_number]])]),t("div",null,[e[61]||(e[61]=t("label",{class:"block text-sm font-medium mb-1"},"PLZ",-1)),d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>u.value.postal_code=s),type:"text",class:"input"},null,512),[[m,u.value.postal_code]])]),t("div",Ot,[e[62]||(e[62]=t("label",{class:"block text-sm font-medium mb-1"},"Stadt",-1)),d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>u.value.city=s),type:"text",class:"input"},null,512),[[m,u.value.city]])]),t("div",null,[e[63]||(e[63]=t("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=s=>u.value.phone=s),type:"tel",class:"input"},null,512),[[m,u.value.phone]])]),t("div",null,[e[64]||(e[64]=t("label",{class:"block text-sm font-medium mb-1"},"E-Mail",-1)),d(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>u.value.email=s),type:"email",class:"input"},null,512),[[m,u.value.email]])])]),t("div",null,[e[65]||(e[65]=t("label",{class:"block text-sm font-medium mb-1"},"Beschreibung",-1)),d(t("textarea",{"onUpdate:modelValue":e[19]||(e[19]=s=>u.value.description=s),class:"input",rows:"2"},null,512),[[m,u.value.description]])]),t("div",Nt,[t("div",null,[e[66]||(e[66]=t("label",{class:"block text-sm font-medium mb-1"},"🔑 Zugangsinfos",-1)),d(t("textarea",{"onUpdate:modelValue":e[20]||(e[20]=s=>u.value.access_info=s),class:"input",rows:"2",placeholder:"Schlüssel, Codes..."},null,512),[[m,u.value.access_info]])]),t("div",null,[e[67]||(e[67]=t("label",{class:"block text-sm font-medium mb-1"},"🅿️ Parkhinweise",-1)),d(t("textarea",{"onUpdate:modelValue":e[21]||(e[21]=s=>u.value.parking_info=s),class:"input",rows:"2"},null,512),[[m,u.value.parking_info]])])]),t("div",zt,[t("button",{type:"button",onClick:e[22]||(e[22]=s=>j.value=!1),class:"btn flex-1"}," Abbrechen "),t("button",{type:"submit",disabled:N.value,class:"btn btn-primary flex-1"},i(N.value?"Speichern...":"Speichern"),9,At)])],32)])])])):r("",!0),z.value?(n(),l("div",Ft,[t("div",Tt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-xl font-semibold mb-4"},"👤 Kontakt hinzufügen",-1)),t("form",{onSubmit:K(G,["prevent"]),class:"space-y-4"},[t("div",null,[e[69]||(e[69]=t("label",{class:"block text-sm font-medium mb-1"},"Name *",-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>p.value.name=s),type:"text",class:"input",required:""},null,512),[[m,p.value.name]])]),t("div",Dt,[t("div",null,[e[70]||(e[70]=t("label",{class:"block text-sm font-medium mb-1"},"Rolle",-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>p.value.role=s),type:"text",class:"input",placeholder:"z.B. Hausmeister"},null,512),[[m,p.value.role]])]),t("div",null,[e[71]||(e[71]=t("label",{class:"block text-sm font-medium mb-1"},"Firma",-1)),d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=s=>p.value.company=s),type:"text",class:"input"},null,512),[[m,p.value.company]])])]),t("div",qt,[t("div",null,[e[72]||(e[72]=t("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>p.value.phone=s),type:"tel",class:"input"},null,512),[[m,p.value.phone]])]),t("div",null,[e[73]||(e[73]=t("label",{class:"block text-sm font-medium mb-1"},"Mobil",-1)),d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>p.value.mobile=s),type:"tel",class:"input"},null,512),[[m,p.value.mobile]])])]),t("div",null,[e[74]||(e[74]=t("label",{class:"block text-sm font-medium mb-1"},"E-Mail",-1)),d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>p.value.email=s),type:"email",class:"input"},null,512),[[m,p.value.email]])]),t("div",Bt,[t("label",It,[d(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>p.value.is_primary=s),type:"checkbox",class:"rounded"},null,512),[[q,p.value.is_primary]]),e[75]||(e[75]=t("span",{class:"text-sm"},"Hauptkontakt",-1))]),t("label",Lt,[d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>p.value.is_emergency=s),type:"checkbox",class:"rounded"},null,512),[[q,p.value.is_emergency]]),e[76]||(e[76]=t("span",{class:"text-sm"},"Notfallkontakt",-1))])]),t("div",Ht,[t("button",{type:"button",onClick:e[31]||(e[31]=s=>z.value=!1),class:"btn flex-1"},"Abbrechen"),e[77]||(e[77]=t("button",{type:"submit",class:"btn btn-primary flex-1"},"Hinzufügen",-1))])],32)])])])):r("",!0),A.value?(n(),l("div",Pt,[t("div",Et,[t("div",Zt,[e[85]||(e[85]=t("h2",{class:"text-xl font-semibold mb-4"},"📋 Dienstanweisung hinzufügen",-1)),t("form",{onSubmit:K(W,["prevent"]),class:"space-y-4"},[t("div",null,[e[79]||(e[79]=t("label",{class:"block text-sm font-medium mb-1"},"Titel *",-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>v.value.title=s),type:"text",class:"input",required:""},null,512),[[m,v.value.title]])]),t("div",null,[e[81]||(e[81]=t("label",{class:"block text-sm font-medium mb-1"},"Kategorie",-1)),d(t("select",{"onUpdate:modelValue":e[33]||(e[33]=s=>v.value.category=s),class:"input"},[...e[80]||(e[80]=[ne('',5)])],512),[[T,v.value.category]])]),t("div",null,[e[82]||(e[82]=t("label",{class:"block text-sm font-medium mb-1"},"Inhalt *",-1)),d(t("textarea",{"onUpdate:modelValue":e[34]||(e[34]=s=>v.value.content=s),class:"input",rows:"4",required:""},null,512),[[m,v.value.content]])]),t("label",Rt,[d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=s=>v.value.is_critical=s),type:"checkbox",class:"rounded"},null,512),[[q,v.value.is_critical]]),e[83]||(e[83]=t("span",{class:"text-sm text-red-600"},"⚠️ Als kritisch markieren",-1))]),t("div",Qt,[t("button",{type:"button",onClick:e[36]||(e[36]=s=>A.value=!1),class:"btn flex-1"},"Abbrechen"),e[84]||(e[84]=t("button",{type:"submit",class:"btn btn-primary flex-1"},"Hinzufügen",-1))])],32)])])])):r("",!0)])}}});export{Wt as default}; +import{d as te,u as se,q as le,m as g,c as l,a as t,y as k,e as r,b as d,v as m,s as T,F as _,x as w,t as i,w as K,B as q,A as ne,r as c,k as oe,o as n,p as H,n as ae}from"./index-DFiGttzi.js";const ie={class:"space-y-6"},ue={class:"flex items-center justify-between"},de={class:"card"},re={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},me=["value"],pe={class:"flex items-end"},ce={class:"text-sm text-gray-500"},ve={key:0,class:"text-center py-12"},be={key:1,class:"card text-center py-12 text-gray-500"},ge={key:2,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},ye=["onClick"],xe={class:"flex items-start gap-4"},fe={class:"text-4xl"},ke={class:"flex-1 min-w-0"},_e={class:"font-semibold text-gray-900 dark:text-white truncate"},we={key:0,class:"text-sm text-gray-500"},he={key:1,class:"text-sm text-gray-500"},je={class:"flex gap-2 mt-2"},Ce={class:"text-xs bg-gray-100 dark:bg-gray-700 px-2 py-1 rounded"},Ue={key:0,class:"text-xs bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 px-2 py-1 rounded"},Ve={key:1,class:"text-xs bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 px-2 py-1 rounded"},Me=["onClick"],$e=["onClick"],Se={key:3,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},Oe={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-4xl mx-4 max-h-[90vh] overflow-y-auto"},Ne={class:"p-6"},ze={class:"flex items-start justify-between mb-6"},Ae={class:"flex items-center gap-4"},Fe={class:"text-4xl"},Te={class:"text-2xl font-bold text-gray-900 dark:text-white"},Ke={key:0,class:"text-gray-500"},De={class:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-6"},qe={key:0,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Be={class:"font-medium"},Ie={key:1,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Le={class:"font-medium truncate"},He={key:2,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Pe={class:"font-medium"},Ee={key:3,class:"bg-gray-50 dark:bg-gray-700 p-3 rounded"},Ze={class:"font-medium"},Re={key:0,class:"mb-6"},Qe={class:"text-gray-600 dark:text-gray-300 whitespace-pre-wrap"},Ge={key:1,class:"grid grid-cols-2 gap-4 mb-6"},Je={key:0,class:"bg-yellow-50 dark:bg-yellow-900/20 p-4 rounded"},We={class:"text-sm whitespace-pre-wrap"},Xe={key:1,class:"bg-blue-50 dark:bg-blue-900/20 p-4 rounded"},Ye={class:"text-sm whitespace-pre-wrap"},et={class:"mb-6"},tt={class:"flex items-center justify-between mb-3"},st={key:0,class:"text-gray-500 text-sm"},lt={key:1,class:"grid gap-2"},nt={class:"font-medium"},ot={key:0,class:"text-xs bg-blue-500 text-white px-1 rounded ml-1"},at={key:1,class:"text-xs bg-red-500 text-white px-1 rounded ml-1"},it={key:0,class:"text-sm text-gray-500"},ut={key:1,class:"text-sm"},dt=["onClick"],rt={class:"mb-6"},mt={class:"flex items-center justify-between mb-3"},pt={key:0,class:"text-gray-500 text-sm"},ct={key:1,class:"space-y-3"},vt={class:"flex items-start justify-between"},bt={class:"font-medium"},gt={class:"text-xs text-gray-500 ml-2"},yt={class:"text-sm mt-1 whitespace-pre-wrap text-gray-600 dark:text-gray-300"},xt=["onClick"],ft={key:2,class:"mb-6"},kt={class:"flex flex-wrap gap-2"},_t={class:"flex justify-end pt-4 border-t dark:border-gray-700"},wt={key:4,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},ht={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-2xl mx-4 max-h-[90vh] overflow-y-auto"},jt={class:"p-6"},Ct={class:"text-xl font-semibold mb-4"},Ut={class:"grid grid-cols-2 gap-4"},Vt={class:"col-span-2"},Mt=["value"],$t={class:"grid grid-cols-4 gap-4"},St={class:"col-span-2"},Ot={class:"col-span-2"},Nt={class:"grid grid-cols-2 gap-4"},zt={class:"flex gap-3 pt-4"},At=["disabled"],Ft={key:5,class:"fixed inset-0 z-[60] flex items-center justify-center bg-black/50"},Tt={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-md mx-4"},Kt={class:"p-6"},Dt={class:"grid grid-cols-2 gap-4"},qt={class:"grid grid-cols-2 gap-4"},Bt={class:"flex gap-4"},It={class:"flex items-center gap-2"},Lt={class:"flex items-center gap-2"},Ht={class:"flex gap-3"},Pt={key:6,class:"fixed inset-0 z-[60] flex items-center justify-center bg-black/50"},Et={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-md mx-4"},Zt={class:"p-6"},Rt={class:"flex items-center gap-2"},Qt={class:"flex gap-3"},Wt=te({__name:"ObjectsView",setup(Gt){const y=se(),B=c(!0),I=c([]),h=c([]),o=c(null),x=c(""),$=c(""),S=c("active"),j=c(!1),O=c(!1),C=c(null),u=c({name:"",short_name:"",object_number:"",object_type:"other",street:"",house_number:"",postal_code:"",city:"",phone:"",email:"",description:"",access_info:"",parking_info:"",customer_name:"",size_sqm:null,floors:null}),N=c(!1),z=c(!1),p=c({name:"",role:"",company:"",phone:"",mobile:"",email:"",availability:"",is_primary:!1,is_emergency:!1,notes:""}),A=c(!1),v=c({title:"",category:"general",content:"",is_critical:!1});le(async()=>{await Promise.all([f(),P()]),B.value=!1});async function f(){try{const a=new URLSearchParams;S.value&&a.append("status",S.value),$.value&&a.append("type",$.value),x.value&&a.append("search",x.value),I.value=await g.get(`/objects?${a}`)}catch(a){console.error("Failed to load objects:",a)}}async function P(){try{h.value=await g.get("/objects/types")}catch(a){console.error("Failed to load types:",a)}}async function U(a){try{o.value=await g.get(`/objects/${a}`),O.value=!0}catch(e){console.error("Failed to load object:",e)}}const D=oe(()=>{let a=[...I.value];if(x.value){const e=x.value.toLowerCase();a=a.filter(b=>{var V,M,s;return b.name.toLowerCase().includes(e)||((V=b.city)==null?void 0:V.toLowerCase().includes(e))||((M=b.object_number)==null?void 0:M.toLowerCase().includes(e))||((s=b.customer_name)==null?void 0:s.toLowerCase().includes(e))})}return a});function E(){C.value=null,u.value={name:"",short_name:"",object_number:"",object_type:"other",street:"",house_number:"",postal_code:"",city:"",phone:"",email:"",description:"",access_info:"",parking_info:"",customer_name:"",size_sqm:null,floors:null},j.value=!0}function Z(a){C.value=a,u.value={...a},j.value=!0}async function R(){if(u.value.name){N.value=!0;try{C.value?await g.put(`/objects/${C.value.id}`,u.value):await g.post("/objects",u.value),j.value=!1,await f()}catch(a){console.error("Failed to save:",a)}finally{N.value=!1}}}async function Q(a){if(confirm("Objekt wirklich archivieren?"))try{await g.delete(`/objects/${a}`),await f()}catch(e){console.error("Failed to delete:",e)}}async function G(){if(!(!p.value.name||!o.value))try{await g.post(`/objects/${o.value.id}/contacts`,p.value),await U(o.value.id),z.value=!1,p.value={name:"",role:"",company:"",phone:"",mobile:"",email:"",availability:"",is_primary:!1,is_emergency:!1,notes:""}}catch(a){console.error("Failed to add contact:",a)}}async function J(a){if(confirm("Kontakt löschen?"))try{await g.delete(`/objects/${o.value.id}/contacts/${a}`),await U(o.value.id)}catch(e){console.error("Failed to delete:",e)}}async function W(){if(!(!v.value.title||!v.value.content||!o.value))try{await g.post(`/objects/${o.value.id}/instructions`,v.value),await U(o.value.id),A.value=!1,v.value={title:"",category:"general",content:"",is_critical:!1}}catch(a){console.error("Failed to add instruction:",a)}}async function X(a){if(confirm("Dienstanweisung löschen?"))try{await g.delete(`/objects/${o.value.id}/instructions/${a}`),await U(o.value.id)}catch(e){console.error("Failed to delete:",e)}}function L(a){const e=h.value.find(b=>b.key===a);return(e==null?void 0:e.icon)||"📍"}function Y(a){const e=h.value.find(b=>b.key===a);return(e==null?void 0:e.name)||a}function ee(a){return{general:"Allgemein",patrol:"Rundgang",emergency:"Notfall",access:"Zugang",reporting:"Meldewesen"}[a]||a}return(a,e)=>{var b,V,M;return n(),l("div",ie,[t("div",ue,[e[37]||(e[37]=t("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🏢 Objekte",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:E,class:"btn btn-primary"}," ➕ Neues Objekt ")):r("",!0)]),t("div",de,[t("div",re,[t("div",null,[e[38]||(e[38]=t("label",{class:"block text-sm font-medium mb-1"},"🔍 Suche",-1)),d(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>x.value=s),type:"text",class:"input",placeholder:"Name, Stadt, Kunde...",onInput:f},null,544),[[m,x.value]])]),t("div",null,[e[40]||(e[40]=t("label",{class:"block text-sm font-medium mb-1"},"🏷️ Typ",-1)),d(t("select",{"onUpdate:modelValue":e[1]||(e[1]=s=>$.value=s),class:"input",onChange:f},[e[39]||(e[39]=t("option",{value:""},"Alle Typen",-1)),(n(!0),l(_,null,w(h.value,s=>(n(),l("option",{key:s.key,value:s.key},i(s.icon)+" "+i(s.name),9,me))),128))],544),[[T,$.value]])]),t("div",null,[e[42]||(e[42]=t("label",{class:"block text-sm font-medium mb-1"},"📊 Status",-1)),d(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>S.value=s),class:"input",onChange:f},[...e[41]||(e[41]=[t("option",{value:"active"},"Aktiv",-1),t("option",{value:"inactive"},"Inaktiv",-1),t("option",{value:"archived"},"Archiviert",-1),t("option",{value:"all"},"Alle",-1)])],544),[[T,S.value]])]),t("div",pe,[t("p",ce,i(D.value.length)+" Objekte ",1)])])]),B.value?(n(),l("div",ve,[...e[43]||(e[43]=[t("div",{class:"animate-spin text-4xl"},"⏳",-1)])])):D.value.length===0?(n(),l("div",be," Keine Objekte gefunden ")):(n(),l("div",ge,[(n(!0),l(_,null,w(D.value,s=>(n(),l("div",{key:s.id,class:"card hover:shadow-lg transition-all cursor-pointer",onClick:F=>U(s.id)},[t("div",xe,[t("div",fe,i(L(s.object_type)),1),t("div",ke,[t("h3",_e,i(s.name),1),s.city?(n(),l("p",we," 📍 "+i(s.postal_code)+" "+i(s.city),1)):r("",!0),s.customer_name?(n(),l("p",he," 👤 "+i(s.customer_name),1)):r("",!0),t("div",je,[t("span",Ce,i(Y(s.object_type)),1),s.contact_count?(n(),l("span",Ue," 👥 "+i(s.contact_count),1)):r("",!0),s.checkpoint_count?(n(),l("span",Ve," 📍 "+i(s.checkpoint_count)+" CP ",1)):r("",!0)])])]),k(y).canManageUsers?(n(),l("div",{key:0,class:"flex gap-2 mt-4 pt-3 border-t dark:border-gray-700",onClick:e[3]||(e[3]=K(()=>{},["stop"]))},[t("button",{onClick:F=>Z(s),class:"text-sm text-blue-600 hover:underline"}," ✏️ Bearbeiten ",8,Me),t("button",{onClick:F=>Q(s.id),class:"text-sm text-red-600 hover:underline"}," 🗑️ Archivieren ",8,$e)])):r("",!0)],8,ye))),128))])),O.value&&o.value?(n(),l("div",Se,[t("div",Oe,[t("div",Ne,[t("div",ze,[t("div",Ae,[t("span",Fe,i(L(o.value.object_type)),1),t("div",null,[t("h2",Te,i(o.value.name),1),o.value.city?(n(),l("p",Ke,i(o.value.street)+" "+i(o.value.house_number)+", "+i(o.value.postal_code)+" "+i(o.value.city),1)):r("",!0)])]),t("button",{onClick:e[4]||(e[4]=s=>O.value=!1),class:"text-2xl hover:bg-gray-100 dark:hover:bg-gray-700 p-2 rounded"}," ✕ ")]),t("div",De,[o.value.phone?(n(),l("div",qe,[e[44]||(e[44]=t("p",{class:"text-xs text-gray-500"},"📞 Telefon",-1)),t("p",Be,i(o.value.phone),1)])):r("",!0),o.value.email?(n(),l("div",Ie,[e[45]||(e[45]=t("p",{class:"text-xs text-gray-500"},"📧 E-Mail",-1)),t("p",Le,i(o.value.email),1)])):r("",!0),o.value.customer_name?(n(),l("div",He,[e[46]||(e[46]=t("p",{class:"text-xs text-gray-500"},"👤 Kunde",-1)),t("p",Pe,i(o.value.customer_name),1)])):r("",!0),o.value.object_number?(n(),l("div",Ee,[e[47]||(e[47]=t("p",{class:"text-xs text-gray-500"},"# Objektnummer",-1)),t("p",Ze,i(o.value.object_number),1)])):r("",!0)]),o.value.description?(n(),l("div",Re,[e[48]||(e[48]=t("h3",{class:"font-semibold mb-2"},"📝 Beschreibung",-1)),t("p",Qe,i(o.value.description),1)])):r("",!0),o.value.access_info||o.value.parking_info?(n(),l("div",Ge,[o.value.access_info?(n(),l("div",Je,[e[49]||(e[49]=t("h3",{class:"font-semibold mb-2"},"🔑 Zugang",-1)),t("p",We,i(o.value.access_info),1)])):r("",!0),o.value.parking_info?(n(),l("div",Xe,[e[50]||(e[50]=t("h3",{class:"font-semibold mb-2"},"🅿️ Parken",-1)),t("p",Ye,i(o.value.parking_info),1)])):r("",!0)])):r("",!0),t("div",et,[t("div",tt,[e[51]||(e[51]=t("h3",{class:"font-semibold"},"👥 Ansprechpartner",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:e[5]||(e[5]=s=>z.value=!0),class:"text-sm text-blue-600 hover:underline"}," ➕ Hinzufügen ")):r("",!0)]),(b=o.value.contacts)!=null&&b.length?(n(),l("div",lt,[(n(!0),l(_,null,w(o.value.contacts,s=>(n(),l("div",{key:s.id,class:"flex items-center justify-between bg-gray-50 dark:bg-gray-700 p-3 rounded"},[t("div",null,[t("p",nt,[H(i(s.name)+" ",1),s.is_primary?(n(),l("span",ot,"Haupt")):r("",!0),s.is_emergency?(n(),l("span",at,"Notfall")):r("",!0)]),s.role?(n(),l("p",it,i(s.role),1)):r("",!0),s.phone||s.mobile?(n(),l("p",ut," 📞 "+i(s.phone||s.mobile),1)):r("",!0)]),k(y).canManageUsers?(n(),l("button",{key:0,onClick:F=>J(s.id),class:"text-red-500 hover:text-red-700"}," 🗑️ ",8,dt)):r("",!0)]))),128))])):(n(),l("div",st," Keine Kontakte hinterlegt "))]),t("div",rt,[t("div",mt,[e[52]||(e[52]=t("h3",{class:"font-semibold"},"📋 Dienstanweisungen",-1)),k(y).canManageUsers?(n(),l("button",{key:0,onClick:e[6]||(e[6]=s=>A.value=!0),class:"text-sm text-blue-600 hover:underline"}," ➕ Hinzufügen ")):r("",!0)]),(V=o.value.instructions)!=null&&V.length?(n(),l("div",ct,[(n(!0),l(_,null,w(o.value.instructions,s=>(n(),l("div",{key:s.id,class:ae(["p-4 rounded border-l-4",s.is_critical?"border-red-500 bg-red-50 dark:bg-red-900/20":"border-gray-300 bg-gray-50 dark:bg-gray-700"])},[t("div",vt,[t("div",null,[t("p",bt,[H(i(s.title)+" ",1),t("span",gt,i(ee(s.category)),1)]),t("p",yt,i(s.content),1)]),k(y).canManageUsers?(n(),l("button",{key:0,onClick:F=>X(s.id),class:"text-red-500 hover:text-red-700 ml-2"}," 🗑️ ",8,xt)):r("",!0)])],2))),128))])):(n(),l("div",pt," Keine Dienstanweisungen hinterlegt "))]),(M=o.value.checkpoints)!=null&&M.length?(n(),l("div",ft,[e[53]||(e[53]=t("h3",{class:"font-semibold mb-3"},"📍 Kontrollpunkte",-1)),t("div",kt,[(n(!0),l(_,null,w(o.value.checkpoints,s=>(n(),l("span",{key:s.id,class:"bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 px-3 py-1 rounded text-sm"},i(s.name),1))),128))])])):r("",!0),t("div",_t,[t("button",{onClick:e[7]||(e[7]=s=>O.value=!1),class:"btn"}," Schließen ")])])])])):r("",!0),j.value?(n(),l("div",wt,[t("div",ht,[t("div",jt,[t("h2",Ct,i(C.value?"✏️ Objekt bearbeiten":"➕ Neues Objekt"),1),t("form",{onSubmit:K(R,["prevent"]),class:"space-y-4"},[t("div",Ut,[t("div",Vt,[e[54]||(e[54]=t("label",{class:"block text-sm font-medium mb-1"},"Name *",-1)),d(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>u.value.name=s),type:"text",class:"input",required:""},null,512),[[m,u.value.name]])]),t("div",null,[e[55]||(e[55]=t("label",{class:"block text-sm font-medium mb-1"},"Kurzname",-1)),d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>u.value.short_name=s),type:"text",class:"input"},null,512),[[m,u.value.short_name]])]),t("div",null,[e[56]||(e[56]=t("label",{class:"block text-sm font-medium mb-1"},"Objektnummer",-1)),d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=s=>u.value.object_number=s),type:"text",class:"input"},null,512),[[m,u.value.object_number]])]),t("div",null,[e[57]||(e[57]=t("label",{class:"block text-sm font-medium mb-1"},"Typ",-1)),d(t("select",{"onUpdate:modelValue":e[11]||(e[11]=s=>u.value.object_type=s),class:"input"},[(n(!0),l(_,null,w(h.value,s=>(n(),l("option",{key:s.key,value:s.key},i(s.icon)+" "+i(s.name),9,Mt))),128))],512),[[T,u.value.object_type]])]),t("div",null,[e[58]||(e[58]=t("label",{class:"block text-sm font-medium mb-1"},"Kunde",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>u.value.customer_name=s),type:"text",class:"input"},null,512),[[m,u.value.customer_name]])])]),e[68]||(e[68]=t("hr",{class:"dark:border-gray-700"},null,-1)),t("div",$t,[t("div",St,[e[59]||(e[59]=t("label",{class:"block text-sm font-medium mb-1"},"Straße",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>u.value.street=s),type:"text",class:"input"},null,512),[[m,u.value.street]])]),t("div",null,[e[60]||(e[60]=t("label",{class:"block text-sm font-medium mb-1"},"Nr.",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>u.value.house_number=s),type:"text",class:"input"},null,512),[[m,u.value.house_number]])]),t("div",null,[e[61]||(e[61]=t("label",{class:"block text-sm font-medium mb-1"},"PLZ",-1)),d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>u.value.postal_code=s),type:"text",class:"input"},null,512),[[m,u.value.postal_code]])]),t("div",Ot,[e[62]||(e[62]=t("label",{class:"block text-sm font-medium mb-1"},"Stadt",-1)),d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>u.value.city=s),type:"text",class:"input"},null,512),[[m,u.value.city]])]),t("div",null,[e[63]||(e[63]=t("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=s=>u.value.phone=s),type:"tel",class:"input"},null,512),[[m,u.value.phone]])]),t("div",null,[e[64]||(e[64]=t("label",{class:"block text-sm font-medium mb-1"},"E-Mail",-1)),d(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>u.value.email=s),type:"email",class:"input"},null,512),[[m,u.value.email]])])]),t("div",null,[e[65]||(e[65]=t("label",{class:"block text-sm font-medium mb-1"},"Beschreibung",-1)),d(t("textarea",{"onUpdate:modelValue":e[19]||(e[19]=s=>u.value.description=s),class:"input",rows:"2"},null,512),[[m,u.value.description]])]),t("div",Nt,[t("div",null,[e[66]||(e[66]=t("label",{class:"block text-sm font-medium mb-1"},"🔑 Zugangsinfos",-1)),d(t("textarea",{"onUpdate:modelValue":e[20]||(e[20]=s=>u.value.access_info=s),class:"input",rows:"2",placeholder:"Schlüssel, Codes..."},null,512),[[m,u.value.access_info]])]),t("div",null,[e[67]||(e[67]=t("label",{class:"block text-sm font-medium mb-1"},"🅿️ Parkhinweise",-1)),d(t("textarea",{"onUpdate:modelValue":e[21]||(e[21]=s=>u.value.parking_info=s),class:"input",rows:"2"},null,512),[[m,u.value.parking_info]])])]),t("div",zt,[t("button",{type:"button",onClick:e[22]||(e[22]=s=>j.value=!1),class:"btn flex-1"}," Abbrechen "),t("button",{type:"submit",disabled:N.value,class:"btn btn-primary flex-1"},i(N.value?"Speichern...":"Speichern"),9,At)])],32)])])])):r("",!0),z.value?(n(),l("div",Ft,[t("div",Tt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-xl font-semibold mb-4"},"👤 Kontakt hinzufügen",-1)),t("form",{onSubmit:K(G,["prevent"]),class:"space-y-4"},[t("div",null,[e[69]||(e[69]=t("label",{class:"block text-sm font-medium mb-1"},"Name *",-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>p.value.name=s),type:"text",class:"input",required:""},null,512),[[m,p.value.name]])]),t("div",Dt,[t("div",null,[e[70]||(e[70]=t("label",{class:"block text-sm font-medium mb-1"},"Rolle",-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>p.value.role=s),type:"text",class:"input",placeholder:"z.B. Hausmeister"},null,512),[[m,p.value.role]])]),t("div",null,[e[71]||(e[71]=t("label",{class:"block text-sm font-medium mb-1"},"Firma",-1)),d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=s=>p.value.company=s),type:"text",class:"input"},null,512),[[m,p.value.company]])])]),t("div",qt,[t("div",null,[e[72]||(e[72]=t("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>p.value.phone=s),type:"tel",class:"input"},null,512),[[m,p.value.phone]])]),t("div",null,[e[73]||(e[73]=t("label",{class:"block text-sm font-medium mb-1"},"Mobil",-1)),d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>p.value.mobile=s),type:"tel",class:"input"},null,512),[[m,p.value.mobile]])])]),t("div",null,[e[74]||(e[74]=t("label",{class:"block text-sm font-medium mb-1"},"E-Mail",-1)),d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>p.value.email=s),type:"email",class:"input"},null,512),[[m,p.value.email]])]),t("div",Bt,[t("label",It,[d(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>p.value.is_primary=s),type:"checkbox",class:"rounded"},null,512),[[q,p.value.is_primary]]),e[75]||(e[75]=t("span",{class:"text-sm"},"Hauptkontakt",-1))]),t("label",Lt,[d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>p.value.is_emergency=s),type:"checkbox",class:"rounded"},null,512),[[q,p.value.is_emergency]]),e[76]||(e[76]=t("span",{class:"text-sm"},"Notfallkontakt",-1))])]),t("div",Ht,[t("button",{type:"button",onClick:e[31]||(e[31]=s=>z.value=!1),class:"btn flex-1"},"Abbrechen"),e[77]||(e[77]=t("button",{type:"submit",class:"btn btn-primary flex-1"},"Hinzufügen",-1))])],32)])])])):r("",!0),A.value?(n(),l("div",Pt,[t("div",Et,[t("div",Zt,[e[85]||(e[85]=t("h2",{class:"text-xl font-semibold mb-4"},"📋 Dienstanweisung hinzufügen",-1)),t("form",{onSubmit:K(W,["prevent"]),class:"space-y-4"},[t("div",null,[e[79]||(e[79]=t("label",{class:"block text-sm font-medium mb-1"},"Titel *",-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>v.value.title=s),type:"text",class:"input",required:""},null,512),[[m,v.value.title]])]),t("div",null,[e[81]||(e[81]=t("label",{class:"block text-sm font-medium mb-1"},"Kategorie",-1)),d(t("select",{"onUpdate:modelValue":e[33]||(e[33]=s=>v.value.category=s),class:"input"},[...e[80]||(e[80]=[ne('',5)])],512),[[T,v.value.category]])]),t("div",null,[e[82]||(e[82]=t("label",{class:"block text-sm font-medium mb-1"},"Inhalt *",-1)),d(t("textarea",{"onUpdate:modelValue":e[34]||(e[34]=s=>v.value.content=s),class:"input",rows:"4",required:""},null,512),[[m,v.value.content]])]),t("label",Rt,[d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=s=>v.value.is_critical=s),type:"checkbox",class:"rounded"},null,512),[[q,v.value.is_critical]]),e[83]||(e[83]=t("span",{class:"text-sm text-red-600"},"⚠️ Als kritisch markieren",-1))]),t("div",Qt,[t("button",{type:"button",onClick:e[36]||(e[36]=s=>A.value=!1),class:"btn flex-1"},"Abbrechen"),e[84]||(e[84]=t("button",{type:"submit",class:"btn btn-primary flex-1"},"Hinzufügen",-1))])],32)])])])):r("",!0)])}}});export{Wt as default}; diff --git a/dist/assets/OrderDetailView-BOsK7PdF.js b/dist/assets/OrderDetailView-DnnyUUXt.js similarity index 98% rename from dist/assets/OrderDetailView-BOsK7PdF.js rename to dist/assets/OrderDetailView-DnnyUUXt.js index e4434b5..774681e 100644 --- a/dist/assets/OrderDetailView-BOsK7PdF.js +++ b/dist/assets/OrderDetailView-DnnyUUXt.js @@ -1 +1 @@ -import{d as A,u as $,q as B,m as p,c as r,i as S,j as V,a as e,t as o,e as l,n as _,y as k,F as h,x as E,g as M,f as N,r as y,l as D,o as i,p as F}from"./index-CVUlgynU.js";const L={key:0,class:"text-center py-12 text-gray-500"},j={key:1,class:"space-y-6"},z={class:"card"},O={class:"flex items-start justify-between"},q={class:"flex items-center gap-3"},I={class:"text-gray-500"},R={class:"text-2xl font-bold text-gray-900 dark:text-white"},Z={key:0,class:"mt-2 text-gray-600 dark:text-gray-400"},H={class:"grid grid-cols-2 md:grid-cols-4 gap-4 mt-6"},K={key:0},T={class:"font-medium"},G={key:1},J={class:"font-medium"},P={key:2},Q={class:"font-medium"},U={class:"font-medium"},W={key:0,class:"mt-6 pt-6 border-t border-gray-200 dark:border-gray-700"},X={class:"flex flex-wrap gap-2"},Y={class:"card"},tt={key:0,class:"text-center py-4 text-gray-500"},et={key:1,class:"space-y-3"},st={class:"font-medium text-gray-900 dark:text-white"},at={class:"text-sm text-gray-500"},nt={class:"flex items-center gap-2"},rt={key:0,class:"card"},ot={class:"text-gray-600 dark:text-gray-400 whitespace-pre-wrap"},dt=A({__name:"OrderDetailView",setup(it){const c=M(),w=N(),m=$(),s=y(null),d=y([]),v=y(!0);B(async()=>{try{const n=await p.get(`/orders/${c.params.id}`);s.value=n.data.order,d.value=n.data.assignments}catch(n){console.error(n),w.push("/orders")}finally{v.value=!1}});async function u(n){try{await p.put(`/orders/${c.params.id}`,{status:n}),s.value.status=n}catch(t){alert(t instanceof Error?t.message:"Fehler")}}async function x(n){try{await p.put(`/orders/${c.params.id}/assignment`,{status:n?"confirmed":"declined"});const t=d.value.find(g=>{var a;return g.user_id===((a=m.user)==null?void 0:a.id)});t&&(t.status=n?"confirmed":"declined")}catch(t){alert(t instanceof Error?t.message:"Fehler")}}function b(n){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt",pending:"Ausstehend",confirmed:"Bestätigt",declined:"Abgelehnt"}[n]||n}return(n,t)=>{const g=D("router-link");return v.value?(i(),r("div",L,"Lädt...")):s.value?(i(),r("div",j,[S(g,{to:"/orders",class:"text-primary-600 hover:text-primary-700 text-sm"},{default:V(()=>[...t[6]||(t[6]=[F(" ← Zurück zu Aufträge ",-1)])]),_:1}),e("div",z,[e("div",O,[e("div",null,[e("div",q,[e("span",I,"#"+o(s.value.number),1),e("h1",R,o(s.value.title),1)]),s.value.description?(i(),r("p",Z,o(s.value.description),1)):l("",!0)]),e("span",{class:_(["badge",s.value.status==="completed"?"badge-success":"badge-primary"])},o(b(s.value.status)),3)]),e("div",H,[s.value.location?(i(),r("div",K,[t[7]||(t[7]=e("p",{class:"text-sm text-gray-500"},"Ort",-1)),e("p",T,"📍 "+o(s.value.location),1)])):l("",!0),s.value.start_time?(i(),r("div",G,[t[8]||(t[8]=e("p",{class:"text-sm text-gray-500"},"Start",-1)),e("p",J,o(new Date(s.value.start_time).toLocaleString("de-DE")),1)])):l("",!0),s.value.client_name?(i(),r("div",P,[t[9]||(t[9]=e("p",{class:"text-sm text-gray-500"},"Kunde",-1)),e("p",Q,o(s.value.client_name),1)])):l("",!0),e("div",null,[t[10]||(t[10]=e("p",{class:"text-sm text-gray-500"},"Benötigte MA",-1)),e("p",U,o(d.value.length)+"/"+o(s.value.required_staff),1)])]),k(m).canManageOrders?(i(),r("div",W,[t[11]||(t[11]=e("p",{class:"text-sm text-gray-500 mb-2"},"Status ändern:",-1)),e("div",X,[e("button",{class:"btn btn-secondary text-sm",onClick:t[0]||(t[0]=a=>u("draft"))},"Entwurf"),e("button",{class:"btn btn-primary text-sm",onClick:t[1]||(t[1]=a=>u("published"))},"Veröffentlichen"),e("button",{class:"btn btn-warning text-sm",onClick:t[2]||(t[2]=a=>u("in_progress"))},"In Bearbeitung"),e("button",{class:"btn btn-success text-sm",onClick:t[3]||(t[3]=a=>u("completed"))},"Abschließen")])])):l("",!0)]),e("div",Y,[t[12]||(t[12]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 👥 Zugewiesene Mitarbeiter ",-1)),d.value.length===0?(i(),r("div",tt," Noch keine Mitarbeiter zugewiesen ")):(i(),r("div",et,[(i(!0),r(h,null,E(d.value,a=>{var f;return i(),r("div",{key:a.id,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[e("div",null,[e("p",st,o(a.user_name),1),e("p",at,o(a.user_phone),1)]),e("div",nt,[e("span",{class:_(["badge",a.status==="confirmed"?"badge-success":a.status==="declined"?"badge-danger":"badge-warning"])},o(b(a.status)),3),a.user_id===((f=k(m).user)==null?void 0:f.id)&&a.status==="pending"?(i(),r(h,{key:0},[e("button",{class:"btn btn-success text-sm",onClick:t[4]||(t[4]=C=>x(!0))},"✓"),e("button",{class:"btn btn-danger text-sm",onClick:t[5]||(t[5]=C=>x(!1))},"✗")],64)):l("",!0)])])}),128))]))]),s.value.special_instructions?(i(),r("div",rt,[t[13]||(t[13]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-2"}," 📝 Besondere Hinweise ",-1)),e("p",ot,o(s.value.special_instructions),1)])):l("",!0)])):l("",!0)}}});export{dt as default}; +import{d as A,u as $,q as B,m as p,c as r,i as S,j as V,a as e,t as o,e as l,n as _,y as k,F as h,x as E,g as M,f as N,r as y,l as D,o as i,p as F}from"./index-DFiGttzi.js";const L={key:0,class:"text-center py-12 text-gray-500"},j={key:1,class:"space-y-6"},z={class:"card"},O={class:"flex items-start justify-between"},q={class:"flex items-center gap-3"},I={class:"text-gray-500"},R={class:"text-2xl font-bold text-gray-900 dark:text-white"},Z={key:0,class:"mt-2 text-gray-600 dark:text-gray-400"},H={class:"grid grid-cols-2 md:grid-cols-4 gap-4 mt-6"},K={key:0},T={class:"font-medium"},G={key:1},J={class:"font-medium"},P={key:2},Q={class:"font-medium"},U={class:"font-medium"},W={key:0,class:"mt-6 pt-6 border-t border-gray-200 dark:border-gray-700"},X={class:"flex flex-wrap gap-2"},Y={class:"card"},tt={key:0,class:"text-center py-4 text-gray-500"},et={key:1,class:"space-y-3"},st={class:"font-medium text-gray-900 dark:text-white"},at={class:"text-sm text-gray-500"},nt={class:"flex items-center gap-2"},rt={key:0,class:"card"},ot={class:"text-gray-600 dark:text-gray-400 whitespace-pre-wrap"},dt=A({__name:"OrderDetailView",setup(it){const c=M(),w=N(),m=$(),s=y(null),d=y([]),v=y(!0);B(async()=>{try{const n=await p.get(`/orders/${c.params.id}`);s.value=n.data.order,d.value=n.data.assignments}catch(n){console.error(n),w.push("/orders")}finally{v.value=!1}});async function u(n){try{await p.put(`/orders/${c.params.id}`,{status:n}),s.value.status=n}catch(t){alert(t instanceof Error?t.message:"Fehler")}}async function x(n){try{await p.put(`/orders/${c.params.id}/assignment`,{status:n?"confirmed":"declined"});const t=d.value.find(g=>{var a;return g.user_id===((a=m.user)==null?void 0:a.id)});t&&(t.status=n?"confirmed":"declined")}catch(t){alert(t instanceof Error?t.message:"Fehler")}}function b(n){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt",pending:"Ausstehend",confirmed:"Bestätigt",declined:"Abgelehnt"}[n]||n}return(n,t)=>{const g=D("router-link");return v.value?(i(),r("div",L,"Lädt...")):s.value?(i(),r("div",j,[S(g,{to:"/orders",class:"text-primary-600 hover:text-primary-700 text-sm"},{default:V(()=>[...t[6]||(t[6]=[F(" ← Zurück zu Aufträge ",-1)])]),_:1}),e("div",z,[e("div",O,[e("div",null,[e("div",q,[e("span",I,"#"+o(s.value.number),1),e("h1",R,o(s.value.title),1)]),s.value.description?(i(),r("p",Z,o(s.value.description),1)):l("",!0)]),e("span",{class:_(["badge",s.value.status==="completed"?"badge-success":"badge-primary"])},o(b(s.value.status)),3)]),e("div",H,[s.value.location?(i(),r("div",K,[t[7]||(t[7]=e("p",{class:"text-sm text-gray-500"},"Ort",-1)),e("p",T,"📍 "+o(s.value.location),1)])):l("",!0),s.value.start_time?(i(),r("div",G,[t[8]||(t[8]=e("p",{class:"text-sm text-gray-500"},"Start",-1)),e("p",J,o(new Date(s.value.start_time).toLocaleString("de-DE")),1)])):l("",!0),s.value.client_name?(i(),r("div",P,[t[9]||(t[9]=e("p",{class:"text-sm text-gray-500"},"Kunde",-1)),e("p",Q,o(s.value.client_name),1)])):l("",!0),e("div",null,[t[10]||(t[10]=e("p",{class:"text-sm text-gray-500"},"Benötigte MA",-1)),e("p",U,o(d.value.length)+"/"+o(s.value.required_staff),1)])]),k(m).canManageOrders?(i(),r("div",W,[t[11]||(t[11]=e("p",{class:"text-sm text-gray-500 mb-2"},"Status ändern:",-1)),e("div",X,[e("button",{class:"btn btn-secondary text-sm",onClick:t[0]||(t[0]=a=>u("draft"))},"Entwurf"),e("button",{class:"btn btn-primary text-sm",onClick:t[1]||(t[1]=a=>u("published"))},"Veröffentlichen"),e("button",{class:"btn btn-warning text-sm",onClick:t[2]||(t[2]=a=>u("in_progress"))},"In Bearbeitung"),e("button",{class:"btn btn-success text-sm",onClick:t[3]||(t[3]=a=>u("completed"))},"Abschließen")])])):l("",!0)]),e("div",Y,[t[12]||(t[12]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," 👥 Zugewiesene Mitarbeiter ",-1)),d.value.length===0?(i(),r("div",tt," Noch keine Mitarbeiter zugewiesen ")):(i(),r("div",et,[(i(!0),r(h,null,E(d.value,a=>{var f;return i(),r("div",{key:a.id,class:"flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[e("div",null,[e("p",st,o(a.user_name),1),e("p",at,o(a.user_phone),1)]),e("div",nt,[e("span",{class:_(["badge",a.status==="confirmed"?"badge-success":a.status==="declined"?"badge-danger":"badge-warning"])},o(b(a.status)),3),a.user_id===((f=k(m).user)==null?void 0:f.id)&&a.status==="pending"?(i(),r(h,{key:0},[e("button",{class:"btn btn-success text-sm",onClick:t[4]||(t[4]=C=>x(!0))},"✓"),e("button",{class:"btn btn-danger text-sm",onClick:t[5]||(t[5]=C=>x(!1))},"✗")],64)):l("",!0)])])}),128))]))]),s.value.special_instructions?(i(),r("div",rt,[t[13]||(t[13]=e("h2",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-2"}," 📝 Besondere Hinweise ",-1)),e("p",ot,o(s.value.special_instructions),1)])):l("",!0)])):l("",!0)}}});export{dt as default}; diff --git a/dist/assets/OrdersView-mynFcmCT.js b/dist/assets/OrdersView-BHgpWVUB.js similarity index 99% rename from dist/assets/OrdersView-mynFcmCT.js rename to dist/assets/OrdersView-BHgpWVUB.js index 1490497..1047c96 100644 --- a/dist/assets/OrdersView-mynFcmCT.js +++ b/dist/assets/OrdersView-BHgpWVUB.js @@ -1 +1 @@ -import{d as U,u as B,q as S,m as x,c as o,a as e,y as C,e as g,b as n,s as E,A as q,F as M,x as O,w as D,v as i,r as u,k as j,o as r,z as L,j as N,t as d,n as F,l as z}from"./index-CVUlgynU.js";const $={class:"space-y-6"},I={class:"flex items-center justify-between"},K={class:"card"},T={class:"flex items-center gap-4"},H={class:"card"},G={key:0,class:"text-center py-8 text-gray-500"},J={key:1,class:"text-center py-8 text-gray-500"},P={key:2,class:"divide-y divide-gray-200 dark:divide-gray-700"},Q={class:"flex items-start justify-between"},R={class:"flex-1"},W={class:"flex items-center gap-3"},X={class:"text-sm text-gray-500 dark:text-gray-400"},Y={class:"font-medium text-gray-900 dark:text-white"},Z={class:"mt-1 flex items-center gap-4 text-sm text-gray-500 dark:text-gray-400"},h={key:0},tt={key:1},et={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},st={class:"card w-full max-w-2xl max-h-[90vh] overflow-y-auto m-4"},at={class:"grid grid-cols-2 gap-4"},lt={class:"grid grid-cols-2 gap-4"},nt={class:"grid grid-cols-2 gap-4"},it={class:"flex justify-end gap-3 pt-4"},dt=U({__name:"OrdersView",setup(rt){const f=B(),c=u([]),v=u(!0),m=u(!1),p=u(""),a=u({title:"",description:"",location:"",address:"",client_name:"",client_contact:"",start_time:"",end_time:"",required_staff:1,special_instructions:""}),y=j(()=>p.value?c.value.filter(l=>l.status===p.value):c.value);S(async()=>{await b()});async function b(){v.value=!0;try{const l=await x.get("/orders");c.value=l.data.orders}catch(l){console.error("Load orders error:",l)}finally{v.value=!1}}async function k(){try{await x.post("/orders",a.value),m.value=!1,a.value={title:"",description:"",location:"",address:"",client_name:"",client_contact:"",start_time:"",end_time:"",required_staff:1,special_instructions:""},await b()}catch(l){alert(l instanceof Error?l.message:"Fehler beim Erstellen")}}function _(l){return{draft:"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300",published:"badge-primary",in_progress:"badge-warning",completed:"badge-success",cancelled:"badge-danger"}[l]||"badge-secondary"}function w(l){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt"}[l]||l}function V(l){return l?new Date(l).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}return(l,t)=>{const A=z("router-link");return r(),o("div",$,[e("div",I,[t[13]||(t[13]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"}," 📋 Aufträge ",-1)),C(f).canManageOrders?(r(),o("button",{key:0,class:"btn btn-primary",onClick:t[0]||(t[0]=s=>m.value=!0)}," + Neuer Auftrag ")):g("",!0)]),e("div",K,[e("div",T,[t[15]||(t[15]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"Status:",-1)),n(e("select",{"onUpdate:modelValue":t[1]||(t[1]=s=>p.value=s),class:"input w-48"},[...t[14]||(t[14]=[q('',6)])],512),[[E,p.value]])])]),e("div",H,[v.value?(r(),o("div",G," Lädt... ")):y.value.length===0?(r(),o("div",J," Keine Aufträge gefunden ")):(r(),o("div",P,[(r(!0),o(M,null,O(y.value,s=>(r(),L(A,{key:s.id,to:`/orders/${s.id}`,class:"block py-4 hover:bg-gray-50 dark:hover:bg-gray-700/50 -mx-6 px-6 transition-colors"},{default:N(()=>[e("div",Q,[e("div",R,[e("div",W,[e("span",X,"#"+d(s.number),1),e("h3",Y,d(s.title),1),e("span",{class:F(["badge",_(s.status)])},d(w(s.status)),3)]),e("div",Z,[s.location?(r(),o("span",h,"📍 "+d(s.location),1)):g("",!0),s.start_time?(r(),o("span",tt,"🕐 "+d(V(s.start_time)),1)):g("",!0),e("span",null,"👥 "+d(s.assigned_count||0)+"/"+d(s.required_staff),1)])]),t[16]||(t[16]=e("span",{class:"text-gray-400"},"→",-1))])]),_:2},1032,["to"]))),128))]))]),m.value?(r(),o("div",et,[e("div",st,[t[28]||(t[28]=e("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Neuer Auftrag ",-1)),e("form",{onSubmit:D(k,["prevent"]),class:"space-y-4"},[e("div",null,[t[17]||(t[17]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Titel *",-1)),n(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.title=s),type:"text",required:"",class:"input"},null,512),[[i,a.value.title]])]),e("div",null,[t[18]||(t[18]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Beschreibung",-1)),n(e("textarea",{"onUpdate:modelValue":t[3]||(t[3]=s=>a.value.description=s),rows:"3",class:"input"},null,512),[[i,a.value.description]])]),e("div",at,[e("div",null,[t[19]||(t[19]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ort",-1)),n(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>a.value.location=s),type:"text",class:"input"},null,512),[[i,a.value.location]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Benötigte MA",-1)),n(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>a.value.required_staff=s),type:"number",min:"1",class:"input"},null,512),[[i,a.value.required_staff,void 0,{number:!0}]])])]),e("div",null,[t[21]||(t[21]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Adresse",-1)),n(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>a.value.address=s),type:"text",class:"input"},null,512),[[i,a.value.address]])]),e("div",lt,[e("div",null,[t[22]||(t[22]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Kunde",-1)),n(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>a.value.client_name=s),type:"text",class:"input"},null,512),[[i,a.value.client_name]])]),e("div",null,[t[23]||(t[23]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ansprechpartner",-1)),n(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>a.value.client_contact=s),type:"text",class:"input"},null,512),[[i,a.value.client_contact]])])]),e("div",nt,[e("div",null,[t[24]||(t[24]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Start",-1)),n(e("input",{"onUpdate:modelValue":t[9]||(t[9]=s=>a.value.start_time=s),type:"datetime-local",class:"input"},null,512),[[i,a.value.start_time]])]),e("div",null,[t[25]||(t[25]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ende",-1)),n(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>a.value.end_time=s),type:"datetime-local",class:"input"},null,512),[[i,a.value.end_time]])])]),e("div",null,[t[26]||(t[26]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Besondere Hinweise",-1)),n(e("textarea",{"onUpdate:modelValue":t[11]||(t[11]=s=>a.value.special_instructions=s),rows:"2",class:"input"},null,512),[[i,a.value.special_instructions]])]),e("div",it,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[12]||(t[12]=s=>m.value=!1)}," Abbrechen "),t[27]||(t[27]=e("button",{type:"submit",class:"btn btn-primary"}," Erstellen ",-1))])],32)])])):g("",!0)])}}});export{dt as default}; +import{d as U,u as B,q as S,m as x,c as o,a as e,y as C,e as g,b as n,s as E,A as q,F as M,x as O,w as D,v as i,r as u,k as j,o as r,z as L,j as N,t as d,n as F,l as z}from"./index-DFiGttzi.js";const $={class:"space-y-6"},I={class:"flex items-center justify-between"},K={class:"card"},T={class:"flex items-center gap-4"},H={class:"card"},G={key:0,class:"text-center py-8 text-gray-500"},J={key:1,class:"text-center py-8 text-gray-500"},P={key:2,class:"divide-y divide-gray-200 dark:divide-gray-700"},Q={class:"flex items-start justify-between"},R={class:"flex-1"},W={class:"flex items-center gap-3"},X={class:"text-sm text-gray-500 dark:text-gray-400"},Y={class:"font-medium text-gray-900 dark:text-white"},Z={class:"mt-1 flex items-center gap-4 text-sm text-gray-500 dark:text-gray-400"},h={key:0},tt={key:1},et={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},st={class:"card w-full max-w-2xl max-h-[90vh] overflow-y-auto m-4"},at={class:"grid grid-cols-2 gap-4"},lt={class:"grid grid-cols-2 gap-4"},nt={class:"grid grid-cols-2 gap-4"},it={class:"flex justify-end gap-3 pt-4"},dt=U({__name:"OrdersView",setup(rt){const f=B(),c=u([]),v=u(!0),m=u(!1),p=u(""),a=u({title:"",description:"",location:"",address:"",client_name:"",client_contact:"",start_time:"",end_time:"",required_staff:1,special_instructions:""}),y=j(()=>p.value?c.value.filter(l=>l.status===p.value):c.value);S(async()=>{await b()});async function b(){v.value=!0;try{const l=await x.get("/orders");c.value=l.data.orders}catch(l){console.error("Load orders error:",l)}finally{v.value=!1}}async function k(){try{await x.post("/orders",a.value),m.value=!1,a.value={title:"",description:"",location:"",address:"",client_name:"",client_contact:"",start_time:"",end_time:"",required_staff:1,special_instructions:""},await b()}catch(l){alert(l instanceof Error?l.message:"Fehler beim Erstellen")}}function _(l){return{draft:"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300",published:"badge-primary",in_progress:"badge-warning",completed:"badge-success",cancelled:"badge-danger"}[l]||"badge-secondary"}function w(l){return{draft:"Entwurf",published:"Veröffentlicht",in_progress:"In Bearbeitung",completed:"Abgeschlossen",cancelled:"Abgesagt"}[l]||l}function V(l){return l?new Date(l).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}):"-"}return(l,t)=>{const A=z("router-link");return r(),o("div",$,[e("div",I,[t[13]||(t[13]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"}," 📋 Aufträge ",-1)),C(f).canManageOrders?(r(),o("button",{key:0,class:"btn btn-primary",onClick:t[0]||(t[0]=s=>m.value=!0)}," + Neuer Auftrag ")):g("",!0)]),e("div",K,[e("div",T,[t[15]||(t[15]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"Status:",-1)),n(e("select",{"onUpdate:modelValue":t[1]||(t[1]=s=>p.value=s),class:"input w-48"},[...t[14]||(t[14]=[q('',6)])],512),[[E,p.value]])])]),e("div",H,[v.value?(r(),o("div",G," Lädt... ")):y.value.length===0?(r(),o("div",J," Keine Aufträge gefunden ")):(r(),o("div",P,[(r(!0),o(M,null,O(y.value,s=>(r(),L(A,{key:s.id,to:`/orders/${s.id}`,class:"block py-4 hover:bg-gray-50 dark:hover:bg-gray-700/50 -mx-6 px-6 transition-colors"},{default:N(()=>[e("div",Q,[e("div",R,[e("div",W,[e("span",X,"#"+d(s.number),1),e("h3",Y,d(s.title),1),e("span",{class:F(["badge",_(s.status)])},d(w(s.status)),3)]),e("div",Z,[s.location?(r(),o("span",h,"📍 "+d(s.location),1)):g("",!0),s.start_time?(r(),o("span",tt,"🕐 "+d(V(s.start_time)),1)):g("",!0),e("span",null,"👥 "+d(s.assigned_count||0)+"/"+d(s.required_staff),1)])]),t[16]||(t[16]=e("span",{class:"text-gray-400"},"→",-1))])]),_:2},1032,["to"]))),128))]))]),m.value?(r(),o("div",et,[e("div",st,[t[28]||(t[28]=e("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Neuer Auftrag ",-1)),e("form",{onSubmit:D(k,["prevent"]),class:"space-y-4"},[e("div",null,[t[17]||(t[17]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Titel *",-1)),n(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.title=s),type:"text",required:"",class:"input"},null,512),[[i,a.value.title]])]),e("div",null,[t[18]||(t[18]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Beschreibung",-1)),n(e("textarea",{"onUpdate:modelValue":t[3]||(t[3]=s=>a.value.description=s),rows:"3",class:"input"},null,512),[[i,a.value.description]])]),e("div",at,[e("div",null,[t[19]||(t[19]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ort",-1)),n(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>a.value.location=s),type:"text",class:"input"},null,512),[[i,a.value.location]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Benötigte MA",-1)),n(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>a.value.required_staff=s),type:"number",min:"1",class:"input"},null,512),[[i,a.value.required_staff,void 0,{number:!0}]])])]),e("div",null,[t[21]||(t[21]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Adresse",-1)),n(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>a.value.address=s),type:"text",class:"input"},null,512),[[i,a.value.address]])]),e("div",lt,[e("div",null,[t[22]||(t[22]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Kunde",-1)),n(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>a.value.client_name=s),type:"text",class:"input"},null,512),[[i,a.value.client_name]])]),e("div",null,[t[23]||(t[23]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ansprechpartner",-1)),n(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>a.value.client_contact=s),type:"text",class:"input"},null,512),[[i,a.value.client_contact]])])]),e("div",nt,[e("div",null,[t[24]||(t[24]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Start",-1)),n(e("input",{"onUpdate:modelValue":t[9]||(t[9]=s=>a.value.start_time=s),type:"datetime-local",class:"input"},null,512),[[i,a.value.start_time]])]),e("div",null,[t[25]||(t[25]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Ende",-1)),n(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>a.value.end_time=s),type:"datetime-local",class:"input"},null,512),[[i,a.value.end_time]])])]),e("div",null,[t[26]||(t[26]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Besondere Hinweise",-1)),n(e("textarea",{"onUpdate:modelValue":t[11]||(t[11]=s=>a.value.special_instructions=s),rows:"2",class:"input"},null,512),[[i,a.value.special_instructions]])]),e("div",it,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[12]||(t[12]=s=>m.value=!1)}," Abbrechen "),t[27]||(t[27]=e("button",{type:"submit",class:"btn btn-primary"}," Erstellen ",-1))])],32)])])):g("",!0)])}}});export{dt as default}; diff --git a/dist/assets/PartnershipsView-B4wJavhc.js b/dist/assets/PartnershipsView-CFhHqtpc.js similarity index 99% rename from dist/assets/PartnershipsView-B4wJavhc.js rename to dist/assets/PartnershipsView-CFhHqtpc.js index 806f8d6..55e96a1 100644 --- a/dist/assets/PartnershipsView-B4wJavhc.js +++ b/dist/assets/PartnershipsView-CFhHqtpc.js @@ -1 +1 @@ -import{d as ge,u as ve,q as ye,m as u,c as n,a as e,n as w,t as r,F as h,x as k,e as p,b as f,v as A,p as S,B as me,s as Y,r as c,o as l}from"./index-CVUlgynU.js";const be={class:"p-6"},he={class:"flex justify-between items-center mb-6"},fe={class:"flex space-x-1 border-b mb-6"},_e={key:0,class:"text-center py-12"},we={key:1},ke={class:"grid grid-cols-4 gap-4 mb-6"},Ce={class:"bg-white rounded-lg shadow p-4"},Ae={class:"text-2xl font-bold text-gray-900"},Se={class:"bg-white rounded-lg shadow p-4"},$e={class:"text-2xl font-bold text-green-600"},ze={class:"bg-white rounded-lg shadow p-4"},Fe={class:"text-2xl font-bold text-blue-600"},Be={class:"bg-white rounded-lg shadow p-4"},Ve={class:"text-2xl font-bold text-yellow-600"},Pe={key:0,class:"mb-6"},Ne={class:"space-y-2"},je={class:"font-medium"},Oe={class:"flex space-x-2"},Re=["onClick"],Me=["onClick"],Ue={class:"mb-6"},De={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ie={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},qe={class:"min-w-full divide-y divide-gray-200"},Te={class:"divide-y divide-gray-200"},Ee={class:"px-4 py-3"},Le={class:"font-medium"},Ke={class:"text-gray-500 text-sm ml-2"},We={class:"px-4 py-3"},Ge={class:"px-4 py-3 text-sm"},Qe={key:0,class:"text-yellow-600 ml-1"},Ze={class:"px-4 py-3 text-right space-x-2"},He=["onClick"],Je=["onClick"],Xe={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ye={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},et={class:"min-w-full divide-y divide-gray-200"},tt={class:"divide-y divide-gray-200"},st={class:"px-4 py-3"},at={class:"font-medium"},nt={class:"px-4 py-3"},lt={class:"px-4 py-3 text-sm"},rt={key:0,class:"text-yellow-600 ml-1"},ot={class:"px-4 py-3 text-right"},dt=["onClick"],it={key:2},ut={class:"grid grid-cols-2 gap-6"},ct={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},pt={key:1,class:"space-y-2"},xt={class:"flex justify-between items-start"},gt={class:"font-medium"},vt={class:"text-sm text-gray-500"},yt={class:"text-sm text-gray-500"},mt={class:"text-sm mt-1"},bt={class:"font-medium"},ht={class:"text-right"},ft={key:0,class:"text-sm text-gray-500 mt-1"},_t={key:0,class:"mt-2 pt-2 border-t"},wt=["onClick"],kt={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},Ct={key:1,class:"space-y-2"},At={class:"flex justify-between items-start"},St={class:"font-medium"},$t={class:"text-sm text-gray-500"},zt={class:"text-sm text-gray-500"},Ft={class:"text-sm mt-1"},Bt={class:"font-medium"},Vt={class:"text-right"},Pt={key:0,class:"mt-2 pt-2 border-t flex space-x-2"},Nt=["onClick"],jt=["onClick"],Ot={key:3},Rt={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Mt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Ut={class:"min-w-full divide-y divide-gray-200"},Dt={class:"divide-y divide-gray-200"},It={class:"px-4 py-3"},qt={class:"px-4 py-3"},Tt={class:"px-4 py-3"},Et={class:"px-4 py-3"},Lt={class:"px-4 py-3"},Kt={class:"px-4 py-3"},Wt={class:"px-4 py-3 text-right space-x-2"},Gt=["onClick"],Qt=["onClick"],Zt={key:4},Ht={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Jt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Xt={class:"min-w-full divide-y divide-gray-200"},Yt={class:"divide-y divide-gray-200"},es={class:"px-4 py-3 font-mono"},ts={class:"px-4 py-3"},ss={class:"px-4 py-3"},as={class:"px-4 py-3"},ns={key:0,class:"text-red-600"},ls={key:1,class:"text-green-600"},rs={class:"px-4 py-3 text-right font-medium"},os={class:"px-4 py-3"},ds={class:"px-4 py-3 text-right"},is=["onClick"],us={key:5,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},cs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},ps={class:"space-y-4"},xs={key:0,class:"mt-1 border rounded-lg shadow-sm max-h-40 overflow-y-auto"},gs=["onClick"],vs={class:"text-gray-500"},ys={class:"flex justify-end space-x-2 mt-6"},ms=["disabled"],bs={key:6,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},hs={class:"bg-white rounded-lg shadow-xl w-full max-w-2xl p-6 max-h-[90vh] overflow-y-auto"},fs={class:"flex justify-between items-start mb-4"},_s={class:"text-xl font-bold"},ws={class:"grid grid-cols-2 gap-4 mb-6 text-sm"},ks={key:0},Cs={key:0,class:"mb-6"},As={key:0,class:"text-gray-500 text-sm"},Ss={key:1,class:"space-y-2"},$s={class:"font-medium"},zs={key:0,class:"text-xs text-blue-600 ml-2"},Fs={class:"flex items-center space-x-4"},Bs={class:"font-mono"},Vs=["onClick"],Ps={key:1,class:"grid grid-cols-3 gap-4 mb-6"},Ns={class:"bg-gray-50 rounded p-3 text-center"},js={class:"text-xl font-bold"},Os={class:"bg-gray-50 rounded p-3 text-center"},Rs={class:"text-xl font-bold"},Ms={class:"bg-gray-50 rounded p-3 text-center"},Us={class:"text-xl font-bold"},Ds={key:2,class:"flex space-x-2"},Is={key:3,class:"flex space-x-2"},qs={key:7,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Ts={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Es={class:"space-y-4"},Ls={class:"flex items-center"},Ks={class:"flex justify-end space-x-2 mt-6"},Ws={key:8,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Gs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Qs={class:"text-xl font-bold mb-4"},Zs={class:"space-y-4"},Hs=["value"],Js=["value"],Xs={class:"flex justify-end space-x-2 mt-6"},Ys=["disabled"],sa=ge({__name:"PartnershipsView",setup(ea){ve();const D=c(!0),I=c([]),F=c([]),B=c({}),m=c("overview"),j=c(!1),q=c(!1),O=c(!1),R=c(!1),T=c(null),i=c(null),$=c(""),z=c([]),G=c(!1),g=c({subcontractor_slug:"",notes:"",contract_start:"",contract_end:""}),M=c(!1),y=c({name:"",description:"",rate_type:"hourly",amount:0,is_default:!1}),V=c({asContractor:[],asSubcontractor:[]}),E=c([]),L=c([]),Q=c([]),x=c({partnership_id:"",order_id:"",rate_id:"",required_staff:1,notes:""});ye(async()=>{await P()});async function P(){D.value=!0;try{const a=await u.get("/partnerships");I.value=a.data.asContractor||[],F.value=a.data.asSubcontractor||[],B.value=a.data.stats||{}}catch(a){console.error("Load partnerships failed:",a)}D.value=!1}async function ee(){if($.value.length<2){z.value=[];return}G.value=!0;try{const a=await u.get(`/partnerships/search/orgs?q=${encodeURIComponent($.value)}`);z.value=a.data}catch(a){console.error("Search failed:",a)}G.value=!1}function te(a){g.value.subcontractor_slug=a.slug,$.value=a.name,z.value=[]}async function se(){var a,t;if(g.value.subcontractor_slug){M.value=!0;try{await u.post("/partnerships",{subcontractor_slug:g.value.subcontractor_slug,notes:g.value.notes||void 0,contract_start:g.value.contract_start||void 0,contract_end:g.value.contract_end||void 0}),j.value=!1,Z(),await P()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}M.value=!1}}function Z(){g.value={subcontractor_slug:"",notes:"",contract_start:"",contract_end:""},$.value="",z.value=[]}async function ae(a){var t,o;try{await u.post(`/partnerships/${a.id}/accept`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function ne(a){var t,o;if(confirm("Einladung wirklich ablehnen?"))try{await u.post(`/partnerships/${a.id}/decline`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function K(a,t){var o,d,_;if(confirm(`Status auf "${t}" ändern?`))try{await u.put(`/partnerships/${a.id}/status`,{status:t}),await P(),((o=i.value)==null?void 0:o.id)===a.id&&(i.value.status=t)}catch(s){alert("Fehler: "+(((_=(d=s.response)==null?void 0:d.data)==null?void 0:_.error)||s.message))}}async function H(a){var t,o;T.value=a;try{const d=await u.get(`/partnerships/${a.id}`);i.value=d.data,q.value=!0}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function le(){y.value={name:"",description:"",rate_type:"hourly",amount:0,is_default:!1},O.value=!0}async function re(){var a,t;if(!y.value.name||!y.value.amount){alert("Name und Betrag erforderlich");return}try{await u.post(`/partnerships/${i.value.id}/rates`,{...y.value,amount_cents:Math.round(y.value.amount*100)});const o=await u.get(`/partnerships/${i.value.id}`);i.value=o.data,O.value=!1}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function oe(a){var t,o;if(confirm(`Satz "${a.name}" löschen?`))try{await u.delete(`/partnerships/${i.value.id}/rates/${a.id}`);const d=await u.get(`/partnerships/${i.value.id}`);i.value=d.data}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function U(){m.value="orders";try{const a=await u.get("/partnerships/orders/list");V.value=a.data}catch(a){console.error("Load shared orders failed:",a)}}async function de(a){T.value=a,x.value={partnership_id:a.id,order_id:"",rate_id:"",required_staff:1,notes:""};try{const t=await u.get("/orders");Q.value=t.data.orders||t.data||[];const o=await u.get(`/partnerships/${a.id}/rates`);i.value={...a,rates:o.data},R.value=!0}catch(t){console.error("Load orders failed:",t)}}async function ie(){var a,t;if(!x.value.order_id){alert("Bitte Auftrag auswählen");return}try{await u.post("/partnerships/orders",{partnership_id:x.value.partnership_id,order_id:x.value.order_id,rate_id:x.value.rate_id||void 0,required_staff:x.value.required_staff,notes:x.value.notes||void 0}),R.value=!1,await U()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function J(a,t){var o,d;try{await u.post(`/partnerships/orders/${a.id}/respond`,{accept:t,notes:""}),await U()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function ue(a){var t,o;if(confirm("Auftrag abschließen?"))try{await u.post(`/partnerships/orders/${a.id}/complete`),await U()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function W(){m.value="timesheets";try{const a=await u.get("/partnerships/timesheets/list");E.value=a.data}catch(a){console.error("Load timesheets failed:",a)}}async function ce(a){var t,o;try{await u.post(`/partnerships/timesheets/${a.id}/approve`),await W()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function pe(a){var o,d;const t=prompt("Grund für Beanstandung:");if(t)try{await u.post(`/partnerships/timesheets/${a.id}/dispute`,{reason:t}),await W()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function X(){m.value="invoices";try{const a=await u.get("/partnerships/invoices/list");L.value=a.data}catch(a){console.error("Load invoices failed:",a)}}async function xe(a){var t,o;if(confirm("Rechnung als bezahlt markieren?"))try{await u.put(`/partnerships/invoices/${a.id}/pay`),await X()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function N(a){return(a/100).toFixed(2).replace(".",",")+" €"}function C(a){return a?new Date(a).toLocaleDateString("de-DE"):"-"}function v(a){return{pending:{text:"Ausstehend",class:"bg-yellow-100 text-yellow-800"},active:{text:"Aktiv",class:"bg-green-100 text-green-800"},paused:{text:"Pausiert",class:"bg-gray-100 text-gray-800"},terminated:{text:"Beendet",class:"bg-red-100 text-red-800"},requested:{text:"Angefragt",class:"bg-blue-100 text-blue-800"},accepted:{text:"Angenommen",class:"bg-green-100 text-green-800"},declined:{text:"Abgelehnt",class:"bg-red-100 text-red-800"},completed:{text:"Abgeschlossen",class:"bg-gray-100 text-gray-800"},approved:{text:"Freigegeben",class:"bg-green-100 text-green-800"},disputed:{text:"Beanstandet",class:"bg-red-100 text-red-800"},draft:{text:"Entwurf",class:"bg-gray-100 text-gray-800"},sent:{text:"Gesendet",class:"bg-blue-100 text-blue-800"},paid:{text:"Bezahlt",class:"bg-green-100 text-green-800"}}[a]||{text:a,class:"bg-gray-100 text-gray-800"}}return(a,t)=>{var o,d,_;return l(),n("div",be,[e("div",he,[t[24]||(t[24]=e("div",null,[e("h1",{class:"text-2xl font-bold text-gray-900"},"🤝 Subunternehmer"),e("p",{class:"text-gray-500"},"Partnerschaften mit anderen Sicherheitsunternehmen")],-1)),e("button",{onClick:t[0]||(t[0]=s=>j.value=!0),class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," + Partner einladen ")]),e("div",fe,[e("button",{onClick:t[1]||(t[1]=s=>m.value="overview"),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="overview"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Übersicht ",2),e("button",{onClick:t[2]||(t[2]=s=>U()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="orders"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Geteilte Aufträge ",2),e("button",{onClick:t[3]||(t[3]=s=>W()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="timesheets"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Stundenzettel ",2),e("button",{onClick:t[4]||(t[4]=s=>X()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="invoices"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Rechnungen ",2)]),D.value?(l(),n("div",_e,[...t[25]||(t[25]=[e("div",{class:"animate-spin w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full mx-auto"},null,-1)])])):m.value==="overview"?(l(),n("div",we,[e("div",ke,[e("div",Ce,[e("div",Ae,r(B.value.totalPartnerships||0),1),t[26]||(t[26]=e("div",{class:"text-sm text-gray-500"},"Partnerschaften",-1))]),e("div",Se,[e("div",$e,r(B.value.activeAsContractor||0),1),t[27]||(t[27]=e("div",{class:"text-sm text-gray-500"},"Als Auftraggeber",-1))]),e("div",ze,[e("div",Fe,r(B.value.activeAsSubcontractor||0),1),t[28]||(t[28]=e("div",{class:"text-sm text-gray-500"},"Als Subunternehmer",-1))]),e("div",Be,[e("div",Ve,r(B.value.pendingInvitations||0),1),t[29]||(t[29]=e("div",{class:"text-sm text-gray-500"},"Offene Einladungen",-1))])]),F.value.filter(s=>s.status==="pending").length>0?(l(),n("div",Pe,[t[31]||(t[31]=e("h2",{class:"text-lg font-semibold mb-3"},"📩 Offene Einladungen",-1)),e("div",Ne,[(l(!0),n(h,null,k(F.value.filter(s=>s.status==="pending"),s=>(l(),n("div",{key:s.id,class:"bg-yellow-50 border border-yellow-200 rounded-lg p-4 flex justify-between items-center"},[e("div",null,[e("span",je,r(s.partner_name),1),t[30]||(t[30]=S(" möchte mit Ihnen zusammenarbeiten ",-1))]),e("div",Oe,[e("button",{onClick:b=>ae(s),class:"px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Re),e("button",{onClick:b=>ne(s),class:"px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,Me)])]))),128))])])):p("",!0),e("div",Ue,[t[33]||(t[33]=e("h2",{class:"text-lg font-semibold mb-3"},"🏢 Wir als Auftraggeber",-1)),I.value.length===0?(l(),n("div",De," Noch keine Subunternehmer eingeladen ")):(l(),n("div",Ie,[e("table",qe,[t[32]||(t[32]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Subunternehmer"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Te,[(l(!0),n(h,null,k(I.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",Ee,[e("span",Le,r(s.partner_name),1),e("span",Ke,"@"+r(s.partner_slug),1)]),e("td",We,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",Ge,[S(r(s.shared_orders_count||0)+" geteilt ",1),s.pending_orders>0?(l(),n("span",Qe," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",Ze,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,He),s.status==="active"?(l(),n("button",{key:0,onClick:b=>de(s),class:"text-green-600 hover:text-green-800"}," Auftrag teilen ",8,Je)):p("",!0)])]))),128))])])]))]),e("div",null,[t[35]||(t[35]=e("h2",{class:"text-lg font-semibold mb-3"},"👷 Wir als Subunternehmer",-1)),F.value.filter(s=>s.status!=="pending").length===0?(l(),n("div",Xe," Keine aktiven Partnerschaften als Subunternehmer ")):(l(),n("div",Ye,[e("table",et,[t[34]||(t[34]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftraggeber"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",tt,[(l(!0),n(h,null,k(F.value.filter(s=>s.status!=="pending"),s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",st,[e("span",at,r(s.partner_name),1)]),e("td",nt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",lt,[S(r(s.shared_orders_count||0)+" erhalten ",1),s.pending_orders>0?(l(),n("span",rt," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",ot,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,dt)])]))),128))])])]))])])):m.value==="orders"?(l(),n("div",it,[e("div",ut,[e("div",null,[t[37]||(t[37]=e("h2",{class:"text-lg font-semibold mb-3"},"📤 Von uns geteilt",-1)),V.value.asContractor.length===0?(l(),n("div",ct," Keine geteilten Aufträge ")):(l(),n("div",pt,[(l(!0),n(h,null,k(V.value.asContractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",xt,[e("div",null,[e("div",gt,r(s.order_title),1),e("div",vt,r(s.location),1),e("div",yt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",mt,[t[36]||(t[36]=S(" → ",-1)),e("span",bt,r(s.subcontractor_name),1)])]),e("div",ht,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3),s.rate_name?(l(),n("div",ft,r(s.rate_name)+": "+r(N(s.rate_amount))+"/h ",1)):p("",!0)])]),s.status==="accepted"?(l(),n("div",_t,[e("button",{onClick:b=>ue(s),class:"text-sm text-green-600 hover:text-green-800"}," ✓ Abschließen ",8,wt)])):p("",!0)]))),128))]))]),e("div",null,[t[39]||(t[39]=e("h2",{class:"text-lg font-semibold mb-3"},"📥 An uns übertragen",-1)),V.value.asSubcontractor.length===0?(l(),n("div",kt," Keine erhaltenen Aufträge ")):(l(),n("div",Ct,[(l(!0),n(h,null,k(V.value.asSubcontractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",At,[e("div",null,[e("div",St,r(s.order_title),1),e("div",$t,r(s.location),1),e("div",zt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",Ft,[t[38]||(t[38]=S(" ← ",-1)),e("span",Bt,r(s.contractor_name),1)])]),e("div",Vt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)])]),s.status==="requested"?(l(),n("div",Pt,[e("button",{onClick:b=>J(s,!0),class:"text-sm px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Nt),e("button",{onClick:b=>J(s,!1),class:"text-sm px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,jt)])):p("",!0)]))),128))]))])])])):m.value==="timesheets"?(l(),n("div",Ot,[E.value.length===0?(l(),n("div",Rt," Keine Partnership-Stundenzettel vorhanden ")):(l(),n("div",Mt,[e("table",Ut,[t[40]||(t[40]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Datum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Mitarbeiter"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Stunden"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Dt,[(l(!0),n(h,null,k(E.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",It,r(C(s.date)),1),e("td",qt,r(s.first_name)+" "+r(s.last_name),1),e("td",Tt,r(s.order_title),1),e("td",Et,r(s.hours_worked)+"h",1),e("td",Lt,r(s.calculated_amount_cents?N(s.calculated_amount_cents):"-"),1),e("td",Kt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.approval_status).class])},r(v(s.approval_status).text),3)]),e("td",Wt,[s.approval_status==="pending"?(l(),n(h,{key:0},[e("button",{onClick:b=>ce(s),class:"text-green-600 hover:text-green-800"}," ✓ Freigeben ",8,Gt),e("button",{onClick:b=>pe(s),class:"text-red-600 hover:text-red-800"}," ✗ Beanstanden ",8,Qt)],64)):p("",!0)])]))),128))])])]))])):m.value==="invoices"?(l(),n("div",Zt,[L.value.length===0?(l(),n("div",Ht," Keine Rechnungen vorhanden ")):(l(),n("div",Jt,[e("table",Xt,[t[41]||(t[41]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Nr."),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Partner"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Zeitraum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Richtung"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Yt,[(l(!0),n(h,null,k(L.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",es,r(s.invoice_number),1),e("td",ts,r(s.partner_name),1),e("td",ss,r(C(s.period_start))+" - "+r(C(s.period_end)),1),e("td",as,[s.direction==="outgoing"?(l(),n("span",ns,"📤 Ausgehend")):(l(),n("span",ls,"📥 Eingehend"))]),e("td",rs,r(N(s.total_cents)),1),e("td",os,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",ds,[s.direction==="incoming"&&s.status==="sent"?(l(),n("button",{key:0,onClick:b=>xe(s),class:"text-green-600 hover:text-green-800"}," Als bezahlt markieren ",8,is)):p("",!0)])]))),128))])])]))])):p("",!0),j.value?(l(),n("div",us,[e("div",cs,[t[46]||(t[46]=e("h2",{class:"text-xl font-bold mb-4"},"Partner einladen",-1)),e("div",ps,[e("div",null,[t[42]||(t[42]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Organisation suchen",-1)),f(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>$.value=s),onInput:ee,type:"text",placeholder:"Name oder Slug eingeben...",class:"w-full border rounded-lg px-3 py-2"},null,544),[[A,$.value]]),z.value.length>0?(l(),n("div",xs,[(l(!0),n(h,null,k(z.value,s=>(l(),n("button",{key:s.id,onClick:b=>te(s),class:"w-full px-3 py-2 text-left hover:bg-gray-100"},[S(r(s.name)+" ",1),e("span",vs,"@"+r(s.slug),1)],8,gs))),128))])):p("",!0)]),e("div",null,[t[43]||(t[43]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsbeginn",-1)),f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>g.value.contract_start=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_start]])]),e("div",null,[t[44]||(t[44]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsende (optional)",-1)),f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>g.value.contract_end=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_end]])]),e("div",null,[t[45]||(t[45]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[8]||(t[8]=s=>g.value.notes=s),rows:"3",class:"w-full border rounded-lg px-3 py-2",placeholder:"Optionale Nachricht..."},null,512),[[A,g.value.notes]])])]),e("div",ys,[e("button",{onClick:t[9]||(t[9]=s=>{j.value=!1,Z()}),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:se,disabled:M.value||!g.value.subcontractor_slug,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"},r(M.value?"Wird gesendet...":"Einladung senden"),9,ms)])])])):p("",!0),q.value&&i.value?(l(),n("div",bs,[e("div",hs,[e("div",fs,[e("div",null,[e("h2",_s," Partnerschaft mit "+r(i.value.isContractor?i.value.subcontractor_name:i.value.contractor_name),1),e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(i.value.status).class])},r(v(i.value.status).text),3)]),e("button",{onClick:t[10]||(t[10]=s=>q.value=!1),class:"text-gray-500 hover:text-gray-700"},"✕")]),e("div",ws,[e("div",null,[t[47]||(t[47]=e("span",{class:"text-gray-500"},"Rolle:",-1)),S(" "+r(i.value.isContractor?"Wir sind Auftraggeber":"Wir sind Subunternehmer"),1)]),e("div",null,[t[48]||(t[48]=e("span",{class:"text-gray-500"},"Seit:",-1)),S(" "+r(C(i.value.contract_start||i.value.created_at)),1)]),i.value.contract_end?(l(),n("div",ks,[t[49]||(t[49]=e("span",{class:"text-gray-500"},"Bis:",-1)),S(" "+r(C(i.value.contract_end)),1)])):p("",!0)]),i.value.isContractor?(l(),n("div",Cs,[e("div",{class:"flex justify-between items-center mb-2"},[t[50]||(t[50]=e("h3",{class:"font-semibold"},"Stundensätze",-1)),e("button",{onClick:le,class:"text-sm text-blue-600 hover:text-blue-800"}," + Neuer Satz ")]),(o=i.value.rates)!=null&&o.length?(l(),n("div",Ss,[(l(!0),n(h,null,k(i.value.rates,s=>(l(),n("div",{key:s.id,class:"flex justify-between items-center bg-gray-50 rounded px-3 py-2"},[e("div",null,[e("span",$s,r(s.name),1),s.is_default?(l(),n("span",zs,"Standard")):p("",!0)]),e("div",Fs,[e("span",Bs,r(N(s.amount_cents))+"/h",1),e("button",{onClick:b=>oe(s),class:"text-red-500 hover:text-red-700"}," 🗑 ",8,Vs)])]))),128))])):(l(),n("div",As," Noch keine Sätze definiert "))])):p("",!0),i.value.stats?(l(),n("div",Ps,[e("div",Ns,[e("div",js,r(i.value.stats.completed_orders||0),1),t[51]||(t[51]=e("div",{class:"text-xs text-gray-500"},"Abgeschlossen",-1))]),e("div",Os,[e("div",Rs,r(i.value.stats.active_orders||0),1),t[52]||(t[52]=e("div",{class:"text-xs text-gray-500"},"Aktiv",-1))]),e("div",Ms,[e("div",Us,r(i.value.stats.pending_orders||0),1),t[53]||(t[53]=e("div",{class:"text-xs text-gray-500"},"Ausstehend",-1))])])):p("",!0),i.value.status==="active"?(l(),n("div",Ds,[e("button",{onClick:t[11]||(t[11]=s=>K(i.value,"paused")),class:"px-4 py-2 bg-yellow-100 text-yellow-700 rounded hover:bg-yellow-200"}," Pausieren "),e("button",{onClick:t[12]||(t[12]=s=>K(i.value,"terminated")),class:"px-4 py-2 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Beenden ")])):i.value.status==="paused"?(l(),n("div",Is,[e("button",{onClick:t[13]||(t[13]=s=>K(i.value,"active")),class:"px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"}," Reaktivieren ")])):p("",!0)])])):p("",!0),O.value?(l(),n("div",qs,[e("div",Ts,[t[58]||(t[58]=e("h2",{class:"text-xl font-bold mb-4"},"Neuer Stundensatz",-1)),e("div",Es,[e("div",null,[t[54]||(t[54]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Bezeichnung *",-1)),f(e("input",{"onUpdate:modelValue":t[14]||(t[14]=s=>y.value.name=s),type:"text",placeholder:"z.B. Normaldienst, Nachtschicht...",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.name]])]),e("div",null,[t[55]||(t[55]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Beschreibung",-1)),f(e("input",{"onUpdate:modelValue":t[15]||(t[15]=s=>y.value.description=s),type:"text",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.description]])]),e("div",null,[t[56]||(t[56]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz (€) *",-1)),f(e("input",{"onUpdate:modelValue":t[16]||(t[16]=s=>y.value.amount=s),type:"number",step:"0.01",min:"0",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.amount,void 0,{number:!0}]])]),e("label",Ls,[f(e("input",{"onUpdate:modelValue":t[17]||(t[17]=s=>y.value.is_default=s),type:"checkbox",class:"mr-2"},null,512),[[me,y.value.is_default]]),t[57]||(t[57]=e("span",{class:"text-sm"},"Als Standard-Satz verwenden",-1))])]),e("div",Ks,[e("button",{onClick:t[18]||(t[18]=s=>O.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:re,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," Speichern ")])])])):p("",!0),R.value?(l(),n("div",Ws,[e("div",Gs,[e("h2",Qs,"Auftrag teilen mit "+r((d=T.value)==null?void 0:d.partner_name),1),e("div",Zs,[e("div",null,[t[60]||(t[60]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Auftrag auswählen *",-1)),f(e("select",{"onUpdate:modelValue":t[19]||(t[19]=s=>x.value.order_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[59]||(t[59]=e("option",{value:""},"Bitte wählen...",-1)),(l(!0),n(h,null,k(Q.value,s=>(l(),n("option",{key:s.id,value:s.id},r(s.title)+" ("+r(C(s.start_date))+") ",9,Hs))),128))],512),[[Y,x.value.order_id]])]),e("div",null,[t[62]||(t[62]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz",-1)),f(e("select",{"onUpdate:modelValue":t[20]||(t[20]=s=>x.value.rate_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[61]||(t[61]=e("option",{value:""},"Keiner / Später festlegen",-1)),(l(!0),n(h,null,k((_=i.value)==null?void 0:_.rates,s=>(l(),n("option",{key:s.id,value:s.id},r(s.name)+" ("+r(N(s.amount_cents))+"/h) ",9,Js))),128))],512),[[Y,x.value.rate_id]])]),e("div",null,[t[63]||(t[63]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Benötigte Mitarbeiter",-1)),f(e("input",{"onUpdate:modelValue":t[21]||(t[21]=s=>x.value.required_staff=s),type:"number",min:"1",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.required_staff,void 0,{number:!0}]])]),e("div",null,[t[64]||(t[64]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[22]||(t[22]=s=>x.value.notes=s),rows:"2",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.notes]])])]),e("div",Xs,[e("button",{onClick:t[23]||(t[23]=s=>R.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:ie,disabled:!x.value.order_id,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"}," Auftrag teilen ",8,Ys)])])])):p("",!0)])}}});export{sa as default}; +import{d as ge,u as ve,q as ye,m as u,c as n,a as e,n as w,t as r,F as h,x as k,e as p,b as f,v as A,p as S,B as me,s as Y,r as c,o as l}from"./index-DFiGttzi.js";const be={class:"p-6"},he={class:"flex justify-between items-center mb-6"},fe={class:"flex space-x-1 border-b mb-6"},_e={key:0,class:"text-center py-12"},we={key:1},ke={class:"grid grid-cols-4 gap-4 mb-6"},Ce={class:"bg-white rounded-lg shadow p-4"},Ae={class:"text-2xl font-bold text-gray-900"},Se={class:"bg-white rounded-lg shadow p-4"},$e={class:"text-2xl font-bold text-green-600"},ze={class:"bg-white rounded-lg shadow p-4"},Fe={class:"text-2xl font-bold text-blue-600"},Be={class:"bg-white rounded-lg shadow p-4"},Ve={class:"text-2xl font-bold text-yellow-600"},Pe={key:0,class:"mb-6"},Ne={class:"space-y-2"},je={class:"font-medium"},Oe={class:"flex space-x-2"},Re=["onClick"],Me=["onClick"],Ue={class:"mb-6"},De={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ie={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},qe={class:"min-w-full divide-y divide-gray-200"},Te={class:"divide-y divide-gray-200"},Ee={class:"px-4 py-3"},Le={class:"font-medium"},Ke={class:"text-gray-500 text-sm ml-2"},We={class:"px-4 py-3"},Ge={class:"px-4 py-3 text-sm"},Qe={key:0,class:"text-yellow-600 ml-1"},Ze={class:"px-4 py-3 text-right space-x-2"},He=["onClick"],Je=["onClick"],Xe={key:0,class:"bg-gray-50 rounded-lg p-8 text-center text-gray-500"},Ye={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},et={class:"min-w-full divide-y divide-gray-200"},tt={class:"divide-y divide-gray-200"},st={class:"px-4 py-3"},at={class:"font-medium"},nt={class:"px-4 py-3"},lt={class:"px-4 py-3 text-sm"},rt={key:0,class:"text-yellow-600 ml-1"},ot={class:"px-4 py-3 text-right"},dt=["onClick"],it={key:2},ut={class:"grid grid-cols-2 gap-6"},ct={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},pt={key:1,class:"space-y-2"},xt={class:"flex justify-between items-start"},gt={class:"font-medium"},vt={class:"text-sm text-gray-500"},yt={class:"text-sm text-gray-500"},mt={class:"text-sm mt-1"},bt={class:"font-medium"},ht={class:"text-right"},ft={key:0,class:"text-sm text-gray-500 mt-1"},_t={key:0,class:"mt-2 pt-2 border-t"},wt=["onClick"],kt={key:0,class:"bg-gray-50 rounded-lg p-6 text-center text-gray-500"},Ct={key:1,class:"space-y-2"},At={class:"flex justify-between items-start"},St={class:"font-medium"},$t={class:"text-sm text-gray-500"},zt={class:"text-sm text-gray-500"},Ft={class:"text-sm mt-1"},Bt={class:"font-medium"},Vt={class:"text-right"},Pt={key:0,class:"mt-2 pt-2 border-t flex space-x-2"},Nt=["onClick"],jt=["onClick"],Ot={key:3},Rt={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Mt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Ut={class:"min-w-full divide-y divide-gray-200"},Dt={class:"divide-y divide-gray-200"},It={class:"px-4 py-3"},qt={class:"px-4 py-3"},Tt={class:"px-4 py-3"},Et={class:"px-4 py-3"},Lt={class:"px-4 py-3"},Kt={class:"px-4 py-3"},Wt={class:"px-4 py-3 text-right space-x-2"},Gt=["onClick"],Qt=["onClick"],Zt={key:4},Ht={key:0,class:"bg-gray-50 rounded-lg p-12 text-center text-gray-500"},Jt={key:1,class:"bg-white rounded-lg shadow overflow-hidden"},Xt={class:"min-w-full divide-y divide-gray-200"},Yt={class:"divide-y divide-gray-200"},es={class:"px-4 py-3 font-mono"},ts={class:"px-4 py-3"},ss={class:"px-4 py-3"},as={class:"px-4 py-3"},ns={key:0,class:"text-red-600"},ls={key:1,class:"text-green-600"},rs={class:"px-4 py-3 text-right font-medium"},os={class:"px-4 py-3"},ds={class:"px-4 py-3 text-right"},is=["onClick"],us={key:5,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},cs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},ps={class:"space-y-4"},xs={key:0,class:"mt-1 border rounded-lg shadow-sm max-h-40 overflow-y-auto"},gs=["onClick"],vs={class:"text-gray-500"},ys={class:"flex justify-end space-x-2 mt-6"},ms=["disabled"],bs={key:6,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},hs={class:"bg-white rounded-lg shadow-xl w-full max-w-2xl p-6 max-h-[90vh] overflow-y-auto"},fs={class:"flex justify-between items-start mb-4"},_s={class:"text-xl font-bold"},ws={class:"grid grid-cols-2 gap-4 mb-6 text-sm"},ks={key:0},Cs={key:0,class:"mb-6"},As={key:0,class:"text-gray-500 text-sm"},Ss={key:1,class:"space-y-2"},$s={class:"font-medium"},zs={key:0,class:"text-xs text-blue-600 ml-2"},Fs={class:"flex items-center space-x-4"},Bs={class:"font-mono"},Vs=["onClick"],Ps={key:1,class:"grid grid-cols-3 gap-4 mb-6"},Ns={class:"bg-gray-50 rounded p-3 text-center"},js={class:"text-xl font-bold"},Os={class:"bg-gray-50 rounded p-3 text-center"},Rs={class:"text-xl font-bold"},Ms={class:"bg-gray-50 rounded p-3 text-center"},Us={class:"text-xl font-bold"},Ds={key:2,class:"flex space-x-2"},Is={key:3,class:"flex space-x-2"},qs={key:7,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Ts={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Es={class:"space-y-4"},Ls={class:"flex items-center"},Ks={class:"flex justify-end space-x-2 mt-6"},Ws={key:8,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"},Gs={class:"bg-white rounded-lg shadow-xl w-full max-w-md p-6"},Qs={class:"text-xl font-bold mb-4"},Zs={class:"space-y-4"},Hs=["value"],Js=["value"],Xs={class:"flex justify-end space-x-2 mt-6"},Ys=["disabled"],sa=ge({__name:"PartnershipsView",setup(ea){ve();const D=c(!0),I=c([]),F=c([]),B=c({}),m=c("overview"),j=c(!1),q=c(!1),O=c(!1),R=c(!1),T=c(null),i=c(null),$=c(""),z=c([]),G=c(!1),g=c({subcontractor_slug:"",notes:"",contract_start:"",contract_end:""}),M=c(!1),y=c({name:"",description:"",rate_type:"hourly",amount:0,is_default:!1}),V=c({asContractor:[],asSubcontractor:[]}),E=c([]),L=c([]),Q=c([]),x=c({partnership_id:"",order_id:"",rate_id:"",required_staff:1,notes:""});ye(async()=>{await P()});async function P(){D.value=!0;try{const a=await u.get("/partnerships");I.value=a.data.asContractor||[],F.value=a.data.asSubcontractor||[],B.value=a.data.stats||{}}catch(a){console.error("Load partnerships failed:",a)}D.value=!1}async function ee(){if($.value.length<2){z.value=[];return}G.value=!0;try{const a=await u.get(`/partnerships/search/orgs?q=${encodeURIComponent($.value)}`);z.value=a.data}catch(a){console.error("Search failed:",a)}G.value=!1}function te(a){g.value.subcontractor_slug=a.slug,$.value=a.name,z.value=[]}async function se(){var a,t;if(g.value.subcontractor_slug){M.value=!0;try{await u.post("/partnerships",{subcontractor_slug:g.value.subcontractor_slug,notes:g.value.notes||void 0,contract_start:g.value.contract_start||void 0,contract_end:g.value.contract_end||void 0}),j.value=!1,Z(),await P()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}M.value=!1}}function Z(){g.value={subcontractor_slug:"",notes:"",contract_start:"",contract_end:""},$.value="",z.value=[]}async function ae(a){var t,o;try{await u.post(`/partnerships/${a.id}/accept`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function ne(a){var t,o;if(confirm("Einladung wirklich ablehnen?"))try{await u.post(`/partnerships/${a.id}/decline`),await P()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function K(a,t){var o,d,_;if(confirm(`Status auf "${t}" ändern?`))try{await u.put(`/partnerships/${a.id}/status`,{status:t}),await P(),((o=i.value)==null?void 0:o.id)===a.id&&(i.value.status=t)}catch(s){alert("Fehler: "+(((_=(d=s.response)==null?void 0:d.data)==null?void 0:_.error)||s.message))}}async function H(a){var t,o;T.value=a;try{const d=await u.get(`/partnerships/${a.id}`);i.value=d.data,q.value=!0}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function le(){y.value={name:"",description:"",rate_type:"hourly",amount:0,is_default:!1},O.value=!0}async function re(){var a,t;if(!y.value.name||!y.value.amount){alert("Name und Betrag erforderlich");return}try{await u.post(`/partnerships/${i.value.id}/rates`,{...y.value,amount_cents:Math.round(y.value.amount*100)});const o=await u.get(`/partnerships/${i.value.id}`);i.value=o.data,O.value=!1}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function oe(a){var t,o;if(confirm(`Satz "${a.name}" löschen?`))try{await u.delete(`/partnerships/${i.value.id}/rates/${a.id}`);const d=await u.get(`/partnerships/${i.value.id}`);i.value=d.data}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function U(){m.value="orders";try{const a=await u.get("/partnerships/orders/list");V.value=a.data}catch(a){console.error("Load shared orders failed:",a)}}async function de(a){T.value=a,x.value={partnership_id:a.id,order_id:"",rate_id:"",required_staff:1,notes:""};try{const t=await u.get("/orders");Q.value=t.data.orders||t.data||[];const o=await u.get(`/partnerships/${a.id}/rates`);i.value={...a,rates:o.data},R.value=!0}catch(t){console.error("Load orders failed:",t)}}async function ie(){var a,t;if(!x.value.order_id){alert("Bitte Auftrag auswählen");return}try{await u.post("/partnerships/orders",{partnership_id:x.value.partnership_id,order_id:x.value.order_id,rate_id:x.value.rate_id||void 0,required_staff:x.value.required_staff,notes:x.value.notes||void 0}),R.value=!1,await U()}catch(o){alert("Fehler: "+(((t=(a=o.response)==null?void 0:a.data)==null?void 0:t.error)||o.message))}}async function J(a,t){var o,d;try{await u.post(`/partnerships/orders/${a.id}/respond`,{accept:t,notes:""}),await U()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function ue(a){var t,o;if(confirm("Auftrag abschließen?"))try{await u.post(`/partnerships/orders/${a.id}/complete`),await U()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function W(){m.value="timesheets";try{const a=await u.get("/partnerships/timesheets/list");E.value=a.data}catch(a){console.error("Load timesheets failed:",a)}}async function ce(a){var t,o;try{await u.post(`/partnerships/timesheets/${a.id}/approve`),await W()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}async function pe(a){var o,d;const t=prompt("Grund für Beanstandung:");if(t)try{await u.post(`/partnerships/timesheets/${a.id}/dispute`,{reason:t}),await W()}catch(_){alert("Fehler: "+(((d=(o=_.response)==null?void 0:o.data)==null?void 0:d.error)||_.message))}}async function X(){m.value="invoices";try{const a=await u.get("/partnerships/invoices/list");L.value=a.data}catch(a){console.error("Load invoices failed:",a)}}async function xe(a){var t,o;if(confirm("Rechnung als bezahlt markieren?"))try{await u.put(`/partnerships/invoices/${a.id}/pay`),await X()}catch(d){alert("Fehler: "+(((o=(t=d.response)==null?void 0:t.data)==null?void 0:o.error)||d.message))}}function N(a){return(a/100).toFixed(2).replace(".",",")+" €"}function C(a){return a?new Date(a).toLocaleDateString("de-DE"):"-"}function v(a){return{pending:{text:"Ausstehend",class:"bg-yellow-100 text-yellow-800"},active:{text:"Aktiv",class:"bg-green-100 text-green-800"},paused:{text:"Pausiert",class:"bg-gray-100 text-gray-800"},terminated:{text:"Beendet",class:"bg-red-100 text-red-800"},requested:{text:"Angefragt",class:"bg-blue-100 text-blue-800"},accepted:{text:"Angenommen",class:"bg-green-100 text-green-800"},declined:{text:"Abgelehnt",class:"bg-red-100 text-red-800"},completed:{text:"Abgeschlossen",class:"bg-gray-100 text-gray-800"},approved:{text:"Freigegeben",class:"bg-green-100 text-green-800"},disputed:{text:"Beanstandet",class:"bg-red-100 text-red-800"},draft:{text:"Entwurf",class:"bg-gray-100 text-gray-800"},sent:{text:"Gesendet",class:"bg-blue-100 text-blue-800"},paid:{text:"Bezahlt",class:"bg-green-100 text-green-800"}}[a]||{text:a,class:"bg-gray-100 text-gray-800"}}return(a,t)=>{var o,d,_;return l(),n("div",be,[e("div",he,[t[24]||(t[24]=e("div",null,[e("h1",{class:"text-2xl font-bold text-gray-900"},"🤝 Subunternehmer"),e("p",{class:"text-gray-500"},"Partnerschaften mit anderen Sicherheitsunternehmen")],-1)),e("button",{onClick:t[0]||(t[0]=s=>j.value=!0),class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," + Partner einladen ")]),e("div",fe,[e("button",{onClick:t[1]||(t[1]=s=>m.value="overview"),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="overview"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Übersicht ",2),e("button",{onClick:t[2]||(t[2]=s=>U()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="orders"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Geteilte Aufträge ",2),e("button",{onClick:t[3]||(t[3]=s=>W()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="timesheets"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Stundenzettel ",2),e("button",{onClick:t[4]||(t[4]=s=>X()),class:w(["px-4 py-2 font-medium border-b-2 -mb-px",m.value==="invoices"?"border-blue-600 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," Rechnungen ",2)]),D.value?(l(),n("div",_e,[...t[25]||(t[25]=[e("div",{class:"animate-spin w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full mx-auto"},null,-1)])])):m.value==="overview"?(l(),n("div",we,[e("div",ke,[e("div",Ce,[e("div",Ae,r(B.value.totalPartnerships||0),1),t[26]||(t[26]=e("div",{class:"text-sm text-gray-500"},"Partnerschaften",-1))]),e("div",Se,[e("div",$e,r(B.value.activeAsContractor||0),1),t[27]||(t[27]=e("div",{class:"text-sm text-gray-500"},"Als Auftraggeber",-1))]),e("div",ze,[e("div",Fe,r(B.value.activeAsSubcontractor||0),1),t[28]||(t[28]=e("div",{class:"text-sm text-gray-500"},"Als Subunternehmer",-1))]),e("div",Be,[e("div",Ve,r(B.value.pendingInvitations||0),1),t[29]||(t[29]=e("div",{class:"text-sm text-gray-500"},"Offene Einladungen",-1))])]),F.value.filter(s=>s.status==="pending").length>0?(l(),n("div",Pe,[t[31]||(t[31]=e("h2",{class:"text-lg font-semibold mb-3"},"📩 Offene Einladungen",-1)),e("div",Ne,[(l(!0),n(h,null,k(F.value.filter(s=>s.status==="pending"),s=>(l(),n("div",{key:s.id,class:"bg-yellow-50 border border-yellow-200 rounded-lg p-4 flex justify-between items-center"},[e("div",null,[e("span",je,r(s.partner_name),1),t[30]||(t[30]=S(" möchte mit Ihnen zusammenarbeiten ",-1))]),e("div",Oe,[e("button",{onClick:b=>ae(s),class:"px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Re),e("button",{onClick:b=>ne(s),class:"px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,Me)])]))),128))])])):p("",!0),e("div",Ue,[t[33]||(t[33]=e("h2",{class:"text-lg font-semibold mb-3"},"🏢 Wir als Auftraggeber",-1)),I.value.length===0?(l(),n("div",De," Noch keine Subunternehmer eingeladen ")):(l(),n("div",Ie,[e("table",qe,[t[32]||(t[32]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Subunternehmer"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Te,[(l(!0),n(h,null,k(I.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",Ee,[e("span",Le,r(s.partner_name),1),e("span",Ke,"@"+r(s.partner_slug),1)]),e("td",We,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",Ge,[S(r(s.shared_orders_count||0)+" geteilt ",1),s.pending_orders>0?(l(),n("span",Qe," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",Ze,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,He),s.status==="active"?(l(),n("button",{key:0,onClick:b=>de(s),class:"text-green-600 hover:text-green-800"}," Auftrag teilen ",8,Je)):p("",!0)])]))),128))])])]))]),e("div",null,[t[35]||(t[35]=e("h2",{class:"text-lg font-semibold mb-3"},"👷 Wir als Subunternehmer",-1)),F.value.filter(s=>s.status!=="pending").length===0?(l(),n("div",Xe," Keine aktiven Partnerschaften als Subunternehmer ")):(l(),n("div",Ye,[e("table",et,[t[34]||(t[34]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftraggeber"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Aufträge"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",tt,[(l(!0),n(h,null,k(F.value.filter(s=>s.status!=="pending"),s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",st,[e("span",at,r(s.partner_name),1)]),e("td",nt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",lt,[S(r(s.shared_orders_count||0)+" erhalten ",1),s.pending_orders>0?(l(),n("span",rt," ("+r(s.pending_orders)+" offen) ",1)):p("",!0)]),e("td",ot,[e("button",{onClick:b=>H(s),class:"text-blue-600 hover:text-blue-800"}," Details ",8,dt)])]))),128))])])]))])])):m.value==="orders"?(l(),n("div",it,[e("div",ut,[e("div",null,[t[37]||(t[37]=e("h2",{class:"text-lg font-semibold mb-3"},"📤 Von uns geteilt",-1)),V.value.asContractor.length===0?(l(),n("div",ct," Keine geteilten Aufträge ")):(l(),n("div",pt,[(l(!0),n(h,null,k(V.value.asContractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",xt,[e("div",null,[e("div",gt,r(s.order_title),1),e("div",vt,r(s.location),1),e("div",yt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",mt,[t[36]||(t[36]=S(" → ",-1)),e("span",bt,r(s.subcontractor_name),1)])]),e("div",ht,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3),s.rate_name?(l(),n("div",ft,r(s.rate_name)+": "+r(N(s.rate_amount))+"/h ",1)):p("",!0)])]),s.status==="accepted"?(l(),n("div",_t,[e("button",{onClick:b=>ue(s),class:"text-sm text-green-600 hover:text-green-800"}," ✓ Abschließen ",8,wt)])):p("",!0)]))),128))]))]),e("div",null,[t[39]||(t[39]=e("h2",{class:"text-lg font-semibold mb-3"},"📥 An uns übertragen",-1)),V.value.asSubcontractor.length===0?(l(),n("div",kt," Keine erhaltenen Aufträge ")):(l(),n("div",Ct,[(l(!0),n(h,null,k(V.value.asSubcontractor,s=>(l(),n("div",{key:s.id,class:"bg-white rounded-lg shadow p-4"},[e("div",At,[e("div",null,[e("div",St,r(s.order_title),1),e("div",$t,r(s.location),1),e("div",zt,r(C(s.start_date))+" - "+r(C(s.end_date)),1),e("div",Ft,[t[38]||(t[38]=S(" ← ",-1)),e("span",Bt,r(s.contractor_name),1)])]),e("div",Vt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)])]),s.status==="requested"?(l(),n("div",Pt,[e("button",{onClick:b=>J(s,!0),class:"text-sm px-3 py-1 bg-green-600 text-white rounded hover:bg-green-700"}," Annehmen ",8,Nt),e("button",{onClick:b=>J(s,!1),class:"text-sm px-3 py-1 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Ablehnen ",8,jt)])):p("",!0)]))),128))]))])])])):m.value==="timesheets"?(l(),n("div",Ot,[E.value.length===0?(l(),n("div",Rt," Keine Partnership-Stundenzettel vorhanden ")):(l(),n("div",Mt,[e("table",Ut,[t[40]||(t[40]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Datum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Mitarbeiter"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Auftrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Stunden"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Dt,[(l(!0),n(h,null,k(E.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",It,r(C(s.date)),1),e("td",qt,r(s.first_name)+" "+r(s.last_name),1),e("td",Tt,r(s.order_title),1),e("td",Et,r(s.hours_worked)+"h",1),e("td",Lt,r(s.calculated_amount_cents?N(s.calculated_amount_cents):"-"),1),e("td",Kt,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.approval_status).class])},r(v(s.approval_status).text),3)]),e("td",Wt,[s.approval_status==="pending"?(l(),n(h,{key:0},[e("button",{onClick:b=>ce(s),class:"text-green-600 hover:text-green-800"}," ✓ Freigeben ",8,Gt),e("button",{onClick:b=>pe(s),class:"text-red-600 hover:text-red-800"}," ✗ Beanstanden ",8,Qt)],64)):p("",!0)])]))),128))])])]))])):m.value==="invoices"?(l(),n("div",Zt,[L.value.length===0?(l(),n("div",Ht," Keine Rechnungen vorhanden ")):(l(),n("div",Jt,[e("table",Xt,[t[41]||(t[41]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Nr."),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Partner"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Zeitraum"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Richtung"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Betrag"),e("th",{class:"px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase"},"Status"),e("th",{class:"px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase"},"Aktionen")])],-1)),e("tbody",Yt,[(l(!0),n(h,null,k(L.value,s=>(l(),n("tr",{key:s.id,class:"hover:bg-gray-50"},[e("td",es,r(s.invoice_number),1),e("td",ts,r(s.partner_name),1),e("td",ss,r(C(s.period_start))+" - "+r(C(s.period_end)),1),e("td",as,[s.direction==="outgoing"?(l(),n("span",ns,"📤 Ausgehend")):(l(),n("span",ls,"📥 Eingehend"))]),e("td",rs,r(N(s.total_cents)),1),e("td",os,[e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(s.status).class])},r(v(s.status).text),3)]),e("td",ds,[s.direction==="incoming"&&s.status==="sent"?(l(),n("button",{key:0,onClick:b=>xe(s),class:"text-green-600 hover:text-green-800"}," Als bezahlt markieren ",8,is)):p("",!0)])]))),128))])])]))])):p("",!0),j.value?(l(),n("div",us,[e("div",cs,[t[46]||(t[46]=e("h2",{class:"text-xl font-bold mb-4"},"Partner einladen",-1)),e("div",ps,[e("div",null,[t[42]||(t[42]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Organisation suchen",-1)),f(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>$.value=s),onInput:ee,type:"text",placeholder:"Name oder Slug eingeben...",class:"w-full border rounded-lg px-3 py-2"},null,544),[[A,$.value]]),z.value.length>0?(l(),n("div",xs,[(l(!0),n(h,null,k(z.value,s=>(l(),n("button",{key:s.id,onClick:b=>te(s),class:"w-full px-3 py-2 text-left hover:bg-gray-100"},[S(r(s.name)+" ",1),e("span",vs,"@"+r(s.slug),1)],8,gs))),128))])):p("",!0)]),e("div",null,[t[43]||(t[43]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsbeginn",-1)),f(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>g.value.contract_start=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_start]])]),e("div",null,[t[44]||(t[44]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Vertragsende (optional)",-1)),f(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>g.value.contract_end=s),type:"date",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,g.value.contract_end]])]),e("div",null,[t[45]||(t[45]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[8]||(t[8]=s=>g.value.notes=s),rows:"3",class:"w-full border rounded-lg px-3 py-2",placeholder:"Optionale Nachricht..."},null,512),[[A,g.value.notes]])])]),e("div",ys,[e("button",{onClick:t[9]||(t[9]=s=>{j.value=!1,Z()}),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:se,disabled:M.value||!g.value.subcontractor_slug,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"},r(M.value?"Wird gesendet...":"Einladung senden"),9,ms)])])])):p("",!0),q.value&&i.value?(l(),n("div",bs,[e("div",hs,[e("div",fs,[e("div",null,[e("h2",_s," Partnerschaft mit "+r(i.value.isContractor?i.value.subcontractor_name:i.value.contractor_name),1),e("span",{class:w(["px-2 py-1 text-xs rounded-full",v(i.value.status).class])},r(v(i.value.status).text),3)]),e("button",{onClick:t[10]||(t[10]=s=>q.value=!1),class:"text-gray-500 hover:text-gray-700"},"✕")]),e("div",ws,[e("div",null,[t[47]||(t[47]=e("span",{class:"text-gray-500"},"Rolle:",-1)),S(" "+r(i.value.isContractor?"Wir sind Auftraggeber":"Wir sind Subunternehmer"),1)]),e("div",null,[t[48]||(t[48]=e("span",{class:"text-gray-500"},"Seit:",-1)),S(" "+r(C(i.value.contract_start||i.value.created_at)),1)]),i.value.contract_end?(l(),n("div",ks,[t[49]||(t[49]=e("span",{class:"text-gray-500"},"Bis:",-1)),S(" "+r(C(i.value.contract_end)),1)])):p("",!0)]),i.value.isContractor?(l(),n("div",Cs,[e("div",{class:"flex justify-between items-center mb-2"},[t[50]||(t[50]=e("h3",{class:"font-semibold"},"Stundensätze",-1)),e("button",{onClick:le,class:"text-sm text-blue-600 hover:text-blue-800"}," + Neuer Satz ")]),(o=i.value.rates)!=null&&o.length?(l(),n("div",Ss,[(l(!0),n(h,null,k(i.value.rates,s=>(l(),n("div",{key:s.id,class:"flex justify-between items-center bg-gray-50 rounded px-3 py-2"},[e("div",null,[e("span",$s,r(s.name),1),s.is_default?(l(),n("span",zs,"Standard")):p("",!0)]),e("div",Fs,[e("span",Bs,r(N(s.amount_cents))+"/h",1),e("button",{onClick:b=>oe(s),class:"text-red-500 hover:text-red-700"}," 🗑 ",8,Vs)])]))),128))])):(l(),n("div",As," Noch keine Sätze definiert "))])):p("",!0),i.value.stats?(l(),n("div",Ps,[e("div",Ns,[e("div",js,r(i.value.stats.completed_orders||0),1),t[51]||(t[51]=e("div",{class:"text-xs text-gray-500"},"Abgeschlossen",-1))]),e("div",Os,[e("div",Rs,r(i.value.stats.active_orders||0),1),t[52]||(t[52]=e("div",{class:"text-xs text-gray-500"},"Aktiv",-1))]),e("div",Ms,[e("div",Us,r(i.value.stats.pending_orders||0),1),t[53]||(t[53]=e("div",{class:"text-xs text-gray-500"},"Ausstehend",-1))])])):p("",!0),i.value.status==="active"?(l(),n("div",Ds,[e("button",{onClick:t[11]||(t[11]=s=>K(i.value,"paused")),class:"px-4 py-2 bg-yellow-100 text-yellow-700 rounded hover:bg-yellow-200"}," Pausieren "),e("button",{onClick:t[12]||(t[12]=s=>K(i.value,"terminated")),class:"px-4 py-2 bg-red-100 text-red-700 rounded hover:bg-red-200"}," Beenden ")])):i.value.status==="paused"?(l(),n("div",Is,[e("button",{onClick:t[13]||(t[13]=s=>K(i.value,"active")),class:"px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"}," Reaktivieren ")])):p("",!0)])])):p("",!0),O.value?(l(),n("div",qs,[e("div",Ts,[t[58]||(t[58]=e("h2",{class:"text-xl font-bold mb-4"},"Neuer Stundensatz",-1)),e("div",Es,[e("div",null,[t[54]||(t[54]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Bezeichnung *",-1)),f(e("input",{"onUpdate:modelValue":t[14]||(t[14]=s=>y.value.name=s),type:"text",placeholder:"z.B. Normaldienst, Nachtschicht...",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.name]])]),e("div",null,[t[55]||(t[55]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Beschreibung",-1)),f(e("input",{"onUpdate:modelValue":t[15]||(t[15]=s=>y.value.description=s),type:"text",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.description]])]),e("div",null,[t[56]||(t[56]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz (€) *",-1)),f(e("input",{"onUpdate:modelValue":t[16]||(t[16]=s=>y.value.amount=s),type:"number",step:"0.01",min:"0",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,y.value.amount,void 0,{number:!0}]])]),e("label",Ls,[f(e("input",{"onUpdate:modelValue":t[17]||(t[17]=s=>y.value.is_default=s),type:"checkbox",class:"mr-2"},null,512),[[me,y.value.is_default]]),t[57]||(t[57]=e("span",{class:"text-sm"},"Als Standard-Satz verwenden",-1))])]),e("div",Ks,[e("button",{onClick:t[18]||(t[18]=s=>O.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:re,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"}," Speichern ")])])])):p("",!0),R.value?(l(),n("div",Ws,[e("div",Gs,[e("h2",Qs,"Auftrag teilen mit "+r((d=T.value)==null?void 0:d.partner_name),1),e("div",Zs,[e("div",null,[t[60]||(t[60]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Auftrag auswählen *",-1)),f(e("select",{"onUpdate:modelValue":t[19]||(t[19]=s=>x.value.order_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[59]||(t[59]=e("option",{value:""},"Bitte wählen...",-1)),(l(!0),n(h,null,k(Q.value,s=>(l(),n("option",{key:s.id,value:s.id},r(s.title)+" ("+r(C(s.start_date))+") ",9,Hs))),128))],512),[[Y,x.value.order_id]])]),e("div",null,[t[62]||(t[62]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Stundensatz",-1)),f(e("select",{"onUpdate:modelValue":t[20]||(t[20]=s=>x.value.rate_id=s),class:"w-full border rounded-lg px-3 py-2"},[t[61]||(t[61]=e("option",{value:""},"Keiner / Später festlegen",-1)),(l(!0),n(h,null,k((_=i.value)==null?void 0:_.rates,s=>(l(),n("option",{key:s.id,value:s.id},r(s.name)+" ("+r(N(s.amount_cents))+"/h) ",9,Js))),128))],512),[[Y,x.value.rate_id]])]),e("div",null,[t[63]||(t[63]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Benötigte Mitarbeiter",-1)),f(e("input",{"onUpdate:modelValue":t[21]||(t[21]=s=>x.value.required_staff=s),type:"number",min:"1",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.required_staff,void 0,{number:!0}]])]),e("div",null,[t[64]||(t[64]=e("label",{class:"block text-sm font-medium text-gray-700 mb-1"},"Notizen",-1)),f(e("textarea",{"onUpdate:modelValue":t[22]||(t[22]=s=>x.value.notes=s),rows:"2",class:"w-full border rounded-lg px-3 py-2"},null,512),[[A,x.value.notes]])])]),e("div",Xs,[e("button",{onClick:t[23]||(t[23]=s=>R.value=!1),class:"px-4 py-2 text-gray-700 hover:bg-gray-100 rounded-lg"}," Abbrechen "),e("button",{onClick:ie,disabled:!x.value.order_id,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50"}," Auftrag teilen ",8,Ys)])])])):p("",!0)])}}});export{sa as default}; diff --git a/dist/assets/QualificationsView-HIWg4xhg.js b/dist/assets/QualificationsView-p_JlFp7F.js similarity index 99% rename from dist/assets/QualificationsView-HIWg4xhg.js rename to dist/assets/QualificationsView-p_JlFp7F.js index 735b899..c71d985 100644 --- a/dist/assets/QualificationsView-HIWg4xhg.js +++ b/dist/assets/QualificationsView-p_JlFp7F.js @@ -1 +1 @@ -import{d as R,u as X,q as Y,m as g,c as a,a as e,y as T,e as r,n as k,p as j,t as n,b as c,v as _,s as A,F as x,x as f,A as q,w as ee,r as d,k as N,o as l}from"./index-CVUlgynU.js";const te={class:"space-y-6"},ie={class:"flex items-center justify-between"},se={class:"flex gap-2 border-b dark:border-gray-700"},ae={key:0,class:"bg-red-500 text-white text-xs px-2 py-0.5 rounded-full"},le={key:0,class:"text-center py-12"},ne={key:1,class:"space-y-4"},oe={class:"card"},re={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},de=["value"],ue=["value"],ce={key:0,class:"card text-center py-12 text-gray-500"},pe={key:1,class:"grid gap-4"},ve={class:"flex items-start justify-between"},xe={class:"flex items-start gap-4"},fe={class:"text-3xl"},me={class:"font-semibold text-gray-900 dark:text-white"},ye={class:"text-sm text-gray-500"},ge={class:"flex flex-wrap gap-2 mt-2"},_e={key:0,class:"text-xs text-gray-500"},be={key:1,class:"text-xs text-gray-500"},ke={key:2,class:"text-xs text-gray-500"},he={key:0,class:"flex gap-2"},we=["onClick"],Qe=["onClick"],Ce={key:2,class:"space-y-6"},Ue={key:0,class:"space-y-4"},Ae={class:"text-lg font-semibold text-red-600 flex items-center gap-2"},Se={class:"grid gap-3"},Ve={class:"flex items-center justify-between"},Me={class:"flex items-center gap-3"},Le={class:"text-2xl"},$e={class:"font-medium"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ne={class:"text-right"},Be={class:"text-sm text-gray-500"},De={key:1,class:"space-y-4"},Fe={class:"text-lg font-semibold text-yellow-600 flex items-center gap-2"},ze={class:"grid gap-3"},je={class:"flex items-center justify-between"},Ee={class:"flex items-center gap-3"},Ke={class:"text-2xl"},Oe={class:"font-medium"},Ge={class:"text-sm text-gray-600 dark:text-gray-400"},Ie={class:"text-right"},He={class:"text-sm font-medium text-yellow-600"},Pe={class:"text-sm text-gray-500"},We={key:2,class:"card text-center py-12"},Ze={key:3,class:"card"},Je={key:4,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},Re={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-lg mx-4 max-h-[90vh] overflow-y-auto"},Xe={class:"p-6"},Ye={class:"text-xl font-semibold mb-4"},qe={key:0},et=["value"],tt={key:1},it={class:"grid grid-cols-1 gap-2 max-h-48 overflow-y-auto border dark:border-gray-600 rounded-lg p-2"},st={class:"text-xs font-medium text-gray-500 sticky top-0 bg-white dark:bg-gray-800 py-1"},at=["onClick"],lt={key:0,class:"text-sm text-blue-600 mt-1"},nt={class:"grid grid-cols-2 gap-4"},ot={class:"flex gap-3 pt-4"},rt=["disabled"],pt=R({__name:"QualificationsView",setup(dt){const S=X(),B=d(!0),D=d([]),m=d({system:[],custom:[],categories:[]}),u=d({expired:[],expiring_soon:[]}),V=d([]),h=d(""),w=d(""),Q=d(""),C=d(""),b=d(!1),y=d(null),o=d({user_id:"",qualification_type_id:"",org_qualification_type_id:"",issued_date:"",expiry_date:"",issuer:"",certificate_number:"",level:"",notes:""}),U=d(!1),v=d("list");Y(async()=>{await Promise.all([E(),M(),L(),K()]),B.value=!1});async function E(){try{const s=await g.get("/qualifications/types");m.value=s}catch(s){console.error("Failed to load types:",s)}}async function M(){try{D.value=await g.get("/qualifications")}catch(s){console.error("Failed to load qualifications:",s)}}async function L(){try{u.value=await g.get("/qualifications/expiring?days=30")}catch(s){console.error("Failed to load expiring:",s)}}async function K(){try{V.value=await g.get("/users")}catch(s){console.error("Failed to load users:",s)}}const F=N(()=>{let s=[...D.value];if(h.value&&(s=s.filter(t=>t.user_id===h.value)),w.value&&(s=s.filter(t=>t.category===w.value)),Q.value&&(s=s.filter(t=>t.expiry_status===Q.value)),C.value){const t=C.value.toLowerCase();s=s.filter(i=>i.qualification_name.toLowerCase().includes(t)||i.first_name.toLowerCase().includes(t)||i.last_name.toLowerCase().includes(t))}return s}),O=N(()=>[...m.value.system,...m.value.custom]);function G(){y.value=null,o.value={user_id:"",qualification_type_id:"",org_qualification_type_id:"",issued_date:"",expiry_date:"",issuer:"",certificate_number:"",level:"",notes:""},b.value=!0}function I(s){y.value=s,o.value={user_id:s.user_id,qualification_type_id:"",org_qualification_type_id:"",issued_date:s.issued_date||"",expiry_date:s.expiry_date||"",issuer:s.issuer||"",certificate_number:s.certificate_number||"",level:s.level||"",notes:""},b.value=!0}async function H(){if(!(!o.value.user_id||!o.value.qualification_type_id&&!o.value.org_qualification_type_id)){U.value=!0;try{y.value?await g.put(`/qualifications/${y.value.id}`,o.value):await g.post("/qualifications",o.value),b.value=!1,await M(),await L()}catch(s){console.error("Failed to save:",s)}finally{U.value=!1}}}async function P(s){if(confirm("Qualifikation wirklich löschen?"))try{await g.delete(`/qualifications/${s}`),await M(),await L()}catch(t){console.error("Failed to delete:",t)}}function W(s){switch(s){case"valid":return"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200";case"expiring_soon":return"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200";case"expired":return"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200";case"no_expiry":return"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200";default:return"bg-gray-100 text-gray-800"}}function Z(s){switch(s){case"valid":return"Gültig";case"expiring_soon":return"Läuft ab";case"expired":return"Abgelaufen";case"no_expiry":return"Unbefristet";default:return s}}function $(s){return s?new Date(s).toLocaleDateString("de-DE"):"-"}function J(s){s.source==="system"?(o.value.qualification_type_id=s.id,o.value.org_qualification_type_id=""):(o.value.org_qualification_type_id=s.id,o.value.qualification_type_id="")}const z=N(()=>{const s=o.value.qualification_type_id||o.value.org_qualification_type_id;if(!s)return"";const t=O.value.find(i=>i.id===s);return t?`${t.icon} ${t.name}`:""});return(s,t)=>(l(),a("div",te,[e("div",ie,[t[15]||(t[15]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🎓 Qualifikationen",-1)),T(S).canManageUsers?(l(),a("button",{key:0,onClick:G,class:"btn btn-primary"}," ➕ Qualifikation hinzufügen ")):r("",!0)]),e("div",se,[e("button",{onClick:t[0]||(t[0]=i=>v.value="list"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors",v.value==="list"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 📋 Übersicht ",2),e("button",{onClick:t[1]||(t[1]=i=>v.value="expiring"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors flex items-center gap-2",v.value==="expiring"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])},[t[16]||(t[16]=j(" ⚠️ Ablaufend ",-1)),u.value.expired.length+u.value.expiring_soon.length>0?(l(),a("span",ae,n(u.value.expired.length+u.value.expiring_soon.length),1)):r("",!0)],2),T(S).canManageUsers?(l(),a("button",{key:0,onClick:t[2]||(t[2]=i=>v.value="matrix"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors",v.value==="matrix"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 📊 Matrix ",2)):r("",!0)]),B.value?(l(),a("div",le,[...t[17]||(t[17]=[e("div",{class:"animate-spin text-4xl"},"⏳",-1),e("p",{class:"mt-2 text-gray-500"},"Lade Qualifikationen...",-1)])])):v.value==="list"?(l(),a("div",ne,[e("div",oe,[e("div",re,[e("div",null,[t[18]||(t[18]=e("label",{class:"block text-sm font-medium mb-1"},"🔍 Suche",-1)),c(e("input",{"onUpdate:modelValue":t[3]||(t[3]=i=>C.value=i),type:"text",class:"input",placeholder:"Name oder Qualifikation..."},null,512),[[_,C.value]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-medium mb-1"},"👤 Mitarbeiter",-1)),c(e("select",{"onUpdate:modelValue":t[4]||(t[4]=i=>h.value=i),class:"input"},[t[19]||(t[19]=e("option",{value:""},"Alle",-1)),(l(!0),a(x,null,f(V.value,i=>(l(),a("option",{key:i.id,value:i.id},n(i.first_name)+" "+n(i.last_name),9,de))),128))],512),[[A,h.value]])]),e("div",null,[t[22]||(t[22]=e("label",{class:"block text-sm font-medium mb-1"},"📂 Kategorie",-1)),c(e("select",{"onUpdate:modelValue":t[5]||(t[5]=i=>w.value=i),class:"input"},[t[21]||(t[21]=e("option",{value:""},"Alle",-1)),(l(!0),a(x,null,f(m.value.categories,i=>(l(),a("option",{key:i.key,value:i.key},n(i.icon)+" "+n(i.name),9,ue))),128))],512),[[A,w.value]])]),e("div",null,[t[24]||(t[24]=e("label",{class:"block text-sm font-medium mb-1"},"📊 Status",-1)),c(e("select",{"onUpdate:modelValue":t[6]||(t[6]=i=>Q.value=i),class:"input"},[...t[23]||(t[23]=[q('',5)])],512),[[A,Q.value]])])])]),F.value.length===0?(l(),a("div",ce," Keine Qualifikationen gefunden ")):(l(),a("div",pe,[(l(!0),a(x,null,f(F.value,i=>(l(),a("div",{key:i.id,class:"card hover:shadow-md transition-shadow"},[e("div",ve,[e("div",xe,[e("div",fe,n(i.icon),1),e("div",null,[e("h3",me,n(i.qualification_name),1),e("p",ye,n(i.first_name)+" "+n(i.last_name),1),e("div",ge,[e("span",{class:k(["px-2 py-0.5 rounded text-xs font-medium",W(i.expiry_status)])},n(Z(i.expiry_status)),3),i.expiry_date?(l(),a("span",_e," 📅 "+n($(i.expiry_date)),1)):r("",!0),i.issuer?(l(),a("span",be," 🏢 "+n(i.issuer),1)):r("",!0),i.certificate_number?(l(),a("span",ke," #"+n(i.certificate_number),1)):r("",!0)])])]),T(S).canManageUsers?(l(),a("div",he,[e("button",{onClick:p=>I(i),class:"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"}," ✏️ ",8,we),e("button",{onClick:p=>P(i.id),class:"p-2 hover:bg-red-100 dark:hover:bg-red-900 rounded text-red-600"}," 🗑️ ",8,Qe)])):r("",!0)])]))),128))]))])):v.value==="expiring"?(l(),a("div",Ce,[u.value.expired.length>0?(l(),a("div",Ue,[e("h2",Ae," ❌ Abgelaufen ("+n(u.value.expired.length)+") ",1),e("div",Se,[(l(!0),a(x,null,f(u.value.expired,i=>(l(),a("div",{key:i.id,class:"card border-l-4 border-red-500 bg-red-50 dark:bg-red-900/20"},[e("div",Ve,[e("div",Me,[e("span",Le,n(i.icon),1),e("div",null,[e("p",$e,n(i.qualification_name),1),e("p",Te,n(i.first_name)+" "+n(i.last_name),1)])]),e("div",Ne,[t[25]||(t[25]=e("p",{class:"text-sm font-medium text-red-600"},"Abgelaufen",-1)),e("p",Be,n($(i.expiry_date)),1)])])]))),128))])])):r("",!0),u.value.expiring_soon.length>0?(l(),a("div",De,[e("h2",Fe," ⚠️ Läuft bald ab ("+n(u.value.expiring_soon.length)+") ",1),e("div",ze,[(l(!0),a(x,null,f(u.value.expiring_soon,i=>(l(),a("div",{key:i.id,class:"card border-l-4 border-yellow-500 bg-yellow-50 dark:bg-yellow-900/20"},[e("div",je,[e("div",Ee,[e("span",Ke,n(i.icon),1),e("div",null,[e("p",Oe,n(i.qualification_name),1),e("p",Ge,n(i.first_name)+" "+n(i.last_name),1)])]),e("div",Ie,[e("p",He," Noch "+n(i.days_until_expiry)+" Tage ",1),e("p",Pe,n($(i.expiry_date)),1)])])]))),128))])])):r("",!0),u.value.expired.length===0&&u.value.expiring_soon.length===0?(l(),a("div",We,[...t[26]||(t[26]=[e("div",{class:"text-4xl mb-4"},"✅",-1),e("p",{class:"text-lg font-medium text-green-600"},"Alles in Ordnung!",-1),e("p",{class:"text-gray-500"},"Keine ablaufenden Qualifikationen in den nächsten 30 Tagen.",-1)])])):r("",!0)])):v.value==="matrix"?(l(),a("div",Ze,[...t[27]||(t[27]=[e("p",{class:"text-gray-500 text-center py-12"},[j(" 📊 Qualifikations-Matrix wird geladen..."),e("br"),e("span",{class:"text-sm"},"Übersicht: Welcher Mitarbeiter hat welche Qualifikation")],-1)])])):r("",!0),b.value?(l(),a("div",Je,[e("div",Re,[e("div",Xe,[e("h2",Ye,n(y.value?"✏️ Qualifikation bearbeiten":"➕ Neue Qualifikation"),1),e("form",{onSubmit:ee(H,["prevent"]),class:"space-y-4"},[y.value?r("",!0):(l(),a("div",qe,[t[29]||(t[29]=e("label",{class:"block text-sm font-medium mb-1"},"Mitarbeiter *",-1)),c(e("select",{"onUpdate:modelValue":t[7]||(t[7]=i=>o.value.user_id=i),class:"input",required:""},[t[28]||(t[28]=e("option",{value:""},"Bitte wählen...",-1)),(l(!0),a(x,null,f(V.value,i=>(l(),a("option",{key:i.id,value:i.id},n(i.first_name)+" "+n(i.last_name),9,et))),128))],512),[[A,o.value.user_id]])])),y.value?r("",!0):(l(),a("div",tt,[t[30]||(t[30]=e("label",{class:"block text-sm font-medium mb-1"},"Qualifikation *",-1)),e("div",it,[(l(!0),a(x,null,f(m.value.categories,i=>(l(),a("div",{key:i.key,class:"space-y-1"},[e("p",st,n(i.icon)+" "+n(i.name),1),(l(!0),a(x,null,f([...m.value.system,...m.value.custom].filter(p=>p.category===i.key),p=>(l(),a("button",{key:p.id,type:"button",onClick:ut=>J(p),class:k(["w-full text-left px-3 py-2 rounded text-sm transition-colors",o.value.qualification_type_id===p.id||o.value.org_qualification_type_id===p.id?"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200":"hover:bg-gray-100 dark:hover:bg-gray-700"])},n(p.icon)+" "+n(p.name),11,at))),128))]))),128))]),z.value?(l(),a("p",lt," Ausgewählt: "+n(z.value),1)):r("",!0)])),e("div",nt,[e("div",null,[t[31]||(t[31]=e("label",{class:"block text-sm font-medium mb-1"},"Ausstellungsdatum",-1)),c(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>o.value.issued_date=i),type:"date",class:"input"},null,512),[[_,o.value.issued_date]])]),e("div",null,[t[32]||(t[32]=e("label",{class:"block text-sm font-medium mb-1"},"Ablaufdatum",-1)),c(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>o.value.expiry_date=i),type:"date",class:"input"},null,512),[[_,o.value.expiry_date]])])]),e("div",null,[t[33]||(t[33]=e("label",{class:"block text-sm font-medium mb-1"},"Ausstellende Stelle",-1)),c(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>o.value.issuer=i),type:"text",class:"input",placeholder:"z.B. IHK Berlin"},null,512),[[_,o.value.issuer]])]),e("div",null,[t[34]||(t[34]=e("label",{class:"block text-sm font-medium mb-1"},"Zertifikatsnummer",-1)),c(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>o.value.certificate_number=i),type:"text",class:"input",placeholder:"Optional"},null,512),[[_,o.value.certificate_number]])]),e("div",null,[t[35]||(t[35]=e("label",{class:"block text-sm font-medium mb-1"},"Stufe/Level",-1)),c(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>o.value.level=i),type:"text",class:"input",placeholder:"z.B. B2 (für Sprachen)"},null,512),[[_,o.value.level]])]),e("div",null,[t[36]||(t[36]=e("label",{class:"block text-sm font-medium mb-1"},"Notizen",-1)),c(e("textarea",{"onUpdate:modelValue":t[13]||(t[13]=i=>o.value.notes=i),class:"input",rows:"2",placeholder:"Optional"},null,512),[[_,o.value.notes]])]),e("div",ot,[e("button",{type:"button",onClick:t[14]||(t[14]=i=>b.value=!1),class:"btn flex-1"}," Abbrechen "),e("button",{type:"submit",disabled:U.value,class:"btn btn-primary flex-1"},n(U.value?"Speichern...":"Speichern"),9,rt)])],32)])])])):r("",!0)]))}});export{pt as default}; +import{d as R,u as X,q as Y,m as g,c as a,a as e,y as T,e as r,n as k,p as j,t as n,b as c,v as _,s as A,F as x,x as f,A as q,w as ee,r as d,k as N,o as l}from"./index-DFiGttzi.js";const te={class:"space-y-6"},ie={class:"flex items-center justify-between"},se={class:"flex gap-2 border-b dark:border-gray-700"},ae={key:0,class:"bg-red-500 text-white text-xs px-2 py-0.5 rounded-full"},le={key:0,class:"text-center py-12"},ne={key:1,class:"space-y-4"},oe={class:"card"},re={class:"grid grid-cols-1 md:grid-cols-4 gap-4"},de=["value"],ue=["value"],ce={key:0,class:"card text-center py-12 text-gray-500"},pe={key:1,class:"grid gap-4"},ve={class:"flex items-start justify-between"},xe={class:"flex items-start gap-4"},fe={class:"text-3xl"},me={class:"font-semibold text-gray-900 dark:text-white"},ye={class:"text-sm text-gray-500"},ge={class:"flex flex-wrap gap-2 mt-2"},_e={key:0,class:"text-xs text-gray-500"},be={key:1,class:"text-xs text-gray-500"},ke={key:2,class:"text-xs text-gray-500"},he={key:0,class:"flex gap-2"},we=["onClick"],Qe=["onClick"],Ce={key:2,class:"space-y-6"},Ue={key:0,class:"space-y-4"},Ae={class:"text-lg font-semibold text-red-600 flex items-center gap-2"},Se={class:"grid gap-3"},Ve={class:"flex items-center justify-between"},Me={class:"flex items-center gap-3"},Le={class:"text-2xl"},$e={class:"font-medium"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ne={class:"text-right"},Be={class:"text-sm text-gray-500"},De={key:1,class:"space-y-4"},Fe={class:"text-lg font-semibold text-yellow-600 flex items-center gap-2"},ze={class:"grid gap-3"},je={class:"flex items-center justify-between"},Ee={class:"flex items-center gap-3"},Ke={class:"text-2xl"},Oe={class:"font-medium"},Ge={class:"text-sm text-gray-600 dark:text-gray-400"},Ie={class:"text-right"},He={class:"text-sm font-medium text-yellow-600"},Pe={class:"text-sm text-gray-500"},We={key:2,class:"card text-center py-12"},Ze={key:3,class:"card"},Je={key:4,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},Re={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl w-full max-w-lg mx-4 max-h-[90vh] overflow-y-auto"},Xe={class:"p-6"},Ye={class:"text-xl font-semibold mb-4"},qe={key:0},et=["value"],tt={key:1},it={class:"grid grid-cols-1 gap-2 max-h-48 overflow-y-auto border dark:border-gray-600 rounded-lg p-2"},st={class:"text-xs font-medium text-gray-500 sticky top-0 bg-white dark:bg-gray-800 py-1"},at=["onClick"],lt={key:0,class:"text-sm text-blue-600 mt-1"},nt={class:"grid grid-cols-2 gap-4"},ot={class:"flex gap-3 pt-4"},rt=["disabled"],pt=R({__name:"QualificationsView",setup(dt){const S=X(),B=d(!0),D=d([]),m=d({system:[],custom:[],categories:[]}),u=d({expired:[],expiring_soon:[]}),V=d([]),h=d(""),w=d(""),Q=d(""),C=d(""),b=d(!1),y=d(null),o=d({user_id:"",qualification_type_id:"",org_qualification_type_id:"",issued_date:"",expiry_date:"",issuer:"",certificate_number:"",level:"",notes:""}),U=d(!1),v=d("list");Y(async()=>{await Promise.all([E(),M(),L(),K()]),B.value=!1});async function E(){try{const s=await g.get("/qualifications/types");m.value=s}catch(s){console.error("Failed to load types:",s)}}async function M(){try{D.value=await g.get("/qualifications")}catch(s){console.error("Failed to load qualifications:",s)}}async function L(){try{u.value=await g.get("/qualifications/expiring?days=30")}catch(s){console.error("Failed to load expiring:",s)}}async function K(){try{V.value=await g.get("/users")}catch(s){console.error("Failed to load users:",s)}}const F=N(()=>{let s=[...D.value];if(h.value&&(s=s.filter(t=>t.user_id===h.value)),w.value&&(s=s.filter(t=>t.category===w.value)),Q.value&&(s=s.filter(t=>t.expiry_status===Q.value)),C.value){const t=C.value.toLowerCase();s=s.filter(i=>i.qualification_name.toLowerCase().includes(t)||i.first_name.toLowerCase().includes(t)||i.last_name.toLowerCase().includes(t))}return s}),O=N(()=>[...m.value.system,...m.value.custom]);function G(){y.value=null,o.value={user_id:"",qualification_type_id:"",org_qualification_type_id:"",issued_date:"",expiry_date:"",issuer:"",certificate_number:"",level:"",notes:""},b.value=!0}function I(s){y.value=s,o.value={user_id:s.user_id,qualification_type_id:"",org_qualification_type_id:"",issued_date:s.issued_date||"",expiry_date:s.expiry_date||"",issuer:s.issuer||"",certificate_number:s.certificate_number||"",level:s.level||"",notes:""},b.value=!0}async function H(){if(!(!o.value.user_id||!o.value.qualification_type_id&&!o.value.org_qualification_type_id)){U.value=!0;try{y.value?await g.put(`/qualifications/${y.value.id}`,o.value):await g.post("/qualifications",o.value),b.value=!1,await M(),await L()}catch(s){console.error("Failed to save:",s)}finally{U.value=!1}}}async function P(s){if(confirm("Qualifikation wirklich löschen?"))try{await g.delete(`/qualifications/${s}`),await M(),await L()}catch(t){console.error("Failed to delete:",t)}}function W(s){switch(s){case"valid":return"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200";case"expiring_soon":return"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200";case"expired":return"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200";case"no_expiry":return"bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200";default:return"bg-gray-100 text-gray-800"}}function Z(s){switch(s){case"valid":return"Gültig";case"expiring_soon":return"Läuft ab";case"expired":return"Abgelaufen";case"no_expiry":return"Unbefristet";default:return s}}function $(s){return s?new Date(s).toLocaleDateString("de-DE"):"-"}function J(s){s.source==="system"?(o.value.qualification_type_id=s.id,o.value.org_qualification_type_id=""):(o.value.org_qualification_type_id=s.id,o.value.qualification_type_id="")}const z=N(()=>{const s=o.value.qualification_type_id||o.value.org_qualification_type_id;if(!s)return"";const t=O.value.find(i=>i.id===s);return t?`${t.icon} ${t.name}`:""});return(s,t)=>(l(),a("div",te,[e("div",ie,[t[15]||(t[15]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🎓 Qualifikationen",-1)),T(S).canManageUsers?(l(),a("button",{key:0,onClick:G,class:"btn btn-primary"}," ➕ Qualifikation hinzufügen ")):r("",!0)]),e("div",se,[e("button",{onClick:t[0]||(t[0]=i=>v.value="list"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors",v.value==="list"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 📋 Übersicht ",2),e("button",{onClick:t[1]||(t[1]=i=>v.value="expiring"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors flex items-center gap-2",v.value==="expiring"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])},[t[16]||(t[16]=j(" ⚠️ Ablaufend ",-1)),u.value.expired.length+u.value.expiring_soon.length>0?(l(),a("span",ae,n(u.value.expired.length+u.value.expiring_soon.length),1)):r("",!0)],2),T(S).canManageUsers?(l(),a("button",{key:0,onClick:t[2]||(t[2]=i=>v.value="matrix"),class:k(["px-4 py-2 font-medium border-b-2 transition-colors",v.value==="matrix"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"])}," 📊 Matrix ",2)):r("",!0)]),B.value?(l(),a("div",le,[...t[17]||(t[17]=[e("div",{class:"animate-spin text-4xl"},"⏳",-1),e("p",{class:"mt-2 text-gray-500"},"Lade Qualifikationen...",-1)])])):v.value==="list"?(l(),a("div",ne,[e("div",oe,[e("div",re,[e("div",null,[t[18]||(t[18]=e("label",{class:"block text-sm font-medium mb-1"},"🔍 Suche",-1)),c(e("input",{"onUpdate:modelValue":t[3]||(t[3]=i=>C.value=i),type:"text",class:"input",placeholder:"Name oder Qualifikation..."},null,512),[[_,C.value]])]),e("div",null,[t[20]||(t[20]=e("label",{class:"block text-sm font-medium mb-1"},"👤 Mitarbeiter",-1)),c(e("select",{"onUpdate:modelValue":t[4]||(t[4]=i=>h.value=i),class:"input"},[t[19]||(t[19]=e("option",{value:""},"Alle",-1)),(l(!0),a(x,null,f(V.value,i=>(l(),a("option",{key:i.id,value:i.id},n(i.first_name)+" "+n(i.last_name),9,de))),128))],512),[[A,h.value]])]),e("div",null,[t[22]||(t[22]=e("label",{class:"block text-sm font-medium mb-1"},"📂 Kategorie",-1)),c(e("select",{"onUpdate:modelValue":t[5]||(t[5]=i=>w.value=i),class:"input"},[t[21]||(t[21]=e("option",{value:""},"Alle",-1)),(l(!0),a(x,null,f(m.value.categories,i=>(l(),a("option",{key:i.key,value:i.key},n(i.icon)+" "+n(i.name),9,ue))),128))],512),[[A,w.value]])]),e("div",null,[t[24]||(t[24]=e("label",{class:"block text-sm font-medium mb-1"},"📊 Status",-1)),c(e("select",{"onUpdate:modelValue":t[6]||(t[6]=i=>Q.value=i),class:"input"},[...t[23]||(t[23]=[q('',5)])],512),[[A,Q.value]])])])]),F.value.length===0?(l(),a("div",ce," Keine Qualifikationen gefunden ")):(l(),a("div",pe,[(l(!0),a(x,null,f(F.value,i=>(l(),a("div",{key:i.id,class:"card hover:shadow-md transition-shadow"},[e("div",ve,[e("div",xe,[e("div",fe,n(i.icon),1),e("div",null,[e("h3",me,n(i.qualification_name),1),e("p",ye,n(i.first_name)+" "+n(i.last_name),1),e("div",ge,[e("span",{class:k(["px-2 py-0.5 rounded text-xs font-medium",W(i.expiry_status)])},n(Z(i.expiry_status)),3),i.expiry_date?(l(),a("span",_e," 📅 "+n($(i.expiry_date)),1)):r("",!0),i.issuer?(l(),a("span",be," 🏢 "+n(i.issuer),1)):r("",!0),i.certificate_number?(l(),a("span",ke," #"+n(i.certificate_number),1)):r("",!0)])])]),T(S).canManageUsers?(l(),a("div",he,[e("button",{onClick:p=>I(i),class:"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded"}," ✏️ ",8,we),e("button",{onClick:p=>P(i.id),class:"p-2 hover:bg-red-100 dark:hover:bg-red-900 rounded text-red-600"}," 🗑️ ",8,Qe)])):r("",!0)])]))),128))]))])):v.value==="expiring"?(l(),a("div",Ce,[u.value.expired.length>0?(l(),a("div",Ue,[e("h2",Ae," ❌ Abgelaufen ("+n(u.value.expired.length)+") ",1),e("div",Se,[(l(!0),a(x,null,f(u.value.expired,i=>(l(),a("div",{key:i.id,class:"card border-l-4 border-red-500 bg-red-50 dark:bg-red-900/20"},[e("div",Ve,[e("div",Me,[e("span",Le,n(i.icon),1),e("div",null,[e("p",$e,n(i.qualification_name),1),e("p",Te,n(i.first_name)+" "+n(i.last_name),1)])]),e("div",Ne,[t[25]||(t[25]=e("p",{class:"text-sm font-medium text-red-600"},"Abgelaufen",-1)),e("p",Be,n($(i.expiry_date)),1)])])]))),128))])])):r("",!0),u.value.expiring_soon.length>0?(l(),a("div",De,[e("h2",Fe," ⚠️ Läuft bald ab ("+n(u.value.expiring_soon.length)+") ",1),e("div",ze,[(l(!0),a(x,null,f(u.value.expiring_soon,i=>(l(),a("div",{key:i.id,class:"card border-l-4 border-yellow-500 bg-yellow-50 dark:bg-yellow-900/20"},[e("div",je,[e("div",Ee,[e("span",Ke,n(i.icon),1),e("div",null,[e("p",Oe,n(i.qualification_name),1),e("p",Ge,n(i.first_name)+" "+n(i.last_name),1)])]),e("div",Ie,[e("p",He," Noch "+n(i.days_until_expiry)+" Tage ",1),e("p",Pe,n($(i.expiry_date)),1)])])]))),128))])])):r("",!0),u.value.expired.length===0&&u.value.expiring_soon.length===0?(l(),a("div",We,[...t[26]||(t[26]=[e("div",{class:"text-4xl mb-4"},"✅",-1),e("p",{class:"text-lg font-medium text-green-600"},"Alles in Ordnung!",-1),e("p",{class:"text-gray-500"},"Keine ablaufenden Qualifikationen in den nächsten 30 Tagen.",-1)])])):r("",!0)])):v.value==="matrix"?(l(),a("div",Ze,[...t[27]||(t[27]=[e("p",{class:"text-gray-500 text-center py-12"},[j(" 📊 Qualifikations-Matrix wird geladen..."),e("br"),e("span",{class:"text-sm"},"Übersicht: Welcher Mitarbeiter hat welche Qualifikation")],-1)])])):r("",!0),b.value?(l(),a("div",Je,[e("div",Re,[e("div",Xe,[e("h2",Ye,n(y.value?"✏️ Qualifikation bearbeiten":"➕ Neue Qualifikation"),1),e("form",{onSubmit:ee(H,["prevent"]),class:"space-y-4"},[y.value?r("",!0):(l(),a("div",qe,[t[29]||(t[29]=e("label",{class:"block text-sm font-medium mb-1"},"Mitarbeiter *",-1)),c(e("select",{"onUpdate:modelValue":t[7]||(t[7]=i=>o.value.user_id=i),class:"input",required:""},[t[28]||(t[28]=e("option",{value:""},"Bitte wählen...",-1)),(l(!0),a(x,null,f(V.value,i=>(l(),a("option",{key:i.id,value:i.id},n(i.first_name)+" "+n(i.last_name),9,et))),128))],512),[[A,o.value.user_id]])])),y.value?r("",!0):(l(),a("div",tt,[t[30]||(t[30]=e("label",{class:"block text-sm font-medium mb-1"},"Qualifikation *",-1)),e("div",it,[(l(!0),a(x,null,f(m.value.categories,i=>(l(),a("div",{key:i.key,class:"space-y-1"},[e("p",st,n(i.icon)+" "+n(i.name),1),(l(!0),a(x,null,f([...m.value.system,...m.value.custom].filter(p=>p.category===i.key),p=>(l(),a("button",{key:p.id,type:"button",onClick:ut=>J(p),class:k(["w-full text-left px-3 py-2 rounded text-sm transition-colors",o.value.qualification_type_id===p.id||o.value.org_qualification_type_id===p.id?"bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200":"hover:bg-gray-100 dark:hover:bg-gray-700"])},n(p.icon)+" "+n(p.name),11,at))),128))]))),128))]),z.value?(l(),a("p",lt," Ausgewählt: "+n(z.value),1)):r("",!0)])),e("div",nt,[e("div",null,[t[31]||(t[31]=e("label",{class:"block text-sm font-medium mb-1"},"Ausstellungsdatum",-1)),c(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>o.value.issued_date=i),type:"date",class:"input"},null,512),[[_,o.value.issued_date]])]),e("div",null,[t[32]||(t[32]=e("label",{class:"block text-sm font-medium mb-1"},"Ablaufdatum",-1)),c(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>o.value.expiry_date=i),type:"date",class:"input"},null,512),[[_,o.value.expiry_date]])])]),e("div",null,[t[33]||(t[33]=e("label",{class:"block text-sm font-medium mb-1"},"Ausstellende Stelle",-1)),c(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>o.value.issuer=i),type:"text",class:"input",placeholder:"z.B. IHK Berlin"},null,512),[[_,o.value.issuer]])]),e("div",null,[t[34]||(t[34]=e("label",{class:"block text-sm font-medium mb-1"},"Zertifikatsnummer",-1)),c(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>o.value.certificate_number=i),type:"text",class:"input",placeholder:"Optional"},null,512),[[_,o.value.certificate_number]])]),e("div",null,[t[35]||(t[35]=e("label",{class:"block text-sm font-medium mb-1"},"Stufe/Level",-1)),c(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>o.value.level=i),type:"text",class:"input",placeholder:"z.B. B2 (für Sprachen)"},null,512),[[_,o.value.level]])]),e("div",null,[t[36]||(t[36]=e("label",{class:"block text-sm font-medium mb-1"},"Notizen",-1)),c(e("textarea",{"onUpdate:modelValue":t[13]||(t[13]=i=>o.value.notes=i),class:"input",rows:"2",placeholder:"Optional"},null,512),[[_,o.value.notes]])]),e("div",ot,[e("button",{type:"button",onClick:t[14]||(t[14]=i=>b.value=!1),class:"btn flex-1"}," Abbrechen "),e("button",{type:"submit",disabled:U.value,class:"btn btn-primary flex-1"},n(U.value?"Speichern...":"Speichern"),9,rt)])],32)])])])):r("",!0)]))}});export{pt as default}; diff --git a/dist/assets/RegisterOrgView-BLP8qTxS.js b/dist/assets/RegisterOrgView-BMNvmbZf.js similarity index 99% rename from dist/assets/RegisterOrgView-BLP8qTxS.js rename to dist/assets/RegisterOrgView-BMNvmbZf.js index 3bb8b99..136f441 100644 --- a/dist/assets/RegisterOrgView-BLP8qTxS.js +++ b/dist/assets/RegisterOrgView-BMNvmbZf.js @@ -1 +1 @@ -import{d as T,h as U,c as n,a as t,n as C,b as o,v as u,e as g,i as B,j as L,w as M,t as j,r as l,k as z,l as O,o as r,m as R,f as $,p as E}from"./index-CVUlgynU.js";const D={class:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 py-12 px-4"},W={class:"max-w-lg w-full"},Z={class:"flex items-center justify-center mb-8"},A={class:"flex items-center"},F={class:"card"},q={key:0},G={class:"space-y-4"},H={class:"flex items-center gap-2"},I={key:0,class:"text-gray-400"},J={key:1,class:"text-green-500"},Q={key:2,class:"text-red-500"},X={key:0,class:"mt-1 text-xs text-red-500"},Y={class:"mt-6 flex justify-between"},ee=["disabled"],te={key:1},se={class:"grid grid-cols-2 gap-4"},le={key:0,class:"mt-1 text-xs text-red-500"},ae={key:0,class:"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 rounded-lg text-sm"},ne={class:"mt-6 flex justify-between"},re=["disabled"],ue=T({__name:"RegisterOrgView",setup(ie){const P=$(),d=l(1),c=l(!1),y=l(""),w=l(!1),m=l(null),p=l(""),i=l(""),x=l(""),v=l(""),b=l(""),f=l(""),k=l(""),h=l("");U(p,a=>{a&&!i.value&&(i.value=a.toLowerCase().replace(/[äöüß]/g,e=>({ä:"ae",ö:"oe",ü:"ue",ß:"ss"})[e]||e).replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,30))});let _;U(i,async a=>{clearTimeout(_),m.value=null,!(a.length<3)&&(w.value=!0,_=setTimeout(async()=>{try{const V=await(await fetch(`/api/organizations/check/${a}`)).json();m.value=V.available}catch{m.value=null}w.value=!1},500))});const S=z(()=>p.value.length>=2&&i.value.length>=3&&m.value===!0),N=z(()=>x.value.includes("@")&&v.value.length>=8&&v.value===b.value&&f.value.length>=2&&k.value.length>=2);async function K(){if(N.value){y.value="",c.value=!0;try{await R.post("/organizations/register",{name:p.value,slug:i.value,admin_email:x.value,admin_password:v.value,admin_first_name:f.value,admin_last_name:k.value,admin_phone:h.value||void 0}),P.push({name:"login",query:{registered:"true",org:i.value,email:x.value}})}catch(a){y.value=a instanceof Error?a.message:"Registrierung fehlgeschlagen"}finally{c.value=!1}}}return(a,e)=>{const V=O("router-link");return r(),n("div",D,[t("div",W,[e[22]||(e[22]=t("div",{class:"text-center mb-8"},[t("h1",{class:"text-4xl font-bold text-primary-600"},"🔐 SeCu"),t("p",{class:"mt-2 text-gray-600 dark:text-gray-400"},"Organisation registrieren")],-1)),t("div",Z,[t("div",A,[t("div",{class:C(["w-10 h-10 rounded-full flex items-center justify-center text-white font-bold",d.value>=1?"bg-primary-600":"bg-gray-300"])},"1",2),t("div",{class:C(["w-24 h-1 mx-2",d.value>=2?"bg-primary-600":"bg-gray-300"])},null,2),t("div",{class:C(["w-10 h-10 rounded-full flex items-center justify-center font-bold",d.value>=2?"bg-primary-600 text-white":"bg-gray-300 text-gray-600"])},"2",2)])]),t("div",F,[d.value===1?(r(),n("div",q,[e[14]||(e[14]=t("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Ihre Organisation ",-1)),t("div",G,[t("div",null,[e[10]||(e[10]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Firmenname * ",-1)),o(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>p.value=s),type:"text",class:"input",placeholder:"z.B. Muster Sicherheit GmbH"},null,512),[[u,p.value]])]),t("div",null,[e[11]||(e[11]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," URL-Kürzel * ",-1)),t("div",H,[o(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>i.value=s),type:"text",class:"input",placeholder:"muster-sicherheit"},null,512),[[u,i.value]]),w.value?(r(),n("span",I,"⏳")):m.value===!0?(r(),n("span",J,"✓")):m.value===!1?(r(),n("span",Q,"✗")):g("",!0)]),e[12]||(e[12]=t("p",{class:"mt-1 text-xs text-gray-500"}," Wird für den Login verwendet. Nur Kleinbuchstaben und Bindestriche. ",-1)),m.value===!1?(r(),n("p",X," Dieses Kürzel ist bereits vergeben. ")):g("",!0)])]),t("div",Y,[B(V,{to:"/login",class:"btn btn-secondary"},{default:L(()=>[...e[13]||(e[13]=[E(" ← Zurück zum Login ",-1)])]),_:1}),t("button",{onClick:e[2]||(e[2]=s=>d.value=2),disabled:!S.value,class:"btn btn-primary"}," Weiter → ",8,ee)])])):g("",!0),d.value===2?(r(),n("div",te,[e[21]||(e[21]=t("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Administrator-Konto ",-1)),t("form",{onSubmit:M(K,["prevent"]),class:"space-y-4"},[t("div",se,[t("div",null,[e[15]||(e[15]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Vorname * ",-1)),o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f.value=s),type:"text",class:"input"},null,512),[[u,f.value]])]),t("div",null,[e[16]||(e[16]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Nachname * ",-1)),o(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>k.value=s),type:"text",class:"input"},null,512),[[u,k.value]])])]),t("div",null,[e[17]||(e[17]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," E-Mail * ",-1)),o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>x.value=s),type:"email",class:"input"},null,512),[[u,x.value]])]),t("div",null,[e[18]||(e[18]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Telefon ",-1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>h.value=s),type:"tel",class:"input",placeholder:"Optional"},null,512),[[u,h.value]])]),t("div",null,[e[19]||(e[19]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort * ",-1)),o(t("input",{"onUpdate:modelValue":e[7]||(e[7]=s=>v.value=s),type:"password",class:"input",placeholder:"Mindestens 8 Zeichen"},null,512),[[u,v.value]])]),t("div",null,[e[20]||(e[20]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort bestätigen * ",-1)),o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>b.value=s),type:"password",class:"input"},null,512),[[u,b.value]]),v.value&&b.value&&v.value!==b.value?(r(),n("p",le," Passwörter stimmen nicht überein ")):g("",!0)]),y.value?(r(),n("div",ae,j(y.value),1)):g("",!0),t("div",ne,[t("button",{type:"button",onClick:e[9]||(e[9]=s=>d.value=1),class:"btn btn-secondary"}," ← Zurück "),t("button",{type:"submit",disabled:!N.value||c.value,class:"btn btn-primary"},j(c.value?"Wird erstellt...":"Organisation erstellen"),9,re)])],32)])):g("",!0)]),e[23]||(e[23]=t("div",{class:"mt-6 text-center text-sm text-gray-500 dark:text-gray-400"},[t("p",null,"Nach der Registrierung können Sie sofort loslegen."),t("p",{class:"mt-1"},"Kostenlos starten • Keine Kreditkarte nötig")],-1))])])}}});export{ue as default}; +import{d as T,h as U,c as n,a as t,n as C,b as o,v as u,e as g,i as B,j as L,w as M,t as j,r as l,k as z,l as O,o as r,m as R,f as $,p as E}from"./index-DFiGttzi.js";const D={class:"min-h-screen flex items-center justify-center bg-gray-50 dark:bg-gray-900 py-12 px-4"},W={class:"max-w-lg w-full"},Z={class:"flex items-center justify-center mb-8"},A={class:"flex items-center"},F={class:"card"},q={key:0},G={class:"space-y-4"},H={class:"flex items-center gap-2"},I={key:0,class:"text-gray-400"},J={key:1,class:"text-green-500"},Q={key:2,class:"text-red-500"},X={key:0,class:"mt-1 text-xs text-red-500"},Y={class:"mt-6 flex justify-between"},ee=["disabled"],te={key:1},se={class:"grid grid-cols-2 gap-4"},le={key:0,class:"mt-1 text-xs text-red-500"},ae={key:0,class:"p-3 bg-red-50 dark:bg-red-900/20 text-red-600 dark:text-red-400 rounded-lg text-sm"},ne={class:"mt-6 flex justify-between"},re=["disabled"],ue=T({__name:"RegisterOrgView",setup(ie){const P=$(),d=l(1),c=l(!1),y=l(""),w=l(!1),m=l(null),p=l(""),i=l(""),x=l(""),v=l(""),b=l(""),f=l(""),k=l(""),h=l("");U(p,a=>{a&&!i.value&&(i.value=a.toLowerCase().replace(/[äöüß]/g,e=>({ä:"ae",ö:"oe",ü:"ue",ß:"ss"})[e]||e).replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,30))});let _;U(i,async a=>{clearTimeout(_),m.value=null,!(a.length<3)&&(w.value=!0,_=setTimeout(async()=>{try{const V=await(await fetch(`/api/organizations/check/${a}`)).json();m.value=V.available}catch{m.value=null}w.value=!1},500))});const S=z(()=>p.value.length>=2&&i.value.length>=3&&m.value===!0),N=z(()=>x.value.includes("@")&&v.value.length>=8&&v.value===b.value&&f.value.length>=2&&k.value.length>=2);async function K(){if(N.value){y.value="",c.value=!0;try{await R.post("/organizations/register",{name:p.value,slug:i.value,admin_email:x.value,admin_password:v.value,admin_first_name:f.value,admin_last_name:k.value,admin_phone:h.value||void 0}),P.push({name:"login",query:{registered:"true",org:i.value,email:x.value}})}catch(a){y.value=a instanceof Error?a.message:"Registrierung fehlgeschlagen"}finally{c.value=!1}}}return(a,e)=>{const V=O("router-link");return r(),n("div",D,[t("div",W,[e[22]||(e[22]=t("div",{class:"text-center mb-8"},[t("h1",{class:"text-4xl font-bold text-primary-600"},"🔐 SeCu"),t("p",{class:"mt-2 text-gray-600 dark:text-gray-400"},"Organisation registrieren")],-1)),t("div",Z,[t("div",A,[t("div",{class:C(["w-10 h-10 rounded-full flex items-center justify-center text-white font-bold",d.value>=1?"bg-primary-600":"bg-gray-300"])},"1",2),t("div",{class:C(["w-24 h-1 mx-2",d.value>=2?"bg-primary-600":"bg-gray-300"])},null,2),t("div",{class:C(["w-10 h-10 rounded-full flex items-center justify-center font-bold",d.value>=2?"bg-primary-600 text-white":"bg-gray-300 text-gray-600"])},"2",2)])]),t("div",F,[d.value===1?(r(),n("div",q,[e[14]||(e[14]=t("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Ihre Organisation ",-1)),t("div",G,[t("div",null,[e[10]||(e[10]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Firmenname * ",-1)),o(t("input",{"onUpdate:modelValue":e[0]||(e[0]=s=>p.value=s),type:"text",class:"input",placeholder:"z.B. Muster Sicherheit GmbH"},null,512),[[u,p.value]])]),t("div",null,[e[11]||(e[11]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," URL-Kürzel * ",-1)),t("div",H,[o(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>i.value=s),type:"text",class:"input",placeholder:"muster-sicherheit"},null,512),[[u,i.value]]),w.value?(r(),n("span",I,"⏳")):m.value===!0?(r(),n("span",J,"✓")):m.value===!1?(r(),n("span",Q,"✗")):g("",!0)]),e[12]||(e[12]=t("p",{class:"mt-1 text-xs text-gray-500"}," Wird für den Login verwendet. Nur Kleinbuchstaben und Bindestriche. ",-1)),m.value===!1?(r(),n("p",X," Dieses Kürzel ist bereits vergeben. ")):g("",!0)])]),t("div",Y,[B(V,{to:"/login",class:"btn btn-secondary"},{default:L(()=>[...e[13]||(e[13]=[E(" ← Zurück zum Login ",-1)])]),_:1}),t("button",{onClick:e[2]||(e[2]=s=>d.value=2),disabled:!S.value,class:"btn btn-primary"}," Weiter → ",8,ee)])])):g("",!0),d.value===2?(r(),n("div",te,[e[21]||(e[21]=t("h2",{class:"text-xl font-semibold text-gray-900 dark:text-white mb-6"}," Administrator-Konto ",-1)),t("form",{onSubmit:M(K,["prevent"]),class:"space-y-4"},[t("div",se,[t("div",null,[e[15]||(e[15]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Vorname * ",-1)),o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f.value=s),type:"text",class:"input"},null,512),[[u,f.value]])]),t("div",null,[e[16]||(e[16]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Nachname * ",-1)),o(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>k.value=s),type:"text",class:"input"},null,512),[[u,k.value]])])]),t("div",null,[e[17]||(e[17]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," E-Mail * ",-1)),o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>x.value=s),type:"email",class:"input"},null,512),[[u,x.value]])]),t("div",null,[e[18]||(e[18]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Telefon ",-1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>h.value=s),type:"tel",class:"input",placeholder:"Optional"},null,512),[[u,h.value]])]),t("div",null,[e[19]||(e[19]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort * ",-1)),o(t("input",{"onUpdate:modelValue":e[7]||(e[7]=s=>v.value=s),type:"password",class:"input",placeholder:"Mindestens 8 Zeichen"},null,512),[[u,v.value]])]),t("div",null,[e[20]||(e[20]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Passwort bestätigen * ",-1)),o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>b.value=s),type:"password",class:"input"},null,512),[[u,b.value]]),v.value&&b.value&&v.value!==b.value?(r(),n("p",le," Passwörter stimmen nicht überein ")):g("",!0)]),y.value?(r(),n("div",ae,j(y.value),1)):g("",!0),t("div",ne,[t("button",{type:"button",onClick:e[9]||(e[9]=s=>d.value=1),class:"btn btn-secondary"}," ← Zurück "),t("button",{type:"submit",disabled:!N.value||c.value,class:"btn btn-primary"},j(c.value?"Wird erstellt...":"Organisation erstellen"),9,re)])],32)])):g("",!0)]),e[23]||(e[23]=t("div",{class:"mt-6 text-center text-sm text-gray-500 dark:text-gray-400"},[t("p",null,"Nach der Registrierung können Sie sofort loslegen."),t("p",{class:"mt-1"},"Kostenlos starten • Keine Kreditkarte nötig")],-1))])])}}});export{ue as default}; diff --git a/dist/assets/SettingsView-Dui31Esj.js b/dist/assets/SettingsView-C9a1ZS9c.js similarity index 97% rename from dist/assets/SettingsView-Dui31Esj.js rename to dist/assets/SettingsView-C9a1ZS9c.js index cb5ac21..93b962d 100644 --- a/dist/assets/SettingsView-Dui31Esj.js +++ b/dist/assets/SettingsView-C9a1ZS9c.js @@ -1 +1 @@ -import{d as k,u as h,c as p,a as e,t as a,y as b,w as S,b as c,v as f,e as y,r as o,o as w,m as V}from"./index-CVUlgynU.js";const N={class:"space-y-6"},E={class:"card"},_={class:"grid grid-cols-2 gap-4"},q={class:"font-medium"},B={class:"font-medium"},M={class:"font-medium capitalize"},U={class:"card"},A={key:0,class:"text-red-600 text-sm"},C={key:1,class:"text-green-600 text-sm"},D=["disabled"],R=k({__name:"SettingsView",setup(z){const m=h(),r=o(""),t=o(""),i=o(""),u=o(!1),d=o(""),l=o("");async function P(){if(t.value!==i.value){l.value="Passwörter stimmen nicht überein";return}if(t.value.length<8){l.value="Passwort muss mindestens 8 Zeichen haben";return}u.value=!0,l.value="",d.value="";try{await V.post("/auth/change-password",{currentPassword:r.value,newPassword:t.value}),d.value="Passwort erfolgreich geändert",r.value="",t.value="",i.value=""}catch(v){l.value=v instanceof Error?v.message:"Fehler beim Ändern"}finally{u.value=!1}}return(v,s)=>{var x,g;return w(),p("div",N,[s[11]||(s[11]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🔧 Einstellungen",-1)),e("div",E,[s[6]||(s[6]=e("h2",{class:"text-lg font-semibold mb-4"},"Profil",-1)),e("div",_,[e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm text-gray-500"},"Name",-1)),e("p",q,a(b(m).fullName),1)]),e("div",null,[s[4]||(s[4]=e("label",{class:"block text-sm text-gray-500"},"E-Mail",-1)),e("p",B,a((x=b(m).user)==null?void 0:x.email),1)]),e("div",null,[s[5]||(s[5]=e("label",{class:"block text-sm text-gray-500"},"Rolle",-1)),e("p",M,a((g=b(m).user)==null?void 0:g.role),1)])])]),e("div",U,[s[10]||(s[10]=e("h2",{class:"text-lg font-semibold mb-4"},"Passwort ändern",-1)),e("form",{onSubmit:S(P,["prevent"]),class:"space-y-4 max-w-md"},[e("div",null,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium mb-1"},"Aktuelles Passwort",-1)),c(e("input",{"onUpdate:modelValue":s[0]||(s[0]=n=>r.value=n),type:"password",required:"",class:"input"},null,512),[[f,r.value]])]),e("div",null,[s[8]||(s[8]=e("label",{class:"block text-sm font-medium mb-1"},"Neues Passwort",-1)),c(e("input",{"onUpdate:modelValue":s[1]||(s[1]=n=>t.value=n),type:"password",required:"",class:"input"},null,512),[[f,t.value]])]),e("div",null,[s[9]||(s[9]=e("label",{class:"block text-sm font-medium mb-1"},"Passwort bestätigen",-1)),c(e("input",{"onUpdate:modelValue":s[2]||(s[2]=n=>i.value=n),type:"password",required:"",class:"input"},null,512),[[f,i.value]])]),l.value?(w(),p("div",A,a(l.value),1)):y("",!0),d.value?(w(),p("div",C,a(d.value),1)):y("",!0),e("button",{type:"submit",disabled:u.value,class:"btn btn-primary"},a(u.value?"Speichern...":"Passwort ändern"),9,D)],32)])])}}});export{R as default}; +import{d as k,u as h,c as p,a as e,t as a,y as b,w as S,b as c,v as f,e as y,r as o,o as w,m as V}from"./index-DFiGttzi.js";const N={class:"space-y-6"},E={class:"card"},_={class:"grid grid-cols-2 gap-4"},q={class:"font-medium"},B={class:"font-medium"},M={class:"font-medium capitalize"},U={class:"card"},A={key:0,class:"text-red-600 text-sm"},C={key:1,class:"text-green-600 text-sm"},D=["disabled"],R=k({__name:"SettingsView",setup(z){const m=h(),r=o(""),t=o(""),i=o(""),u=o(!1),d=o(""),l=o("");async function P(){if(t.value!==i.value){l.value="Passwörter stimmen nicht überein";return}if(t.value.length<8){l.value="Passwort muss mindestens 8 Zeichen haben";return}u.value=!0,l.value="",d.value="";try{await V.post("/auth/change-password",{currentPassword:r.value,newPassword:t.value}),d.value="Passwort erfolgreich geändert",r.value="",t.value="",i.value=""}catch(v){l.value=v instanceof Error?v.message:"Fehler beim Ändern"}finally{u.value=!1}}return(v,s)=>{var x,g;return w(),p("div",N,[s[11]||(s[11]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"🔧 Einstellungen",-1)),e("div",E,[s[6]||(s[6]=e("h2",{class:"text-lg font-semibold mb-4"},"Profil",-1)),e("div",_,[e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm text-gray-500"},"Name",-1)),e("p",q,a(b(m).fullName),1)]),e("div",null,[s[4]||(s[4]=e("label",{class:"block text-sm text-gray-500"},"E-Mail",-1)),e("p",B,a((x=b(m).user)==null?void 0:x.email),1)]),e("div",null,[s[5]||(s[5]=e("label",{class:"block text-sm text-gray-500"},"Rolle",-1)),e("p",M,a((g=b(m).user)==null?void 0:g.role),1)])])]),e("div",U,[s[10]||(s[10]=e("h2",{class:"text-lg font-semibold mb-4"},"Passwort ändern",-1)),e("form",{onSubmit:S(P,["prevent"]),class:"space-y-4 max-w-md"},[e("div",null,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium mb-1"},"Aktuelles Passwort",-1)),c(e("input",{"onUpdate:modelValue":s[0]||(s[0]=n=>r.value=n),type:"password",required:"",class:"input"},null,512),[[f,r.value]])]),e("div",null,[s[8]||(s[8]=e("label",{class:"block text-sm font-medium mb-1"},"Neues Passwort",-1)),c(e("input",{"onUpdate:modelValue":s[1]||(s[1]=n=>t.value=n),type:"password",required:"",class:"input"},null,512),[[f,t.value]])]),e("div",null,[s[9]||(s[9]=e("label",{class:"block text-sm font-medium mb-1"},"Passwort bestätigen",-1)),c(e("input",{"onUpdate:modelValue":s[2]||(s[2]=n=>i.value=n),type:"password",required:"",class:"input"},null,512),[[f,i.value]])]),l.value?(w(),p("div",A,a(l.value),1)):y("",!0),d.value?(w(),p("div",C,a(d.value),1)):y("",!0),e("button",{type:"submit",disabled:u.value,class:"btn btn-primary"},a(u.value?"Speichern...":"Passwort ändern"),9,D)],32)])])}}});export{R as default}; diff --git a/dist/assets/TimesheetsView-icu2yWhU.js b/dist/assets/TimesheetsView-E2w8gjVM.js similarity index 98% rename from dist/assets/TimesheetsView-icu2yWhU.js rename to dist/assets/TimesheetsView-E2w8gjVM.js index 2656909..c54ce70 100644 --- a/dist/assets/TimesheetsView-icu2yWhU.js +++ b/dist/assets/TimesheetsView-E2w8gjVM.js @@ -1 +1 @@ -import{d as A,u as M,q as T,m,c as a,a as s,F as y,x as w,w as D,b as p,v as _,s as E,e as i,r as d,o as r,t as l,p as U,y as h,n as z}from"./index-CVUlgynU.js";const N={class:"space-y-6"},$={class:"flex items-center justify-between"},B={class:"card"},F={key:0,class:"text-center py-8 text-gray-500"},L={key:1,class:"text-center py-8 text-gray-500"},q={key:2,class:"space-y-3"},K={class:"font-medium"},G={class:"text-sm text-gray-500"},O={key:0},P={key:0,class:"text-sm text-gray-500"},H={key:1,class:"text-sm text-gray-500"},I={class:"flex items-center gap-2"},J=["onClick"],Q=["onClick"],R={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},W={class:"card w-full max-w-md m-4"},X={class:"grid grid-cols-2 gap-4"},Y=["value"],Z={class:"flex justify-end gap-3 pt-4"},se=A({__name:"TimesheetsView",setup(ee){const f=M(),v=d([]),b=d(!0),u=d(!1),o=d({work_date:"",start_time:"",end_time:"",order_id:""}),x=d([]);T(async()=>{await Promise.all([g(),S()])});async function g(){b.value=!0;try{const n=await m.get("/timesheets");v.value=n.data.timesheets}catch(n){console.error(n)}finally{b.value=!1}}async function S(){try{const n=await m.get("/orders");x.value=n.data.orders}catch(n){console.error(n)}}async function j(){try{await m.post("/timesheets",o.value),u.value=!1,o.value={work_date:"",start_time:"",end_time:"",order_id:""},await g()}catch(n){alert(n instanceof Error?n.message:"Fehler")}}async function k(n,e){const t=e==="rejected"?prompt("Ablehnungsgrund:"):null;if(!(e==="rejected"&&!t))try{await m.post(`/timesheets/${n}/review`,{status:e,rejection_reason:t}),await g()}catch(c){alert(c instanceof Error?c.message:"Fehler")}}function C(n){return{pending:"badge-warning",approved:"badge-success",rejected:"badge-danger"}[n]||""}function V(n){return{pending:"Ausstehend",approved:"Genehmigt",rejected:"Abgelehnt"}[n]||n}return(n,e)=>(r(),a("div",N,[s("div",$,[e[6]||(e[6]=s("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"⏱️ Stundenzettel",-1)),s("button",{class:"btn btn-primary",onClick:e[0]||(e[0]=t=>u.value=!0)},"+ Neu")]),s("div",B,[b.value?(r(),a("div",F,"Lädt...")):v.value.length===0?(r(),a("div",L,"Keine Stundenzettel")):(r(),a("div",q,[(r(!0),a(y,null,w(v.value,t=>(r(),a("div",{key:t.id,class:"flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[s("div",null,[s("p",K,l(new Date(t.work_date).toLocaleDateString("de-DE")),1),s("p",G,[U(l(t.start_time)+" - "+l(t.end_time)+" ",1),t.hours_worked?(r(),a("span",O,"("+l(t.hours_worked)+"h)",1)):i("",!0)]),t.order_title?(r(),a("p",P,"📋 "+l(t.order_title),1)):i("",!0),h(f).canManageUsers?(r(),a("p",H,"👤 "+l(t.user_name),1)):i("",!0)]),s("div",I,[s("span",{class:z(["badge",C(t.status)])},l(V(t.status)),3),h(f).canManageUsers&&t.status==="pending"?(r(),a(y,{key:0},[s("button",{class:"btn btn-success text-sm",onClick:c=>k(t.id,"approved")},"✓",8,J),s("button",{class:"btn btn-danger text-sm",onClick:c=>k(t.id,"rejected")},"✗",8,Q)],64)):i("",!0)])]))),128))]))]),u.value?(r(),a("div",R,[s("div",W,[e[13]||(e[13]=s("h2",{class:"text-xl font-semibold mb-6"},"Neuer Stundenzettel",-1)),s("form",{onSubmit:D(j,["prevent"]),class:"space-y-4"},[s("div",null,[e[7]||(e[7]=s("label",{class:"block text-sm font-medium mb-1"},"Datum *",-1)),p(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>o.value.work_date=t),type:"date",required:"",class:"input"},null,512),[[_,o.value.work_date]])]),s("div",X,[s("div",null,[e[8]||(e[8]=s("label",{class:"block text-sm font-medium mb-1"},"Start",-1)),p(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>o.value.start_time=t),type:"time",class:"input"},null,512),[[_,o.value.start_time]])]),s("div",null,[e[9]||(e[9]=s("label",{class:"block text-sm font-medium mb-1"},"Ende",-1)),p(s("input",{"onUpdate:modelValue":e[3]||(e[3]=t=>o.value.end_time=t),type:"time",class:"input"},null,512),[[_,o.value.end_time]])])]),s("div",null,[e[11]||(e[11]=s("label",{class:"block text-sm font-medium mb-1"},"Auftrag",-1)),p(s("select",{"onUpdate:modelValue":e[4]||(e[4]=t=>o.value.order_id=t),class:"input"},[e[10]||(e[10]=s("option",{value:""},"-- Kein Auftrag --",-1)),(r(!0),a(y,null,w(x.value,t=>(r(),a("option",{key:t.id,value:t.id},"#"+l(t.number)+" - "+l(t.title),9,Y))),128))],512),[[E,o.value.order_id]])]),s("div",Z,[s("button",{type:"button",class:"btn btn-secondary",onClick:e[5]||(e[5]=t=>u.value=!1)},"Abbrechen"),e[12]||(e[12]=s("button",{type:"submit",class:"btn btn-primary"},"Einreichen",-1))])],32)])])):i("",!0)]))}});export{se as default}; +import{d as A,u as M,q as T,m,c as a,a as s,F as y,x as w,w as D,b as p,v as _,s as E,e as i,r as d,o as r,t as l,p as U,y as h,n as z}from"./index-DFiGttzi.js";const N={class:"space-y-6"},$={class:"flex items-center justify-between"},B={class:"card"},F={key:0,class:"text-center py-8 text-gray-500"},L={key:1,class:"text-center py-8 text-gray-500"},q={key:2,class:"space-y-3"},K={class:"font-medium"},G={class:"text-sm text-gray-500"},O={key:0},P={key:0,class:"text-sm text-gray-500"},H={key:1,class:"text-sm text-gray-500"},I={class:"flex items-center gap-2"},J=["onClick"],Q=["onClick"],R={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},W={class:"card w-full max-w-md m-4"},X={class:"grid grid-cols-2 gap-4"},Y=["value"],Z={class:"flex justify-end gap-3 pt-4"},se=A({__name:"TimesheetsView",setup(ee){const f=M(),v=d([]),b=d(!0),u=d(!1),o=d({work_date:"",start_time:"",end_time:"",order_id:""}),x=d([]);T(async()=>{await Promise.all([g(),S()])});async function g(){b.value=!0;try{const n=await m.get("/timesheets");v.value=n.data.timesheets}catch(n){console.error(n)}finally{b.value=!1}}async function S(){try{const n=await m.get("/orders");x.value=n.data.orders}catch(n){console.error(n)}}async function j(){try{await m.post("/timesheets",o.value),u.value=!1,o.value={work_date:"",start_time:"",end_time:"",order_id:""},await g()}catch(n){alert(n instanceof Error?n.message:"Fehler")}}async function k(n,e){const t=e==="rejected"?prompt("Ablehnungsgrund:"):null;if(!(e==="rejected"&&!t))try{await m.post(`/timesheets/${n}/review`,{status:e,rejection_reason:t}),await g()}catch(c){alert(c instanceof Error?c.message:"Fehler")}}function C(n){return{pending:"badge-warning",approved:"badge-success",rejected:"badge-danger"}[n]||""}function V(n){return{pending:"Ausstehend",approved:"Genehmigt",rejected:"Abgelehnt"}[n]||n}return(n,e)=>(r(),a("div",N,[s("div",$,[e[6]||(e[6]=s("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"⏱️ Stundenzettel",-1)),s("button",{class:"btn btn-primary",onClick:e[0]||(e[0]=t=>u.value=!0)},"+ Neu")]),s("div",B,[b.value?(r(),a("div",F,"Lädt...")):v.value.length===0?(r(),a("div",L,"Keine Stundenzettel")):(r(),a("div",q,[(r(!0),a(y,null,w(v.value,t=>(r(),a("div",{key:t.id,class:"flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700/50 rounded-lg"},[s("div",null,[s("p",K,l(new Date(t.work_date).toLocaleDateString("de-DE")),1),s("p",G,[U(l(t.start_time)+" - "+l(t.end_time)+" ",1),t.hours_worked?(r(),a("span",O,"("+l(t.hours_worked)+"h)",1)):i("",!0)]),t.order_title?(r(),a("p",P,"📋 "+l(t.order_title),1)):i("",!0),h(f).canManageUsers?(r(),a("p",H,"👤 "+l(t.user_name),1)):i("",!0)]),s("div",I,[s("span",{class:z(["badge",C(t.status)])},l(V(t.status)),3),h(f).canManageUsers&&t.status==="pending"?(r(),a(y,{key:0},[s("button",{class:"btn btn-success text-sm",onClick:c=>k(t.id,"approved")},"✓",8,J),s("button",{class:"btn btn-danger text-sm",onClick:c=>k(t.id,"rejected")},"✗",8,Q)],64)):i("",!0)])]))),128))]))]),u.value?(r(),a("div",R,[s("div",W,[e[13]||(e[13]=s("h2",{class:"text-xl font-semibold mb-6"},"Neuer Stundenzettel",-1)),s("form",{onSubmit:D(j,["prevent"]),class:"space-y-4"},[s("div",null,[e[7]||(e[7]=s("label",{class:"block text-sm font-medium mb-1"},"Datum *",-1)),p(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>o.value.work_date=t),type:"date",required:"",class:"input"},null,512),[[_,o.value.work_date]])]),s("div",X,[s("div",null,[e[8]||(e[8]=s("label",{class:"block text-sm font-medium mb-1"},"Start",-1)),p(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>o.value.start_time=t),type:"time",class:"input"},null,512),[[_,o.value.start_time]])]),s("div",null,[e[9]||(e[9]=s("label",{class:"block text-sm font-medium mb-1"},"Ende",-1)),p(s("input",{"onUpdate:modelValue":e[3]||(e[3]=t=>o.value.end_time=t),type:"time",class:"input"},null,512),[[_,o.value.end_time]])])]),s("div",null,[e[11]||(e[11]=s("label",{class:"block text-sm font-medium mb-1"},"Auftrag",-1)),p(s("select",{"onUpdate:modelValue":e[4]||(e[4]=t=>o.value.order_id=t),class:"input"},[e[10]||(e[10]=s("option",{value:""},"-- Kein Auftrag --",-1)),(r(!0),a(y,null,w(x.value,t=>(r(),a("option",{key:t.id,value:t.id},"#"+l(t.number)+" - "+l(t.title),9,Y))),128))],512),[[E,o.value.order_id]])]),s("div",Z,[s("button",{type:"button",class:"btn btn-secondary",onClick:e[5]||(e[5]=t=>u.value=!1)},"Abbrechen"),e[12]||(e[12]=s("button",{type:"submit",class:"btn btn-primary"},"Einreichen",-1))])],32)])])):i("",!0)]))}});export{se as default}; diff --git a/dist/assets/UsersView-D-cYRxCO.js b/dist/assets/UsersView-DakGKZFX.js similarity index 98% rename from dist/assets/UsersView-D-cYRxCO.js rename to dist/assets/UsersView-DakGKZFX.js index af30d2a..301cc6b 100644 --- a/dist/assets/UsersView-D-cYRxCO.js +++ b/dist/assets/UsersView-DakGKZFX.js @@ -1 +1 @@ -import{d as C,u as U,q as V,m,c as n,a as e,F as E,x as N,w as S,b as o,v as d,y as x,s as q,e as y,r as b,o as i,t as r,n as k}from"./index-CVUlgynU.js";const A={class:"space-y-6"},D={class:"flex items-center justify-between"},$={class:"card"},B={key:0,class:"text-center py-8 text-gray-500"},F={key:1,class:"text-center py-8 text-gray-500"},R={key:2,class:"w-full"},j={class:"py-3 font-medium"},L={class:"py-3 text-gray-500"},z={class:"py-3"},T={class:"py-3"},I={class:"py-3 text-right"},K=["onClick"],P={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},G={class:"card w-full max-w-md m-4"},H={class:"grid grid-cols-2 gap-4"},J={key:0},O={class:"flex justify-end gap-3 pt-4"},Y=C({__name:"UsersView",setup(Q){const f=U(),p=b([]),c=b(!0),u=b(!1),l=b({email:"",password:"",first_name:"",last_name:"",phone:"",role:"mitarbeiter"});V(async()=>{await v()});async function v(){c.value=!0;try{const a=await m.get("/users");p.value=a.data.users}catch(a){console.error(a)}finally{c.value=!1}}async function w(){try{await m.post("/users",l.value),u.value=!1,l.value={email:"",password:"",first_name:"",last_name:"",phone:"",role:"mitarbeiter"},await v()}catch(a){alert(a instanceof Error?a.message:"Fehler beim Erstellen")}}async function _(a){try{a.active?await m.delete(`/users/${a.id}`):await m.put(`/users/${a.id}`,{active:!0}),await v()}catch(t){alert(t instanceof Error?t.message:"Fehler")}}function h(a){return{chef:"badge-danger",disponent:"badge-primary",mitarbeiter:"badge-success"}[a]||"badge-secondary"}function M(a){return{chef:"Chef",disponent:"Disponent",mitarbeiter:"Mitarbeiter"}[a]||a}return(a,t)=>(i(),n("div",A,[e("div",D,[t[8]||(t[8]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"👥 Mitarbeiter",-1)),e("button",{class:"btn btn-primary",onClick:t[0]||(t[0]=s=>u.value=!0)},"+ Neu")]),e("div",$,[c.value?(i(),n("div",B,"Lädt...")):p.value.length===0?(i(),n("div",F,"Keine Mitarbeiter")):(i(),n("table",R,[t[9]||(t[9]=e("thead",null,[e("tr",{class:"text-left text-sm text-gray-500 border-b border-gray-200 dark:border-gray-700"},[e("th",{class:"pb-3"},"Name"),e("th",{class:"pb-3"},"E-Mail"),e("th",{class:"pb-3"},"Rolle"),e("th",{class:"pb-3"},"Status"),e("th",{class:"pb-3"})])],-1)),e("tbody",null,[(i(!0),n(E,null,N(p.value,s=>{var g;return i(),n("tr",{key:s.id,class:"border-b border-gray-100 dark:border-gray-800"},[e("td",j,r(s.first_name)+" "+r(s.last_name),1),e("td",L,r(s.email),1),e("td",z,[e("span",{class:k(["badge",h(s.role)])},r(M(s.role)),3)]),e("td",T,[e("span",{class:k(s.active?"text-green-600":"text-red-600")},r(s.active?"Aktiv":"Inaktiv"),3)]),e("td",I,[s.id!==((g=x(f).user)==null?void 0:g.id)&&s.role!=="chef"?(i(),n("button",{key:0,class:"text-sm text-gray-500 hover:text-red-600",onClick:W=>_(s)},r(s.active?"Deaktivieren":"Aktivieren"),9,K)):y("",!0)])])}),128))])]))]),u.value?(i(),n("div",P,[e("div",G,[t[18]||(t[18]=e("h2",{class:"text-xl font-semibold mb-6"},"Neuer Mitarbeiter",-1)),e("form",{onSubmit:S(w,["prevent"]),class:"space-y-4"},[e("div",H,[e("div",null,[t[10]||(t[10]=e("label",{class:"block text-sm font-medium mb-1"},"Vorname *",-1)),o(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>l.value.first_name=s),type:"text",required:"",class:"input"},null,512),[[d,l.value.first_name]])]),e("div",null,[t[11]||(t[11]=e("label",{class:"block text-sm font-medium mb-1"},"Nachname *",-1)),o(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>l.value.last_name=s),type:"text",required:"",class:"input"},null,512),[[d,l.value.last_name]])])]),e("div",null,[t[12]||(t[12]=e("label",{class:"block text-sm font-medium mb-1"},"E-Mail *",-1)),o(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>l.value.email=s),type:"email",required:"",class:"input"},null,512),[[d,l.value.email]])]),e("div",null,[t[13]||(t[13]=e("label",{class:"block text-sm font-medium mb-1"},"Passwort *",-1)),o(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>l.value.password=s),type:"password",required:"",class:"input"},null,512),[[d,l.value.password]])]),e("div",null,[t[14]||(t[14]=e("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),o(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>l.value.phone=s),type:"tel",class:"input"},null,512),[[d,l.value.phone]])]),x(f).isChef?(i(),n("div",J,[t[16]||(t[16]=e("label",{class:"block text-sm font-medium mb-1"},"Rolle",-1)),o(e("select",{"onUpdate:modelValue":t[6]||(t[6]=s=>l.value.role=s),class:"input"},[...t[15]||(t[15]=[e("option",{value:"mitarbeiter"},"Mitarbeiter",-1),e("option",{value:"disponent"},"Disponent",-1)])],512),[[q,l.value.role]])])):y("",!0),e("div",O,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[7]||(t[7]=s=>u.value=!1)},"Abbrechen"),t[17]||(t[17]=e("button",{type:"submit",class:"btn btn-primary"},"Erstellen",-1))])],32)])])):y("",!0)]))}});export{Y as default}; +import{d as C,u as U,q as V,m,c as n,a as e,F as E,x as N,w as S,b as o,v as d,y as x,s as q,e as y,r as b,o as i,t as r,n as k}from"./index-DFiGttzi.js";const A={class:"space-y-6"},D={class:"flex items-center justify-between"},$={class:"card"},B={key:0,class:"text-center py-8 text-gray-500"},F={key:1,class:"text-center py-8 text-gray-500"},R={key:2,class:"w-full"},j={class:"py-3 font-medium"},L={class:"py-3 text-gray-500"},z={class:"py-3"},T={class:"py-3"},I={class:"py-3 text-right"},K=["onClick"],P={key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50"},G={class:"card w-full max-w-md m-4"},H={class:"grid grid-cols-2 gap-4"},J={key:0},O={class:"flex justify-end gap-3 pt-4"},Y=C({__name:"UsersView",setup(Q){const f=U(),p=b([]),c=b(!0),u=b(!1),l=b({email:"",password:"",first_name:"",last_name:"",phone:"",role:"mitarbeiter"});V(async()=>{await v()});async function v(){c.value=!0;try{const a=await m.get("/users");p.value=a.data.users}catch(a){console.error(a)}finally{c.value=!1}}async function w(){try{await m.post("/users",l.value),u.value=!1,l.value={email:"",password:"",first_name:"",last_name:"",phone:"",role:"mitarbeiter"},await v()}catch(a){alert(a instanceof Error?a.message:"Fehler beim Erstellen")}}async function _(a){try{a.active?await m.delete(`/users/${a.id}`):await m.put(`/users/${a.id}`,{active:!0}),await v()}catch(t){alert(t instanceof Error?t.message:"Fehler")}}function h(a){return{chef:"badge-danger",disponent:"badge-primary",mitarbeiter:"badge-success"}[a]||"badge-secondary"}function M(a){return{chef:"Chef",disponent:"Disponent",mitarbeiter:"Mitarbeiter"}[a]||a}return(a,t)=>(i(),n("div",A,[e("div",D,[t[8]||(t[8]=e("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"👥 Mitarbeiter",-1)),e("button",{class:"btn btn-primary",onClick:t[0]||(t[0]=s=>u.value=!0)},"+ Neu")]),e("div",$,[c.value?(i(),n("div",B,"Lädt...")):p.value.length===0?(i(),n("div",F,"Keine Mitarbeiter")):(i(),n("table",R,[t[9]||(t[9]=e("thead",null,[e("tr",{class:"text-left text-sm text-gray-500 border-b border-gray-200 dark:border-gray-700"},[e("th",{class:"pb-3"},"Name"),e("th",{class:"pb-3"},"E-Mail"),e("th",{class:"pb-3"},"Rolle"),e("th",{class:"pb-3"},"Status"),e("th",{class:"pb-3"})])],-1)),e("tbody",null,[(i(!0),n(E,null,N(p.value,s=>{var g;return i(),n("tr",{key:s.id,class:"border-b border-gray-100 dark:border-gray-800"},[e("td",j,r(s.first_name)+" "+r(s.last_name),1),e("td",L,r(s.email),1),e("td",z,[e("span",{class:k(["badge",h(s.role)])},r(M(s.role)),3)]),e("td",T,[e("span",{class:k(s.active?"text-green-600":"text-red-600")},r(s.active?"Aktiv":"Inaktiv"),3)]),e("td",I,[s.id!==((g=x(f).user)==null?void 0:g.id)&&s.role!=="chef"?(i(),n("button",{key:0,class:"text-sm text-gray-500 hover:text-red-600",onClick:W=>_(s)},r(s.active?"Deaktivieren":"Aktivieren"),9,K)):y("",!0)])])}),128))])]))]),u.value?(i(),n("div",P,[e("div",G,[t[18]||(t[18]=e("h2",{class:"text-xl font-semibold mb-6"},"Neuer Mitarbeiter",-1)),e("form",{onSubmit:S(w,["prevent"]),class:"space-y-4"},[e("div",H,[e("div",null,[t[10]||(t[10]=e("label",{class:"block text-sm font-medium mb-1"},"Vorname *",-1)),o(e("input",{"onUpdate:modelValue":t[1]||(t[1]=s=>l.value.first_name=s),type:"text",required:"",class:"input"},null,512),[[d,l.value.first_name]])]),e("div",null,[t[11]||(t[11]=e("label",{class:"block text-sm font-medium mb-1"},"Nachname *",-1)),o(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>l.value.last_name=s),type:"text",required:"",class:"input"},null,512),[[d,l.value.last_name]])])]),e("div",null,[t[12]||(t[12]=e("label",{class:"block text-sm font-medium mb-1"},"E-Mail *",-1)),o(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>l.value.email=s),type:"email",required:"",class:"input"},null,512),[[d,l.value.email]])]),e("div",null,[t[13]||(t[13]=e("label",{class:"block text-sm font-medium mb-1"},"Passwort *",-1)),o(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>l.value.password=s),type:"password",required:"",class:"input"},null,512),[[d,l.value.password]])]),e("div",null,[t[14]||(t[14]=e("label",{class:"block text-sm font-medium mb-1"},"Telefon",-1)),o(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>l.value.phone=s),type:"tel",class:"input"},null,512),[[d,l.value.phone]])]),x(f).isChef?(i(),n("div",J,[t[16]||(t[16]=e("label",{class:"block text-sm font-medium mb-1"},"Rolle",-1)),o(e("select",{"onUpdate:modelValue":t[6]||(t[6]=s=>l.value.role=s),class:"input"},[...t[15]||(t[15]=[e("option",{value:"mitarbeiter"},"Mitarbeiter",-1),e("option",{value:"disponent"},"Disponent",-1)])],512),[[q,l.value.role]])])):y("",!0),e("div",O,[e("button",{type:"button",class:"btn btn-secondary",onClick:t[7]||(t[7]=s=>u.value=!1)},"Abbrechen"),t[17]||(t[17]=e("button",{type:"submit",class:"btn btn-primary"},"Erstellen",-1))])],32)])])):y("",!0)]))}});export{Y as default}; diff --git a/dist/assets/index-CVUlgynU.js b/dist/assets/index-DFiGttzi.js similarity index 96% rename from dist/assets/index-CVUlgynU.js rename to dist/assets/index-DFiGttzi.js index 3a1778b..3b34ce6 100644 --- a/dist/assets/index-CVUlgynU.js +++ b/dist/assets/index-DFiGttzi.js @@ -18,7 +18,7 @@ var Ni=Object.defineProperty;var Di=(e,t,n)=>t in e?Ni(e,t,{enumerable:!0,config * pinia v2.3.1 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let pi;const zn=e=>pi=e,gi=Symbol();function Ss(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var rn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(rn||(rn={}));function uu(){const e=co(!0),t=e.run(()=>Dt({}));let n=[],s=[];const r=Us({install(o){zn(r),r._a=o,o.provide(gi,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const mi=()=>{};function Mr(e,t,n,s=mi){e.push(t);const r=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&uo()&&qi(r),r}function Pt(e,...t){e.slice().forEach(n=>{n(...t)})}const fu=e=>e(),Lr=Symbol(),ls=Symbol();function As(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];Ss(r)&&Ss(s)&&e.hasOwnProperty(n)&&!ie(s)&&!st(s)?e[n]=As(r,s):e[n]=s}return e}const au=Symbol();function hu(e){return!Ss(e)||!e.hasOwnProperty(au)}const{assign:ht}=Object;function du(e){return!!(ie(e)&&e.effect)}function pu(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let c;function a(){l||(n.state.value[e]=r?r():{});const f=gl(n.state.value[e]);return ht(f,o,Object.keys(i||{}).reduce((d,g)=>(d[g]=Us(ce(()=>{zn(n);const m=n._s.get(e);return i[g].call(m,m)})),d),{}))}return c=_i(e,a,t,n,s,!0),c}function _i(e,t,n={},s,r,o){let i;const l=ht({actions:{}},n),c={deep:!0};let a,f,d=[],g=[],m;const O=s.state.value[e];!o&&!O&&(s.state.value[e]={});let R;function j(K){let G;a=f=!1,typeof K=="function"?(K(s.state.value[e]),G={type:rn.patchFunction,storeId:e,events:m}):(As(s.state.value[e],K),G={type:rn.patchObject,payload:K,storeId:e,events:m});const re=R=Symbol();Gn().then(()=>{R===re&&(a=!0)}),f=!0,Pt(d,G,s.state.value[e])}const L=o?function(){const{state:G}=n,re=G?G():{};this.$patch(me=>{ht(me,re)})}:mi;function T(){i.stop(),d=[],g=[],s._s.delete(e)}const N=(K,G="")=>{if(Lr in K)return K[ls]=G,K;const re=function(){zn(s);const me=Array.from(arguments),Ce=[],Ee=[];function _t(B){Ce.push(B)}function ut(B){Ee.push(B)}Pt(g,{args:me,name:re[ls],store:U,after:_t,onError:ut});let se;try{se=K.apply(this&&this.$id===e?this:U,me)}catch(B){throw Pt(Ee,B),B}return se instanceof Promise?se.then(B=>(Pt(Ce,B),B)).catch(B=>(Pt(Ee,B),Promise.reject(B))):(Pt(Ce,se),se)};return re[Lr]=!0,re[ls]=G,re},S={_p:s,$id:e,$onAction:Mr.bind(null,g),$patch:j,$reset:L,$subscribe(K,G={}){const re=Mr(d,K,G.detached,()=>me()),me=i.run(()=>Zt(()=>s.state.value[e],Ce=>{(G.flush==="sync"?f:a)&&K({storeId:e,type:rn.direct,events:m},Ce)},ht({},c,G)));return re},$dispose:T},U=gn(S);s._s.set(e,U);const W=(s._a&&s._a.runWithContext||fu)(()=>s._e.run(()=>(i=co()).run(()=>t({action:N}))));for(const K in W){const G=W[K];if(ie(G)&&!du(G)||st(G))o||(O&&hu(G)&&(ie(G)?G.value=O[K]:As(G,O[K])),s.state.value[e][K]=G);else if(typeof G=="function"){const re=N(G,K);W[K]=re,l.actions[K]=G}}return ht(U,W),ht(J(U),W),Object.defineProperty(U,"$state",{get:()=>s.state.value[e],set:K=>{j(G=>{ht(G,K)})}}),s._p.forEach(K=>{ht(U,i.run(()=>K({store:U,app:s._a,pinia:s,options:l})))}),O&&o&&n.hydrate&&n.hydrate(U.$state,O),a=!0,f=!0,U}/*! #__NO_SIDE_EFFECTS__ */function gu(e,t,n){let s,r;const o=typeof t=="function";s=e,r=o?n:t;function i(l,c){const a=wl();return l=l||(a?De(gi,null):null),l&&zn(l),l=pi,l._s.has(s)||(o?_i(s,t,r,l):pu(s,r,l)),l._s.get(s)}return i.$id=s,i}const mu="/api";class _u{constructor(t){Zs(this,"baseUrl");this.baseUrl=t}getToken(){return localStorage.getItem("accessToken")}async request(t,n,s){const r={"Content-Type":"application/json"},o=this.getToken();o&&(r.Authorization=`Bearer ${o}`);const i={method:t,headers:r};s&&(i.body=JSON.stringify(s));const l=await fetch(`${this.baseUrl}${n}`,i);if(l.status===401&&await this.tryRefreshToken()){r.Authorization=`Bearer ${this.getToken()}`;const f=await fetch(`${this.baseUrl}${n}`,{...i,headers:r});return{data:await f.json(),status:f.status}}const c=await l.json();if(!l.ok)throw new Error(c.error||"Request failed");return{data:c,status:l.status}}async tryRefreshToken(){const t=localStorage.getItem("refreshToken");if(!t)return!1;try{const n=await fetch(`${this.baseUrl}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t})});if(!n.ok)return!1;const s=await n.json();return localStorage.setItem("accessToken",s.accessToken),!0}catch{return!1}}get(t){return this.request("GET",t)}post(t,n){return this.request("POST",t,n)}put(t,n){return this.request("PUT",t,n)}delete(t){return this.request("DELETE",t)}}const $t=new _u(mu),yi=gu("auth",()=>{const e=Dt(null),t=Dt(localStorage.getItem("accessToken")),n=Dt(localStorage.getItem("refreshToken")),s=Dt(localStorage.getItem("orgSlug")||""),r=ce(()=>!!e.value&&!!t.value),o=ce(()=>!!t.value),i=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="chef"}),l=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="disponent"}),c=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="mitarbeiter"}),a=ce(()=>i.value||l.value),f=ce(()=>i.value||l.value),d=ce(()=>e.value?`${e.value.first_name} ${e.value.last_name}`:"");function g(S,U){t.value=S,n.value=U,localStorage.setItem("accessToken",S),localStorage.setItem("refreshToken",U)}function m(S){s.value=S,localStorage.setItem("orgSlug",S)}function O(){e.value=null,t.value=null,n.value=null,localStorage.removeItem("accessToken"),localStorage.removeItem("refreshToken")}async function R(S,U,le){const W=await $t.post("/auth/login",{email:S,password:U,org_slug:le});return g(W.data.accessToken,W.data.refreshToken),m(le),e.value=W.data.user,W.data}async function j(S){return(await $t.post("/auth/register",S)).data}async function L(){try{await $t.post("/auth/logout")}catch{}O()}async function T(){try{const S=await $t.get("/auth/me");e.value=S.data.user}catch{O()}}async function N(){if(!n.value)throw new Error("No refresh token");const S=await $t.post("/auth/refresh",{refreshToken:n.value});return t.value=S.data.accessToken,localStorage.setItem("accessToken",S.data.accessToken),S.data.accessToken}return{user:e,accessToken:t,refreshToken:n,orgSlug:s,isAuthenticated:r,hasStoredToken:o,isChef:i,isDisponent:l,isMitarbeiter:c,canManageUsers:a,canManageOrders:f,fullName:d,login:R,register:j,logout:L,fetchCurrentUser:T,refreshAccessToken:N,setOrgSlug:m}}),yu=Ks({__name:"App",setup(e){const t=yi();return jo(async()=>{t.hasStoredToken&&await t.fetchCurrentUser()}),(n,s)=>{const r=Wl("router-view");return si(),oi(r)}}}),vu="modulepreload",bu=function(e){return"/"+e},Vr={},he=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=bu(c),c in Vr)return;Vr[c]=!0;const a=c.endsWith(".css"),f=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=a?"stylesheet":vu,a||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),a)return new Promise((g,m)=>{d.addEventListener("load",g),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};/*! + */let pi;const zn=e=>pi=e,gi=Symbol();function Ss(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var rn;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(rn||(rn={}));function uu(){const e=co(!0),t=e.run(()=>Dt({}));let n=[],s=[];const r=Us({install(o){zn(r),r._a=o,o.provide(gi,r),o.config.globalProperties.$pinia=r,s.forEach(i=>n.push(i)),s=[]},use(o){return this._a?n.push(o):s.push(o),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return r}const mi=()=>{};function Mr(e,t,n,s=mi){e.push(t);const r=()=>{const o=e.indexOf(t);o>-1&&(e.splice(o,1),s())};return!n&&uo()&&qi(r),r}function Pt(e,...t){e.slice().forEach(n=>{n(...t)})}const fu=e=>e(),Lr=Symbol(),ls=Symbol();function As(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,s)=>e.set(s,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const s=t[n],r=e[n];Ss(r)&&Ss(s)&&e.hasOwnProperty(n)&&!ie(s)&&!st(s)?e[n]=As(r,s):e[n]=s}return e}const au=Symbol();function hu(e){return!Ss(e)||!e.hasOwnProperty(au)}const{assign:ht}=Object;function du(e){return!!(ie(e)&&e.effect)}function pu(e,t,n,s){const{state:r,actions:o,getters:i}=t,l=n.state.value[e];let c;function a(){l||(n.state.value[e]=r?r():{});const f=gl(n.state.value[e]);return ht(f,o,Object.keys(i||{}).reduce((d,g)=>(d[g]=Us(ce(()=>{zn(n);const m=n._s.get(e);return i[g].call(m,m)})),d),{}))}return c=_i(e,a,t,n,s,!0),c}function _i(e,t,n={},s,r,o){let i;const l=ht({actions:{}},n),c={deep:!0};let a,f,d=[],g=[],m;const O=s.state.value[e];!o&&!O&&(s.state.value[e]={});let R;function j(K){let G;a=f=!1,typeof K=="function"?(K(s.state.value[e]),G={type:rn.patchFunction,storeId:e,events:m}):(As(s.state.value[e],K),G={type:rn.patchObject,payload:K,storeId:e,events:m});const re=R=Symbol();Gn().then(()=>{R===re&&(a=!0)}),f=!0,Pt(d,G,s.state.value[e])}const L=o?function(){const{state:G}=n,re=G?G():{};this.$patch(me=>{ht(me,re)})}:mi;function T(){i.stop(),d=[],g=[],s._s.delete(e)}const N=(K,G="")=>{if(Lr in K)return K[ls]=G,K;const re=function(){zn(s);const me=Array.from(arguments),Ce=[],Ee=[];function _t(B){Ce.push(B)}function ut(B){Ee.push(B)}Pt(g,{args:me,name:re[ls],store:U,after:_t,onError:ut});let se;try{se=K.apply(this&&this.$id===e?this:U,me)}catch(B){throw Pt(Ee,B),B}return se instanceof Promise?se.then(B=>(Pt(Ce,B),B)).catch(B=>(Pt(Ee,B),Promise.reject(B))):(Pt(Ce,se),se)};return re[Lr]=!0,re[ls]=G,re},S={_p:s,$id:e,$onAction:Mr.bind(null,g),$patch:j,$reset:L,$subscribe(K,G={}){const re=Mr(d,K,G.detached,()=>me()),me=i.run(()=>Zt(()=>s.state.value[e],Ce=>{(G.flush==="sync"?f:a)&&K({storeId:e,type:rn.direct,events:m},Ce)},ht({},c,G)));return re},$dispose:T},U=gn(S);s._s.set(e,U);const W=(s._a&&s._a.runWithContext||fu)(()=>s._e.run(()=>(i=co()).run(()=>t({action:N}))));for(const K in W){const G=W[K];if(ie(G)&&!du(G)||st(G))o||(O&&hu(G)&&(ie(G)?G.value=O[K]:As(G,O[K])),s.state.value[e][K]=G);else if(typeof G=="function"){const re=N(G,K);W[K]=re,l.actions[K]=G}}return ht(U,W),ht(J(U),W),Object.defineProperty(U,"$state",{get:()=>s.state.value[e],set:K=>{j(G=>{ht(G,K)})}}),s._p.forEach(K=>{ht(U,i.run(()=>K({store:U,app:s._a,pinia:s,options:l})))}),O&&o&&n.hydrate&&n.hydrate(U.$state,O),a=!0,f=!0,U}/*! #__NO_SIDE_EFFECTS__ */function gu(e,t,n){let s,r;const o=typeof t=="function";s=e,r=o?n:t;function i(l,c){const a=wl();return l=l||(a?De(gi,null):null),l&&zn(l),l=pi,l._s.has(s)||(o?_i(s,t,r,l):pu(s,r,l)),l._s.get(s)}return i.$id=s,i}const mu="/api";class _u{constructor(t){Zs(this,"baseUrl");this.baseUrl=t}getToken(){return localStorage.getItem("accessToken")}async request(t,n,s){const r={"Content-Type":"application/json"},o=this.getToken();o&&(r.Authorization=`Bearer ${o}`);const i={method:t,headers:r};s&&(i.body=JSON.stringify(s));const l=await fetch(`${this.baseUrl}${n}`,i);if(l.status===401&&await this.tryRefreshToken()){r.Authorization=`Bearer ${this.getToken()}`;const f=await fetch(`${this.baseUrl}${n}`,{...i,headers:r});return{data:await f.json(),status:f.status}}const c=await l.json();if(!l.ok)throw new Error(c.error||"Request failed");return{data:c,status:l.status}}async tryRefreshToken(){const t=localStorage.getItem("refreshToken");if(!t)return!1;try{const n=await fetch(`${this.baseUrl}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:t})});if(!n.ok)return!1;const s=await n.json();return localStorage.setItem("accessToken",s.accessToken),!0}catch{return!1}}get(t){return this.request("GET",t)}post(t,n){return this.request("POST",t,n)}put(t,n){return this.request("PUT",t,n)}delete(t){return this.request("DELETE",t)}}const $t=new _u(mu),yi=gu("auth",()=>{const e=Dt(null),t=Dt(localStorage.getItem("accessToken")),n=Dt(localStorage.getItem("refreshToken")),s=Dt(localStorage.getItem("orgSlug")||""),r=ce(()=>!!e.value&&!!t.value),o=ce(()=>!!t.value),i=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="chef"}),l=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="disponent"}),c=ce(()=>{var S;return((S=e.value)==null?void 0:S.role)==="mitarbeiter"}),a=ce(()=>i.value||l.value),f=ce(()=>i.value||l.value),d=ce(()=>e.value?`${e.value.first_name} ${e.value.last_name}`:"");function g(S,U){t.value=S,n.value=U,localStorage.setItem("accessToken",S),localStorage.setItem("refreshToken",U)}function m(S){s.value=S,localStorage.setItem("orgSlug",S)}function O(){e.value=null,t.value=null,n.value=null,localStorage.removeItem("accessToken"),localStorage.removeItem("refreshToken")}async function R(S,U,le){const W=await $t.post("/auth/login",{email:S,password:U,org_slug:le});return g(W.data.accessToken,W.data.refreshToken),m(le),e.value=W.data.user,W.data}async function j(S){return(await $t.post("/auth/register",S)).data}async function L(){try{await $t.post("/auth/logout")}catch{}O()}async function T(){try{const S=await $t.get("/auth/me");e.value=S.data.user}catch{O()}}async function N(){if(!n.value)throw new Error("No refresh token");const S=await $t.post("/auth/refresh",{refreshToken:n.value});return t.value=S.data.accessToken,localStorage.setItem("accessToken",S.data.accessToken),S.data.accessToken}return{user:e,accessToken:t,refreshToken:n,orgSlug:s,isAuthenticated:r,hasStoredToken:o,isChef:i,isDisponent:l,isMitarbeiter:c,canManageUsers:a,canManageOrders:f,fullName:d,login:R,register:j,logout:L,fetchCurrentUser:T,refreshAccessToken:N,setOrgSlug:m}}),yu=Ks({__name:"App",setup(e){const t=yi();return jo(async()=>{t.hasStoredToken&&await t.fetchCurrentUser()}),(n,s)=>{const r=Wl("router-view");return si(),oi(r)}}}),vu="modulepreload",bu=function(e){return"/app/"+e},Vr={},he=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),l=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=bu(c),c in Vr)return;Vr[c]=!0;const a=c.endsWith(".css"),f=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const d=document.createElement("link");if(d.rel=a?"stylesheet":vu,a||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),a)return new Promise((g,m)=>{d.addEventListener("load",g),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(i){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=i,window.dispatchEvent(l),!l.defaultPrevented)throw i}return r.then(i=>{for(const l of i||[])l.status==="rejected"&&o(l.reason);return t().catch(o)})};/*! * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT @@ -26,4 +26,4 @@ var Ni=Object.defineProperty;var Di=(e,t,n)=>t in e?Ni(e,t,{enumerable:!0,config * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let tf=()=>location.protocol+"//"+location.host;function Oi(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),jr(l,"")}return jr(n,e)+s+r}function nf(e,t,n,s){let r=[],o=[],i=null;const l=({state:g})=>{const m=Oi(e,location),O=n.value,R=t.value;let j=0;if(g){if(n.value=m,t.value=g,i&&i===O){i=null;return}j=R?g.position-R.position:0}else s(m);r.forEach(L=>{L(n.value,O,{delta:j,type:xs.pop,direction:j?j>0?fs.forward:fs.back:fs.unknown})})};function c(){i=n.value}function a(g){r.push(g);const m=()=>{const O=r.indexOf(g);O>-1&&r.splice(O,1)};return o.push(m),m}function f(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(Q({},g.state,{scroll:Qn()}),"")}}function d(){for(const g of o)g();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",f),document.removeEventListener("visibilitychange",f)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",f),document.addEventListener("visibilitychange",f),{pauseListeners:c,listen:a,destroy:d}}function Kr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Qn():null}}function sf(e){const{history:t,location:n}=window,s={value:Oi(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,a,f){const d=e.indexOf("#"),g=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+c:tf()+e+c;try{t[f?"replaceState":"pushState"](a,"",g),r.value=a}catch(m){console.error(m),n[f?"replace":"assign"](g)}}function i(c,a){o(c,Q({},t.state,Kr(r.value.back,c,r.value.forward,!0),a,{position:r.value.position}),!0),s.value=c}function l(c,a){const f=Q({},r.value,t.state,{forward:c,scroll:Qn()});o(f.current,f,!0),o(c,Q({},Kr(s.value,c,null),{position:f.position+1},a),!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function rf(e){e=ku(e);const t=sf(e),n=nf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=Q({location:"",base:e,go:s,createHref:Ku.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let St=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var fe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(fe||{});const of={type:St.Static,value:""},lf=/[a-zA-Z0-9_]/;function cf(e){if(!e)return[[]];if(e==="/")return[[of]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${a}": ${m}`)}let n=fe.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,a="",f="";function d(){a&&(n===fe.Static?o.push({type:St.Static,value:a}):n===fe.Param||n===fe.ParamRegExp||n===fe.ParamRegExpEnd?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:St.Param,value:a,regexp:f,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function g(){a+=c}for(;lt.length?t.length===1&&t[0]===ye.Static+ye.Segment?1:-1:0}function Ti(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const df={strict:!1,end:!0,sensitive:!1};function pf(e,t,n){const s=af(cf(e.path),n),r=Q(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function gf(e,t){const n=[],s=new Map;t=Fr(df,t);function r(d){return s.get(d)}function o(d,g,m){const O=!m,R=$r(d);R.aliasOf=m&&m.record;const j=Fr(t,d),L=[R];if("alias"in d){const S=typeof d.alias=="string"?[d.alias]:d.alias;for(const U of S)L.push($r(Q({},R,{components:m?m.record.components:R.components,path:U,aliasOf:m?m.record:R})))}let T,N;for(const S of L){const{path:U}=S;if(g&&U[0]!=="/"){const le=g.record.path,W=le[le.length-1]==="/"?"":"/";S.path=g.record.path+(U&&W+U)}if(T=pf(S,g,j),m?m.alias.push(T):(N=N||T,N!==T&&N.alias.push(T),O&&d.name&&!Jr(T)&&i(d.name)),Pi(T)&&c(T),R.children){const le=R.children;for(let W=0;W{i(N)}:on}function i(d){if(wi(d)){const g=s.get(d);g&&(s.delete(d),n.splice(n.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=n.indexOf(d);g>-1&&(n.splice(g,1),d.record.name&&s.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function l(){return n}function c(d){const g=yf(d,n);n.splice(g,0,d),d.record.name&&!Jr(d)&&s.set(d.record.name,d)}function a(d,g){let m,O={},R,j;if("name"in d&&d.name){if(m=s.get(d.name),!m)throw kt(oe.MATCHER_NOT_FOUND,{location:d});j=m.record.name,O=Q(qr(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),d.params&&qr(d.params,m.keys.map(N=>N.name))),R=m.stringify(O)}else if(d.path!=null)R=d.path,m=n.find(N=>N.re.test(R)),m&&(O=m.parse(R),j=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw kt(oe.MATCHER_NOT_FOUND,{location:d,currentLocation:g});j=m.record.name,O=Q({},g.params,d.params),R=m.stringify(O)}const L=[];let T=m;for(;T;)L.unshift(T.record),T=T.parent;return{name:j,path:R,params:O,matched:L,meta:_f(L)}}e.forEach(d=>o(d));function f(){n.length=0,s.clear()}return{addRoute:o,resolve:a,removeRoute:i,clearRoutes:f,getRoutes:l,getRecordMatcher:r}}function qr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function $r(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:mf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function mf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Jr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function _f(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function yf(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;Ti(e,t[o])<0?s=o:n=o+1}const r=vf(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function vf(e){let t=e;for(;t=t.parent;)if(Pi(t)&&Ti(e,t)===0)return t}function Pi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zr(e){const t=De(Yn),n=De(Js),s=ce(()=>{const c=Rt(e.to);return t.resolve(c)}),r=ce(()=>{const{matched:c}=s.value,{length:a}=c,f=c[a-1],d=n.matched;if(!f||!d.length)return-1;const g=d.findIndex(Ut.bind(null,f));if(g>-1)return g;const m=Qr(c[a-2]);return a>1&&Qr(f)===m&&d[d.length-1].path!==m?d.findIndex(Ut.bind(null,c[a-2])):g}),o=ce(()=>r.value>-1&&Rf(n.params,s.value.params)),i=ce(()=>r.value>-1&&r.value===n.matched.length-1&&xi(n.params,s.value.params));function l(c={}){if(Af(c)){const a=t[Rt(e.replace)?"replace":"push"](Rt(e.to)).catch(on);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>a),a}return Promise.resolve()}return{route:s,href:ce(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function bf(e){return e.length===1?e[0]:e}const Ef=Ks({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:zr,setup(e,{slots:t}){const n=gn(zr(e)),{options:s}=De(Yn),r=ce(()=>({[Yr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Yr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&bf(t.default(n));return e.custom?o:ai("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Sf=Ef;function Af(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Rf(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Ve(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function Qr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Yr=(e,t,n)=>e??t??n,xf=Ks({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=De(Cs),r=ce(()=>e.route||s.value),o=De(Br,0),i=ce(()=>{let a=Rt(o);const{matched:f}=r.value;let d;for(;(d=f[a])&&!d.components;)a++;return a}),l=ce(()=>r.value.matched[i.value]);Sn(Br,ce(()=>i.value+1)),Sn(Zu,l),Sn(Cs,r);const c=Dt();return Zt(()=>[c.value,l.value,e.name],([a,f,d],[g,m,O])=>{f&&(f.instances[d]=a,m&&m!==f&&a&&a===g&&(f.leaveGuards.size||(f.leaveGuards=m.leaveGuards),f.updateGuards.size||(f.updateGuards=m.updateGuards))),a&&f&&(!m||!Ut(f,m)||!g)&&(f.enterCallbacks[d]||[]).forEach(R=>R(a))},{flush:"post"}),()=>{const a=r.value,f=e.name,d=l.value,g=d&&d.components[f];if(!g)return Xr(n.default,{Component:g,route:a});const m=d.props[f],O=m?m===!0?a.params:typeof m=="function"?m(a):m:null,j=ai(g,Q({},O,t,{onVnodeUnmounted:L=>{L.component.isUnmounted&&(d.instances[f]=null)},ref:c}));return Xr(n.default,{Component:j,route:a})||j}}});function Xr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wf=xf;function Cf(e){const t=gf(e.routes,e),n=e.parseQuery||Yu,s=e.stringifyQuery||kr,r=e.history,o=Jt(),i=Jt(),l=Jt(),c=hl(at);let a=at;Nt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=cs.bind(null,v=>""+v),d=cs.bind(null,Mu),g=cs.bind(null,dn);function m(v,I){let C,D;return wi(v)?(C=t.getRecordMatcher(v),D=I):D=v,t.addRoute(D,C)}function O(v){const I=t.getRecordMatcher(v);I&&t.removeRoute(I)}function R(){return t.getRoutes().map(v=>v.record)}function j(v){return!!t.getRecordMatcher(v)}function L(v,I){if(I=Q({},I||c.value),typeof v=="string"){const p=us(n,v,I.path),_=t.resolve({path:p.path},I),b=r.createHref(p.fullPath);return Q(p,_,{params:g(_.params),hash:dn(p.hash),redirectedFrom:void 0,href:b})}let C;if(v.path!=null)C=Q({},v,{path:us(n,v.path,I.path).path});else{const p=Q({},v.params);for(const _ in p)p[_]==null&&delete p[_];C=Q({},v,{params:d(p)}),I.params=d(I.params)}const D=t.resolve(C,I),q=v.hash||"";D.params=f(g(D.params));const u=Fu(s,Q({},v,{hash:Iu(q),path:D.path})),h=r.createHref(u);return Q({fullPath:u,hash:q,query:s===kr?Xu(v.query):v.query||{}},D,{redirectedFrom:void 0,href:h})}function T(v){return typeof v=="string"?us(n,v,c.value.path):Q({},v)}function N(v,I){if(a!==v)return kt(oe.NAVIGATION_CANCELLED,{from:I,to:v})}function S(v){return W(v)}function U(v){return S(Q(T(v),{replace:!0}))}function le(v,I){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:D}=C;let q=typeof D=="function"?D(v,I):D;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=T(q):{path:q},q.params={}),Q({query:v.query,hash:v.hash,params:q.path!=null?{}:v.params},q)}}function W(v,I){const C=a=L(v),D=c.value,q=v.state,u=v.force,h=v.replace===!0,p=le(C,D);if(p)return W(Q(T(p),{state:typeof p=="object"?Q({},q,p.state):q,force:u,replace:h}),I||C);const _=C;_.redirectedFrom=I;let b;return!u&&ju(s,D,C)&&(b=kt(oe.NAVIGATION_DUPLICATED,{to:_,from:D}),Fe(D,D,!0,!1)),(b?Promise.resolve(b):re(_,D)).catch(y=>Ye(y)?Ye(y,oe.NAVIGATION_GUARD_REDIRECT)?y:ft(y):z(y,_,D)).then(y=>{if(y){if(Ye(y,oe.NAVIGATION_GUARD_REDIRECT))return W(Q({replace:h},T(y.to),{state:typeof y.to=="object"?Q({},q,y.to.state):q,force:u}),I||_)}else y=Ce(_,D,!0,h,q);return me(_,D,y),y})}function K(v,I){const C=N(v,I);return C?Promise.reject(C):Promise.resolve()}function G(v){const I=Ot.values().next().value;return I&&typeof I.runWithContext=="function"?I.runWithContext(v):v()}function re(v,I){let C;const[D,q,u]=ef(v,I);C=as(D.reverse(),"beforeRouteLeave",v,I);for(const p of D)p.leaveGuards.forEach(_=>{C.push(pt(_,v,I))});const h=K.bind(null,v,I);return C.push(h),Ne(C).then(()=>{C=[];for(const p of o.list())C.push(pt(p,v,I));return C.push(h),Ne(C)}).then(()=>{C=as(q,"beforeRouteUpdate",v,I);for(const p of q)p.updateGuards.forEach(_=>{C.push(pt(_,v,I))});return C.push(h),Ne(C)}).then(()=>{C=[];for(const p of u)if(p.beforeEnter)if(Ve(p.beforeEnter))for(const _ of p.beforeEnter)C.push(pt(_,v,I));else C.push(pt(p.beforeEnter,v,I));return C.push(h),Ne(C)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),C=as(u,"beforeRouteEnter",v,I,G),C.push(h),Ne(C))).then(()=>{C=[];for(const p of i.list())C.push(pt(p,v,I));return C.push(h),Ne(C)}).catch(p=>Ye(p,oe.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function me(v,I,C){l.list().forEach(D=>G(()=>D(v,I,C)))}function Ce(v,I,C,D,q){const u=N(v,I);if(u)return u;const h=I===at,p=Nt?history.state:{};C&&(D||h?r.replace(v.fullPath,Q({scroll:h&&p&&p.scroll},q)):r.push(v.fullPath,q)),c.value=v,Fe(v,I,C,h),ft()}let Ee;function _t(){Ee||(Ee=r.listen((v,I,C)=>{if(!yt.listening)return;const D=L(v),q=le(D,yt.currentRoute.value);if(q){W(Q(q,{replace:!0,force:!0}),D).catch(on);return}a=D;const u=c.value;Nt&&qu(Ur(u.fullPath,C.delta),Qn()),re(D,u).catch(h=>Ye(h,oe.NAVIGATION_ABORTED|oe.NAVIGATION_CANCELLED)?h:Ye(h,oe.NAVIGATION_GUARD_REDIRECT)?(W(Q(T(h.to),{force:!0}),D).then(p=>{Ye(p,oe.NAVIGATION_ABORTED|oe.NAVIGATION_DUPLICATED)&&!C.delta&&C.type===xs.pop&&r.go(-1,!1)}).catch(on),Promise.reject()):(C.delta&&r.go(-C.delta,!1),z(h,D,u))).then(h=>{h=h||Ce(D,u,!1),h&&(C.delta&&!Ye(h,oe.NAVIGATION_CANCELLED)?r.go(-C.delta,!1):C.type===xs.pop&&Ye(h,oe.NAVIGATION_ABORTED|oe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),me(D,u,h)}).catch(on)}))}let ut=Jt(),se=Jt(),B;function z(v,I,C){ft(v);const D=se.list();return D.length?D.forEach(q=>q(v,I,C)):console.error(v),Promise.reject(v)}function ze(){return B&&c.value!==at?Promise.resolve():new Promise((v,I)=>{ut.add([v,I])})}function ft(v){return B||(B=!v,_t(),ut.list().forEach(([I,C])=>v?C(v):I()),ut.reset()),v}function Fe(v,I,C,D){const{scrollBehavior:q}=e;if(!Nt||!q)return Promise.resolve();const u=!C&&$u(Ur(v.fullPath,0))||(D||!C)&&history.state&&history.state.scroll||null;return Gn().then(()=>q(v,I,u)).then(h=>h&&Wu(h)).catch(h=>z(h,v,I))}const Se=v=>r.go(v);let Ct;const Ot=new Set,yt={currentRoute:c,listening:!0,addRoute:m,removeRoute:O,clearRoutes:t.clearRoutes,hasRoute:j,getRoutes:R,resolve:L,options:e,push:S,replace:U,go:Se,back:()=>Se(-1),forward:()=>Se(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:se.add,isReady:ze,install(v){v.component("RouterLink",Sf),v.component("RouterView",wf),v.config.globalProperties.$router=yt,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>Rt(c)}),Nt&&!Ct&&c.value===at&&(Ct=!0,S(r.location).catch(D=>{}));const I={};for(const D in at)Object.defineProperty(I,D,{get:()=>c.value[D],enumerable:!0});v.provide(Yn,yt),v.provide(Js,xo(I)),v.provide(Cs,c);const C=v.unmount;Ot.add(v),v.unmount=function(){Ot.delete(v),Ot.size<1&&(a=at,Ee&&Ee(),Ee=null,c.value=at,Ct=!1,B=!1),C()}}};function Ne(v){return v.reduce((I,C)=>I.then(()=>G(C)),Promise.resolve())}return yt}function jf(){return De(Yn)}function Hf(e){return De(Js)}const Ii=Cf({history:rf(),routes:[{path:"/login",name:"login",component:()=>he(()=>import("./LoginView-Do3PQjab.js"),[]),meta:{guest:!0}},{path:"/register",name:"register-org",component:()=>he(()=>import("./RegisterOrgView-BLP8qTxS.js"),[]),meta:{guest:!0}},{path:"/admin",name:"admin",component:()=>he(()=>import("./AdminDashboardView-B1X380mB.js"),[]),meta:{requiresAuth:!0}},{path:"/",component:()=>he(()=>import("./AppLayout-Dn1Dax5w.js"),[]),meta:{requiresAuth:!0},children:[{path:"",name:"dashboard",component:()=>he(()=>import("./DashboardView-Dm3JX8-R.js"),[])},{path:"orders",name:"orders",component:()=>he(()=>import("./OrdersView-mynFcmCT.js"),[])},{path:"orders/:id",name:"order-detail",component:()=>he(()=>import("./OrderDetailView-BOsK7PdF.js"),[])},{path:"users",name:"users",component:()=>he(()=>import("./UsersView-D-cYRxCO.js"),[]),meta:{roles:["chef","disponent"]}},{path:"availability",name:"availability",component:()=>he(()=>import("./AvailabilityView-B7DXJOIF.js"),[])},{path:"timesheets",name:"timesheets",component:()=>he(()=>import("./TimesheetsView-icu2yWhU.js"),[])},{path:"settings",name:"settings",component:()=>he(()=>import("./SettingsView-Dui31Esj.js"),[])},{path:"modules",name:"modules",component:()=>he(()=>import("./ModulesView-FSR3_RHO.js"),[]),meta:{roles:["chef"]}},{path:"partnerships",name:"partnerships",component:()=>he(()=>import("./PartnershipsView-B4wJavhc.js"),[])},{path:"help",name:"help",component:()=>he(()=>import("./HelpView-D57TqZOy.js"),[])},{path:"qualifications",name:"qualifications",component:()=>he(()=>import("./QualificationsView-HIWg4xhg.js"),[])},{path:"objects",name:"objects",component:()=>he(()=>import("./ObjectsView-CqpXdUlY.js"),[])}]}]});Ii.beforeEach(async(e,t,n)=>{var l;const s=yi();!s.isAuthenticated&&s.hasStoredToken&&await s.fetchCurrentUser();const r=e.matched.some(c=>c.meta.requiresAuth),o=e.matched.some(c=>c.meta.guest),i=e.meta.roles;r&&!s.isAuthenticated?n({name:"login",query:{redirect:e.fullPath}}):o&&s.isAuthenticated?n({name:"dashboard"}):i&&!i.includes(((l=s.user)==null?void 0:l.role)||"")?n({name:"dashboard"}):n()});const zs=iu(yu);zs.use(uu());zs.use(Ii);zs.mount("#app");export{Nf as A,Lf as B,Ze as F,li as a,Tf as b,If as c,Ks as d,Df as e,jf as f,Hf as g,Zt as h,we as i,xl as j,ce as k,Wl as l,$t as m,Ns as n,si as o,Ac as p,jo as q,Dt as r,Vf as s,Wi as t,yi as u,Mf as v,Ff as w,Pf as x,Rt as y,oi as z}; + */let tf=()=>location.protocol+"//"+location.host;function Oi(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,l=r.slice(i);return l[0]!=="/"&&(l="/"+l),jr(l,"")}return jr(n,e)+s+r}function nf(e,t,n,s){let r=[],o=[],i=null;const l=({state:g})=>{const m=Oi(e,location),O=n.value,R=t.value;let j=0;if(g){if(n.value=m,t.value=g,i&&i===O){i=null;return}j=R?g.position-R.position:0}else s(m);r.forEach(L=>{L(n.value,O,{delta:j,type:xs.pop,direction:j?j>0?fs.forward:fs.back:fs.unknown})})};function c(){i=n.value}function a(g){r.push(g);const m=()=>{const O=r.indexOf(g);O>-1&&r.splice(O,1)};return o.push(m),m}function f(){if(document.visibilityState==="hidden"){const{history:g}=window;if(!g.state)return;g.replaceState(Q({},g.state,{scroll:Qn()}),"")}}function d(){for(const g of o)g();o=[],window.removeEventListener("popstate",l),window.removeEventListener("pagehide",f),document.removeEventListener("visibilitychange",f)}return window.addEventListener("popstate",l),window.addEventListener("pagehide",f),document.addEventListener("visibilitychange",f),{pauseListeners:c,listen:a,destroy:d}}function Kr(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?Qn():null}}function sf(e){const{history:t,location:n}=window,s={value:Oi(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,a,f){const d=e.indexOf("#"),g=d>-1?(n.host&&document.querySelector("base")?e:e.slice(d))+c:tf()+e+c;try{t[f?"replaceState":"pushState"](a,"",g),r.value=a}catch(m){console.error(m),n[f?"replace":"assign"](g)}}function i(c,a){o(c,Q({},t.state,Kr(r.value.back,c,r.value.forward,!0),a,{position:r.value.position}),!0),s.value=c}function l(c,a){const f=Q({},r.value,t.state,{forward:c,scroll:Qn()});o(f.current,f,!0),o(c,Q({},Kr(s.value,c,null),{position:f.position+1},a),!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function rf(e){e=ku(e);const t=sf(e),n=nf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=Q({location:"",base:e,go:s,createHref:Ku.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let St=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var fe=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(fe||{});const of={type:St.Static,value:""},lf=/[a-zA-Z0-9_]/;function cf(e){if(!e)return[[]];if(e==="/")return[[of]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(m){throw new Error(`ERR (${n})/"${a}": ${m}`)}let n=fe.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,a="",f="";function d(){a&&(n===fe.Static?o.push({type:St.Static,value:a}):n===fe.Param||n===fe.ParamRegExp||n===fe.ParamRegExpEnd?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:St.Param,value:a,regexp:f,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function g(){a+=c}for(;lt.length?t.length===1&&t[0]===ye.Static+ye.Segment?1:-1:0}function Ti(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const df={strict:!1,end:!0,sensitive:!1};function pf(e,t,n){const s=af(cf(e.path),n),r=Q(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function gf(e,t){const n=[],s=new Map;t=Fr(df,t);function r(d){return s.get(d)}function o(d,g,m){const O=!m,R=$r(d);R.aliasOf=m&&m.record;const j=Fr(t,d),L=[R];if("alias"in d){const S=typeof d.alias=="string"?[d.alias]:d.alias;for(const U of S)L.push($r(Q({},R,{components:m?m.record.components:R.components,path:U,aliasOf:m?m.record:R})))}let T,N;for(const S of L){const{path:U}=S;if(g&&U[0]!=="/"){const le=g.record.path,W=le[le.length-1]==="/"?"":"/";S.path=g.record.path+(U&&W+U)}if(T=pf(S,g,j),m?m.alias.push(T):(N=N||T,N!==T&&N.alias.push(T),O&&d.name&&!Jr(T)&&i(d.name)),Pi(T)&&c(T),R.children){const le=R.children;for(let W=0;W{i(N)}:on}function i(d){if(wi(d)){const g=s.get(d);g&&(s.delete(d),n.splice(n.indexOf(g),1),g.children.forEach(i),g.alias.forEach(i))}else{const g=n.indexOf(d);g>-1&&(n.splice(g,1),d.record.name&&s.delete(d.record.name),d.children.forEach(i),d.alias.forEach(i))}}function l(){return n}function c(d){const g=yf(d,n);n.splice(g,0,d),d.record.name&&!Jr(d)&&s.set(d.record.name,d)}function a(d,g){let m,O={},R,j;if("name"in d&&d.name){if(m=s.get(d.name),!m)throw kt(oe.MATCHER_NOT_FOUND,{location:d});j=m.record.name,O=Q(qr(g.params,m.keys.filter(N=>!N.optional).concat(m.parent?m.parent.keys.filter(N=>N.optional):[]).map(N=>N.name)),d.params&&qr(d.params,m.keys.map(N=>N.name))),R=m.stringify(O)}else if(d.path!=null)R=d.path,m=n.find(N=>N.re.test(R)),m&&(O=m.parse(R),j=m.record.name);else{if(m=g.name?s.get(g.name):n.find(N=>N.re.test(g.path)),!m)throw kt(oe.MATCHER_NOT_FOUND,{location:d,currentLocation:g});j=m.record.name,O=Q({},g.params,d.params),R=m.stringify(O)}const L=[];let T=m;for(;T;)L.unshift(T.record),T=T.parent;return{name:j,path:R,params:O,matched:L,meta:_f(L)}}e.forEach(d=>o(d));function f(){n.length=0,s.clear()}return{addRoute:o,resolve:a,removeRoute:i,clearRoutes:f,getRoutes:l,getRecordMatcher:r}}function qr(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function $r(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:mf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function mf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Jr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function _f(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function yf(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;Ti(e,t[o])<0?s=o:n=o+1}const r=vf(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function vf(e){let t=e;for(;t=t.parent;)if(Pi(t)&&Ti(e,t)===0)return t}function Pi({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zr(e){const t=De(Yn),n=De(Js),s=ce(()=>{const c=Rt(e.to);return t.resolve(c)}),r=ce(()=>{const{matched:c}=s.value,{length:a}=c,f=c[a-1],d=n.matched;if(!f||!d.length)return-1;const g=d.findIndex(Ut.bind(null,f));if(g>-1)return g;const m=Qr(c[a-2]);return a>1&&Qr(f)===m&&d[d.length-1].path!==m?d.findIndex(Ut.bind(null,c[a-2])):g}),o=ce(()=>r.value>-1&&Rf(n.params,s.value.params)),i=ce(()=>r.value>-1&&r.value===n.matched.length-1&&xi(n.params,s.value.params));function l(c={}){if(Af(c)){const a=t[Rt(e.replace)?"replace":"push"](Rt(e.to)).catch(on);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>a),a}return Promise.resolve()}return{route:s,href:ce(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function bf(e){return e.length===1?e[0]:e}const Ef=Ks({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:zr,setup(e,{slots:t}){const n=gn(zr(e)),{options:s}=De(Yn),r=ce(()=>({[Yr(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[Yr(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&bf(t.default(n));return e.custom?o:ai("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Sf=Ef;function Af(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Rf(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Ve(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function Qr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Yr=(e,t,n)=>e??t??n,xf=Ks({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=De(Cs),r=ce(()=>e.route||s.value),o=De(Br,0),i=ce(()=>{let a=Rt(o);const{matched:f}=r.value;let d;for(;(d=f[a])&&!d.components;)a++;return a}),l=ce(()=>r.value.matched[i.value]);Sn(Br,ce(()=>i.value+1)),Sn(Zu,l),Sn(Cs,r);const c=Dt();return Zt(()=>[c.value,l.value,e.name],([a,f,d],[g,m,O])=>{f&&(f.instances[d]=a,m&&m!==f&&a&&a===g&&(f.leaveGuards.size||(f.leaveGuards=m.leaveGuards),f.updateGuards.size||(f.updateGuards=m.updateGuards))),a&&f&&(!m||!Ut(f,m)||!g)&&(f.enterCallbacks[d]||[]).forEach(R=>R(a))},{flush:"post"}),()=>{const a=r.value,f=e.name,d=l.value,g=d&&d.components[f];if(!g)return Xr(n.default,{Component:g,route:a});const m=d.props[f],O=m?m===!0?a.params:typeof m=="function"?m(a):m:null,j=ai(g,Q({},O,t,{onVnodeUnmounted:L=>{L.component.isUnmounted&&(d.instances[f]=null)},ref:c}));return Xr(n.default,{Component:j,route:a})||j}}});function Xr(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const wf=xf;function Cf(e){const t=gf(e.routes,e),n=e.parseQuery||Yu,s=e.stringifyQuery||kr,r=e.history,o=Jt(),i=Jt(),l=Jt(),c=hl(at);let a=at;Nt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=cs.bind(null,v=>""+v),d=cs.bind(null,Mu),g=cs.bind(null,dn);function m(v,I){let C,D;return wi(v)?(C=t.getRecordMatcher(v),D=I):D=v,t.addRoute(D,C)}function O(v){const I=t.getRecordMatcher(v);I&&t.removeRoute(I)}function R(){return t.getRoutes().map(v=>v.record)}function j(v){return!!t.getRecordMatcher(v)}function L(v,I){if(I=Q({},I||c.value),typeof v=="string"){const p=us(n,v,I.path),_=t.resolve({path:p.path},I),b=r.createHref(p.fullPath);return Q(p,_,{params:g(_.params),hash:dn(p.hash),redirectedFrom:void 0,href:b})}let C;if(v.path!=null)C=Q({},v,{path:us(n,v.path,I.path).path});else{const p=Q({},v.params);for(const _ in p)p[_]==null&&delete p[_];C=Q({},v,{params:d(p)}),I.params=d(I.params)}const D=t.resolve(C,I),q=v.hash||"";D.params=f(g(D.params));const u=Fu(s,Q({},v,{hash:Iu(q),path:D.path})),h=r.createHref(u);return Q({fullPath:u,hash:q,query:s===kr?Xu(v.query):v.query||{}},D,{redirectedFrom:void 0,href:h})}function T(v){return typeof v=="string"?us(n,v,c.value.path):Q({},v)}function N(v,I){if(a!==v)return kt(oe.NAVIGATION_CANCELLED,{from:I,to:v})}function S(v){return W(v)}function U(v){return S(Q(T(v),{replace:!0}))}function le(v,I){const C=v.matched[v.matched.length-1];if(C&&C.redirect){const{redirect:D}=C;let q=typeof D=="function"?D(v,I):D;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=T(q):{path:q},q.params={}),Q({query:v.query,hash:v.hash,params:q.path!=null?{}:v.params},q)}}function W(v,I){const C=a=L(v),D=c.value,q=v.state,u=v.force,h=v.replace===!0,p=le(C,D);if(p)return W(Q(T(p),{state:typeof p=="object"?Q({},q,p.state):q,force:u,replace:h}),I||C);const _=C;_.redirectedFrom=I;let b;return!u&&ju(s,D,C)&&(b=kt(oe.NAVIGATION_DUPLICATED,{to:_,from:D}),Fe(D,D,!0,!1)),(b?Promise.resolve(b):re(_,D)).catch(y=>Ye(y)?Ye(y,oe.NAVIGATION_GUARD_REDIRECT)?y:ft(y):z(y,_,D)).then(y=>{if(y){if(Ye(y,oe.NAVIGATION_GUARD_REDIRECT))return W(Q({replace:h},T(y.to),{state:typeof y.to=="object"?Q({},q,y.to.state):q,force:u}),I||_)}else y=Ce(_,D,!0,h,q);return me(_,D,y),y})}function K(v,I){const C=N(v,I);return C?Promise.reject(C):Promise.resolve()}function G(v){const I=Ot.values().next().value;return I&&typeof I.runWithContext=="function"?I.runWithContext(v):v()}function re(v,I){let C;const[D,q,u]=ef(v,I);C=as(D.reverse(),"beforeRouteLeave",v,I);for(const p of D)p.leaveGuards.forEach(_=>{C.push(pt(_,v,I))});const h=K.bind(null,v,I);return C.push(h),Ne(C).then(()=>{C=[];for(const p of o.list())C.push(pt(p,v,I));return C.push(h),Ne(C)}).then(()=>{C=as(q,"beforeRouteUpdate",v,I);for(const p of q)p.updateGuards.forEach(_=>{C.push(pt(_,v,I))});return C.push(h),Ne(C)}).then(()=>{C=[];for(const p of u)if(p.beforeEnter)if(Ve(p.beforeEnter))for(const _ of p.beforeEnter)C.push(pt(_,v,I));else C.push(pt(p.beforeEnter,v,I));return C.push(h),Ne(C)}).then(()=>(v.matched.forEach(p=>p.enterCallbacks={}),C=as(u,"beforeRouteEnter",v,I,G),C.push(h),Ne(C))).then(()=>{C=[];for(const p of i.list())C.push(pt(p,v,I));return C.push(h),Ne(C)}).catch(p=>Ye(p,oe.NAVIGATION_CANCELLED)?p:Promise.reject(p))}function me(v,I,C){l.list().forEach(D=>G(()=>D(v,I,C)))}function Ce(v,I,C,D,q){const u=N(v,I);if(u)return u;const h=I===at,p=Nt?history.state:{};C&&(D||h?r.replace(v.fullPath,Q({scroll:h&&p&&p.scroll},q)):r.push(v.fullPath,q)),c.value=v,Fe(v,I,C,h),ft()}let Ee;function _t(){Ee||(Ee=r.listen((v,I,C)=>{if(!yt.listening)return;const D=L(v),q=le(D,yt.currentRoute.value);if(q){W(Q(q,{replace:!0,force:!0}),D).catch(on);return}a=D;const u=c.value;Nt&&qu(Ur(u.fullPath,C.delta),Qn()),re(D,u).catch(h=>Ye(h,oe.NAVIGATION_ABORTED|oe.NAVIGATION_CANCELLED)?h:Ye(h,oe.NAVIGATION_GUARD_REDIRECT)?(W(Q(T(h.to),{force:!0}),D).then(p=>{Ye(p,oe.NAVIGATION_ABORTED|oe.NAVIGATION_DUPLICATED)&&!C.delta&&C.type===xs.pop&&r.go(-1,!1)}).catch(on),Promise.reject()):(C.delta&&r.go(-C.delta,!1),z(h,D,u))).then(h=>{h=h||Ce(D,u,!1),h&&(C.delta&&!Ye(h,oe.NAVIGATION_CANCELLED)?r.go(-C.delta,!1):C.type===xs.pop&&Ye(h,oe.NAVIGATION_ABORTED|oe.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),me(D,u,h)}).catch(on)}))}let ut=Jt(),se=Jt(),B;function z(v,I,C){ft(v);const D=se.list();return D.length?D.forEach(q=>q(v,I,C)):console.error(v),Promise.reject(v)}function ze(){return B&&c.value!==at?Promise.resolve():new Promise((v,I)=>{ut.add([v,I])})}function ft(v){return B||(B=!v,_t(),ut.list().forEach(([I,C])=>v?C(v):I()),ut.reset()),v}function Fe(v,I,C,D){const{scrollBehavior:q}=e;if(!Nt||!q)return Promise.resolve();const u=!C&&$u(Ur(v.fullPath,0))||(D||!C)&&history.state&&history.state.scroll||null;return Gn().then(()=>q(v,I,u)).then(h=>h&&Wu(h)).catch(h=>z(h,v,I))}const Se=v=>r.go(v);let Ct;const Ot=new Set,yt={currentRoute:c,listening:!0,addRoute:m,removeRoute:O,clearRoutes:t.clearRoutes,hasRoute:j,getRoutes:R,resolve:L,options:e,push:S,replace:U,go:Se,back:()=>Se(-1),forward:()=>Se(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:se.add,isReady:ze,install(v){v.component("RouterLink",Sf),v.component("RouterView",wf),v.config.globalProperties.$router=yt,Object.defineProperty(v.config.globalProperties,"$route",{enumerable:!0,get:()=>Rt(c)}),Nt&&!Ct&&c.value===at&&(Ct=!0,S(r.location).catch(D=>{}));const I={};for(const D in at)Object.defineProperty(I,D,{get:()=>c.value[D],enumerable:!0});v.provide(Yn,yt),v.provide(Js,xo(I)),v.provide(Cs,c);const C=v.unmount;Ot.add(v),v.unmount=function(){Ot.delete(v),Ot.size<1&&(a=at,Ee&&Ee(),Ee=null,c.value=at,Ct=!1,B=!1),C()}}};function Ne(v){return v.reduce((I,C)=>I.then(()=>G(C)),Promise.resolve())}return yt}function jf(){return De(Yn)}function Hf(e){return De(Js)}const Ii=Cf({history:rf("/app/"),routes:[{path:"/login",name:"login",component:()=>he(()=>import("./LoginView-B3ZkVUmI.js"),[]),meta:{guest:!0}},{path:"/register",name:"register-org",component:()=>he(()=>import("./RegisterOrgView-BMNvmbZf.js"),[]),meta:{guest:!0}},{path:"/admin",name:"admin",component:()=>he(()=>import("./AdminDashboardView-BdNbeNlS.js"),[]),meta:{requiresAuth:!0}},{path:"/",component:()=>he(()=>import("./AppLayout-CUQVekGY.js"),[]),meta:{requiresAuth:!0},children:[{path:"",name:"dashboard",component:()=>he(()=>import("./DashboardView-Dgd7yCO4.js"),[])},{path:"orders",name:"orders",component:()=>he(()=>import("./OrdersView-BHgpWVUB.js"),[])},{path:"orders/:id",name:"order-detail",component:()=>he(()=>import("./OrderDetailView-DnnyUUXt.js"),[])},{path:"users",name:"users",component:()=>he(()=>import("./UsersView-DakGKZFX.js"),[]),meta:{roles:["chef","disponent"]}},{path:"availability",name:"availability",component:()=>he(()=>import("./AvailabilityView-ZayOQ5mL.js"),[])},{path:"timesheets",name:"timesheets",component:()=>he(()=>import("./TimesheetsView-E2w8gjVM.js"),[])},{path:"settings",name:"settings",component:()=>he(()=>import("./SettingsView-C9a1ZS9c.js"),[])},{path:"modules",name:"modules",component:()=>he(()=>import("./ModulesView-BE2FPScI.js"),[]),meta:{roles:["chef"]}},{path:"partnerships",name:"partnerships",component:()=>he(()=>import("./PartnershipsView-CFhHqtpc.js"),[])},{path:"help",name:"help",component:()=>he(()=>import("./HelpView-DPdUNOsd.js"),[])},{path:"qualifications",name:"qualifications",component:()=>he(()=>import("./QualificationsView-p_JlFp7F.js"),[])},{path:"objects",name:"objects",component:()=>he(()=>import("./ObjectsView-3IknzInA.js"),[])}]}]});Ii.beforeEach(async(e,t,n)=>{var l;const s=yi();!s.isAuthenticated&&s.hasStoredToken&&await s.fetchCurrentUser();const r=e.matched.some(c=>c.meta.requiresAuth),o=e.matched.some(c=>c.meta.guest),i=e.meta.roles;r&&!s.isAuthenticated?n({name:"login",query:{redirect:e.fullPath}}):o&&s.isAuthenticated?n({name:"dashboard"}):i&&!i.includes(((l=s.user)==null?void 0:l.role)||"")?n({name:"dashboard"}):n()});const zs=iu(yu);zs.use(uu());zs.use(Ii);zs.mount("#app");export{Nf as A,Lf as B,Ze as F,li as a,Tf as b,If as c,Ks as d,Df as e,jf as f,Hf as g,Zt as h,we as i,xl as j,ce as k,Wl as l,$t as m,Ns as n,si as o,Ac as p,jo as q,Dt as r,Vf as s,Wi as t,yi as u,Mf as v,Ff as w,Pf as x,Rt as y,oi as z}; diff --git a/dist/favicon.svg b/dist/favicon.svg new file mode 100644 index 0000000..2a982e8 --- /dev/null +++ b/dist/favicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + 🔐 + diff --git a/dist/index.html b/dist/index.html index 506ec4b..c942cf5 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2,11 +2,24 @@ - - + + SeCu - Mitarbeiterverwaltung - - + + + + + + + + + + + + + + +
diff --git a/dist/manifest.json b/dist/manifest.json new file mode 100644 index 0000000..8ac80e2 --- /dev/null +++ b/dist/manifest.json @@ -0,0 +1,25 @@ +{ + "name": "SeCu - Mitarbeiterverwaltung", + "short_name": "SeCu", + "description": "Deine Aufträge, Stundenzettel und Dienstpläne", + "start_url": "/app/", + "scope": "/app/", + "display": "standalone", + "background_color": "#667eea", + "theme_color": "#667eea", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/app/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/app/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/index.html b/index.html index 09ff0c9..d83e139 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,22 @@ - - + + SeCu - Mitarbeiterverwaltung + + + + + + + + + + + + +
diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..2a982e8 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + 🔐 + diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..8ac80e2 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,25 @@ +{ + "name": "SeCu - Mitarbeiterverwaltung", + "short_name": "SeCu", + "description": "Deine Aufträge, Stundenzettel und Dienstpläne", + "start_url": "/app/", + "scope": "/app/", + "display": "standalone", + "background_color": "#667eea", + "theme_color": "#667eea", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/app/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/app/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/src/router/index.ts b/src/router/index.ts index f9fa781..5af1ddf 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -2,7 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router' import { useAuthStore } from '@/stores/auth' const router = createRouter({ - history: createWebHistory(), + history: createWebHistory('/app/'), routes: [ { path: '/login', diff --git a/vite.config.ts b/vite.config.ts index dc2bc26..9b22465 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { resolve } from 'path' export default defineConfig({ plugins: [vue()], + base: '/app/', resolve: { alias: { '@': resolve(__dirname, 'src'),