import { IconPlayCircle, IconUser, IconFile, IconCheckCircle } from "@arco-design/web-react/icon"; import { dramaApi, logApi, userApi } from "../api"; import { usePageData } from "../hooks/usePageData"; import { hasPermissions } from "../utils/permission"; import { NoAccessPage } from "../components/NoAccessPage"; import { Panel } from "../components/Panel"; import { RequestLogTable } from "../components/RequestLogTable"; import type { AppUser, DashboardPageProps, Drama, MetricCardProps, RequestLog } from "./interface"; const METRIC_ICONS: Record = { dramas: , users: , logs: , status: , }; const METRIC_COLORS: Record = { dramas: "from-brand/5 to-brand/10", users: "from-success/5 to-success/10", logs: "from-warning/5 to-warning/10", status: "from-success/5 to-success/10", }; function MetricCard({ label, value, icon }: MetricCardProps & { icon: string }) { return (
{METRIC_ICONS[icon]}
{label}
{value}
); } function DashboardPage({ profile }: DashboardPageProps) { const canReadDramas = hasPermissions(profile, ["drama:read"]); const canReadUsers = hasPermissions(profile, ["user:read"]); const canReadLogs = hasPermissions(profile, ["log:read"]); const dramas = usePageData(dramaApi.listDramas, { page: 1, pageSize: 20 }, canReadDramas); const users = usePageData(userApi.listUsers, { page: 1, pageSize: 20 }, canReadUsers); const logs = usePageData(logApi.listRequestLogs, { page: 1, pageSize: 20 }, canReadLogs); const hasAnyDataModule = canReadDramas || canReadUsers || canReadLogs; return (
{canReadDramas && } {canReadUsers && } {canReadLogs && }
{canReadLogs ? ( ) : null} {!hasAnyDataModule ? : null}
); } export default DashboardPage;