From 545fb393eafa8b3ce8457013ff76dbb6d3ddb47e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 13 Oct 2025 21:04:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(dealer):=20=E6=96=B0=E5=A2=9E=E8=B5=84?= =?UTF-8?q?=E9=87=91=E6=98=8E=E7=BB=86=E9=A1=B5=E9=9D=A2=E5=8F=8A=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 dealer/capital 路由配置中添加 detail 子路由 - 创建资金明细详情页组件 /dealer/capital/detail.tsx - 实现资金流水列表展示,支持下拉刷新和上拉加载更多 - 添加日期筛选功能,允许按年月查看资金记录 -优化资金类型显示逻辑,区分电费收益、提现支出等不同类型 - 修改资金明细接口字段,将 describe 字段改为 comments - 调整页面布局样式,适配移动端显示效果 -为资金明细项添加点击跳转至详情页的功能- 更新订单页面日期选择器交互方式和位置- 统一页面标题和导航栏文案为“详情” --- src/api/shop/shopDealerCapital/model/index.ts | 4 +- src/app.config.ts | 1 + src/dealer/capital/detail.config.ts | 3 + src/dealer/capital/detail.tsx | 174 ++++++++++++++++++ src/dealer/capital/index.tsx | 138 +++++++------- src/dealer/orders/index.tsx | 60 +++--- 6 files changed, 285 insertions(+), 95 deletions(-) create mode 100644 src/dealer/capital/detail.config.ts create mode 100644 src/dealer/capital/detail.tsx diff --git a/src/api/shop/shopDealerCapital/model/index.ts b/src/api/shop/shopDealerCapital/model/index.ts index e6a6bc2..f2155b8 100644 --- a/src/api/shop/shopDealerCapital/model/index.ts +++ b/src/api/shop/shopDealerCapital/model/index.ts @@ -1,4 +1,4 @@ -import type { PageParam } from '@/api/index'; +import type { PageParam } from '@/api'; /** * 分销商资金明细表 @@ -15,7 +15,7 @@ export interface ShopDealerCapital { // 金额 money?: string; // 描述 - describe?: string; + comments?: string; // 对方用户ID toUserId?: number; // 商城ID diff --git a/src/app.config.ts b/src/app.config.ts index 3f0db59..1e78017 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -59,6 +59,7 @@ export default defineAppConfig({ "withdraw/index", "orders/index", "capital/index", + "capital/detail", "team/index", "qrcode/index", "invite-stats/index", diff --git a/src/dealer/capital/detail.config.ts b/src/dealer/capital/detail.config.ts new file mode 100644 index 0000000..9c57e4e --- /dev/null +++ b/src/dealer/capital/detail.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + navigationBarTitleText: '详情' +}) diff --git a/src/dealer/capital/detail.tsx b/src/dealer/capital/detail.tsx new file mode 100644 index 0000000..53654ab --- /dev/null +++ b/src/dealer/capital/detail.tsx @@ -0,0 +1,174 @@ +import React, {useState, useEffect, useCallback} from 'react' +import {View, Text, ScrollView} from '@tarojs/components' +import {Empty, PullToRefresh, Loading} from '@nutui/nutui-react-taro' +import Taro from '@tarojs/taro' +import {pageShopDealerCapital} from '@/api/shop/shopDealerCapital' +import {useDealerUser} from '@/hooks/useDealerUser' +import type {ShopDealerCapital} from '@/api/shop/shopDealerCapital/model' + +const DealerCapital: React.FC = () => { + const [loading, setLoading] = useState(false) + const [refreshing, setRefreshing] = useState(false) + const [loadingMore, setLoadingMore] = useState(false) + const [capital, setCapital] = useState([]) + const [currentPage, setCurrentPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + + const {dealerUser} = useDealerUser() + + // 获取订单数据 + const fetchCapital = 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) + } + + const result = await pageShopDealerCapital({ + page, + limit: 10 + }) + + if (result?.list) { + const newCapital = result.list.map(item => ({ + ...item, + orderId: item.orderId + })) + + if (page === 1) { + setCapital(newCapital) + } else { + setCapital(prev => [...prev, ...newCapital]) + } + + setHasMore(newCapital.length === 10) + setCurrentPage(page) + } + + } catch (error) { + console.error('获取分销订单失败:', error) + Taro.showToast({ + title: '获取订单失败', + icon: 'error' + }) + } finally { + setLoading(false) + setRefreshing(false) + setLoadingMore(false) + } + }, [dealerUser?.userId]) + + // 下拉刷新 + const handleRefresh = async () => { + await fetchCapital(1, true) + } + + // 加载更多 + const handleLoadMore = async () => { + if (!loadingMore && hasMore) { + await fetchCapital(currentPage + 1) + } + } + + const getFlowType = (index?: number) => { + if (index === 10) return '电费收益' + if (index === 20) return '提现支出' + if (index === 30) return '转账支出' + if (index === 40) return '转账收入' + return 'warning' + } + + // 初始化加载数据 + useEffect(() => { + if (dealerUser?.userId) { + fetchCapital(1) + } + }, [fetchCapital]) + + const renderCapitalItem = (item: ShopDealerCapital) => ( + + + + {getFlowType(item.flowType)} + + + ¥{Number(item.money).toFixed(2)} + + + + {item.comments && ( + + + {item.comments} + + + )} + + + 订单号:{item.orderId} + + + + + {item.createTime} + + + + + ) + + return ( + + + + + {loading && capital.length === 0 ? ( + + + 加载中... + + ) : capital.length > 0 ? ( + <> + {capital.map(renderCapitalItem)} + {loadingMore && ( + + + 加载更多... + + )} + {!hasMore && capital.length > 0 && ( + + 没有更多数据了 + + )} + + ) : ( + + )} + + + + + ) +} + +export default DealerCapital diff --git a/src/dealer/capital/index.tsx b/src/dealer/capital/index.tsx index b882dd7..4b13f9c 100644 --- a/src/dealer/capital/index.tsx +++ b/src/dealer/capital/index.tsx @@ -1,29 +1,28 @@ import React, {useState, useEffect, useCallback} from 'react' import {View, Text, ScrollView} from '@tarojs/components' -import {Empty, PullToRefresh, Loading} from '@nutui/nutui-react-taro' +import {Empty, PullToRefresh, Cell, DatePicker, Loading} from '@nutui/nutui-react-taro' import Taro from '@tarojs/taro' -import {pageShopDealerOrder} from '@/api/shop/shopDealerOrder' +import {pageShopDealerCapital} from '@/api/shop/shopDealerCapital' import {useDealerUser} from '@/hooks/useDealerUser' -import type {ShopDealerOrder} from '@/api/shop/shopDealerOrder/model' +import type {ShopDealerCapital} from '@/api/shop/shopDealerCapital/model' +import navTo from "@/utils/common"; -interface OrderWithDetails extends ShopDealerOrder { - orderNo?: string - customerName?: string - userCommission?: string -} - -const DealerOrders: React.FC = () => { +const DealerCapital: React.FC = () => { const [loading, setLoading] = useState(false) + const d = new Date() + const currDate = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`; + const [date, setDate] = useState(currDate) + const [show1, setShow1] = useState(false) const [refreshing, setRefreshing] = useState(false) const [loadingMore, setLoadingMore] = useState(false) - const [orders, setOrders] = useState([]) + const [capital, setCapital] = useState([]) const [currentPage, setCurrentPage] = useState(1) const [hasMore, setHasMore] = useState(true) const {dealerUser} = useDealerUser() // 获取订单数据 - const fetchOrders = useCallback(async (page: number = 1, isRefresh: boolean = false) => { + const fetchCapital = useCallback(async (page: number = 1, isRefresh: boolean = false) => { if (!dealerUser?.userId) return try { @@ -35,27 +34,24 @@ const DealerOrders: React.FC = () => { setLoadingMore(true) } - const result = await pageShopDealerOrder({ - isInvalid: 0, + const result = await pageShopDealerCapital({ page, limit: 10 }) if (result?.list) { - const newOrders = result.list.map(order => ({ - ...order, - orderNo: `${order.orderId}`, - customerName: `用户${order.userId}`, - userCommission: order.firstMoney || '0.00' + const newCapital = result.list.map(item => ({ + ...item, + orderId: item.orderId })) if (page === 1) { - setOrders(newOrders) + setCapital(newCapital) } else { - setOrders(prev => [...prev, ...newOrders]) + setCapital(prev => [...prev, ...newCapital]) } - setHasMore(newOrders.length === 10) + setHasMore(newCapital.length === 10) setCurrentPage(page) } @@ -74,67 +70,55 @@ const DealerOrders: React.FC = () => { // 下拉刷新 const handleRefresh = async () => { - await fetchOrders(1, true) + await fetchCapital(1, true) } // 加载更多 const handleLoadMore = async () => { if (!loadingMore && hasMore) { - await fetchOrders(currentPage + 1) + await fetchCapital(currentPage + 1) } } + const getFlowType = (index?: number) => { + if (index === 10) return '电费收益' + if (index === 20) return '提现支出' + if (index === 30) return '转账支出' + if (index === 40) return '转账收入' + return 'warning' + } + // 初始化加载数据 useEffect(() => { if (dealerUser?.userId) { - fetchOrders(1) + fetchCapital(1) } - }, [fetchOrders]) + }, [fetchCapital]) - 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) => ( - + const renderCapitalItem = (item: ShopDealerCapital) => ( + navTo(`/dealer/capital/detail?id=${item.id}`)}> - 电费收益 + {getFlowType(item.flowType)} - ¥{(Number(order.orderPrice) * 10).toFixed(2)} + ¥{Number(item.money).toFixed(2)} + {/*{item.comments && (*/} + {/* */} + {/* */} + {/* {item.comments}*/} + {/* */} + {/* */} + {/*)}*/} - 客户名称:{order.comments} + {item.createTime} - 收益比率:{order.rate} - - - - - - 结算电量:{order.orderPrice || '0.00'} - - - 状态:{getStatusText(order.isSettled, order.isInvalid)} - - - - - - {order.settleTime} + 我的收益:{item.money} @@ -143,6 +127,13 @@ const DealerOrders: React.FC = () => { return ( + + setShow1(true)} + /> + { > - {loading && orders.length === 0 ? ( + {loading && capital.length === 0 ? ( 加载中... - ) : orders.length > 0 ? ( + ) : capital.length > 0 ? ( <> - {orders.map(renderOrderItem)} + {capital.map(renderCapitalItem)} {loadingMore && ( 加载更多... )} - {!hasMore && orders.length > 0 && ( + {!hasMore && capital.length > 0 && ( 没有更多数据了 @@ -186,8 +179,23 @@ const DealerOrders: React.FC = () => { + setShow1(false)} + onConfirm={(_, values) => { + setShow1(false) + setDate(`${values[0]}${values[1]}`) + }} + /> ) } -export default DealerOrders +export default DealerCapital diff --git a/src/dealer/orders/index.tsx b/src/dealer/orders/index.tsx index 25f2ce3..796ef75 100644 --- a/src/dealer/orders/index.tsx +++ b/src/dealer/orders/index.tsx @@ -12,10 +12,11 @@ interface OrderWithDetails extends ShopDealerOrder { userCommission?: string } -const DealerOrders: React.FC = () => { +const DealerOrder: React.FC = () => { const [loading, setLoading] = useState(false) const d = new Date() - const currDay = `${d.getFullYear()}${d.getMonth() + 1}` + const currDay = `${d.getFullYear()}${d.getMonth() + 1}`; + const currDate = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`; const [date, setDate] = useState(currDay) const [show1, setShow1] = useState(false) const [refreshing, setRefreshing] = useState(false) @@ -76,7 +77,7 @@ const DealerOrders: React.FC = () => { setRefreshing(false) setLoadingMore(false) } - }, [dealerUser?.userId]) + }, [dealerUser?.userId, date]) // 下拉刷新 const handleRefresh = async () => { @@ -95,7 +96,7 @@ const DealerOrders: React.FC = () => { if (dealerUser?.userId) { fetchOrders(1) } - }, [fetchOrders]) + }, [fetchOrders, date]) const getStatusText = (isSettled?: number, isInvalid?: number) => { if (isInvalid === 1) return '未签约' @@ -161,6 +162,13 @@ const DealerOrders: React.FC = () => { return ( + + setShow1(true)} + /> + { refreshingText="刷新中..." completeText="刷新完成" > - setShow1(true)} - /> - setShow1(false)} - onConfirm={(_, values) => { - setShow1(false) - setDate(`${values[0]}${values[1]}`) - fetchOrders(1).then() - }} - /> - + {loading && orders.length === 0 ? ( @@ -225,8 +214,23 @@ const DealerOrders: React.FC = () => { + setShow1(false)} + onConfirm={(_, values) => { + setShow1(false) + setDate(`${values[0]}${values[1]}`) + }} + /> ) } -export default DealerOrders +export default DealerOrder