(function () { 'use strict'; var Api = function () { return window.AdminApi; }; var Ui = function () { return window.AdminUi; }; var I = function () { return window.AdminI18n; }; function statCard(label, value, opts) { opts = opts || {}; var inner = '
' + I().esc(label) + '
' + I().esc(value) + '
'; if (opts.hint) inner += '
' + I().esc(opts.hint) + '
'; if (opts.href) { return '' + inner + ''; } return '
' + inner + '
'; } function alertBar(d) { var parts = []; if (d.orders_pending > 0) parts.push('待支付订单 ' + d.orders_pending + ' 笔'); if (d.refunds_pending > 0) parts.push('退款待审核 ' + d.refunds_pending + ' 笔'); if (!parts.length) return ''; var href = '#/orders'; if (d.refunds_pending > 0) href = '#/orders?refund_status=pending'; else if (d.orders_pending > 0) href = '#/orders?status=pending'; return '
' + parts.join(' · ') + '' + '去处理
'; } function quickLinks() { var links = [ { href: '#/users', label: '用户管理' }, { href: '#/orders', label: '订单管理' }, { href: '#/plans', label: '套餐配置' }, { href: '#/payment', label: '支付密钥' }, { href: '#/settings', label: '系统设置' }, { href: '#/audits', label: '审计日志' }, ]; var level = (window.AdminState && AdminState.adminLevel) || 'full'; var visible = window.AdminPermissions ? AdminPermissions.filterQuickLinks(links, level) : links; var items = visible.map(function (l) { return '' + I().esc(l.label) + ''; }).join(''); return '

快捷入口

' + '
' + items + '
'; } function recentOrdersTable(orders) { var rows = (orders || []).map(function (o) { return '' + I().esc(o.order_no || o.id) + '' + I().esc(o.email || '') + '' + I().formatCents(o.amount_cents) + '' + I().badgeStatus(o.status) + '' + I().formatDateTime(o.created_at) + ''; }).join(''); return Ui().dataTable(['订单号', '用户', '金额', '状态', '时间'], rows, 5); } function render() { var panel = Ui().el('panel-dashboard'); if (!panel) return; panel.innerHTML = '
' + Ui().pageHeader('运营概览', '关键指标、待办提醒与最近订单', '') + Ui().skeletonStats(6) + '
' + '

最近订单

' + Ui().skeletonTable() + '
' + '
'; function fetchStats(showLoading) { var btn = Ui().el('dashRefresh'); if (showLoading && btn) Ui().setBtnLoading(btn, true, '刷新中…'); Api().get('stats').then(function (j) { if (showLoading && btn) Ui().setBtnLoading(btn, false); if (!j) { panel.innerHTML = '
' + Ui().pageHeader('运营概览', '关键指标、待办提醒与最近订单', '') + Ui().listError('概览数据加载失败', 'dashRetry') + '
'; Ui().el('dashRetry').onclick = render; Ui().el('dashRefresh').onclick = function () { fetchStats(true); }; return; } paintDashboard(panel, j.data); }); } Ui().el('dashRefresh').onclick = function () { fetchStats(true); }; fetchStats(false); } function paintDashboard(panel, d) { var stats = statCard('用户总数', d.users, { href: '#/users', hint: '点击进入用户管理' }) + statCard('订单总数', d.orders, { href: '#/orders', hint: '含全部状态' }) + statCard('今日订单', d.orders_today, { href: '#/orders', hint: '按创建日统计' }) + statCard('待支付', d.orders_pending || 0, { href: '#/orders?status=pending', hint: '需关注超时未付' }) + statCard('活跃订阅', d.active_subscriptions, { href: '#/users', hint: '有效会员数' }) + statCard('今日收入', I().formatCents(d.revenue_today_cents), { href: '#/orders', hint: '已支付订单' }) + statCard('云端文件', d.files_total, { hint: '未删除的设计文件' }) + statCard('退款待审', d.refunds_pending || 0, { href: '#/orders?refund_status=pending', hint: '需在订单页处理' }); panel.innerHTML = '
' + Ui().pageHeader('运营概览', '关键指标、待办提醒与最近订单', '' + '全部订单') + alertBar(d) + '
' + stats + '
' + '
' + '
' + '

最近订单

' + '查看全部
' + recentOrdersTable(d.recent_orders) + '
' + quickLinks() + '
'; Ui().el('dashRefresh').onclick = render; } window.AdminViews = window.AdminViews || {}; window.AdminViews.dashboard = { render: render }; })();