后台侧栏按业务分组支持折叠
Project CI / AI game creator shell Rust crates (push) Successful in 2m45s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m17s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 5m27s
Project CI / Frontend tests (push) Successful in 3m4s
Project CI / Backend tests (push) Successful in 6m32s
Project CI / Native shell tests (push) Successful in 7m36s
Project CI / AI game creator shell web tests (push) Successful in 3m24s
Project CI / Repository checks (push) Successful in 6m44s

新增后台侧栏业务分组与当前页自动展开行为

补充折叠交互、路由分组和权限过滤测试

同步后台导航分组行为文档
This commit is contained in:
kdletters
2026-10-04 13:25:58 +08:00
parent a6fb2f01c1
commit 81cfbae207
6 changed files with 357 additions and 17 deletions
+85
View File
@@ -71,6 +71,91 @@ export const adminRoutes: AdminRouteDefinition[] = [
{ id: 'accounts', label: '账号管理', hash: '#accounts', ownerOnly: true },
];
/**
* 桌面端侧边栏的导航分组。分组只影响展示顺序和折叠状态,不改变路由
* 权限、hash 或移动端底栏的平铺顺序。
*/
export type AdminNavGroupId =
| 'workspace'
| 'observability'
| 'operations'
| 'billing'
| 'content'
| 'agc'
| 'access';
export interface AdminNavGroupDefinition {
id: AdminNavGroupId;
label: string;
routeIds: AdminRouteId[];
}
export const adminNavGroups: AdminNavGroupDefinition[] = [
{
id: 'workspace',
label: '工作台',
routeIds: ['dashboard', 'overview', 'tables', 'debug'],
},
{
id: 'observability',
label: '数据与监控',
routeIds: ['tracking', 'agc-tracking', 'error-reports'],
},
{
id: 'operations',
label: '运营配置',
routeIds: ['gray-release', 'redeem', 'invite', 'profile-wallet', 'tasks'],
},
{
id: 'billing',
label: '充值与支付',
routeIds: ['recharge-products', 'recharge-orders', 'payment-orders'],
},
{
id: 'agc',
label: 'AGC 管理',
routeIds: ['editor-generation-pricing', 'agc-models', 'agc-templates'],
},
{
id: 'content',
label: '内容运营',
routeIds: [
'editor-showcase',
'game-distribution',
'game-management',
'game-reviews',
'editor-assets',
'project-snapshots',
],
},
{
id: 'access',
label: '账号权限',
routeIds: ['accounts'],
},
];
export interface AdminNavGroup {
id: AdminNavGroupId;
label: string;
routes: AdminRouteDefinition[];
}
/** 按固定业务分组筛选当前管理员可见的路由。 */
export function getAdminNavGroups(
routes: AdminRouteDefinition[],
): AdminNavGroup[] {
return adminNavGroups
.map((group) => ({
id: group.id,
label: group.label,
routes: group.routeIds
.map((routeId) => routes.find((route) => route.id === routeId))
.filter((route): route is AdminRouteDefinition => route !== undefined),
}))
.filter((group) => group.routes.length > 0);
}
export interface AdminRouteAccess {
accountRole: 'owner' | 'member';
tabPermissions: string[];