From 62652cd072ecc27a9b0bca1fa48b6d3f27de6f72 Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Wed, 5 Aug 2026 23:14:18 +0800 Subject: [PATCH] fix(mini-user): polish logistics detail page layout and timeline order (v3.4.13) Use custom navigation bar, remove delivery status section, and show newest track nodes first. Co-authored-by: Cursor --- apps/mini-user/src/lib/order-logistics.ts | 15 ++++++++-- .../src/pages/order-logistics/index.config.ts | 3 +- .../src/pages/order-logistics/index.tsx | 30 +++++-------------- apps/mini-user/src/styles/order.css | 8 +++++ 杜康好客-v3-现状对照.md | 2 +- 杜康好客-v3.4.13-体验优化开发文档.md | 4 +-- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/apps/mini-user/src/lib/order-logistics.ts b/apps/mini-user/src/lib/order-logistics.ts index bc2967a..af0c9dd 100644 --- a/apps/mini-user/src/lib/order-logistics.ts +++ b/apps/mini-user/src/lib/order-logistics.ts @@ -46,9 +46,20 @@ export function formatTrackNodeTime(node: OrderTrackNode) { return formatShanghaiDateTime(node.createTime || node.createdAt); } +export function sortTrackNodesNewestFirst(nodes: OrderTrackNode[]): OrderTrackNode[] { + return [...nodes].sort((a, b) => { + const ta = new Date(a.createTime || a.createdAt || 0).getTime(); + const tb = new Date(b.createTime || b.createdAt || 0).getTime(); + if (Number.isNaN(ta) && Number.isNaN(tb)) return 0; + if (Number.isNaN(ta)) return 1; + if (Number.isNaN(tb)) return -1; + return tb - ta; + }); +} + export function latestTrackNode(nodes: OrderTrackNode[]) { - if (nodes.length === 0) return null; - return nodes[0]; + const sorted = sortTrackNodesNewestFirst(nodes); + return sorted[0] ?? null; } export async function fetchOrderTrack(orderId: string) { diff --git a/apps/mini-user/src/pages/order-logistics/index.config.ts b/apps/mini-user/src/pages/order-logistics/index.config.ts index 01b4695..35b3c9a 100644 --- a/apps/mini-user/src/pages/order-logistics/index.config.ts +++ b/apps/mini-user/src/pages/order-logistics/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationBarTitleText: '物流追踪', + navigationStyle: 'custom', + navigationBarTitleText: '物流详情', }); diff --git a/apps/mini-user/src/pages/order-logistics/index.tsx b/apps/mini-user/src/pages/order-logistics/index.tsx index 06534b0..3c07e0a 100644 --- a/apps/mini-user/src/pages/order-logistics/index.tsx +++ b/apps/mini-user/src/pages/order-logistics/index.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { View, Text } from '@tarojs/components'; import Taro, { useRouter } from '@tarojs/taro'; import PageShell from '../../components/PageShell'; @@ -9,6 +9,7 @@ import { fetchOrderTrack, formatTrackNodeTime, shouldLoadOrderTrack, + sortTrackNodesNewestFirst, type OrderDelivery, type OrderTrackNode, } from '../../lib/order-logistics'; @@ -21,16 +22,6 @@ type OrderDetail = { delivery?: OrderDelivery | null; }; -const STATUS_LABELS: Record = { - PENDING_SHIP: '待发货', - OUT_WAREHOUSE: '出库中', - SHIPPING: '配送中', - SHIPPED: '配送中', - PENDING_RECEIVE: '待签收', - DELIVERED: '待签收', - COMPLETED: '已完成', -}; - export default function OrderLogisticsPage() { const router = useRouter(); const orderId = router.params.id ?? ''; @@ -39,6 +30,8 @@ export default function OrderLogisticsPage() { const [trackNodes, setTrackNodes] = useState([]); const [trackLoading, setTrackLoading] = useState(false); + const sortedTrackNodes = useMemo(() => sortTrackNodesNewestFirst(trackNodes), [trackNodes]); + useEffect(() => { if (!orderId) return; let cancelled = false; @@ -89,19 +82,12 @@ export default function OrderLogisticsPage() { return ( - + {!order ? ( 加载中… ) : ( <> - - 配送状态 - - {STATUS_LABELS[order.status || ''] || order.status || '处理中'} - - - - + 物流信息 配送方式 @@ -133,11 +119,11 @@ export default function OrderLogisticsPage() { 物流动态 加载中… - ) : trackNodes.length > 0 ? ( + ) : sortedTrackNodes.length > 0 ? ( 物流动态 - {trackNodes.map((node, index) => ( + {sortedTrackNodes.map((node, index) => ( 10MB 图片自动压缩后可上传;仍超限有明确报错 - [ ] `pnpm lint` 无新增错误