diff --git a/dist/assets/AdminDashboardView-BdNbeNlS.js b/dist/assets/AdminDashboardView-Biz__aWn.js similarity index 99% rename from dist/assets/AdminDashboardView-BdNbeNlS.js rename to dist/assets/AdminDashboardView-Biz__aWn.js index 91c0d15..050b32d 100644 --- a/dist/assets/AdminDashboardView-BdNbeNlS.js +++ b/dist/assets/AdminDashboardView-Biz__aWn.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-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}; +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-OvQoqblD.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-CUQVekGY.js b/dist/assets/AppLayout-B1xnAEtL.js similarity index 98% rename from dist/assets/AppLayout-CUQVekGY.js rename to dist/assets/AppLayout-B1xnAEtL.js index edac834..44f9b59 100644 --- a/dist/assets/AppLayout-CUQVekGY.js +++ b/dist/assets/AppLayout-B1xnAEtL.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-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}; +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-OvQoqblD.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-ZayOQ5mL.js b/dist/assets/AvailabilityView-CaUTc8n0.js similarity index 97% rename from dist/assets/AvailabilityView-ZayOQ5mL.js rename to dist/assets/AvailabilityView-CaUTc8n0.js index a3d7df0..9587fbf 100644 --- a/dist/assets/AvailabilityView-ZayOQ5mL.js +++ b/dist/assets/AvailabilityView-CaUTc8n0.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-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('