From b09d029ef9df08acc7b3a1fee7bbec5787b8503a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Tue, 13 Oct 2026 18:07:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=AF=84=E4=BB=B7):=20=E5=90=8C=E5=95=86?= =?UTF-8?q?=E5=93=81=E9=87=8D=E5=A4=8D=E8=B4=AD=E4=B9=B0=E6=97=B6=E6=8C=89?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=B7=E5=AE=9A=E4=BD=8D=E8=AF=84=E4=BB=B7?= =?UTF-8?q?=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 评价页带订单号时后端按订单号+SKU unique 精确落单(原仅凭 unique 反查会命中旧订单);去评价动作兼容列表行 extra_info.items 取条目 --- .../v1/order/CenterOrderController.php | 38 ++++++++++++++++++- .../src/dynamic-pages/api/action-map.js | 14 ++++++- .../pages/goods/goods_comment_con/index.vue | 2 + 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/backend/app/api/controller/v1/order/CenterOrderController.php b/backend/app/api/controller/v1/order/CenterOrderController.php index 306128ee9..df6dd31df 100644 --- a/backend/app/api/controller/v1/order/CenterOrderController.php +++ b/backend/app/api/controller/v1/order/CenterOrderController.php @@ -2749,6 +2749,38 @@ class CenterOrderController return null; } + /** + * 按订单号+SKU unique 定位中台订单内的评价商品条目 + * 评价必须落到用户指定的那笔订单:同商品重复购买时各订单 unique 相同,仅凭 unique 反查会命中旧订单 + * @param string $orderNo 中台订单号 + * @param string $unique SKU 唯一码 + * @param int|null $uid 限定归属用户 + * @return array|null + */ + protected function findOrderItemByOrderNo(string $orderNo, string $unique, ?int $uid = null): ?array + { + if ($orderNo === '' || $unique === '') { + return null; + } + $order = app()->make(OrderCenterDao::class)->get(['order_no' => $orderNo]); + if (!$order) { + return null; + } + $order = is_object($order) ? $order->toArray() : (array)$order; + if ($uid !== null && (int)($order['uid'] ?? 0) !== $uid) { + return null; + } + $extra = is_string($order['extra_info'] ?? null) ? json_decode($order['extra_info'], true) : ($order['extra_info'] ?? []); + foreach ($extra['items'] ?? [] as $item) { + if (($item['attr_info']['unique'] ?? '') === $unique) { + $item['_order_no'] = (string)$order['order_no']; + $item['_center_id'] = (int)$order['id']; + return $item; + } + } + return null; + } + /** * 订单评价(中台化) * @param StoreProductReplyServices $replyServices @@ -2780,7 +2812,11 @@ class CenterOrderController } // ==================== 4. 从中台订单快照定位商品(unique 为 SKU 唯一码,限定本人订单防越权) ==================== - $item = $this->findOrderItemBySkuUnique((string)$unique, $uid); + // 页面带订单号(uni)时按订单精确定位;同商品重复购买时 unique 跨订单重复,仅凭 unique 会命中旧订单 + $uni = (string)request()->param('uni', ''); + $item = $uni !== '' + ? $this->findOrderItemByOrderNo($uni, (string)$unique, $uid) + : $this->findOrderItemBySkuUnique((string)$unique, $uid); if (!$item) { return app('json')->fail('商品不存在'); } diff --git a/frontend/uni-app/src/dynamic-pages/api/action-map.js b/frontend/uni-app/src/dynamic-pages/api/action-map.js index 6c8d674a2..9742d717c 100644 --- a/frontend/uni-app/src/dynamic-pages/api/action-map.js +++ b/frontend/uni-app/src/dynamic-pages/api/action-map.js @@ -157,9 +157,19 @@ export default { /** 去评价(后端 NormalOrderAdapter 等模块下发的 action 名;评价页按 SKU unique 提交) */ goComment(order, params) { var orderNo = order.order_no || (params && params.order_no) || ''; - // 取第一个商品条目的 SKU unique;section 以 key='product' 注册,props.product.items 为商品条目 + // 详情页:section 以 key='product' 注册,props.product.items 为商品条目; + // 列表行:extra_info.items 为商品条目(用户端列表接口已解码 extra_info) var items = (order.product && order.product.product && order.product.product.items) || []; - var skuUnique = items.length && items[0].attr_info && items[0].attr_info.unique; + if (!items.length && order.extra_info && Array.isArray(order.extra_info.items)) { + items = order.extra_info.items; + } + var skuUnique = ''; + for (var i = 0; i < items.length; i++) { + if (items[i] && items[i].attr_info && items[i].attr_info.unique) { + skuUnique = items[i].attr_info.unique; + break; + } + } if (!orderNo || !skuUnique) { uni.showToast({ title: i18n.t(`订单信息异常`), icon: 'none' }); return; diff --git a/frontend/uni-app/src/pages/goods/goods_comment_con/index.vue b/frontend/uni-app/src/pages/goods/goods_comment_con/index.vue index 048b4ba32..e86a28a1a 100644 --- a/frontend/uni-app/src/pages/goods/goods_comment_con/index.vue +++ b/frontend/uni-app/src/pages/goods/goods_comment_con/index.vue @@ -180,6 +180,8 @@ value.service_score = service_score; value.pics = pics.value; value.unique = unique.value; + // 评价必须落到用户点进来的这笔订单:同商品重复购买时 unique 不唯一,后端需按订单号定位 + value.uni = orderId.value; uni.showLoading({ title: i18n.t(`正在发布评论`) });