fix: sync notification and shop dashboard state
This commit is contained in:
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user