- 新增 UserCardStats 接口定义余额/积分/优惠券/礼品卡数据结构 - 实现 getUserCardStats 函数聚合返回用户卡片统计数据 - 替换原有多个独立请求为单一聚合接口提升性能 - 修改 useUserData Hook 使用新聚合接口并调整数据类型 - 移除废弃的 pageShopOrder 和相关 API 导入 - 优化用户登录后自动刷新卡片统计数据逻辑
117 lines
2.8 KiB
TypeScript
117 lines
2.8 KiB
TypeScript
import { useState, useEffect, useCallback } from 'react';
|
|
import { getUserOrderStats, UserOrderStats } from '@/api/user';
|
|
import Taro from '@tarojs/taro';
|
|
|
|
/**
|
|
* 订单统计Hook
|
|
* 用于管理用户订单各状态的数量统计
|
|
*/
|
|
export const useOrderStats = () => {
|
|
const [orderStats, setOrderStats] = useState<UserOrderStats>({
|
|
pending: 0, // 待付款
|
|
paid: 0, // 待发货
|
|
shipped: 0, // 待收货
|
|
completed: 0, // 已完成
|
|
refund: 0, // 退货/售后
|
|
total: 0 // 总订单数
|
|
});
|
|
|
|
const [loading, setLoading] = useState(false);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
/**
|
|
* 获取订单统计数据
|
|
*/
|
|
const fetchOrderStats = useCallback(async (showToast = false) => {
|
|
try {
|
|
setLoading(true);
|
|
setError(null);
|
|
|
|
if(!Taro.getStorageSync('UserId')){
|
|
return false;
|
|
}
|
|
|
|
// 聚合接口:一次请求返回各状态数量(后台按用户做了缓存)
|
|
const stats = await getUserOrderStats();
|
|
|
|
setOrderStats({
|
|
pending: stats?.pending || 0,
|
|
paid: stats?.paid || 0,
|
|
shipped: stats?.shipped || 0,
|
|
completed: stats?.completed || 0,
|
|
refund: stats?.refund || 0,
|
|
total: stats?.total || 0
|
|
})
|
|
|
|
if (showToast) {
|
|
Taro.showToast({
|
|
title: '数据已更新',
|
|
icon: 'success',
|
|
duration: 1500
|
|
});
|
|
}
|
|
} catch (err: any) {
|
|
const errorMessage = err.message || '获取订单统计失败';
|
|
setError(errorMessage);
|
|
|
|
console.error('获取订单统计失败:', err);
|
|
|
|
if (showToast) {
|
|
Taro.showToast({
|
|
title: errorMessage,
|
|
icon: 'error',
|
|
duration: 2000
|
|
});
|
|
}
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}, []);
|
|
|
|
/**
|
|
* 刷新订单统计数据
|
|
*/
|
|
const refreshOrderStats = useCallback(() => {
|
|
return fetchOrderStats(true);
|
|
}, [fetchOrderStats]);
|
|
|
|
/**
|
|
* 获取指定状态的订单数量
|
|
*/
|
|
const getOrderCount = useCallback((status: keyof UserOrderStats) => {
|
|
return orderStats[status] || 0;
|
|
}, [orderStats]);
|
|
|
|
/**
|
|
* 检查是否有待处理的订单
|
|
*/
|
|
const hasPendingOrders = useCallback(() => {
|
|
return orderStats.pending > 0 || orderStats.paid > 0 || orderStats.shipped > 0;
|
|
}, [orderStats]);
|
|
|
|
/**
|
|
* 获取总的待处理订单数量
|
|
*/
|
|
const getTotalPendingCount = useCallback(() => {
|
|
return orderStats.pending + orderStats.paid + orderStats.shipped;
|
|
}, [orderStats]);
|
|
|
|
// 组件挂载时自动获取数据
|
|
useEffect(() => {
|
|
fetchOrderStats();
|
|
}, [fetchOrderStats]);
|
|
|
|
return {
|
|
orderStats,
|
|
loading,
|
|
error,
|
|
fetchOrderStats,
|
|
refreshOrderStats,
|
|
getOrderCount,
|
|
hasPendingOrders,
|
|
getTotalPendingCount
|
|
};
|
|
};
|
|
|
|
export default useOrderStats;
|