- LockScreen component with PIN pad - SecuritySettings for setup - Biometric (WebAuthn) support - PIN fallback (6 digits) - Auto-lock after 30s in background - Lock on app start if enabled - Settings page integration
2 lines
5.5 KiB
JavaScript
2 lines
5.5 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 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};
|