From 88564852657e19c839948b85562c16588798f07e Mon Sep 17 00:00:00 2001 From: chan Date: Wed, 11 Feb 2026 12:46:09 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20=ED=94=84?= =?UTF-8?q?=EB=A1=A0=ED=8A=B8=EC=97=94=EB=93=9C=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20#243?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adminfront/src/app/routes.tsx | 5 + .../src/components/layout/AppLayout.tsx | 222 ++++++++++-------- adminfront/src/features/auth/LoginPage.tsx | 123 ++++++++++ adminfront/src/lib/adminApi.ts | 20 ++ adminfront/src/locales/en.toml | 2 + adminfront/src/locales/ko.toml | 2 + 6 files changed, 277 insertions(+), 97 deletions(-) create mode 100644 adminfront/src/features/auth/LoginPage.tsx diff --git a/adminfront/src/app/routes.tsx b/adminfront/src/app/routes.tsx index 96bde96f..e4ff81b2 100644 --- a/adminfront/src/app/routes.tsx +++ b/adminfront/src/app/routes.tsx @@ -6,6 +6,7 @@ import AuditLogsPage from "../features/audit/AuditLogsPage"; import AuthPage from "../features/auth/AuthPage"; import DashboardPage from "../features/dashboard/DashboardPage"; import GlobalOverviewPage from "../features/overview/GlobalOverviewPage"; +import LoginPage from "../features/auth/LoginPage"; import TenantGroupCreatePage from "../features/tenant-groups/routes/TenantGroupCreatePage"; import TenantGroupDetailPage from "../features/tenant-groups/routes/TenantGroupDetailPage"; import TenantGroupListPage from "../features/tenant-groups/routes/TenantGroupListPage"; @@ -22,6 +23,10 @@ import UserListPage from "../features/users/UserListPage"; export const router = createBrowserRouter( [ + { + path: "/login", + element: , + }, { path: "/", element: , diff --git a/adminfront/src/components/layout/AppLayout.tsx b/adminfront/src/components/layout/AppLayout.tsx index 5dbf388a..20e07755 100644 --- a/adminfront/src/components/layout/AppLayout.tsx +++ b/adminfront/src/components/layout/AppLayout.tsx @@ -4,107 +4,135 @@ import { Key, KeyRound, LayoutDashboard, - LayoutGrid, - Moon, - NotebookTabs, - ShieldHalf, - Sun, - Users, -} from "lucide-react"; -import { useEffect, useState } from "react"; -import { NavLink, Outlet } from "react-router-dom"; -import { t } from "../../lib/i18n"; -import RoleSwitcher from "./RoleSwitcher"; - -const navItems = [ - { label: "ui.admin.nav.overview", to: "/", icon: LayoutDashboard }, - { - label: "ui.admin.nav.tenant_dashboard", - to: "/dashboard", - icon: ShieldHalf, - }, - { label: "ui.admin.nav.tenant_groups", to: "/tenant-groups", icon: LayoutGrid }, - { label: "ui.admin.nav.tenants", to: "/tenants", icon: Building2 }, - { label: "ui.admin.nav.users", to: "/users", icon: Users }, - { label: "ui.admin.nav.api_keys", to: "/api-keys", icon: Key }, - { label: "ui.admin.nav.audit_logs", to: "/audit-logs", icon: NotebookTabs }, - { label: "ui.admin.nav.auth_guard", to: "/auth", icon: KeyRound }, -]; - -function AppLayout() { - const [theme, setTheme] = useState<"light" | "dark">(() => { - const stored = window.localStorage.getItem("admin_theme"); - return stored === "dark" ? "dark" : "light"; - }); - - useEffect(() => { - const root = document.documentElement; - root.classList.remove("light", "dark"); - if (theme === "light") { - root.classList.add("light"); - } else { - root.classList.add("dark"); - } - window.localStorage.setItem("admin_theme", theme); - }, [theme]); - - const toggleTheme = () => { - setTheme((prev) => (prev === "light" ? "dark" : "light")); - }; - - return ( -
-