import { useEffect, useState, useCallback } from 'react' import { Card, Table, Typography, Statistic, Space, Row, Col, Select, Tag, Button, message, } from 'antd' import { ShoppingCartOutlined, DollarCircleOutlined, WalletOutlined, AppstoreOutlined, LineChartOutlined, ArrowRightOutlined, SkinOutlined, } from '@ant-design/icons' import { Link } from 'react-router-dom' import { listOrders, listSites, fetchDashboardAnalytics, formatMoney, type Site, type DistributionAnalytics, type DistributionOrder, } from '../api' export default function Dashboard() { const [sites, setSites] = useState([]) const [siteID, setSiteID] = useState() const [analytics, setAnalytics] = useState(null) const [recentOrders, setRecentOrders] = useState([]) const [loading, setLoading] = useState(false) const loadData = useCallback(async (sid: number) => { setLoading(true) try { const [anaRes, ordRes] = await Promise.all([ fetchDashboardAnalytics(sid), listOrders({ siteID: sid, pageSize: 8 }), ]) setAnalytics(anaRes) setRecentOrders(ordRes.items) } catch { message.error('加载大盘数据失败') } finally { setLoading(false) } }, []) useEffect(() => { listSites() .then((rows) => { setSites(rows) if (rows.length > 0) { setSiteID(rows[0].id) void loadData(rows[0].id) } }) .catch(() => message.error('站点加载失败')) }, [loadData]) const selectedSite = sites.find((s) => s.id === siteID) return (
运营数据大盘 当前站点:{selectedSite?.site_name || '默认分销站'} ({selectedSite?.site_code}) · 实时聚合收号、货架、订单与结算收益