import React, { useState, useEffect, ReactNode } from 'react'; import { Grid, Card, Typography, Divider, Skeleton, Link } from '@arco-design/web-react'; import { useSelector } from 'react-redux'; import axios from 'axios'; import locale from './locale'; import useLocale from '@/utils/useLocale'; import styles from './style/overview.module.less'; import IconCalendar from './assets/calendar.svg'; import IconComments from './assets/comments.svg'; import IconContent from './assets/content.svg'; import IconIncrease from './assets/increase.svg'; import HeatMap from '@/components/Chart/heat-map'; import { getOverviewHome } from '@/api/overview'; const { Row, Col } = Grid; type StatisticItemType = { icon?: ReactNode; title?: ReactNode; count?: ReactNode; loading?: boolean; unit?: ReactNode; }; function StatisticItem(props: StatisticItemType) { const { icon, title, count, loading, unit } = props; return (
{icon}
{title}
{count} {unit}
); } type DataType = { sceneNum?: string | number; compNum?: string | number; appNum?: string | number; instanceNum?: string | number; chartData?: { count?: number; date?: string }[]; down?: boolean; }; function Overview() { const [data, setData] = useState({}); const [loading, setLoading] = useState(true); const t = useLocale(locale); const userInfo = useSelector((state: any) => state.user?.userInfo || {}); const fetchData = async () => { setLoading(true); const res: any = await getOverviewHome(); if (res.code === 200) setData(res.data); setLoading(false); }; useEffect(() => { fetchData(); }, []); return ( {t['workplace.welcomeBack']} {userInfo.username} } title="工程数量" count={data.sceneNum} loading={loading} unit={t['workplace.pecs']} /> } title="组件数量" count={data.compNum} loading={loading} unit={t['workplace.pecs']} /> } title="应用数量" count={data.appNum} loading={loading} unit={t['workplace.pecs']} /> } title="应用实例数量" count={data.instanceNum} loading={loading} />
{/*热力图*/}
); } export default Overview;