From b22ff991f01b5cdcaaf53dd7a7cb75fee1148739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 10 Feb 2026 13:00:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=20=E6=B7=BB=E5=8A=A0=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=88=B7=E6=96=B0=E5=8A=9F=E8=83=BD=E5=88=B0=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 PullToRefresh 组件实现下拉刷新功能 - 将原有滚动容器包装到 PullToRefresh 组件内部 - 实现下拉刷新逻辑,重置分页数据并重新加载 - 设置刷新头部高度为 60 - 保留原有的无限滚动和上拉加载功能 --- src/user/order/components/OrderList.tsx | 352 ++++++++++++------------ 1 file changed, 180 insertions(+), 172 deletions(-) diff --git a/src/user/order/components/OrderList.tsx b/src/user/order/components/OrderList.tsx index 1c20792..f5f3273 100644 --- a/src/user/order/components/OrderList.tsx +++ b/src/user/order/components/OrderList.tsx @@ -1,8 +1,7 @@ -import {Avatar, Cell, Space, Empty, Tabs, Button, TabPane, Image, Dialog} from '@nutui/nutui-react-taro' +import {Avatar, Cell, Space, Empty, Tabs, Button, TabPane, Image, Dialog, PullToRefresh, InfiniteLoading} from '@nutui/nutui-react-taro' import {useEffect, useState, useCallback, useRef, CSSProperties} from "react"; import {View, Text} from '@tarojs/components' import Taro from '@tarojs/taro'; -import {InfiniteLoading} from '@nutui/nutui-react-taro' import dayjs from "dayjs"; import { pageShopOrder, @@ -685,193 +684,202 @@ function OrderList(props: OrderListProps) { }) } - - {error ? ( - - {error} - + + ) : ( + { + + }} + onScrollToUpper={() => { + + }} + loadingText={ + <> + 加载中 + + } + loadMoreText={ + list.length === 0 ? ( + + ) : ( + + 没有更多了 + + ) + } > - 重新加载 - - - ) : ( - { - }} - onScrollToUpper={() => { - - }} - loadingText={ - <> - 加载中 - - } - loadMoreText={ - list.length === 0 ? ( - - ) : ( - - 没有更多了 - - ) - } - > - - {/* 订单列表 */} - {list.length > 0 && list - ?.filter((item) => { - // “待收货”不展示退款中的/已退款订单,这些订单统一放到“退货/售后” - if (tapIndex === 3 && (item.orderStatus === 4 || item.orderStatus === 6)) { - return false; - } - // “退货/售后”只展示售后相关状态 - if (tapIndex === 5) { - return item.orderStatus === 4 || item.orderStatus === 5 || item.orderStatus === 6 || item.orderStatus === 7; - } - return true; - }) - ?.map((item, index) => { - return ( - Taro.navigateTo({url: `/shop/orderDetail/index?orderId=${item.orderId}`})}> - - - - { - e.stopPropagation(); - copyText(`${item.orderNo}`) - }}>{item.orderNo} + {/* 订单列表 */} + {list.length > 0 && list + ?.filter((item) => { + // “待收货”不展示退款中的/已退款订单,这些订单统一放到“退货/售后” + if (tapIndex === 3 && (item.orderStatus === 4 || item.orderStatus === 6)) { + return false; + } + // “退货/售后”只展示售后相关状态 + if (tapIndex === 5) { + return item.orderStatus === 4 || item.orderStatus === 5 || item.orderStatus === 6 || item.orderStatus === 7; + } + return true; + }) + ?.map((item, index) => { + return ( + Taro.navigateTo({url: `/shop/orderDetail/index?orderId=${item.orderId}`})}> + + + + { + e.stopPropagation(); + copyText(`${item.orderNo}`) + }}>{item.orderNo} + + {/* 右侧显示合并的状态和倒计时 */} + + {!item.payStatus && item.orderStatus !== 2 ? ( + + ) : ( + getOrderStatusText(item) + )} + - {/* 右侧显示合并的状态和倒计时 */} - - {!item.payStatus && item.orderStatus !== 2 ? ( - + {dayjs(item.createTime).format('YYYY年MM月DD日 HH:mm:ss')} + + {/* 商品信息 */} + + {item.orderGoods && item.orderGoods.length > 0 ? ( + item.orderGoods.map((goods, goodsIndex) => ( + + + + + {goods.goodsName || (goods as any).goodsTitle || (goods as any).title || item.title || '订单商品'} + + {(goods.spec || (goods as any).specInfo) && ( + 规格:{goods.spec || (goods as any).specInfo} + )} + 数量:{(goods as any).quantity ?? goods.totalNum} + + x + ¥{goods.price || (goods as any).payPrice} + + )) ) : ( - getOrderStatusText(item) + + + + {item.title || '订单商品'} + {item.totalNum}件商品 + + )} - - {dayjs(item.createTime).format('YYYY年MM月DD日 HH:mm:ss')} - {/* 商品信息 */} - - {item.orderGoods && item.orderGoods.length > 0 ? ( - item.orderGoods.map((goods, goodsIndex) => ( - - - - - {goods.goodsName || (goods as any).goodsTitle || (goods as any).title || item.title || '订单商品'} - - {(goods.spec || (goods as any).specInfo) && ( - 规格:{goods.spec || (goods as any).specInfo} - )} - 数量:{(goods as any).quantity ?? goods.totalNum} - - x - ¥{goods.price || (goods as any).payPrice} - - )) - ) : ( - - - - {item.title || '订单商品'} - {item.totalNum}件商品 - - - )} - + 实付金额:¥{item.payPrice} - 实付金额:¥{item.payPrice} + {/* 操作按钮 */} + {!isReadOnly && ( + + {/* 待付款状态:显示取消订单和立即支付 */} + {(!item.payStatus) && item.orderStatus !== 2 && ( + + + {(!item.createTime || !isPaymentExpired(item.createTime, 24)) && ( + + )} + + )} - {/* 操作按钮 */} - {!isReadOnly && ( - - {/* 待付款状态:显示取消订单和立即支付 */} - {(!item.payStatus) && item.orderStatus !== 2 && ( - + {/* 待发货状态:显示申请退款 */} + {item.payStatus && isWithinRefundWindow(item.payTime, 60) && item.deliveryStatus === 10 && item.orderStatus !== 2 && item.orderStatus !== 4 && !isOrderCompleted(item) && ( - {(!item.createTime || !isPaymentExpired(item.createTime, 24)) && ( + applyRefund(item); + }}>申请退款 + )} + + {/* 待收货状态:显示查看物流和确认收货 */} + {item.deliveryStatus === 20 && (!item.riderId || !!item.sendEndTime) && item.orderStatus !== 2 && item.orderStatus !== 6 && !isOrderCompleted(item) && ( + + {/**/} - )} - - )} + confirmReceive(item); + }}>确认收货 + + )} - {/* 待发货状态:显示申请退款 */} - {item.payStatus && isWithinRefundWindow(item.payTime, 60) && item.deliveryStatus === 10 && item.orderStatus !== 2 && item.orderStatus !== 4 && !isOrderCompleted(item) && ( - - )} + {/* 退款/售后状态:显示查看进度和撤销申请 */} + {(item.orderStatus === 4 || item.orderStatus === 7) && ( + + {/**/} + + )} - {/* 待收货状态:显示查看物流和确认收货 */} - {item.deliveryStatus === 20 && (!item.riderId || !!item.sendEndTime) && item.orderStatus !== 2 && item.orderStatus !== 6 && !isOrderCompleted(item) && ( - - {/**/} - - + )} - - {/* 退款/售后状态:显示查看进度和撤销申请 */} - {(item.orderStatus === 4 || item.orderStatus === 7) && ( - - {/**/} - - )} - - )} - - - ) - })} - - )} - + + ) + })} + + )} + + {/* 取消订单确认对话框 */}