From 0cc0d089e94f129c09e8c87e46e00280924d3031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 23 Jul 2026 02:03:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(store):=20=E5=9C=A8=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=A1=B5=E6=96=B0=E5=A2=9E=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 订单卡片头部左侧新增「下单时间:YYYY-MM-DD HH:mm」显示,位于订单号下方 - 状态标签右侧对齐方式由垂直居中调整为顶端对齐,适配两行文本 - 新增辅助函数 formatOrderTime 兼容 ISO 和空格分隔时间格式,仅保留到分钟 - 复用后台返回的 ShopOrder.createTime 字段,无需后端改动,保证时间数据准确同步 --- .workbuddy/memory/2026-07-23.md | 7 ++++ 2026-07-17- 功能修复点.txt | 55 ++++++++++++++++++++++++++++++++ src/pages/store/orders/index.tsx | 20 ++++++++++-- 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 .workbuddy/memory/2026-07-23.md create mode 100644 2026-07-17- 功能修复点.txt diff --git a/.workbuddy/memory/2026-07-23.md b/.workbuddy/memory/2026-07-23.md new file mode 100644 index 0000000..4295919 --- /dev/null +++ b/.workbuddy/memory/2026-07-23.md @@ -0,0 +1,7 @@ +# 2026-07-23 工作日志 + +## 门店订单列表补充「下单时间」 +- 文件:`src/pages/store/orders/index.tsx` +- 在订单卡片头部(左侧)新增「下单时间:YYYY-MM-DD HH:mm」,位于订单号下方;状态标签仍在右侧(`items-center`→`items-start` 适配两行)。 +- 数据字段:复用 `ShopOrder.createTime`(创建时间=下单时间,接口本来就有返回,列表排序也用它,无需改后端)。 +- 新增辅助函数 `formatOrderTime(raw)`:兼容 `2026-07-23T02:00:18` 与 `2026-07-23 02:00:18` 两种格式,仅保留到分钟。 diff --git a/2026-07-17- 功能修复点.txt b/2026-07-17- 功能修复点.txt new file mode 100644 index 0000000..ec09dac --- /dev/null +++ b/2026-07-17- 功能修复点.txt @@ -0,0 +1,55 @@ +2026年7月17日 下午改动问题总结 +================================================ + +1. 门店订单页 — 付款凭证(paymentVoucher)未显示 + 文件: src/pages/store/orders/index.tsx + 问题: renderOrderCard 中只渲染了送达凭证(sendEndImg),遗漏了付款凭证(paymentVoucher) + 修复: 在买家备注下方、送达凭证上方新增付款凭证展示区(绿色背景),支持点击预览大图 + +2. 门店订单页 — 改价功能来回调整 + 文件: src/pages/store/orders/index.tsx + 问题: 先把独立「改价」按钮和弹窗合并到「确认收款」弹窗中 + 修复: 下午用户要求改回来,恢复独立的改价按钮(橙色bg-orange-500)和弹窗,确认收款弹窗去掉实付金额输入框 + +3. 门店订单页 — 拆分"确认完成"为"送达"和"确认完成" + 文件: src/pages/store/orders/index.tsx + 问题: 新增deliver(送达)操作:已发货但无送达照片时显示,上传照片后按钮自动隐藏 + 修复: complete(确认完成):仅已付款可操作,只标记orderStatus=1。清除误用deliveryStatus=30表示"已送达"的逻辑 + +4. 状态文案对齐 — "已发货待收款" + 文件: src/pages/store/orders/index.tsx, src/components/common/OrderCard/index.tsx, src/pages/order/detail.tsx + 问题: 线下付款(payType=9)+已发货+未付款 → 三端统一显示"已发货待收款"(红色) + 修复: 其他已发货 → "待收货"(蓝色) + +5. 修复未付款已发货订单状态显示错误 + 文件: src/components/common/OrderCard/index.tsx, src/pages/order/detail.tsx + 问题: !payStatus判断优先于deliveryStatus,导致"未付款但已发货"显示为"待付款" + 修复: 物流状态判断提前到付款状态之前 + +6. 门店中心 — 右上角扫码登录PC后台 + 文件: src/pages/store/center/index.tsx + 问题: 顶部渐变区右上角新增扫码图标,点击调起微信扫码 → 解析token → confirmWechatQRLogin确认PC端登录 + +7. 订单详情页 — "过期时间"改为"送达时间" + 文件: src/pages/order/detail.tsx + 问题: 信息区「过期时间」(expirationTime)改为「送达时间」(deliveryTime) + +8. 新用户注册后首次加购购物车不刷新 + 文件: src/passport/login.tsx, src/passport/register.tsx, src/passport/sms-login.tsx, src/pages/shop/cart.tsx等 + 问题: 登录/注册后只存了storage,未同步UserContext → isLoggedIn仍为false → 购物车不刷新 + 修复: 登录/注册后调loginUser()/syncFromStorage()同步React状态 + +9. 收货地址编辑不加载旧数据 + 文件: src/pages/user/address-edit.tsx, src/api/shop/shopUserAddress/index.ts + 问题: API路径PUT /shop/shop-user-address/{id} → PUT /shop/shop-user-address(后端无/{id}路径导致404) + 修复: setFormData改为merge模式防止null覆盖 + +10. 地图选择首次打开列表不显示 + 文件: src/pages/user/address-edit.tsx + 问题: 鸿蒙手机首次打开chooseLocation时POI列表空白 + 修复: 先getLocation获取当前位置传入地图,确保首次打开就在用户位置附近 + +11. 订单详情页金额明细0隐藏问题 + 文件: src/pages/order/detail.tsx + 问题: {order.reducePrice && Number(order.reducePrice) > 0}当reducePrice为0时React渲染了文本"0" + 修复: 改为{Number(order.reducePrice || 0) > 0 && (...)} diff --git a/src/pages/store/orders/index.tsx b/src/pages/store/orders/index.tsx index f017880..313433f 100644 --- a/src/pages/store/orders/index.tsx +++ b/src/pages/store/orders/index.tsx @@ -84,6 +84,17 @@ function formatDateTime(date: Date): string { return `${y}-${m}-${d} ${h}:${mi}:${s}` } +/** 格式化下单时间为「YYYY-MM-DD HH:mm」,兼容 "2026-07-23T02:00:18" 与 "2026-07-23 02:00:18" */ +function formatOrderTime(raw?: string): string { + if (!raw) return '' + const s = raw.replace('T', ' ').trim() + const parts = s.split(' ') + if (parts.length < 2) return s + const timeParts = parts[1].split(':') + const hhmm = `${timeParts[0]}:${timeParts[1] || '00'}` + return `${parts[0]} ${hhmm}` +} + /** 解析 sendEndImg:兼容 JSON 数组(新格式)和逗号分隔(旧格式) */ function parseSendEndImg(raw: string): string[] { if (!raw || !raw.trim()) return [] @@ -585,8 +596,13 @@ export default function StoreOrdersPage() { return ( {/* 订单头部 */} - - 订单号:{order.orderNo} + + + 订单号:{order.orderNo} + {order.createTime ? ( + 下单时间:{formatOrderTime(order.createTime)} + ) : null} + {getStatusText(order)}