import { EChart } from "../charts/EChart.jsx"; import { trendLabels } from "../data.js"; import { formatPercent, formatUsd } from "../format.js"; export function MoneyTrendPanel({ summary }) { return (
次留 {formatPercent(summary.retention1)} 7日 {formatPercent(summary.retention7)} 30日 {formatPercent(summary.retention30)}
); } export function PanelHead({ label, meta, value }) { return (

{label}

{meta}
{value}
); } function ProgressRow({ label, percent, value }) { return (
{label} {formatPercent(percent)}
{value}
); } function createTrendOption(summary) { return { animationDuration: 520, color: ["#2563eb", "#16a34a"], grid: { bottom: 30, containLabel: true, left: 6, right: 16, top: 24 }, legend: { bottom: 0, icon: "roundRect", itemHeight: 8, itemWidth: 16, textStyle: { color: "#64748b" } }, tooltip: { backgroundColor: "#ffffff", borderColor: "#d8e0ec", trigger: "axis", textStyle: { color: "#0f172a" }, valueFormatter: (value) => formatUsd(value) }, xAxis: { axisLine: { lineStyle: { color: "rgba(100, 116, 139, 0.18)" } }, axisTick: { show: false }, data: trendLabels, type: "category" }, yAxis: { axisLabel: { formatter: (value) => `${Math.round(value / 1000)}k` }, splitLine: { lineStyle: { color: "rgba(100, 116, 139, 0.16)" } }, type: "value" }, series: [ { areaStyle: { opacity: 0.12 }, data: summary.rechargeTrend, name: "充值", smooth: true, symbol: "circle", symbolSize: 6, type: "line" }, { barMaxWidth: 18, data: summary.revenueTrend, name: "流水", type: "bar" } ] }; }