';
+ echo '
';
+ $this->chart_card('trend', __('成交趋势', 'aksrt'), __('支付金额、净收入、退款金额曲线与支付订单数折线', 'aksrt'), 'lg');
+ $this->render_funnel_card();
+ echo '
';
+
+ echo '
';
+ $this->chart_card('groups', __('分类成交', 'aksrt'), __('按商品分类的支付金额曲线', 'aksrt'), 'md');
+ $this->chart_card('methods', __('支付方式', 'aksrt'), __('按支付金额的支付方式占比', 'aksrt'), 'md');
+ echo '
';
+
+ echo '
';
+ $this->render_top_card();
+ $this->render_todo_card();
+ echo '
';
+ echo '
';
+
+ $this->render_shortcuts_card();
+
+ $payload = [
+ 'currency' => $symbol,
+ 'today' => $today,
+ 'maxDays' => OrderAnalytics::MAX_RANGE_DAYS,
+ 'rest' => ['url' => rest_url('aksrt/v1/admin/pay-overview'), 'nonce' => wp_create_nonce('wp_rest')],
+ 'initial' => ['from' => $from, 'to' => $today, 'group' => '', 'report' => $report],
+ 'i18n' => [
+ 'paid' => __('支付金额', 'aksrt'),
+ 'net' => __('净收入', 'aksrt'),
+ 'refund' => __('退款金额', 'aksrt'),
+ 'count' => __('支付订单数', 'aksrt'),
+ 'unit' => __('笔', 'aksrt'),
+ 'people' => __('人', 'aksrt'),
+ 'empty' => __('所选区间暂无成交', 'aksrt'),
+ 'loadError' => __('统计数据加载失败,请稍后重试。', 'aksrt'),
+ 'basis' => __('较上一周期', 'aksrt'),
+ 'new' => __('新增', 'aksrt'),
+ 'total' => __('合计', 'aksrt'),
+ 'excluded' => __('以下外币订单未计入统计:', 'aksrt'),
+ 'noTop' => __('所选区间暂无付费内容成交', 'aksrt'),
+ 'badRange' => __('请选择有效的日期区间。', 'aksrt'),
+ ],
+ ];
+ echo '';
+
+ NativeUi::page_close();
+ }
+
+ /* ------------------------------------------------------------------
+ * 今日实时(同时段对比,不随区间变化)
+ * ----------------------------------------------------------------*/
+
+ /** @param array{today:array{amount:float,count:int},yesterday:array{amount:float,count:int},until:string} $data */
+ private function render_realtime(array $data, string $symbol): void {
+ $amount = (float) $data['today']['amount'];
+ $prev = (float) $data['yesterday']['amount'];
+ echo '';
+ echo ''
+ . '' . esc_html__('今日支付金额', 'aksrt') . ''
+ . '' . esc_html($symbol . number_format_i18n($amount, 2)) . ''
+ . $this->delta_html($amount, $prev) . '
';
+ echo '';
+ /* translators: %d order count */
+ echo '' . esc_html(sprintf(__('今日 %d 笔', 'aksrt'), (int) $data['today']['count'])) . '';
+ echo '' . esc_html(sprintf(
+ /* translators: 1 time 2 amount 3 order count */
+ __('昨日 00:00–%1$s:%2$s,%3$d 笔', 'aksrt'),
+ $data['until'],
+ $symbol . number_format_i18n($prev, 2),
+ (int) $data['yesterday']['count']
+ )) . '';
+ echo '
';
+ }
+
+ /** 同时段环比徽标(服务端渲染,仅今日实时使用;区间指标的环比由前端计算)。 */
+ private function delta_html(float $current, float $previous): string {
+ $basis = __('较昨日同时段', 'aksrt');
+ if ($previous <= 0) {
+ $text = $current > 0 ? __('新增', 'aksrt') : '—';
+ $class = $current > 0 ? 'is-up' : 'is-flat';
+ } else {
+ $delta = round(($current - $previous) / $previous * 100, 1);
+ $class = $delta > 0 ? 'is-up' : ($delta < 0 ? 'is-down' : 'is-flat');
+ $text = ($delta > 0 ? '↑' : ($delta < 0 ? '↓' : '')) . number_format_i18n(abs($delta), 1) . '%';
+ }
+ return '';
+ foreach ($cards as [$key, $label, $tone]) {
+ echo '
'
+ . '' . esc_html($label) . ''
+ . '—'
+ . ''
+ . '
';
+ }
+ echo '
';
+ }
+
+ /* ------------------------------------------------------------------
+ * 卡片
+ * ----------------------------------------------------------------*/
+
+ private function chart_card(string $key, string $title, string $label, string $size): void {
+ NativeUi::card_open($title, '', false, 'aksrt-po-card');
+ echo '