Files
secu-frontend/dist/assets/AppLayout-M3P9X3hb.js
OpenClaw aa0239abca feat: Add i18n with 7 languages (DE, EN, ES, FR, AR, RU, PL)
- Added vue-i18n with language switcher in header
- Flag icons with language codes dropdown
- RTL support for Arabic
- Translated all navigation, auth, and module labels
- Language preference saved to localStorage
2026-03-13 04:51:12 +00:00

2 lines
8.4 KiB
JavaScript

import{d as w,y as S,u as L,c,n as _,a as e,F as B,x as j,t as o,z as n,k as A,A as E,j as M,l as z,g as N,o as d,w as O,i as f,T,r as k,e as $,S as C,B as V,p as D,f as I}from"./index-CgM2qJ96.js";const R={class:"mt-6 px-3"},U={class:"text-xl"},q={class:"font-medium"},F={class:"absolute bottom-0 left-0 right-0 p-4 border-t border-gray-200 dark:border-gray-700"},P={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"},W={class:"text-primary-600 dark:text-primary-300 font-medium"},G={class:"flex-1 min-w-0"},J={class:"text-sm font-medium text-gray-900 dark:text-white truncate"},K={class:"text-xs text-gray-500 dark:text-gray-400 capitalize"},Q=w({__name:"AppSidebar",props:{open:{type:Boolean}},emits:["close"],setup(x){const l=N(),{t}=S(),r=L(),u=A(()=>{const s=[{name:t("nav.dashboard"),href:"/",icon:"📊"},{name:t("nav.orders"),href:"/orders",icon:"📋"}];return r.canManageUsers&&s.push({name:t("nav.users"),href:"/users",icon:"👥"},{name:t("nav.shifts"),href:"/shifts",icon:"📅"}),s.push({name:t("nav.availability"),href:"/availability",icon:"🗓️"},{name:t("nav.timesheets"),href:"/timesheets",icon:"⏱️"},{name:t("nav.qualifications"),href:"/qualifications",icon:"🎓"},{name:t("nav.objects"),href:"/objects",icon:"🏢"},{name:t("nav.patrols"),href:"/patrols",icon:"📍"},{name:t("nav.incidents"),href:"/incidents",icon:"🚨"},{name:t("nav.documents"),href:"/documents",icon:"📁"}),r.canManageUsers&&s.push({name:t("nav.vehicles"),href:"/vehicles",icon:"🚗"},{name:t("nav.customers"),href:"/customers",icon:"🤝"}),r.isChef&&s.push({name:t("nav.billing"),href:"/billing",icon:"💰"},{name:t("nav.modules"),href:"/modules",icon:"⚙️"}),s.push({name:t("nav.settings"),href:"/settings",icon:"🔧"},{name:t("nav.help"),href:"/help",icon:"📚"}),s});function g(s){return s==="/"?l.path==="/":l.path.startsWith(s)}return(s,a)=>{var m,v,h,y,p;const i=z("router-link");return d(),c("aside",{class:_(["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"])},[a[1]||(a[1]=e("div",{class:"h-16 flex items-center px-6 border-b border-gray-200 dark:border-gray-700"},[e("span",{class:"text-2xl font-bold text-primary-600"},"🔐 SeCu")],-1)),e("nav",R,[(d(!0),c(B,null,j(u.value,b=>(d(),E(i,{key:b.href,to:b.href,class:_(["flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors",g(b.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:a[0]||(a[0]=_e=>s.$emit("close"))},{default:M(()=>[e("span",U,o(b.icon),1),e("span",q,o(b.name),1)]),_:2},1032,["to","class"]))),128))]),e("div",F,[e("div",P,[e("div",H,[e("span",W,o((v=(m=n(r).user)==null?void 0:m.first_name)==null?void 0:v[0])+o((y=(h=n(r).user)==null?void 0:h.last_name)==null?void 0:y[0]),1)]),e("div",G,[e("p",J,o(n(r).fullName),1),e("p",K,o((p=n(r).user)==null?void 0:p.role),1)])])])],2)}}}),X={class:"language-switcher relative"},Y=["title"],Z={class:"text-lg"},ee={class:"text-xs font-medium text-gray-600 dark:text-gray-300 uppercase"},te={key:0,class:"absolute right-0 mt-2 w-44 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-1 z-50"},se=["onClick"],ae={class:"text-lg"},re={class:"flex-1 text-left"},oe={key:0,class:"w-4 h-4 text-primary-600 dark:text-primary-400",fill:"currentColor",viewBox:"0 0 20 20"},ne=w({__name:"LanguageSwitcher",setup(x){const{locale:l}=S(),t=k(!1),r=A(()=>C.find(s=>s.code===l.value)||C[0]);function u(s){V(s),t.value=!1}function g(s){s.target.closest(".language-switcher")||(t.value=!1)}return typeof window<"u"&&document.addEventListener("click",g),(s,a)=>(d(),c("div",X,[e("button",{class:"flex items-center gap-1.5 px-2 py-1.5 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",onClick:a[0]||(a[0]=O(i=>t.value=!t.value,["stop"])),title:s.$t("settings.language")},[e("span",Z,o(r.value.flag),1),e("span",ee,o(r.value.code),1),(d(),c("svg",{class:_(["w-3 h-3 text-gray-500 transition-transform",{"rotate-180":t.value}]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...a[1]||(a[1]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 9l-7 7-7-7"},null,-1)])],2))],8,Y),f(T,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:M(()=>[t.value?(d(),c("div",te,[(d(!0),c(B,null,j(n(C),i=>(d(),c("button",{key:i.code,class:_(["w-full flex items-center gap-3 px-3 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors",{"bg-primary-50 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400":i.code===n(l),"text-gray-700 dark:text-gray-200":i.code!==n(l)}]),onClick:m=>u(i.code)},[e("span",ae,o(i.flag),1),e("span",re,o(i.name),1),i.code===n(l)?(d(),c("svg",oe,[...a[2]||(a[2]=[e("path",{"fill-rule":"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z","clip-rule":"evenodd"},null,-1)])])):$("",!0)],10,se))),128))])):$("",!0)]),_:1})]))}}),le={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"},ie={class:"flex-1 lg:ml-0"},de={class:"text-lg font-semibold text-gray-900 dark:text-white hidden lg:block"},ce={class:"flex items-center gap-2"},ue=["title"],ge={class:"text-xl"},me={class:"relative"},pe={class:"w-8 h-8 rounded-full bg-primary-100 dark:bg-primary-900 flex items-center justify-center"},fe={class:"text-primary-600 dark:text-primary-300 text-sm font-medium"},ve={class:"hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-200"},he=w({__name:"AppHeader",emits:["toggle-sidebar","logout"],setup(x){const{t:l}=S(),t=L(),r=k(localStorage.getItem("darkMode")==="true"),u=k(!1);function g(){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,a)=>{var m,v,h,y;const i=z("router-link");return d(),c("header",le,[e("button",{class:"lg:hidden p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:a[0]||(a[0]=p=>s.$emit("toggle-sidebar"))},[...a[4]||(a[4]=[e("span",{class:"text-2xl"},"☰",-1)])]),e("div",ie,[e("h1",de,o(n(l)("app.title")),1)]),e("div",ce,[f(ne),e("button",{class:"p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:g,title:r.value?n(l)("settings.lightMode"):n(l)("settings.darkMode")},[e("span",ge,o(r.value?"☀️":"🌙"),1)],8,ue),e("div",me,[e("button",{class:"flex items-center gap-2 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700",onClick:a[1]||(a[1]=p=>u.value=!u.value)},[e("div",pe,[e("span",fe,o((v=(m=n(t).user)==null?void 0:m.first_name)==null?void 0:v[0])+o((y=(h=n(t).user)==null?void 0:h.last_name)==null?void 0:y[0]),1)]),e("span",ve,o(n(t).fullName),1)]),u.value?(d(),c("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:a[3]||(a[3]=p=>u.value=!1)},[f(i,{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:M(()=>[D(" ⚙️ "+o(n(l)("nav.settings")),1)]),_:1}),a[5]||(a[5]=e("hr",{class:"my-1 border-gray-200 dark:border-gray-700"},null,-1)),e("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:a[2]||(a[2]=p=>s.$emit("logout"))}," 🚪 "+o(n(l)("auth.logout")),1)])):$("",!0)])])])}}}),ye={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},be={class:"lg:pl-64"},xe={class:"p-6"},$e=w({__name:"AppLayout",setup(x){const l=L(),t=I(),r=k(!1);async function u(){await l.logout(),t.push("/login")}return(g,s)=>{const a=z("router-view");return d(),c("div",ye,[r.value?(d(),c("div",{key:0,class:"fixed inset-0 z-40 bg-black/50 lg:hidden",onClick:s[0]||(s[0]=i=>r.value=!1)})):$("",!0),f(Q,{open:r.value,onClose:s[1]||(s[1]=i=>r.value=!1)},null,8,["open"]),e("div",be,[f(he,{onToggleSidebar:s[2]||(s[2]=i=>r.value=!r.value),onLogout:u}),e("main",xe,[f(a)])])])}}});export{$e as default};