import React, { useState, useEffect, useCallback } from 'react' import { View, Text } from '@tarojs/components' import { Empty, Tabs, Tag, PullToRefresh, Loading } from '@nutui/nutui-react-taro' import Taro from '@tarojs/taro' import { pageShopDealerOrder } from '@/api/shop/shopDealerOrder' import { useDealerUser } from '@/hooks/useDealerUser' import type { ShopDealerOrder } from '@/api/shop/shopDealerOrder/model' interface OrderWithDetails extends ShopDealerOrder { orderNo?: string customerName?: string totalCommission?: string // 当前用户在此订单中的层级和佣金 userLevel?: 1 | 2 | 3 userCommission?: string } const DealerOrders: React.FC = () => { const [activeTab, setActiveTab] = useState('0') const [loading, setLoading] = useState(false) const [orders, setOrders] = useState([]) const [statistics, setStatistics] = useState({ totalOrders: 0, totalCommission: '0.00', pendingCommission: '0.00', // 分层统计 level1: { orders: 0, commission: '0.00' }, level2: { orders: 0, commission: '0.00' }, level3: { orders: 0, commission: '0.00' } }) const { dealerUser } = useDealerUser() // 获取订单数据 - 查询当前用户作为各层级分销商的所有订单 const fetchOrders = useCallback(async () => { if (!dealerUser?.userId) return try { setLoading(true) // 并行查询三个层级的订单 const [level1Result, level2Result, level3Result] = await Promise.all([ // 一级分销商订单 pageShopDealerOrder({ page: 1, limit: 100, firstUserId: dealerUser.userId }), // 二级分销商订单 pageShopDealerOrder({ page: 1, limit: 100, secondUserId: dealerUser.userId }), // 三级分销商订单 pageShopDealerOrder({ page: 1, limit: 100, thirdUserId: dealerUser.userId }) ]) const allOrders: OrderWithDetails[] = [] const stats = { totalOrders: 0, totalCommission: '0.00', pendingCommission: '0.00', level1: { orders: 0, commission: '0.00' }, level2: { orders: 0, commission: '0.00' }, level3: { orders: 0, commission: '0.00' } } // 处理一级分销订单 if (level1Result?.list) { const level1Orders = level1Result.list.map(order => ({ ...order, orderNo: `DD${order.orderId}`, customerName: `用户${order.userId}`, userLevel: 1 as const, userCommission: order.firstMoney || '0.00', totalCommission: ( parseFloat(order.firstMoney || '0') + parseFloat(order.secondMoney || '0') + parseFloat(order.thirdMoney || '0') ).toFixed(2) })) allOrders.push(...level1Orders) stats.level1.orders = level1Orders.length stats.level1.commission = level1Orders.reduce((sum, order) => sum + parseFloat(order.userCommission || '0'), 0 ).toFixed(2) } // 处理二级分销订单 if (level2Result?.list) { const level2Orders = level2Result.list.map(order => ({ ...order, orderNo: `DD${order.orderId}`, customerName: `用户${order.userId}`, userLevel: 2 as const, userCommission: order.secondMoney || '0.00', totalCommission: ( parseFloat(order.firstMoney || '0') + parseFloat(order.secondMoney || '0') + parseFloat(order.thirdMoney || '0') ).toFixed(2) })) allOrders.push(...level2Orders) stats.level2.orders = level2Orders.length stats.level2.commission = level2Orders.reduce((sum, order) => sum + parseFloat(order.userCommission || '0'), 0 ).toFixed(2) } // 处理三级分销订单 if (level3Result?.list) { const level3Orders = level3Result.list.map(order => ({ ...order, orderNo: `DD${order.orderId}`, customerName: `用户${order.userId}`, userLevel: 3 as const, userCommission: order.thirdMoney || '0.00', totalCommission: ( parseFloat(order.firstMoney || '0') + parseFloat(order.secondMoney || '0') + parseFloat(order.thirdMoney || '0') ).toFixed(2) })) allOrders.push(...level3Orders) stats.level3.orders = level3Orders.length stats.level3.commission = level3Orders.reduce((sum, order) => sum + parseFloat(order.userCommission || '0'), 0 ).toFixed(2) } // 去重(同一个订单可能在多个层级中出现) const uniqueOrders = allOrders.filter((order, index, self) => index === self.findIndex(o => o.orderId === order.orderId) ) // 计算总统计 stats.totalOrders = uniqueOrders.length stats.totalCommission = ( parseFloat(stats.level1.commission) + parseFloat(stats.level2.commission) + parseFloat(stats.level3.commission) ).toFixed(2) stats.pendingCommission = allOrders .filter(order => order.isSettled === 0) .reduce((sum, order) => sum + parseFloat(order.userCommission || '0'), 0) .toFixed(2) setOrders(uniqueOrders) setStatistics(stats) } catch (error) { console.error('获取分销订单失败:', error) Taro.showToast({ title: '获取订单失败', icon: 'error' }) } finally { setLoading(false) } }, [dealerUser?.userId]) // 刷新数据 const handleRefresh = async () => { await fetchOrders() } // 初始化加载数据 useEffect(() => { if (dealerUser?.userId) { fetchOrders().then() } }, [fetchOrders]) const getStatusText = (isSettled?: number, isInvalid?: number) => { if (isInvalid === 1) return '已失效' if (isSettled === 1) return '已结算' return '待结算' } const getStatusColor = (isSettled?: number, isInvalid?: number) => { if (isInvalid === 1) return 'danger' if (isSettled === 1) return 'success' return 'warning' } const renderOrderItem = (order: OrderWithDetails) => ( 订单号:{order.orderNo} 客户:{order.customerName} {/* 显示用户在此订单中的层级 */} {order.userLevel === 1 && '一级分销'} {order.userLevel === 2 && '二级分销'} {order.userLevel === 3 && '三级分销'} {getStatusText(order.isSettled, order.isInvalid)} 订单金额:¥{order.orderPrice || '0.00'} 我的佣金:¥{order.userCommission} 总佣金:¥{order.totalCommission} {order.createTime} ) // 根据状态和层级过滤订单 const getFilteredOrders = (filter: string) => { switch (filter) { case '1': // 一级分销 return orders.filter(order => order.userLevel === 1) case '2': // 二级分销 return orders.filter(order => order.userLevel === 2) case '3': // 三级分销 return orders.filter(order => order.userLevel === 3) case '4': // 待结算 return orders.filter(order => order.isSettled === 0 && order.isInvalid === 0) case '5': // 已结算 return orders.filter(order => order.isSettled === 1) case '6': // 已失效 return orders.filter(order => order.isInvalid === 1) default: // 全部 return orders } } if (!dealerUser) { return ( 加载中... ) } return ( {/* 统计卡片 */} {/* 总体统计 */} {statistics.totalOrders} 总订单 ¥{statistics.totalCommission} 总佣金 ¥{statistics.pendingCommission} 待结算 {/* 分层统计 */} 分层统计 {statistics.level1.orders} 一级订单 ¥{statistics.level1.commission} {statistics.level2.orders} 二级订单 ¥{statistics.level2.commission} {statistics.level3.orders} 三级订单 ¥{statistics.level3.commission} {/* 订单列表 */} setActiveTab}> {loading ? ( 加载中... ) : getFilteredOrders('0').length > 0 ? ( getFilteredOrders('0').map(renderOrderItem) ) : ( )} {getFilteredOrders('1').length > 0 ? ( getFilteredOrders('1').map(renderOrderItem) ) : ( )} {getFilteredOrders('2').length > 0 ? ( getFilteredOrders('2').map(renderOrderItem) ) : ( )} {getFilteredOrders('3').length > 0 ? ( getFilteredOrders('3').map(renderOrderItem) ) : ( )} {getFilteredOrders('4').length > 0 ? ( getFilteredOrders('4').map(renderOrderItem) ) : ( )} {getFilteredOrders('5').length > 0 ? ( getFilteredOrders('5').map(renderOrderItem) ) : ( )} {getFilteredOrders('6').length > 0 ? ( getFilteredOrders('6').map(renderOrderItem) ) : ( )} ) } export default DealerOrders