Views added: - ShiftsView (Schichtplanung) - PatrolsView (Wächterkontrolle) - IncidentsView (Vorfallberichte) - VehiclesView (Fahrzeuge) - DocumentsView (Dokumente) - CustomersView (Kunden/CRM) - BillingView (Abrechnung) - ObjectsView (enhanced with contacts, instructions) Updated: - Router with all new routes - Sidebar with complete navigation
2 lines
5.9 KiB
JavaScript
2 lines
5.9 KiB
JavaScript
import{d as v,u as _,c as g,n as w,a as t,F as M,x as z,t as n,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 y,e as S,p as N,f as V}from"./index-CWxNv9Fc.js";const B={class:"mt-6 px-3"},E={class:"text-xl"},D={class:"font-medium"},F={class:"absolute bottom-0 left-0 right-0 p-4 border-t border-gray-200 dark:border-gray-700"},O={class:"flex items-center gap-3"},R={class:"w-10 h-10 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},H={class:"text-primary-600 dark:text-primary-300 font-medium"},I={class:"flex-1 min-w-0"},T={class:"text-sm font-medium text-gray-900 dark:text-white truncate"},U={class:"text-xs text-gray-500 dark:text-gray-400 capitalize"},q=v({__name:"AppSidebar",props:{open:{type:Boolean}},emits:["close"],setup(x){const o=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:"👥"},{name:"Schichtplanung",href:"/shifts",icon:"📅"}),s.push({name:"Verfügbarkeit",href:"/availability",icon:"🗓️"},{name:"Stundenzettel",href:"/timesheets",icon:"⏱️"},{name:"Qualifikationen",href:"/qualifications",icon:"🎓"},{name:"Objekte",href:"/objects",icon:"🏢"},{name:"Rundgänge",href:"/patrols",icon:"📍"},{name:"Vorfälle",href:"/incidents",icon:"🚨"},{name:"Dokumente",href:"/documents",icon:"📁"}),r.canManageUsers&&s.push({name:"Fahrzeuge",href:"/vehicles",icon:"🚗"},{name:"Kunden",href:"/customers",icon:"🤝"}),r.isChef&&s.push({name:"Abrechnung",href:"/billing",icon:"💰"},{name:"Module",href:"/modules",icon:"⚙️"}),s.push({name:"Einstellungen",href:"/settings",icon:"🔧"},{name:"Hilfe",href:"/help",icon:"📚"}),s});function c(s){return s==="/"?o.path==="/":o.path.startsWith(s)}return(s,e)=>{var l,p,f,b,u;const m=$("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",x.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",B,[(d(!0),g(M,null,z(a.value,h=>(d(),j(m,{key:h.href,to:h.href,class:w(["flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors",c(h.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",E,n(h.icon),1),t("span",D,n(h.name),1)]),_:2},1032,["to","class"]))),128))]),t("div",F,[t("div",O,[t("div",R,[t("span",H,n((p=(l=i(r).user)==null?void 0:l.first_name)==null?void 0:p[0])+n((b=(f=i(r).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("div",I,[t("p",T,n(i(r).fullName),1),t("p",U,n((u=i(r).user)==null?void 0:u.role),1)])])])],2)}}}),K={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"},Q={class:"flex items-center gap-2"},W={class:"text-xl"},G={class:"relative"},J={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(x){const o=_(),r=k(localStorage.getItem("darkMode")==="true"),a=k(!1);function c(){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 m=$("router-link");return d(),g("header",K,[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",Q,[t("button",{class:"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:c},[t("span",W,n(r.value?"☀️":"🌙"),1)]),t("div",G,[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",J,[t("span",P,n((p=(l=i(o).user)==null?void 0:l.first_name)==null?void 0:p[0])+n((b=(f=i(o).user)==null?void 0:f.last_name)==null?void 0:b[0]),1)]),t("span",X,n(i(o).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)},[y(m,{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(x){const o=_(),r=V(),a=k(!1);async function c(){await o.logout(),r.push("/login")}return(s,e)=>{const m=$("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),y(q,{open:a.value,onClose:e[1]||(e[1]=l=>a.value=!1)},null,8,["open"]),t("div",ee,[y(Y,{onToggleSidebar:e[2]||(e[2]=l=>a.value=!a.value),onLogout:c}),t("main",te,[y(m)])])])}}});export{ae as default};
|