diff --git a/adminfront/src/features/api-keys/ApiKeyListPage.tsx b/adminfront/src/features/api-keys/ApiKeyListPage.tsx index 17ec3f34..24d844e6 100644 --- a/adminfront/src/features/api-keys/ApiKeyListPage.tsx +++ b/adminfront/src/features/api-keys/ApiKeyListPage.tsx @@ -38,6 +38,7 @@ import { TableHeader, TableRow, } from "../../components/ui/table"; +import { PageHeader } from "../../../../common/core/components/page"; import { commonStickyTableHeaderClass } from "../../../../common/ui/table"; import { type ApiKeySummary, @@ -160,35 +161,33 @@ function ApiKeyListPage() { return (
-
-
-

- {t("ui.admin.api_keys.list.title", "API 키 관리 (M2M)")} -

-

- {t( - "msg.admin.api_keys.list.subtitle", - "서버 간 통신(Machine-to-Machine)을 위한 API 키를 발급하고 관리합니다.", - )} -

-
-
- - -
-
+ + + + + } + /> diff --git a/adminfront/src/features/audit/AuditLogsPage.tsx b/adminfront/src/features/audit/AuditLogsPage.tsx index 04bc643e..29f24a06 100644 --- a/adminfront/src/features/audit/AuditLogsPage.tsx +++ b/adminfront/src/features/audit/AuditLogsPage.tsx @@ -32,6 +32,7 @@ import { TableHeader, TableRow, } from "../../components/ui/table"; +import { PageHeader } from "../../../../common/core/components/page"; import type { AuditLog } from "../../lib/adminApi"; import { fetchAuditLogs } from "../../lib/adminApi"; import { t } from "../../lib/i18n"; @@ -164,33 +165,31 @@ function AuditLogsPage() { return (
-
-
-

- {t("ui.admin.audit.title", "감사 로그")} -

-

- {t( - "msg.admin.audit.subtitle", - "Command 요청 기반 ClickHouse 로그를 조회합니다. 사용자/테넌트는 추후 세션 연동 시 자동 채워집니다.", - )} -

-
-
- - -
-
+ + + + + } + /> diff --git a/adminfront/src/features/users/UserListPage.tsx b/adminfront/src/features/users/UserListPage.tsx index cf89b6fa..53dc0e65 100644 --- a/adminfront/src/features/users/UserListPage.tsx +++ b/adminfront/src/features/users/UserListPage.tsx @@ -29,6 +29,7 @@ import { sortItems, toggleSort, } from "../../../../common/core/utils"; +import { PageHeader } from "../../../../common/core/components/page"; import { commonTableShellClass, commonTableViewportClass, @@ -411,184 +412,156 @@ function UserListPage() { return (
-
-
-

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

-

- {t( - "msg.admin.users.list.subtitle", - "시스템 사용자를 조회하고 관리합니다.", - )} -

-
-
-
-
- - setSearchDraft(e.target.value)} - onKeyDown={handleKeyDown} - /> + + } + description={t( + "msg.admin.users.list.subtitle", + "시스템 사용자를 조회하고 관리합니다.", + )} + actions={ + <> +
+
+ + setSearchDraft(e.target.value)} + onKeyDown={handleKeyDown} + /> +
+ + + +
- - -
- - - - - - - handleExport(false)} - disabled={exportMutation.isPending} - data-testid="user-export-menu-item" - className="cursor-pointer" - > - - {t("ui.common.export_without_ids", "UUID 제외 내보내기")} - - handleExport(true)} - disabled={exportMutation.isPending} - data-testid="user-export-with-ids-menu-item" - className="cursor-pointer" - > - - {t("ui.common.export_with_ids", "UUID 포함 내보내기")} - - - e.preventDefault()} - > - query.refetch()} - variant="dropdown" - /> - - - - - - - - - - - - - - {t("ui.admin.users.list.columns.title", "표시 컬럼 설정")} - - - {t( - "msg.admin.users.list.columns.description", - "사용자 목록에 표시할 커스텀 필드를 선택하세요.", - )} - - -
- {userSchema.length === 0 && ( -

+ + + + query.refetch()} /> +

+ + + + + + + {t("ui.admin.users.list.columns.title", "표시 컬럼 설정")} + + {t( - "msg.admin.users.list.columns.no_custom", - "현재 테넌트에 정의된 커스텀 필드가 없습니다.", + "msg.admin.users.list.columns.description", + "사용자 목록에 표시할 커스텀 필드를 선택하세요.", )} -

- )} - {userSchema.map((field) => ( - - ))} -
- - - - - -
-
- -
-
+ + +
+ {userSchema.length === 0 && ( +

+ {t( + "msg.admin.users.list.columns.no_custom", + "현재 테넌트에 정의된 커스텀 필드가 없습니다.", + )} +

+ )} + {userSchema.map((field) => ( + + ))} +
+ + + + + + + + + + } + />