import React, {useState, useEffect, useCallback} from 'react' import {View, Text, ScrollView} from '@tarojs/components' import {Empty, PullToRefresh, Space, Loading, DatePicker, Button, Picker} from '@nutui/nutui-react-taro' import {ArrowDown} from '@nutui/icons-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' import {useUser} from "@/hooks/useUser"; import {pageShopDealerReferee} from "@/api/shop/shopDealerReferee"; interface OrderWithDetails extends ShopDealerOrder { orderNo?: string customerName?: string userCommission?: string } interface PickerOption { text: string | number value: string | number disabled?: boolean children?: PickerOption[] className?: string | number } const DealerOrder: React.FC = () => { const [loading, setLoading] = useState(false) const d = new Date() const currMonth = `${d.getFullYear()}${d.getMonth() + 1}`; const currDate = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`; const [date, setDate] = useState(currMonth) const [show1, setShow1] = useState(false) const [refreshing, setRefreshing] = useState(false) const [loadingMore, setLoadingMore] = useState(false) const [orders, setOrders] = useState([]) const [currentPage, setCurrentPage] = useState(1) const [hasMore, setHasMore] = useState(true) const [users, setUsers] = useState([]) const [users2, setUsers2] = useState([]) const [visible1, setVisible1] = useState(false) const [text1, setText1] = useState('') const [selectedUserId, setSelectedUserId] = useState(undefined) const [visible2, setVisible2] = useState(false) const [text2, setText2] = useState('') const [selectedFirstUserId, setSelectedFirstUserId] = useState(undefined) const [visible3, setVisible3] = useState(false) // const [text3, setText3] = useState('') const [selectedSecondUserId, setSelectedSecondUserId] = useState(undefined) const {dealerUser} = useDealerUser() const {user} = useUser() // 获取订单数据 const fetchOrders = useCallback(async (page: number = 1, isRefresh: boolean = false) => { if (!dealerUser?.userId) return try { if (isRefresh) { setRefreshing(true) } else if (page === 1) { setLoading(true) } else { setLoadingMore(true) } let where = { userId: selectedUserId, firstUserId: selectedSecondUserId, secondUserId: selectedSecondUserId, isInvalid: 0, isSettled: 1, resourceId: user?.userId, month: date, page, limit: 10 }; if (hasRole('superAdmin') || hasRole('admin')) { console.log('>>>>>>>>>>>>是管理员') where = {...where, resourceId: undefined} } if(selectedUserId){ where = {...where,userId: selectedUserId} } if(selectedFirstUserId){ where = {...where,secondUserId: selectedFirstUserId} } const result = await pageShopDealerOrder(where) if (result?.list) { const newOrders = result.list.map(order => ({ ...order, orderNo: `${order.orderNo}`, customerName: `用户${order.userId}`, userCommission: order.firstMoney || '0.00' })) if (page === 1) { setOrders(newOrders) } else { setOrders(prev => [...prev, ...newOrders]) } setHasMore(newOrders.length === 10) setCurrentPage(page) } } catch (error) { console.error('获取分销订单失败:', error) Taro.showToast({ title: '获取订单失败', icon: 'error' }) } finally { setLoading(false) setRefreshing(false) setLoadingMore(false) } }, [dealerUser?.userId, date, selectedUserId, selectedFirstUserId, selectedSecondUserId]) // 下拉刷新 const handleRefresh = async () => { await fetchOrders(1, true) } // 加载更多 const handleLoadMore = async () => { if (!loadingMore && hasMore) { await fetchOrders(currentPage + 1) } } // const getResourceId = () => { // if (hasRole('superAdmin')) { // return undefined // } // if (hasRole('admin')) { // return user?.userId // } // return user?.userId; // } // 检查是否有特定角色 const hasRole = (roleCode: string) => { if (!user || !user.roles) { return false; } return user.roles.some(role => role.roleCode === roleCode); } const confirmPicker1 = ( options: PickerOption[], values: (string | number)[] ) => { if(values && values.length > 0){ const userId = Number(values[0]) options.forEach((option: any) => { setText1(`${option.text}`) }) // 清空其他两个筛选条件 setSelectedFirstUserId(undefined) setSelectedSecondUserId(undefined) setText2('') // setText3('') // 设置业务员筛选条件 setSelectedUserId(userId) // 关闭选择器 setVisible1(false) } } const confirmPicker2 = ( options: PickerOption[], values: (string | number)[] ) => { if(values && values.length > 0){ const firstUserId = Number(values[0]) options.forEach((option: any) => { setText2(`${option.text}`) }) // 清空其他两个筛选条件 // setSelectedUserId(undefined) // setSelectedSecondUserId(undefined) // setText1('') // setText3('') // 设置渠道一筛选条件 setSelectedFirstUserId(firstUserId) // 关闭选择器 setVisible2(false) } } const confirmPicker3 = ( _: PickerOption[], values: (string | number)[] ) => { if(values && values.length > 0){ const secondUserId = Number(values[0]) // options.forEach((option: any) => { // setText3(`${option.text}`) // }) // 清空其他两个筛选条件 setSelectedUserId(undefined) setSelectedFirstUserId(undefined) setText1('') setText2('') // 设置渠道二筛选条件 setSelectedSecondUserId(secondUserId) // 关闭选择器 setVisible3(false) } } const getStatusText = (isSettled?: number, isInvalid?: number) => { if (isInvalid === 1) return '未签约' if (isSettled === 1) return '已结算' return '待结算' } function fetchUsers() { pageShopDealerReferee({ dealerId: selectedFirstUserId || Taro.getStorageSync('UserId'), isAdmin: true, limit: 100 }).then(res => { const data = res?.list.map(d => { return { text: d.nickname, value: d.userId, disabled: false, children: [], className: '' } }) setUsers(data || []) }) pageShopDealerReferee({ dealerId: selectedUserId || Taro.getStorageSync('UserId'), limit: 100 }).then(res => { const data = res?.list.map(d => { return { text: d.nickname, value: d.userId, disabled: false, children: [], className: '' } }) setUsers2(data || []) }) } // 初始化加载数据 useEffect(() => { if (dealerUser?.userId) { fetchOrders(1).then() } fetchUsers() }, [fetchOrders, date]) useEffect(() => { },[]) const renderOrderItem = (order: OrderWithDetails) => ( 订单号:{order.orderNo} 客户名称:{order.title} {/* 添加收益用户信息显示 */} 收益计算 {/* 一级佣金30 */} {(hasRole('superAdmin') || hasRole('admin') || Taro.getStorageSync('UserId') != order.thirdUserId) && ( <> {Taro.getStorageSync('UserId') != order.secondUserId && ( <> {(order.firstNickname || order.firstUserId) && ( 一级佣金:{order.firstNickname || `用户${order.firstUserId}`} (¥{order.firstMoney || '0.00'}) )} )} {(order.secondUserId || order.secondUserId) && ( 二级佣金:{order.secondNickname || `用户${order.secondUserId}`} (¥{order.secondMoney || '0.00'}) )} )} {/* 三级分销商 */} {(order.thirdUserId !== undefined && order.thirdUserId > 0) && ( 三级佣金:{order.thirdNickname || `用户${order.thirdUserId}`} (¥{order.thirdMoney || '0.00'}) )} 结算电量:{order.degreePrice} 结算金额:{order.settledPrice} 单价:{order.price} 税费:{order.rate} 实发金额:{order.payPrice} 结算月份:{order.month} 结算状态:{getStatusText(order.isSettled, order.isInvalid)} {order.settleTime} ) return ( {/*筛选工具条*/} setShow1(true)}>{date ? `${date}` : '请选择'} setShow1(true)}/> {/*{selectedUserId && }*/} {/*账单列表*/} {loading && orders.length === 0 ? ( 加载中... ) : orders.length > 0 ? ( <> {orders.map(renderOrderItem)} {loadingMore && ( 加载更多... )} {!hasMore && orders.length > 0 && ( 没有更多数据了 )} ) : ( )} setShow1(false)} onConfirm={(_, values) => { setShow1(false) setDate(`${values[0]}${values[1]}`) }} /> confirmPicker1(list, values)} onClose={() => setVisible1(false)} /> confirmPicker2(list, values)} onClose={() => setVisible2(false)} /> confirmPicker3(list, values)} onClose={() => setVisible3(false)} /> ) } export default DealerOrder