Refactor: Remove summary cards from various pages and update UI components

- Removed summary cards from Managed Domains, Nodes, Proxy Routes, TLS Certificates, Users pages to streamline UI.
- Updated Nodes and Proxy Routes pages to enhance action buttons and descriptions.
- Added new runtime configuration options for rate limiting in Settings page, allowing for dynamic updates.
- Updated documentation to reflect new runtime configurations and their effects.
- Enhanced unit tests for DashboardOverview to include mock data for comprehensive coverage.
This commit is contained in:
ryan
2026-03-11 19:49:30 +08:00
parent f7d18f712e
commit db3f9b0c0a
20 changed files with 1171 additions and 555 deletions
@@ -198,16 +198,7 @@ export function UsersPage() {
const activeQuery = searchKeyword.length > 0 ? searchQuery : usersQuery;
const users = useMemo(() => activeQuery.data ?? [], [activeQuery.data]);
const summary = useMemo(() => {
return [
{ label: searchKeyword ? '搜索结果' : '当前页用户', value: users.length },
{ label: '管理员', value: users.filter((item) => item.role >= 10).length },
{ label: '已激活', value: users.filter((item) => item.status === 1).length },
{ label: '已封禁', value: users.filter((item) => item.status !== 1).length },
];
}, [searchKeyword, users]);
const handleSearchSubmit = () => {
const handleSearchSubmit = () => {
setFeedback(null);
setPage(0);
setSearchKeyword(searchInput.trim());
@@ -296,25 +287,9 @@ export function UsersPage() {
{feedback ? <InlineMessage tone={feedback.tone} message={feedback.message} /> : null}
<AppCard title='用户概览' description='当前视图会根据分页或搜索结果实时刷新,新增和编辑统一在弹窗中完成。'>
<div className='grid gap-4 md:grid-cols-2 xl:grid-cols-4'>
{summary.map((item) => (
<div
key={item.label}
className='rounded-2xl border border-[var(--border-default)] bg-[var(--surface-elevated)] px-4 py-4'
>
<p className='text-xs uppercase tracking-[0.2em] text-[var(--foreground-muted)]'>
{item.label}
</p>
<p className='mt-2 text-lg font-semibold text-[var(--foreground-primary)]'>{item.value}</p>
</div>
))}
</div>
</AppCard>
<AppCard
title='用户列表'
description='搜索会切换到全量匹配结果;分页模式下按服务器默认每页 10 条加载。'
<AppCard
title='用户列表'
description='搜索会切换到全量匹配结果;分页模式下按服务器默认每页 10 条加载。'
action={
<div className='flex flex-wrap gap-2'>
<SecondaryButton