补分销中心页面

This commit is contained in:
2025-08-10 01:38:17 +08:00
parent 44fd815fe7
commit afe54770a8
20 changed files with 2499 additions and 4 deletions

238
src/dealer/orders/index.tsx Normal file
View File

@@ -0,0 +1,238 @@
import { useState, useEffect } from 'react'
import { View, Image } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { Empty, Tabs, TabPane } from '@nutui/nutui-react-taro'
import './index.scss'
interface DistributionOrder {
id: string
orderNo: string
productName: string
productImage: string
buyerName: string
orderAmount: number
commission: number
commissionRate: number
status: 'pending' | 'confirmed' | 'settled'
statusText: string
createTime: string
settleTime?: string
}
function DistributionOrders() {
const [activeTab, setActiveTab] = useState('0')
const [orders, setOrders] = useState<DistributionOrder[]>([])
const [loading, setLoading] = useState(true)
const [stats, setStats] = useState({
totalCommission: 0,
pendingCommission: 0,
settledCommission: 0,
totalOrders: 0
})
useEffect(() => {
Taro.setNavigationBarTitle({
title: '分销订单'
})
loadOrders()
}, [])
const loadOrders = async () => {
try {
setLoading(true)
// 模拟数据
const mockData: DistributionOrder[] = [
{
id: '1',
orderNo: 'DD202401150001',
productName: '有机蔬菜礼盒装',
productImage: 'https://img12.360buyimg.com/imagetools/jfs/t1/143702/31/16654/116794/5fc6f541Edebf8a57/4138097748889987.png',
buyerName: '张***',
orderAmount: 299.00,
commission: 29.90,
commissionRate: 10,
status: 'settled',
statusText: '已结算',
createTime: '2024-01-15 14:30:00',
settleTime: '2024-01-16 10:00:00'
},
{
id: '2',
orderNo: 'DD202401140002',
productName: '新鲜水果组合',
productImage: 'https://img12.360buyimg.com/imagetools/jfs/t1/143702/31/16654/116794/5fc6f541Edebf8a57/4138097748889987.png',
buyerName: '李***',
orderAmount: 158.00,
commission: 15.80,
commissionRate: 10,
status: 'confirmed',
statusText: '已确认',
createTime: '2024-01-14 09:20:00'
},
{
id: '3',
orderNo: 'DD202401130003',
productName: '农家土鸡蛋',
productImage: 'https://img12.360buyimg.com/imagetools/jfs/t1/143702/31/16654/116794/5fc6f541Edebf8a57/4138097748889987.png',
buyerName: '王***',
orderAmount: 88.00,
commission: 8.80,
commissionRate: 10,
status: 'pending',
statusText: '待确认',
createTime: '2024-01-13 16:45:00'
}
]
// 计算统计数据
const totalCommission = mockData.reduce((sum, order) => sum + order.commission, 0)
const pendingCommission = mockData.filter(o => o.status === 'pending').reduce((sum, order) => sum + order.commission, 0)
const settledCommission = mockData.filter(o => o.status === 'settled').reduce((sum, order) => sum + order.commission, 0)
setTimeout(() => {
setOrders(mockData)
setStats({
totalCommission,
pendingCommission,
settledCommission,
totalOrders: mockData.length
})
setLoading(false)
}, 1000)
} catch (error) {
console.error('加载分销订单失败:', error)
setLoading(false)
}
}
const getStatusColor = (status: string) => {
switch (status) {
case 'settled':
return '#10B981'
case 'confirmed':
return '#3B82F6'
case 'pending':
return '#F59E0B'
default:
return '#6B7280'
}
}
const getFilteredOrders = () => {
switch (activeTab) {
case '1':
return orders.filter(order => order.status === 'pending')
case '2':
return orders.filter(order => order.status === 'confirmed')
case '3':
return orders.filter(order => order.status === 'settled')
default:
return orders
}
}
const handleOrderClick = (order: DistributionOrder) => {
Taro.showModal({
title: '订单详情',
content: `
订单号:${order.orderNo}
商品:${order.productName}
购买人:${order.buyerName}
订单金额:¥${order.orderAmount.toFixed(2)}
佣金比例:${order.commissionRate}%
佣金金额:¥${order.commission.toFixed(2)}
下单时间:${order.createTime}
${order.settleTime ? `结算时间:${order.settleTime}` : ''}
`.trim(),
showCancel: false
})
}
if (loading) {
return (
<View className="distribution-orders-page">
<View className="loading-container">
<View className="text-center text-gray-500">...</View>
</View>
</View>
)
}
return (
<View className="distribution-orders-page">
{/* 统计卡片 */}
<View className="stats-card">
<View className="stats-grid">
<View className="stat-item">
<View className="stat-value">¥{stats.totalCommission.toFixed(2)}</View>
<View className="stat-label"></View>
</View>
<View className="stat-item">
<View className="stat-value">¥{stats.settledCommission.toFixed(2)}</View>
<View className="stat-label"></View>
</View>
<View className="stat-item">
<View className="stat-value">¥{stats.pendingCommission.toFixed(2)}</View>
<View className="stat-label"></View>
</View>
<View className="stat-item">
<View className="stat-value">{stats.totalOrders}</View>
<View className="stat-label"></View>
</View>
</View>
</View>
{/* 订单列表 */}
<View className="orders-container">
<Tabs value={activeTab} onChange={(value) => setActiveTab(value)}>
<TabPane title="全部" />
<TabPane title="待确认" />
<TabPane title="已确认" />
<TabPane title="已结算" />
</Tabs>
<View className="orders-list">
{getFilteredOrders().length === 0 ? (
<View className="empty-container">
<Empty description="暂无订单" />
</View>
) : (
getFilteredOrders().map((order) => (
<View
key={order.id}
className="order-item"
onClick={() => handleOrderClick(order)}
>
<View className="order-header">
<View className="order-no">{order.orderNo}</View>
<View
className="order-status"
style={{ color: getStatusColor(order.status) }}
>
{order.statusText}
</View>
</View>
<View className="order-content">
<Image className="product-image" src={order.productImage} />
<View className="order-info">
<View className="product-name">{order.productName}</View>
<View className="buyer-info">{order.buyerName}</View>
<View className="amount-info">
<View className="order-amount">¥{order.orderAmount.toFixed(2)}</View>
<View className="commission">¥{order.commission.toFixed(2)}</View>
</View>
</View>
</View>
<View className="order-time">{order.createTime}</View>
</View>
))
)}
</View>
</View>
</View>
)
}
export default DistributionOrders