"use client"; import Link from "next/link"; import { useEffect, useMemo, useState } from "react"; import data from "../data/big-screen.json"; import styles from "./BigScreen.module.css"; export default function BigScreenPage() { const [now, setNow] = useState(new Date()); const [autoRefresh, setAutoRefresh] = useState(true); const [regionMetric, setRegionMetric] = useState<"amount" | "orders">("amount"); const [toast, setToast] = useState(""); useEffect(() => { const timer = window.setInterval(() => setNow(new Date()), 1000); return () => window.clearInterval(timer); }, []); const notify = (message: string) => { setToast(message); window.setTimeout(() => setToast(""), 2200); }; const enterFullscreen = async () => { try { if (!document.fullscreenElement) await document.documentElement.requestFullscreen(); else await document.exitFullscreen(); } catch { notify("当前预览环境不支持全屏切换"); } }; return (
华东区域 · 实时经营 {autoRefresh ? "数据连接正常" : "自动刷新已暂停"}

{data.title}

{data.subtitle}

{now.toLocaleTimeString("zh-CN", { hour12: false })}{now.toLocaleDateString("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit", weekday: "short" })}
{data.kpis.map((kpi, index) =>
{["¥", "单", "客", "价", "%"][index]}

{kpi.label}

{kpi.value}{kpi.delta} {kpi.unit}
)}
今日实时}> 转化率 +1.8%}>
成交金额订单量
} className={styles.trendPanel}> notify("已刷新实时订单")}>刷新} className={styles.orderPanel}>
}> {data.alerts.length} 条待关注}>
数据更新时间 {data.updatedAt}}>
{toast &&
{toast}
}
); } function Panel({ title, code, extra, children, className = "" }: { title: string; code: string; extra?: React.ReactNode; children: React.ReactNode; className?: string }) { return

{title}

{code}
{extra}
{children}
; } function ChannelChart() { return
渠道成交额284.6万元
{data.channels.map((item) =>
{item.name}{item.amount}
{item.value}%
)}
; } function FunnelChart() { return
{data.funnel.map((item, index) =>
{index + 1}
{item.name}{item.value.toLocaleString()}
{item.rate}%{index < data.funnel.length - 1 && }
)}
; } function TrendChart() { const maxAmount = Math.max(...data.hourlyTrend.map((item) => item.amount)); const maxOrders = Math.max(...data.hourlyTrend.map((item) => item.orders)); const points = useMemo(() => data.hourlyTrend.map((item, index) => ({ x: (index / (data.hourlyTrend.length - 1)) * 100, y: 91 - (item.orders / maxOrders) * 72, item })), [maxOrders]); return
100 万75 万50 万25 万0
{[0,1,2,3,4].map((line) => )}
{data.hourlyTrend.map((item) =>
{item.time}
)}
{points.map((point, index) =>
{point.item.orders.toLocaleString()} 单{index < points.length - 1 && }
)}
; } function RealtimeOrders() { return
订单编号区域客户成交金额状态时间
{data.realtimeOrders.map((order) =>
{order.id}{order.city}{order.customer}{order.amount}{order.status}
)}
; } function RegionRanking({ metric }: { metric: "amount" | "orders" }) { const max = Math.max(...data.regions.map((item) => metric === "amount" ? item.amount : item.orders)); return
{data.regions.map((region, index) => { const value = metric === "amount" ? region.amount : region.orders; return
{index + 1}{region.name}
{metric === "amount" ? `${region.amount.toFixed(1)} 万` : `${region.orders.toLocaleString()} 单`}
+{region.delta}%
; })}
; } function AlertList() { return
{data.alerts.map((alert) =>
{alert.level === "high" ? "!" : alert.level === "medium" ? "△" : alert.level === "low" ? "◷" : "i"}
{alert.title}

{alert.detail}

)}
; } function CategoryPerformance() { return
{data.categories.map((category, index) =>
{String(index + 1).padStart(2, "0")}
{category.name}年度累计 {category.amount}
= category.target ? styles.targetMet : ""}>{category.actual}%
目标 {category.target}%
)}
; }