refactor: 更新管理端页面元数据,统一国际化支持,移除冗余代码

This commit is contained in:
2026-05-21 17:27:52 +08:00
parent 26feed3c4f
commit e8a5507411
77 changed files with 1669 additions and 732 deletions

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { AdminRolesConsole } from "@/modules/admin-roles/admin-roles-console";
import { adminRolesModuleMeta } from "@/modules/admin-roles/meta";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: adminRolesModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("adminRoles", "title");
export default function AdminRolesPage() {
return (

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { AdminUsersConsole } from "@/modules/admin-users/admin-users-console";
import { adminUsersModuleMeta } from "@/modules/admin-users/meta";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: adminUsersModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("adminUsers", "title");
export default function AdminUsersPage() {
return (

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { auditLogsModuleMeta } from "@/modules/audit/meta";
import { AuditLogsConsole } from "@/modules/audit/audit-logs-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: auditLogsModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("audit", "title");
export default function AdminAuditLogsPage() {
return (

View File

@@ -1,19 +1,5 @@
import { Suspense } from "react";
import { redirect } from "next/navigation";
import { JackpotConfigScreen } from "@/modules/jackpot/jackpot-config-screen";
import { jackpotModuleMeta } from "@/modules/jackpot/meta";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: jackpotModuleMeta.title,
};
export default function AdminConfigJackpotPage() {
return (
<Suspense
fallback={<p className="text-sm text-muted-foreground">Loading</p>}
>
<JackpotConfigScreen />
</Suspense>
);
export default function AdminConfigJackpotRedirectPage() {
redirect("/admin/jackpot");
}

View File

@@ -1,6 +1,5 @@
import { redirect } from "next/navigation";
/** 旧路径保留跳转,避免书签失效 */
export default function AdminConfigJackpotRecordsPage() {
redirect("/admin/config/jackpot#records");
export default function AdminConfigJackpotRecordsRedirectPage() {
redirect("/admin/jackpot#records");
}

View File

@@ -1,7 +1,6 @@
import type { ReactNode } from "react";
import { ConfigWorkspaceShell } from "@/modules/config/config-workspace-shell";
/** 配置总览仅展示卡片入口,不再挂载横向子导航。 */
export default function AdminConfigLayout({ children }: { children: ReactNode }) {
return <ConfigWorkspaceShell>{children}</ConfigWorkspaceShell>;
return children;
}

View File

@@ -1,11 +1,5 @@
import { OddsConfigDocScreen } from "@/modules/config/doc/odds-config-doc-screen";
import { configOddsMeta } from "@/modules/config/meta";
import type { Metadata } from "next";
import { redirect } from "next/navigation";
export const metadata: Metadata = {
title: configOddsMeta.title,
};
export default function AdminConfigOddsPage() {
return <OddsConfigDocScreen />;
export default function AdminConfigOddsRedirectPage() {
redirect("/admin/rules/odds");
}

View File

@@ -1,11 +1,9 @@
import { configHubMeta } from "@/modules/config/meta";
import { redirect } from "next/navigation";
import { ConfigHubScreen } from "@/modules/config/config-hub-screen";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: configHubMeta.title,
};
export const metadata: Metadata = buildPageMetadata("config", "hub.title");
export default function AdminConfigHubPage() {
redirect("/admin/config/plays");
return <ConfigHubScreen />;
}

View File

@@ -1,11 +1,5 @@
import { PlayConfigDocScreen } from "@/modules/config/doc/play-config-doc-screen";
import { configPlayConfigMeta } from "@/modules/config/meta";
import type { Metadata } from "next";
import { redirect } from "next/navigation";
export const metadata: Metadata = {
title: configPlayConfigMeta.title,
};
export default function AdminConfigPlaysPage() {
return <PlayConfigDocScreen />;
export default function AdminConfigPlaysRedirectPage() {
redirect("/admin/rules/plays");
}

View File

@@ -1,11 +1,5 @@
import { RebateConfigDocScreen } from "@/modules/config/doc/rebate-config-doc-screen";
import { configRebateMeta } from "@/modules/config/meta";
import type { Metadata } from "next";
import { redirect } from "next/navigation";
export const metadata: Metadata = {
title: configRebateMeta.title,
};
export default function AdminConfigRebateDedicatedPage() {
return <RebateConfigDocScreen />;
export default function AdminConfigRebateRedirectPage() {
redirect("/admin/rules/odds#rebate");
}

View File

@@ -1,11 +1,5 @@
import { configRiskCapMeta } from "@/modules/config/meta";
import { RiskCapDocScreen } from "@/modules/config/doc/risk-cap-doc-screen";
import type { Metadata } from "next";
import { redirect } from "next/navigation";
export const metadata: Metadata = {
title: configRiskCapMeta.title,
};
export default function AdminConfigRiskCapPage() {
return <RiskCapDocScreen />;
export default function AdminConfigRiskCapRedirectPage() {
redirect("/admin/risk/cap");
}

View File

@@ -1,10 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { CurrencyManagementScreen } from "@/modules/settings/currency-management-screen";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "币种管理",
};
export const metadata: Metadata = buildPageMetadata("config", "currencies.title");
export default function AdminCurrenciesPage() {
return (

View File

@@ -1,9 +1,8 @@
import { DrawFinanceConsole } from "@/modules/draws/draw-finance-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "期号收支",
};
export const metadata: Metadata = buildPageMetadata("draws", "subnav.finance");
export default async function AdminDrawFinancePage(props: {
params: Promise<{ drawId: string }>;

View File

@@ -1,9 +1,8 @@
import { DrawPublishConsole } from "@/modules/draws/draw-publish-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "开奖结果发布",
};
export const metadata: Metadata = buildPageMetadata("draws", "publishTitle");
export default async function AdminDrawPublishBatchPage(props: {
params: Promise<{ drawId: string; batchId: string }>;

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { drawsModuleMeta } from "@/modules/draws/meta";
import { DrawsIndexConsole } from "@/modules/draws/draws-index-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: drawsModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("draws", "statusListTitle");
export default function AdminDrawsPage() {
return (

View File

@@ -0,0 +1,18 @@
import { Suspense } from "react";
import { JackpotConfigScreen } from "@/modules/jackpot/jackpot-config-screen";
import { RulesPageShell } from "@/modules/rules/rules-page-shell";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = buildPageMetadata("jackpot", "configTitle");
export default function AdminJackpotPage() {
return (
<RulesPageShell>
<Suspense fallback={<p className="text-sm text-muted-foreground">Loading</p>}>
<JackpotConfigScreen />
</Suspense>
</RulesPageShell>
);
}

View File

@@ -1,5 +1,5 @@
import { redirect } from "next/navigation";
export default function AdminJackpotPoolsRedirectPage() {
redirect("/admin/config/jackpot");
redirect("/admin/jackpot");
}

View File

@@ -1,5 +1,5 @@
import { redirect } from "next/navigation";
export default function AdminJackpotRecordsRedirectPage() {
redirect("/admin/config/jackpot#records");
redirect("/admin/jackpot#records");
}

View File

@@ -1,10 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { DashboardConsole } from "@/modules/dashboard/dashboard-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "仪表盘",
};
export const metadata: Metadata = buildPageMetadata("dashboard", "title");
export default function AdminDashboardPage() {
return (

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { playersModuleMeta } from "@/modules/players/meta";
import { PlayersConsole } from "@/modules/players/players-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: playersModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("players", "title");
export default function AdminPlayersPage() {
return (

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { reconcileModuleMeta } from "@/modules/reconcile/meta";
import { ReconcileConsole } from "@/modules/reconcile/reconcile-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: reconcileModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("reconcile", "title");
export default function AdminReconcilePage() {
return (

View File

@@ -0,0 +1,14 @@
import { RiskCapDocScreen } from "@/modules/config/doc/risk-cap-doc-screen";
import { RulesPageShell } from "@/modules/rules/rules-page-shell";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = buildPageMetadata("config", "nav.riskCapTitle");
export default function AdminRiskCapPage() {
return (
<RulesPageShell>
<RiskCapDocScreen />
</RulesPageShell>
);
}

View File

@@ -0,0 +1,9 @@
import { RulesOddsConfigScreen } from "@/modules/rules/rules-odds-config-screen";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = buildPageMetadata("config", "nav.rulesOddsTitle");
export default function AdminRulesOddsPage() {
return <RulesOddsConfigScreen />;
}

View File

@@ -0,0 +1,14 @@
import { PlayConfigDocScreen } from "@/modules/config/doc/play-config-doc-screen";
import { RulesPageShell } from "@/modules/rules/rules-page-shell";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = buildPageMetadata("config", "nav.rulesPlaysTitle");
export default function AdminRulesPlaysPage() {
return (
<RulesPageShell>
<PlayConfigDocScreen />
</RulesPageShell>
);
}

View File

@@ -1,9 +1,8 @@
import { redirect } from "next/navigation";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "币种管理",
};
export const metadata: Metadata = buildPageMetadata("config", "currencies.title");
export default function AdminCurrencySettingsPage() {
redirect("/admin/currencies");

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { settingsModuleMeta } from "@/modules/settings/meta";
import { SystemSettingsScreen } from "@/modules/settings/system-settings-screen";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: settingsModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("common", "nav.settings");
export default function AdminSettingsPage() {
return (

View File

@@ -1,11 +1,9 @@
import { InvalidSettlementBatchId } from "@/modules/settlement/invalid-settlement-batch-id";
import { SettlementBatchDetailsConsole } from "@/modules/settlement/settlement-batch-details-console";
import { settlementModuleMeta } from "@/modules/settlement/meta";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: `结算明细 · ${settlementModuleMeta.title}`,
};
export const metadata: Metadata = buildPageMetadata("settlement", "details");
export default async function AdminSettlementBatchDetailsPage(props: {
params: Promise<{ batchId: string }>;

View File

@@ -1,10 +1,8 @@
import { SettlementBatchesConsole } from "@/modules/settlement/settlement-batches-console";
import { settlementModuleMeta } from "@/modules/settlement/meta";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: settlementModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("settlement", "batchList");
export default function AdminSettlementBatchesPage() {
return <SettlementBatchesConsole />;

View File

@@ -1,11 +1,9 @@
import { ModuleScaffold } from "@/components/admin/module-scaffold";
import { ticketsModuleMeta } from "@/modules/tickets/meta";
import { PlayerTicketsConsole } from "@/modules/tickets/player-tickets-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: ticketsModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("tickets", "title");
export default function AdminTicketsPage() {
return (

View File

@@ -1,10 +1,8 @@
import { walletModuleMeta } from "@/modules/wallet/meta";
import { PlayerWalletPanel } from "@/modules/wallet/wallet-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: `${walletModuleMeta.title} · 玩家钱包`,
};
export const metadata: Metadata = buildPageMetadata("wallet", "playerWalletQuery");
export default function AdminWalletPlayerPage() {
return <PlayerWalletPanel />;

View File

@@ -1,10 +1,8 @@
import { walletModuleMeta } from "@/modules/wallet/meta";
import { WalletTxnsPanel } from "@/modules/wallet/wallet-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: `${walletModuleMeta.title} · 钱包流水`,
};
export const metadata: Metadata = buildPageMetadata("wallet", "walletTransactions");
export default function AdminWalletTransactionsPage() {
return <WalletTxnsPanel />;

View File

@@ -1,10 +1,8 @@
import { walletModuleMeta } from "@/modules/wallet/meta";
import { TransferOrdersPanel } from "@/modules/wallet/wallet-console";
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
export const metadata: Metadata = {
title: `${walletModuleMeta.title} · 转账单`,
};
export const metadata: Metadata = buildPageMetadata("wallet", "transferOrders");
export default function AdminWalletTransferOrdersPage() {
return <TransferOrdersPanel />;

View File

@@ -1,11 +1,9 @@
import { buildPageMetadata } from "@/lib/page-metadata";
import type { Metadata } from "next";
import { LoginForm } from "@/components/admin/login-form";
import { authModuleMeta } from "@/modules/auth/meta";
export const metadata: Metadata = {
title: authModuleMeta.title,
};
export const metadata: Metadata = buildPageMetadata("auth", "title");
export default function AdminLoginPage() {
return <LoginForm />;

View File

@@ -16,10 +16,10 @@ const geistMono = Geist_Mono({
export const metadata: Metadata = {
title: {
template: "%s · 彩票后台",
default: "彩票后台",
template: "%s · Lottery Admin",
default: "Lottery Admin",
},
description: "彩票后台管理端",
description: "Lottery administration console",
};
export default function RootLayout({