From 3340016969b0a42747b150f99145a6dfd712e142 Mon Sep 17 00:00:00 2001 From: Council Date: Sat, 13 Jun 2026 10:56:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(ticket):=20=E4=BF=AE=E5=A4=8D=E6=97=A7?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=B8=8D=E5=90=ABgoods=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84JS=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 缓存命中时补充构建goods字段 - 初始化和构建树数据时同步添加goods字段 --- shopxo/app/plugins/vr_ticket/api/Goods.php | 49 +++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/shopxo/app/plugins/vr_ticket/api/Goods.php b/shopxo/app/plugins/vr_ticket/api/Goods.php index b8111e1..4a032de 100644 --- a/shopxo/app/plugins/vr_ticket/api/Goods.php +++ b/shopxo/app/plugins/vr_ticket/api/Goods.php @@ -280,11 +280,15 @@ class Goods } try { - // 缓存检查 + // 缓存检查(注意:旧缓存不含 goods 字段,需要补充) $cacheKey = 'vr_tree_v4_' . $goodsId . '_' . md5(implode(',', $groupBy)); $cached = \think\facade\Cache::get($cacheKey); if ($cached !== null) { $cached['meta']['cache_hit'] = true; + // 旧缓存不含 goods,补充构建 + if (!isset($cached['goods'])) { + $cached['goods'] = self::buildGoodsField($goodsId); + } return self::success($cached); } @@ -297,6 +301,7 @@ class Goods 'goods_id' => $goodsId, 'group_by' => $groupBy, 'tree' => [], + 'goods' => self::buildGoodsField($goodsId), 'seat_templates' => new \stdClass(), 'meta' => [ 'seat_count' => 0, @@ -320,6 +325,7 @@ class Goods 'goods_id' => $goodsId, 'group_by' => $groupBy, 'tree' => $treeData['tree'], + 'goods' => self::buildGoodsField($goodsId), 'seat_templates' => $seatTemplates, 'session_meta' => $sessionMeta, 'peer_goods' => QueryManager::getPeerGoods($goodsId), @@ -340,6 +346,47 @@ class Goods } } + /** + * 构建 goods 字段(包含手机详情 content_app) + * + * 复用 GoodsService::GoodsList,传入 is_content_app=1 以包含手机端详情数据。 + * 这使得 uniapp 可以仅调用 tree API 一次就获取完整数据,无需二次请求 goods/detail。 + * + * @param int $goodsId + * @return array + */ + private static function buildGoodsField(int $goodsId): array + { + $isUseMobileDetail = intval(\MyC('common_app_is_use_mobile_detail', 0, true)); + + $params = [ + 'where' => [ + ['id', '=', $goodsId], + ['is_delete_time', '=', 0], + ], + 'is_content_app' => $isUseMobileDetail, + 'is_spec' => 1, + 'is_params' => 1, + 'is_favor' => 1, + 'm' => 0, + 'n' => 1, + ]; + + $ret = GoodsService::GoodsList($params); + $goods = $ret['data'][0] ?? null; + + if (empty($goods)) { + return []; + } + + // 手机端详情模式下移除 PC 富文本,减少响应体积 + if ($isUseMobileDetail == 1) { + unset($goods['content_web']); + } + + return $goods; + } + /** * 格式化商品列表数据 */