"use client" import {Card} from "@/components/ui/card" import {Badge} from "@/components/ui/badge" import {useMemo} from "react" type MapDistributionProps = { industry?: string risk?: string } type DistrictPoint = { id: string x: number // 0..1 relative y: number // 0..1 relative risk: "low" | "mid" | "high" industry: "gas" | "water" | "drain" } function seededRandom(seed: number) { let x = Math.sin(seed) * 10000 return x - Math.floor(x) } function genPoints(seed = 42, count = 120): DistrictPoint[] { const inds: Array = ["gas", "water", "drain"] const risks: Array = ["low", "mid", "high"] return Array.from({ length: count }).map((_, i) => { const r1 = seededRandom(seed + i * 1.3) const r2 = seededRandom(seed + i * 2.7) const r3 = seededRandom(seed + i * 3.9) return { id: `pt-${i}`, x: r1, y: r2, risk: r3 > 0.75 ? "high" : r3 > 0.45 ? "mid" : "low", industry: inds[Math.floor(r1 * inds.length)]!, } }) } export default function MapDistribution({ industry = "all", risk = "all" }: MapDistributionProps) { const points = useMemo(() => genPoints(7, 150), []) const filtered = points.filter((p) => (industry === "all" || p.industry === industry) && (risk === "all" || p.risk === risk)) const riskColor = (r: DistrictPoint["risk"]) => r === "high" ? "bg-rose-500" : r === "mid" ? "bg-amber-500" : "bg-emerald-500" return ( {/* Background grid as simplified "city map" */} {/* Water bodies / parks (decorative) */} {/* Main roads */} {/* Points */}
{filtered.map((p) => (
))}
{/* Legend */}
{industry === "all" ? "全部行业" : industry === "gas" ? "燃气" : industry === "water" ? "供水" : "排水"} {risk === "all" ? "全部风险" : risk === "high" ? "高风险" : risk === "mid" ? "中风险" : "低风险"}
) }