diff --git a/.workbuddy/memory/2026-07-15.md b/.workbuddy/memory/2026-07-15.md index 40a00f0..bd2e854 100644 --- a/.workbuddy/memory/2026-07-15.md +++ b/.workbuddy/memory/2026-07-15.md @@ -39,3 +39,27 @@ 9. `src/components/common/ProductCard/index.tsx` — 引入 `useVipStatus`,替换 `isVipMember()` - **原理**:`useVipStatus` 在组件挂载时异步调用 `checkAndCacheVipStatus` 查询后端并更新缓存+React state,state 变化触发重渲染,使所有价格显示/计算自动更新为 dealerPrice - 验证:`npx taro build --type weapp` 构建成功 + +## 门店订单修改金额 — 修改原因保存字段变更 +- 文件:`src/pages/store/orders/index.tsx`、`src/api/shop/shopOrder/model/index.ts` +- 变更:修改金额时的"修改原因"从追加到 `comments` 字段改为保存到 `merchantRemarks`(商户备注)字段 +- `ShopOrder` 接口新增 `merchantRemarks?: string` 字段 +- `submitEditPrice` 中 `updateShopOrder` 传参从 `comments` 改为 `merchantRemarks` + +## 订单备注字段分离(buyerRemarks / merchantRemarks / comments) +- 文件:`src/api/shop/shopOrder/model/index.ts`、`src/pages/shop/checkout.tsx`、`src/pages/store/orders/index.tsx` +- `ShopOrder` 和 `OrderCreateRequest` 接口均新增 `buyerRemarks?: string`(买家备注) +- 结算页 `checkout.tsx`:订单备注从 `comments: remarks` 改为 `buyerRemarks: remarks` +- 门店订单列表 `store/orders/index.tsx`:订单卡片新增买家备注展示块(橙色背景,收货信息下方) +- 字段约定:`buyerRemarks`=买家下单备注,`merchantRemarks`=商户修改金额原因,`comments`=系统/其他备注 + +## 修复线下付款订单状态显示 +- 文件:`src/components/common/OrderCard/index.tsx`、`src/pages/order/list.tsx`、`src/pages/order/detail.tsx` +- 问题:线下付款(payType=9)下单成功后,订单列表和详情页显示"线下付款·待确认",用户认为状态不对 +- 修复内容: + 1. OrderCard `getCardStatus`:将线下付款(payType=9)与货到付款(payType=8)统一处理,`!payStatus && !isCod && !isOffline` 才显示"待付款",否则直接按 deliveryStatus 判断,线下付款订单显示"待发货" + 2. OrderCard `showCloseButton`:增加 `!order.payStatus` 条件,已付款订单不再显示取消按钮(需到详情页退款) + 3. OrderCard 按钮文案:从"关闭订单"改为"取消订单",与详情页一致 + 4. list.tsx `handleCloseOrder`:弹窗标题改为"确认取消订单",toast 改为"订单已取消" + 5. detail.tsx `getOrderDisplayStatus`:线下付款未确认时显示"待发货"(蓝色),subtitle 保留付款引导文案 + 6. detail.tsx `getOrderPhase`:保留 `offline_pending` 阶段,底部按钮仍为"取消订单+联系客服"(未确认收款可取消,非退款) diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index b3f7dc7..4c999ce 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -60,3 +60,9 @@ - 裂变约定:分享链接 query 用 `inviter`,与 `src/utils/invite.ts` 的 `parseInviteParams` 读取字段一致 - 已接入页面:商品详情、积分商品、拼团、秒杀、活动、赛事(带 canvas 海报);邀请下级、分销推广、升级VIP、分享赚佣金(仅 enableShare + useShare,无海报);首页(好友+朋友圈+复制链接三按钮全亮) - 注意:tabBar 页**也支持朋友圈分享**(之前误判已纠正)——只要 config 开 enableShareTimeline + 定义 onShareTimeline 即显示按钮;"tabBar 不渲染"仅指朋友圈打开后的单页模式里底部 tabBar 不显示。朋友圈/复制链接开发者工具可能看不到入口,必须真机测试。复制链接是 Beta(基础库 2.14.3+)。 + +## 订单备注字段约定(2026-07-15) +- `buyerRemarks` — 买家备注:用户下单时填写的订单备注(checkout 页提交) +- `merchantRemarks` — 商户备注:门店修改金额时填写的原因记录 +- `comments` — 系统/其他备注:保留给系统内部使用 +- `ShopOrder` 和 `OrderCreateRequest` 接口均已包含 `buyerRemarks` 和 `merchantRemarks` 字段 diff --git a/src/api/shop/shopOrder/model/index.ts b/src/api/shop/shopOrder/model/index.ts index 8bf545f..a78278f 100644 --- a/src/api/shop/shopOrder/model/index.ts +++ b/src/api/shop/shopOrder/model/index.ts @@ -143,6 +143,10 @@ export interface ShopOrder { userId?: number; // 备注 comments?: string; + // 买家备注(下单时用户填写的订单备注) + buyerRemarks?: string; + // 商户备注(门店修改金额原因等) + merchantRemarks?: string; // 排序号 sortNumber?: number; // 是否删除, 0否, 1是 @@ -199,6 +203,8 @@ export interface OrderCreateRequest { couponId?: number; // 备注 comments?: string; + // 买家备注(下单时用户填写的订单备注) + buyerRemarks?: string; // 配送开始时间(用于预约/配送时间) sendStartTime?: string; // 配送方式 0快递 1自提 diff --git a/src/components/common/OrderCard/index.tsx b/src/components/common/OrderCard/index.tsx index cdc92c4..b093023 100644 --- a/src/components/common/OrderCard/index.tsx +++ b/src/components/common/OrderCard/index.tsx @@ -26,11 +26,8 @@ const getCardStatus = (order: ShopOrder): { text: string; color: string } => { // 终态:orderStatus=1 必须最先判断,盖过 deliveryStatus/payStatus if (orderStatus === 1) return { text: '已完成', color: '#0e932e' } - // 线下付款·待确认:下单后等待商家确认收款 - if (isOffline && !payStatus) return { text: '线下付款·待确认', color: '#ff7d00' } - // 货到付款:payStatus=true 直接进入待发货 - if (!payStatus && !isCod) return { text: '待付款', color: '#ee0a24' } - if (isCod && deliveryStatus === 10) return { text: '货到付款·待发货', color: '#4b9cf5' } + // 货到付款(8)/线下付款(9):无需在线支付,下单即进入发货流程 + if (!payStatus && !isCod && !isOffline) return { text: '待付款', color: '#ee0a24' } if (deliveryStatus === 10) return { text: '待发货', color: '#4b9cf5' } if (deliveryStatus === 20) return { text: '待收货', color: '#4b9cf5' } if (deliveryStatus === 30) return { text: '已收货', color: '#0e932e' } @@ -54,8 +51,9 @@ const OrderCard: React.FC = ({ order, onClick, onCloseOrder }) = const { text: statusText, color: statusColor } = getCardStatus(order) - // 待发货状态(deliveryStatus=10 未发货)才显示关闭订单按钮 - const showCloseButton = order.deliveryStatus === 10 && order.orderStatus !== 2 && order.orderStatus !== 3 + // 仅未付款/待确认收款的订单(payStatus=false)才显示取消按钮 + // 已付款的待发货订单需到详情页申请退款 + const showCloseButton = order.deliveryStatus === 10 && !order.payStatus && order.orderStatus !== 2 && order.orderStatus !== 3 // 获取首个商品图片作为封面,或显示默认占位 const coverImage = order.orderGoods?.[0]?.image || '' @@ -157,7 +155,7 @@ const OrderCard: React.FC = ({ order, onClick, onCloseOrder }) = className='px-3 py-1 rounded-full border border-gray-300' onClick={handleClose} > - 关闭订单 + 取消订单 )} diff --git a/src/pages/order/detail.tsx b/src/pages/order/detail.tsx index 11b3786..33b9f27 100644 --- a/src/pages/order/detail.tsx +++ b/src/pages/order/detail.tsx @@ -69,13 +69,13 @@ const getOrderDisplayStatus = (order: ShopOrder): { title: string; bgColor: stri return { bgColor: '#ff7d00', title: '待付款', subtitle: '请尽快完成支付' } } if (isOffline && !payStatus) { - return { bgColor: '#ff7d00', title: '线下付款·待确认', subtitle: '请通过微信转账完成付款,商家确认后发货' } + return { bgColor: '#4b9cf5', title: '待发货', subtitle: '请通过微信转账完成付款,商家确认后发货' } } if (isCod && !payStatus) { - return { bgColor: '#4b9cf5', title: '货到付款·待发货', subtitle: '送达时支付' } + return { bgColor: '#4b9cf5', title: '待发货', subtitle: '送达时支付' } } if (deliveryStatus === 10) { - return { bgColor: '#4b9cf5', title: isCod ? '货到付款·待发货' : '待发货', subtitle: isCod ? '送达时支付' : '商家正在准备商品' } + return { bgColor: '#4b9cf5', title: '待发货', subtitle: '商家正在准备商品' } } if (deliveryStatus === 20 || deliveryStatus === 30) { return { bgColor: '#4b9cf5', title: '待收货', subtitle: '商品运输中,请注意查收' } diff --git a/src/pages/order/list.tsx b/src/pages/order/list.tsx index cbf3b33..3d0c352 100644 --- a/src/pages/order/list.tsx +++ b/src/pages/order/list.tsx @@ -147,23 +147,23 @@ const OrderListPage: React.FC = () => { } } - /** 关闭订单(待发货状态下允许客户取消) */ + /** 取消订单(未付款/待确认收款状态下允许客户取消) */ const handleCloseOrder = (order: ShopOrder) => { Taro.showModal({ - title: '确认关闭订单', - content: '关闭后订单将取消,是否确认?', + title: '确认取消订单', + content: '取消后订单将关闭,是否确认?', confirmColor: '#ee0a24', success: async (res) => { if (res.confirm && order?.orderId) { try { await updateShopOrder({ ...order, orderStatus: OrderStatus.Cancelled }) - Taro.showToast({ title: '订单已关闭', icon: 'success' }) + Taro.showToast({ title: '订单已取消', icon: 'success' }) // 标记所有 tab 为未初始化,切换时会重新加载(确保「全部」等 tab 能看到最新状态) setTabStates(prev => prev.map(s => ({ ...s, initialized: false }))) // 立即刷新当前 tab loadOrders(tabIndex, 1) } catch (err: any) { - Taro.showToast({ title: err?.message || '关闭失败', icon: 'none' }) + Taro.showToast({ title: err?.message || '取消失败', icon: 'none' }) } } } diff --git a/src/pages/shop/checkout.tsx b/src/pages/shop/checkout.tsx index d2113df..59e034b 100644 --- a/src/pages/shop/checkout.tsx +++ b/src/pages/shop/checkout.tsx @@ -285,7 +285,7 @@ const CheckoutPage: React.FC = () => { addressId: defaultAddress.id, payType, couponId: selectedCoupon?.id ? Number(selectedCoupon.id) : undefined, - comments: remarks, + buyerRemarks: remarks, deliveryType: 0, // 快递配送 } diff --git a/src/pages/store/orders/index.tsx b/src/pages/store/orders/index.tsx index 27682c1..87a696a 100644 --- a/src/pages/store/orders/index.tsx +++ b/src/pages/store/orders/index.tsx @@ -293,7 +293,7 @@ export default function StoreOrdersPage() { await updateShopOrder({ orderId: currentOrder.orderId, payPrice: newPrice.toFixed(2), - comments: (currentOrder.comments || '') + `\n${changeRecord}`, + merchantRemarks: (currentOrder.merchantRemarks || '') + `\n${changeRecord}`, } as ShopOrder) Taro.showToast({title: '修改成功', icon: 'success'}) @@ -450,6 +450,14 @@ export default function StoreOrdersPage() { )} + {/* 买家备注 */} + {order.buyerRemarks && ( + + 买家备注 + {order.buyerRemarks} + + )} + {/* 送达凭证(已完成订单) */} {order.sendEndImg && (() => { const imgs = parseSendEndImg(order.sendEndImg)