Files
xingque/utils/merchant-order-stats.js
2026-06-27 05:41:55 +08:00

96 lines
3.0 KiB
JavaScript

/**
* 商家订单统计:优先新接口,失败时回退订单列表中的 pending 字段
*/
import { STAFF_API, isStaffMode } from './staff-api.js';
const EMPTY_ORDER = {
pending_count: 0,
pending_amount: '0.00',
completed_count: 0,
completed_amount: '0.00',
refund_count: 0,
refund_amount: '0.00',
dispatch_count: 0,
dispatch_amount: '0.00',
};
export async function fetchMerchantOrderStats(request, params = {}) {
const statsUrl = isStaffMode() ? STAFF_API.orderStats : '/dingdan/sjshujutj';
try {
const res = await request({ url: statsUrl, method: 'POST', data: params });
if (res.statusCode === 200 && res.data && (res.data.code === 0 || res.data.code === 200)) {
return res.data.data || {};
}
} catch (e) {
console.warn('统计接口失败,尝试回退', e);
}
try {
const listUrl = isStaffMode() ? STAFF_API.orderList : '/dingdan/sjdingdanhq';
const fb = await request({
url: listUrl,
method: 'POST',
data: { zhuangtai_list: [8], page: 1, page_size: 1, ...params },
});
if (fb.statusCode === 200 && fb.data && fb.data.code === 0) {
const d = fb.data.data || {};
return {
order: {
...EMPTY_ORDER,
pending_count: d.pending_count || 0,
pending_amount: d.pending_amount || '0.00',
},
can_view_finance: true,
};
}
} catch (e) {
console.warn('统计回退失败', e);
}
return { order: { ...EMPTY_ORDER }, can_view_finance: true };
}
export function applyOrderStatsToPage(page, data) {
const order = data.order || data || {};
const penalty = data.penalty || {};
const fakuanP = penalty.fakuan_pending || 0;
const jifenP = penalty.jifen_pending || 0;
page.setData({
canViewFinance: data.can_view_finance !== false,
orderStats: {
pending_count: order.pending_count || 0,
pending_amount: order.pending_amount || '0.00',
completed_count: order.completed_count || 0,
completed_amount: order.completed_amount || '0.00',
refund_count: order.refund_count || 0,
refund_amount: order.refund_amount || '0.00',
dispatch_count: order.dispatch_count || 0,
dispatch_amount: order.dispatch_amount || '0.00',
},
penaltyStats: {
fakuan_pending: fakuanP,
fakuan_pending_amount: penalty.fakuan_pending_amount || '0.00',
jifen_pending: jifenP,
},
pendingCount: order.pending_count || 0,
punishPending: fakuanP + jifenP,
});
}
export function applyOrderStatsToHome(page, data, statsKey = 'stats') {
const order = data.order || data || {};
const base = page.data[statsKey] || {};
page.setData({
[statsKey]: {
...base,
pendingCount: order.pending_count || 0,
pendingAmount: order.pending_amount || '0.00',
completedCount: order.completed_count || 0,
completedAmount: order.completed_amount || '0.00',
refundCount: order.refund_count || 0,
refundAmount: order.refund_amount || '0.00',
dispatchCount: order.dispatch_count || 0,
dispatchAmount: order.dispatch_amount || '0.00',
},
});
}