From d0e4f8f86a3413e975ddc9fd0c1d564624d4d134 Mon Sep 17 00:00:00 2001 From: chan Date: Fri, 20 Mar 2026 10:58:52 +0900 Subject: [PATCH] =?UTF-8?q?adminfront=20ui=20=EA=B0=9C=ED=8E=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/layout/AppLayout.tsx | 63 ++-- .../src/features/api-keys/ApiKeyListPage.tsx | 9 - .../src/features/audit/AuditLogsPage.tsx | 7 - .../features/overview/GlobalOverviewPage.tsx | 307 +++++++----------- .../tenants/routes/TenantCreatePage.tsx | 9 - .../tenants/routes/TenantDetailPage.tsx | 13 - .../tenants/routes/TenantListPage.tsx | 7 - .../src/features/users/UserCreatePage.tsx | 9 - .../src/features/users/UserDetailPage.tsx | 7 - .../src/features/users/UserListPage.tsx | 7 - locales/ko.toml | 2 +- 11 files changed, 142 insertions(+), 298 deletions(-) diff --git a/adminfront/src/components/layout/AppLayout.tsx b/adminfront/src/components/layout/AppLayout.tsx index 9d2f3da8..cbfae10e 100644 --- a/adminfront/src/components/layout/AppLayout.tsx +++ b/adminfront/src/components/layout/AppLayout.tsx @@ -39,6 +39,18 @@ function AppLayout() { return stored === "dark" ? "dark" : "light"; }); const [isProfileOpen, setIsProfileOpen] = useState(false); + const [timeLeft, setTimeLeft] = useState(null); + const expiresAt = auth.user?.expires_at; + + useEffect(() => { + if (!expiresAt) return; + const updateTimer = () => { + setTimeLeft(Math.max(0, Math.floor(expiresAt - Date.now() / 1000))); + }; + updateTimer(); + const interval = setInterval(updateTimer, 1000); + return () => clearInterval(interval); + }, [expiresAt]); const { data: profile } = useQuery({ queryKey: ["me"], @@ -156,20 +168,8 @@ function AppLayout() { -
- - {t("msg.admin.scope_admin", "Scoped to /admin")} -
-
-

- {t( - "msg.admin.notice.scope", - "관리 기능은 /admin 네임스페이스에서만 노출합니다.", - )} -

-

- {t( - "msg.admin.notice.idp_policy", - "IDP 관리 키는 서버 내부 래핑 API로만 사용하며, 감사·레이트리밋을 기본 적용합니다.", - )} -

-
-
-
-
-

- {t("ui.admin.header.plane", "Admin Plane")} -

- - {t( - "msg.admin.header.subtitle", - "Tenant isolation & least privilege by default", - )} - -
+
+
- - - - - - - - +
+ +
+
+

+ API 키 관리 +

+

+ 시스템 연동을 위한 키를 발급합니다. +

+
+ + + + +
+ +
+
+

+ 감사 로그 +

+

+ 보안 이벤트를 모니터링합니다. +

+
+ +
- +
+ +
); diff --git a/adminfront/src/features/tenants/routes/TenantCreatePage.tsx b/adminfront/src/features/tenants/routes/TenantCreatePage.tsx index c8c21e89..85efa81d 100644 --- a/adminfront/src/features/tenants/routes/TenantCreatePage.tsx +++ b/adminfront/src/features/tenants/routes/TenantCreatePage.tsx @@ -58,15 +58,6 @@ function TenantCreatePage() { return (
-
- - {t("ui.admin.tenants.create.breadcrumb.section", "Tenants")} - - / - - {t("ui.admin.tenants.create.breadcrumb.action", "Create")} - -

diff --git a/adminfront/src/features/tenants/routes/TenantDetailPage.tsx b/adminfront/src/features/tenants/routes/TenantDetailPage.tsx index ac77a3ac..e111ae2e 100644 --- a/adminfront/src/features/tenants/routes/TenantDetailPage.tsx +++ b/adminfront/src/features/tenants/routes/TenantDetailPage.tsx @@ -32,19 +32,6 @@ function TenantDetailPage() {
-
- - - {t("ui.admin.tenants.detail.breadcrumb_list", "테넌트 목록")} - - / - - {t("ui.admin.tenants.detail.title", "상세")} - -

{tenantQuery.data?.name ?? t("ui.admin.tenants.detail.loading", "불러오는 중...")} diff --git a/adminfront/src/features/tenants/routes/TenantListPage.tsx b/adminfront/src/features/tenants/routes/TenantListPage.tsx index 2d9705d0..7963f81c 100644 --- a/adminfront/src/features/tenants/routes/TenantListPage.tsx +++ b/adminfront/src/features/tenants/routes/TenantListPage.tsx @@ -119,13 +119,6 @@ function TenantListPage() {
-
- {t("ui.admin.tenants.breadcrumb.section", "Tenants")} - / - - {t("ui.admin.tenants.breadcrumb.list", "List")} - -

{t("ui.admin.tenants.title", "테넌트 목록")}

diff --git a/adminfront/src/features/users/UserCreatePage.tsx b/adminfront/src/features/users/UserCreatePage.tsx index 451d92f9..d8907b0f 100644 --- a/adminfront/src/features/users/UserCreatePage.tsx +++ b/adminfront/src/features/users/UserCreatePage.tsx @@ -177,15 +177,6 @@ function UserCreatePage() {
-
- - {t("ui.admin.users.create.breadcrumb.section", "Users")} - - / - - {t("ui.admin.users.create.breadcrumb.new", "New")} - -

{t("ui.admin.users.create.title", "사용자 추가")}

diff --git a/adminfront/src/features/users/UserDetailPage.tsx b/adminfront/src/features/users/UserDetailPage.tsx index 9842cfa9..510b6d2f 100644 --- a/adminfront/src/features/users/UserDetailPage.tsx +++ b/adminfront/src/features/users/UserDetailPage.tsx @@ -315,13 +315,6 @@ function UserDetailPage() {
-
- - {t("ui.admin.users.detail.breadcrumb.section", "Users")} - - / - {user.name} -

{t("ui.admin.users.detail.title", "사용자 상세")}

diff --git a/adminfront/src/features/users/UserListPage.tsx b/adminfront/src/features/users/UserListPage.tsx index ced361c1..65cda9d3 100644 --- a/adminfront/src/features/users/UserListPage.tsx +++ b/adminfront/src/features/users/UserListPage.tsx @@ -257,13 +257,6 @@ function UserListPage() {
-
- {t("ui.admin.users.list.breadcrumb.section", "Users")} - / - - {t("ui.admin.users.list.breadcrumb.list", "List")} - -

{t("ui.admin.users.list.title", "사용자 관리")}

diff --git a/locales/ko.toml b/locales/ko.toml index 19562740..dce14c55 100644 --- a/locales/ko.toml +++ b/locales/ko.toml @@ -880,7 +880,7 @@ start_import = "임포트 시작" [ui.admin.overview] kicker = "Global Overview" -title = "Tenant-independent control plane" +title = "통합 대시보드" [ui.admin.overview.playbook] title = "Admin playbook"