后端: - 添加 GET /api/v1/stats/dashboard 聚合统计端点 (账号数/活跃服务商/今日请求/今日Token用量等7项指标) - 需要 account:admin 权限 Admin 前端 (Next.js 14 + shadcn/ui + Tailwind + Recharts): - 设计系统: Dark Mode OLED (#020617 背景, #22C55E CTA) - 登录页: 双栏布局, 品牌区 + 表单 - Dashboard 布局: Sidebar 导航 + Header + 主内容区 - 仪表盘: 4 统计卡片 + AreaChart 请求趋势 + BarChart Token用量 - 8 个 CRUD 页面: - 账号管理 (搜索/角色/状态筛选, 编辑/启用禁用) - 服务商 (CRUD + API Key masked) - 模型管理 (Provider筛选, CRUD) - API 密钥 (创建/撤销, 一次性显示token) - 用量统计 (LineChart + BarChart) - 中转任务 (状态筛选, 展开详情) - 系统配置 (分类Tab, 编辑) - 操作日志 (Action筛选, 展开详情) - 14 个 shadcn 风格 UI 组件 (手写实现) - 类型化 API 客户端 (SaaSClient, 20+ 方法, 401 自动跳转) - AuthGuard 路由保护 + useAuth() hook 验证: tsc --noEmit 零 error, pnpm build 13 页面成功, cargo test 21 通过
31 lines
772 B
TypeScript
31 lines
772 B
TypeScript
'use client'
|
|
|
|
import * as React from 'react'
|
|
import * as SeparatorPrimitive from '@radix-ui/react-separator'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
const Separator = React.forwardRef<
|
|
React.ElementRef<typeof SeparatorPrimitive.Root>,
|
|
React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
|
|
>(
|
|
(
|
|
{ className, orientation = 'horizontal', decorative = true, ...props },
|
|
ref,
|
|
) => (
|
|
<SeparatorPrimitive.Root
|
|
ref={ref}
|
|
decorative={decorative}
|
|
orientation={orientation}
|
|
className={cn(
|
|
'shrink-0 bg-border',
|
|
orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',
|
|
className,
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
)
|
|
Separator.displayName = SeparatorPrimitive.Root.displayName
|
|
|
|
export { Separator }
|