- Add transactions_dirty table and zero-tolerance cleansing action - Implement bookkeeping workbench (/bookkeeping) with searchable Combobox channel selector and card suffix / account identifier - Implement transaction ledger (/transactions) with date groupings, multi-currency metrics, and filters - Update AGENTS.md guidelines for Base UI Select and Combobox bindings
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { redirect } from "next/navigation"
|
|
import { auth } from "@/lib/auth"
|
|
import { getOfficialTransactionsAction } from "@/lib/actions/transaction"
|
|
import { AppSidebar } from "@/components/app-sidebar"
|
|
import { AppHeader } from "@/components/app-header"
|
|
import { SidebarInset, SidebarProvider } from "@/components/ui/sidebar"
|
|
import { TransactionsView } from "./transactions-view"
|
|
|
|
export default async function TransactionsPage() {
|
|
const session = await auth()
|
|
|
|
if (!session?.user) {
|
|
redirect("/login")
|
|
}
|
|
|
|
const user = session.user
|
|
const userName = user.name || "Fluxent 用户"
|
|
const userEmail = user.email || ""
|
|
const userAvatar = user.image || null
|
|
|
|
const txnsRes = await getOfficialTransactionsAction()
|
|
const initialTransactions =
|
|
txnsRes.success && txnsRes.data ? txnsRes.data : []
|
|
|
|
return (
|
|
<SidebarProvider>
|
|
<AppSidebar
|
|
user={{
|
|
name: userName,
|
|
email: userEmail,
|
|
avatar: userAvatar,
|
|
}}
|
|
/>
|
|
<SidebarInset>
|
|
<AppHeader title="交易记录" />
|
|
|
|
<TransactionsView initialTransactions={initialTransactions} />
|
|
</SidebarInset>
|
|
</SidebarProvider>
|
|
)
|
|
}
|