import React, { useEffect, useState } from 'react'; import { PageContainer } from '@ant-design/pro-components'; import { Card, Col, Row, Table, Spin } from 'antd'; import { ShoppingOutlined, InboxOutlined, DatabaseOutlined, DollarOutlined, RiseOutlined, } from '@ant-design/icons'; import { getStockSummary, getStockByColor, getStockByLocation } from '@/services/api'; import type { StockSummary, StockGroup } from '@/types/api'; import type { ColumnsType } from 'antd/es/table'; const groupColumns: ColumnsType = [ { title: '名称', dataIndex: 'name' }, { title: '产品数', dataIndex: 'count' }, { title: '库存量', dataIndex: 'quantity' }, ]; const StatsPage: React.FC = () => { const [summary, setSummary] = useState(null); const [colorData, setColorData] = useState([]); const [locationData, setLocationData] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { Promise.all([ getStockSummary(), getStockByColor(), getStockByLocation(), ]).then(([sumRes, colorRes, locRes]) => { if (sumRes?.code === 0) setSummary(sumRes.data); if (colorRes?.code === 0) setColorData(colorRes.data?.list || []); if (locRes?.code === 0) setLocationData(locRes.data?.list || []); }).finally(() => setLoading(false)); }, []); if (loading) { return (
); } const stats = [ { icon: , title: '产品总数', value: summary?.productCount ?? 0 }, { icon: , title: '总匹数', value: summary?.totalPieces ?? 0 }, { icon: , title: '总盘数', value: summary?.totalRolls ?? 0 }, { icon: , title: '库存总值(成本)', value: `¥${summary?.totalCostValue ?? '0'}` }, { icon: , title: '库存总值(销售)', value: `¥${summary?.totalSalesValue ?? '0'}` }, ]; return ( {stats.map((s) => (
{s.icon} {s.title}
{s.value}
))}
dataSource={colorData} rowKey="name" columns={[ { title: '颜色', dataIndex: 'name' }, ...groupColumns.slice(1), ]} pagination={false} size="small" /> dataSource={locationData} rowKey="name" columns={[ { title: '存放位置', dataIndex: 'name' }, ...groupColumns.slice(1), ]} pagination={false} size="small" />
); }; export default StatsPage;