首页改为“领域运营工作台”,非 master 领域也有完整管理首页。

根据权限展示用户、客户端、组、领域设置、认证、事件等业务入口。
新增安全配置概览:领域状态、注册、邮箱验证、暴力破解保护。
侧栏增加领域上下文、状态和业务分组。
重构通用页面标题组件,统一标题、说明、状态、开关和操作区。
增加统一工作区容器,并优化表格、表单及详情页布局。
补充简体中文、繁体中文和英文文案。
This commit is contained in:
2026-08-04 16:48:39 +08:00 Unverified
parent 6e370571cb
commit 676c73c82b
12 changed files with 1700 additions and 6 deletions
+97
View File
@@ -0,0 +1,97 @@
/**
* This file has been claimed for ownership from @keycloakify/keycloak-admin-ui version 260700.0.2.
* To relinquish ownership and restore this file to its original content, run the following command:
*
* $ npx keycloakify own --path "admin/App.tsx" --revert
*/
/* eslint-disable */
// @ts-nocheck
import { SessionExpirationWarningOverlay } from "../shared/SessionExpirationWarningOverlay";
import {
ErrorBoundaryFallback,
ErrorBoundaryProvider,
KeycloakSpinner,
mainPageContentId
} from "../shared/keycloak-ui-shared";
import { Flex, FlexItem, Page } from "../shared/@patternfly/react-core";
import { PropsWithChildren, Suspense, useEffect } from "react";
import { Outlet } from "react-router-dom";
import { AdminClientProvider } from "./admin-client";
import { Header } from "./PageHeader";
import { PageNav } from "./PageNav";
import { PageBreadCrumbs } from "./components/bread-crumb/PageBreadCrumbs";
import { ErrorRenderer } from "./components/error/ErrorRenderer";
import { RecentRealmsProvider } from "./context/RecentRealms";
import { AccessContextProvider } from "./context/access/Access";
import { RealmContextProvider } from "./context/realm-context/RealmContext";
import { ServerInfoProvider } from "./context/server-info/ServerInfoProvider";
import { WhoAmIContextProvider } from "./context/whoami/WhoAmI";
import { SubGroups } from "./groups/SubGroupsContext";
import { AuthWall } from "./root/AuthWall";
import { Banners } from "./Banners";
export const AppContexts = ({ children }: PropsWithChildren) => (
<ErrorBoundaryProvider>
<ErrorBoundaryFallback fallback={ErrorRenderer}>
<ServerInfoProvider>
<RealmContextProvider>
<WhoAmIContextProvider>
<RecentRealmsProvider>
<AccessContextProvider>
<SubGroups>{children}</SubGroups>
</AccessContextProvider>
</RecentRealmsProvider>
</WhoAmIContextProvider>
</RealmContextProvider>
</ServerInfoProvider>
</ErrorBoundaryFallback>
</ErrorBoundaryProvider>
);
export const App = () => {
const hrefEndsWithHashSlash = location.href.endsWith("#/");
useEffect(() => {
if (!hrefEndsWithHashSlash) return;
history.replaceState(null, "", location.pathname);
}, [hrefEndsWithHashSlash, location.pathname]);
return (
<AdminClientProvider>
<AppContexts>
<Flex
direction={{ default: "column" }}
flexWrap={{ default: "nowrap" }}
spaceItems={{ default: "spaceItemsNone" }}
style={{ height: "100%" }}
>
<FlexItem>
<Banners />
</FlexItem>
<FlexItem grow={{ default: "grow" }} style={{ minHeight: 0 }}>
<Page
header={<Header />}
isManagedSidebar
sidebar={<PageNav />}
breadcrumb={<PageBreadCrumbs />}
mainContainerId={mainPageContentId}
>
<ErrorBoundaryFallback fallback={ErrorRenderer}>
<Suspense fallback={<KeycloakSpinner />}>
<AuthWall>
<div className="admin-workspace-route">
<Outlet />
</div>
</AuthWall>
</Suspense>
</ErrorBoundaryFallback>
</Page>
</FlexItem>
</Flex>
<SessionExpirationWarningOverlay warnUserSecondsBeforeAutoLogout={45} />
</AppContexts>
</AdminClientProvider>
);
};