import { onMounted, ref } from 'vue';
import { adminHeader } from './AdminHeader.js';
export default {
setup() {
const orders = ref([]);
const stats = ref({ totalOrders: 0, paidOrders: 0, pendingOrders: 0, refundedOrders: 0, revenueUsdCents: 0 });
const total = ref(0);
const loading = ref(true);
const error = ref('');
const filters = ref({ status: '', provider: '', search: '' });
const load = async () => {
loading.value = true;
error.value = '';
const params = new URLSearchParams({ page: '1', pageSize: '100' });
Object.entries(filters.value).forEach(([key, value]) => value && params.set(key, value));
try {
const [orderResponse, statsResponse] = await Promise.all([
fetch('/admin/api/orders?' + params.toString(), { credentials: 'same-origin' }),
fetch('/admin/api/orders/stats', { credentials: 'same-origin' }),
]);
if (!orderResponse.ok || !statsResponse.ok) throw new Error('加载订单失败');
const orderPayload = await orderResponse.json();
const statsPayload = await statsResponse.json();
orders.value = orderPayload.data.list || [];
total.value = orderPayload.data.total || 0;
stats.value = statsPayload.data;
} catch (reason) {
error.value = reason instanceof Error ? reason.message : '加载订单失败';
} finally {
loading.value = false;
}
};
const money = order => order.currency === 'USD'
? '$' + (order.amount / 100).toFixed(2)
: order.providerAmount + ' ' + order.currency;
const dateTime = value => value ? new Date(value).toLocaleString('zh-CN', { hour12: false }) : '-';
const statusText = status => ({ pending: '待支付', paid: '已支付', cancelled: '已关闭', refunded: '已退款' }[status] || status);
const statusClass = status => ({
paid: 'bg-green-100 text-green-800', pending: 'bg-amber-100 text-amber-800',
cancelled: 'bg-gray-100 text-gray-700', refunded: 'bg-blue-100 text-blue-800',
}[status] || 'bg-gray-100 text-gray-700');
const providerText = provider => ({ stripe: 'Stripe', binance_pay: 'Binance Pay' }[provider] || provider || '-');
onMounted(load);
return { orders, stats, total, loading, error, filters, load, money, dateTime, statusText, statusClass, providerText };
},
template: `
${adminHeader('orders')}
报告订单
{{ stats.totalOrders }}
已支付
{{ stats.paidOrders }}
待支付
{{ stats.pendingOrders }}
已退款
{{ stats.refundedOrders }}
Stripe 收入
\${{ (stats.revenueUsdCents / 100).toFixed(2) }}
{{ error }}
| 订单 / 报告 | 客户 | 渠道 | 金额 | 状态 | 渠道交易号 | 时间 |
| 正在加载订单... |
| 暂无符合条件的订单 |
{{ order.orderNo }}{{ order.reportId || '-' }}{{ order.accessCode }} |
{{ order.customerEmail || '-' }} |
{{ providerText(order.provider) }} |
{{ money(order) }} |
{{ statusText(order.status) }} |
{{ order.providerTransactionId || order.providerOrderId || '-' }} |
创建 {{ dateTime(order.createdAt) }}支付 {{ dateTime(order.payTime) }} |
`,
};