Files
fluxent-web/app/page.tsx
T

214 lines
9.1 KiB
TypeScript

import { redirect } from "next/navigation";
import Link from "next/link";
import {
ArrowRightIcon,
CreditCardIcon,
DollarSignIcon,
LayersIcon,
PlusIcon,
SlidersHorizontalIcon,
TrendingUpIcon,
WalletIcon,
} from "lucide-react";
import { auth } from "@/lib/auth";
import { AppSidebar } from "@/components/app-sidebar";
import { AppHeader } from "@/components/app-header";
import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import {
SidebarInset,
SidebarProvider,
} from "@/components/ui/sidebar";
export default async function HomePage() {
const session = await auth();
// 若用户未登录,由于 proxy 会拦截并重定向,作为服务端页面增加双重保障
if (!session?.user) {
redirect("/login");
}
const user = session.user;
const userName = user.name || "Fluxent 用户";
const userEmail = user.email || "";
const userAvatar = user.image || null;
return (
<SidebarProvider>
<AppSidebar
user={{
name: userName,
email: userEmail,
avatar: userAvatar,
}}
/>
<SidebarInset>
<AppHeader title="控制台" />
{/* Inset Main Dashboard Content */}
<div className="flex flex-1 flex-col gap-6 p-4 md:p-6 lg:p-8">
{/* Welcome greeting banner */}
<div className="relative overflow-hidden rounded-2xl border border-border/80 bg-gradient-to-br from-card via-card to-muted/40 p-6 md:p-8">
<div className="relative z-10 flex flex-col gap-3 md:max-w-2xl">
<h1 className="font-heading text-2xl font-bold tracking-tight text-foreground md:text-3xl">
欢迎回来,{userName}
</h1>
<p className="text-sm text-muted-foreground leading-relaxed">
这是您的 Fluxent 多币种资产与记账中心。通过左侧导航栏,您可以轻松追踪你的资金流动、管理银行与支付卡账户、维护清晰的收支流水。
</p>
<div className="mt-2 flex flex-wrap items-center gap-3">
<Button size="sm" className="text-xs">
<PlusIcon data-icon="inline-start" />
记一笔交易
</Button>
<Button
variant="outline"
size="sm"
className="text-xs"
render={<Link href="/accounts" />}
nativeButton={false}
>
<LayersIcon data-icon="inline-start" />
管理资金账户
</Button>
</div>
</div>
{/* Subtle background decoration */}
<div className="pointer-events-none absolute -right-12 -bottom-12 size-64 rounded-full bg-primary/5 blur-2xl" />
</div>
{/* Quick Metrics & Highlights Cards (3 columns on desktop) */}
<div className="grid gap-4 md:grid-cols-3">
<Card className="border-border/70 bg-card/60 backdrop-blur-xs">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<CardTitle className="text-xs font-medium text-muted-foreground">
总资产估值 (CNY)
</CardTitle>
<DollarSignIcon className="size-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold tracking-tight">¥ 0.00</div>
<p className="mt-1 text-[11px] text-muted-foreground">
暂未录入资金账户余额
</p>
</CardContent>
</Card>
<Card className="border-border/70 bg-card/60 backdrop-blur-xs">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<CardTitle className="text-xs font-medium text-muted-foreground">
活跃账户与卡片
</CardTitle>
<WalletIcon className="size-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold tracking-tight">0</div>
<p className="mt-1 text-[11px] text-muted-foreground">
支持银行卡、信用卡、电子钱包
</p>
</CardContent>
</Card>
<Card className="border-border/70 bg-card/60 backdrop-blur-xs">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<CardTitle className="text-xs font-medium text-muted-foreground">
本月记账笔数
</CardTitle>
<TrendingUpIcon className="size-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold tracking-tight">0</div>
<p className="mt-1 text-[11px] text-muted-foreground">
全场景交易流水自动归集
</p>
</CardContent>
</Card>
</div>
{/* Next Steps / Feature Guide (3 columns) */}
<div className="flex flex-col gap-4">
<h2 className="font-heading text-base font-semibold tracking-tight text-foreground">
开始搭建您的资产版图
</h2>
<div className="grid gap-4 md:grid-cols-3">
<Link
href="/accounts"
className="group flex flex-col justify-between rounded-xl border border-border/80 bg-card p-5 transition-all hover:border-foreground/30 hover:shadow-sm"
>
<div className="flex flex-col gap-2">
<div className="flex size-9 items-center justify-center rounded-lg bg-primary/10 text-primary">
<CreditCardIcon className="size-4.5" />
</div>
<h3 className="font-heading text-sm font-semibold text-foreground">
1. 添加账户与支付渠道
</h3>
<p className="text-xs text-muted-foreground leading-relaxed">
录入您的现金账户、活期存款,或绑定支持港币、美元、日元结算的跨境信用卡与电子钱包。
</p>
</div>
<div className="mt-4 flex items-center gap-1 text-xs font-medium text-primary">
<span>去配置账户</span>
<ArrowRightIcon
data-icon="inline-end"
className="size-3.5 transition-transform group-hover:translate-x-0.5"
/>
</div>
</Link>
<div className="group flex flex-col justify-between rounded-xl border border-border/80 bg-card p-5 transition-all hover:border-foreground/30 hover:shadow-sm">
<div className="flex flex-col gap-2">
<div className="flex size-9 items-center justify-center rounded-lg bg-primary/10 text-primary">
<LayersIcon className="size-4.5" />
</div>
<h3 className="font-heading text-sm font-semibold text-foreground">
2. 建立首笔复式流水
</h3>
<p className="text-xs text-muted-foreground leading-relaxed">
支持自动计算交易币种到入账币种的清算汇率与手续费,让每一分折损清清楚楚。
</p>
</div>
<div className="mt-4 flex items-center gap-1 text-xs font-medium text-primary">
<span>新增记账</span>
<ArrowRightIcon
data-icon="inline-end"
className="size-3.5 transition-transform group-hover:translate-x-0.5"
/>
</div>
</div>
<div className="group flex flex-col justify-between rounded-xl border border-border/80 bg-card p-5 transition-all hover:border-foreground/30 hover:shadow-sm">
<div className="flex flex-col gap-2">
<div className="flex size-9 items-center justify-center rounded-lg bg-primary/10 text-primary">
<SlidersHorizontalIcon className="size-4.5" />
</div>
<h3 className="font-heading text-sm font-semibold text-foreground">
3. 账户首选项与设置
</h3>
<p className="text-xs text-muted-foreground leading-relaxed">
配置个人偏好货币、导出记账数据或连接外部服务。
</p>
</div>
<div className="mt-4 flex items-center gap-1 text-xs font-medium text-primary">
<span>偏好设置</span>
<ArrowRightIcon
data-icon="inline-end"
className="size-3.5 transition-transform group-hover:translate-x-0.5"
/>
</div>
</div>
</div>
</div>
</div>
</SidebarInset>
</SidebarProvider>
);
}