fix: sync notification and shop dashboard state

This commit is contained in:
zetaloop
2026-02-22 06:43:24 +08:00
parent 02269dd9c3
commit 5f25043923
6 changed files with 152 additions and 74 deletions
+23 -4
View File
@@ -1,3 +1,5 @@
"use client"
import { ArrowDownLeft, ArrowUpRight, CreditCard, DollarSign } from "lucide-react"
import { Badge } from "@/components/ui/badge"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
@@ -9,10 +11,18 @@ import {
TableHeader,
TableRow,
} from "@/components/ui/table"
import { mockOrders, mockTransactions } from "@/lib/mock"
import { mockTransactions } from "@/lib/mock"
import { useAuthStore } from "@/store/auth"
import { useOrderStore } from "@/store/orders"
import { useShopStore } from "@/store/shops"
export default function ShopIncomePage() {
const completedOrders = mockOrders.filter((o) => o.status === "completed")
const userId = useAuthStore((state) => state.user?.id)
const shops = useShopStore((state) => state.shops)
const orders = useOrderStore((state) => state.orders)
const shop = shops.find((item) => item.owner.id === userId) ?? shops[0]
const shopOrders = orders.filter((order) => order.shopId === shop?.id)
const completedOrders = shopOrders.filter((o) => o.status === "completed")
const totalIncome = completedOrders.reduce((acc, order) => acc + order.totalPrice, 0)
const currentMonth = new Date().getMonth()
@@ -20,10 +30,19 @@ export default function ShopIncomePage() {
.filter((o) => new Date(o.completedAt || "").getMonth() === currentMonth)
.reduce((acc, order) => acc + order.totalPrice, 0)
const pendingSettlement = mockOrders
const pendingSettlement = shopOrders
.filter((o) => ["in_progress", "pending_close", "pending_review"].includes(o.status))
.reduce((acc, order) => acc + order.totalPrice, 0)
const shopOrderIds = new Set(shopOrders.map((order) => order.id))
const relatedTransactions = mockTransactions.filter((transaction) => {
if (transaction.type === "withdrawal") return true
if (transaction.type !== "income") return false
const match = transaction.description.match(/ord\d+/)
if (!match) return false
return shopOrderIds.has(match[0])
})
return (
<div className="space-y-6">
<h1 className="text-2xl font-bold"></h1>
@@ -73,7 +92,7 @@ export default function ShopIncomePage() {
</TableRow>
</TableHeader>
<TableBody>
{mockTransactions.map((transaction) => (
{relatedTransactions.map((transaction) => (
<TableRow key={transaction.id}>
<TableCell>
<div className="flex items-center gap-2">