From 7f43897a6479e2d3df15a7e985758cd6739c36f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 26 Jun 2026 22:39:17 +0800 Subject: [PATCH] =?UTF-8?q?refactor(api):=20=E4=BC=98=E5=8C=96=E5=95=86?= =?UTF-8?q?=E5=93=81=E6=94=B6=E8=97=8F=E6=8E=A5=E5=8F=A3=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E5=B9=B6=E7=BB=9F=E4=B8=80=E6=95=B0=E6=8D=AE=E8=A7=A3=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 unwrap 函数统一处理响应数据解包 - 将收藏相关接口改为 async 函数,显式等待请求结果 - 统一调用 unwrap 提取响应中的 data 字段,保障数据一致性 - 确保收藏状态接口返回纯布尔值,避免类型不确定 - 收藏列表接口添加空数组和空对象默认值处理,防止异常 refactor(shop): 简化购物车和客服页面跳转逻辑 - 购物车跳转采用 navigateTo,确保非 tabBar 页面正常打开 - 客服跳转直接进入客服页面,去除复杂客服会话功能调用逻辑 --- src/api/shop/shopGoodsFavorite/index.ts | 39 ++++++++++++++++++------- src/pages/shop/product-detail.tsx | 15 ++-------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/api/shop/shopGoodsFavorite/index.ts b/src/api/shop/shopGoodsFavorite/index.ts index 83be18a..fbb77b9 100644 --- a/src/api/shop/shopGoodsFavorite/index.ts +++ b/src/api/shop/shopGoodsFavorite/index.ts @@ -1,27 +1,44 @@ import request from '@/utils/request' import type { ShopGoodsFavorite, ShopGoodsFavoriteParam } from './model' +/** + * 解包 API 响应 + * request 工具默认 returnRaw=true,返回完整 {code, message, data} 包装 + * 此函数提取内层 data 字段,兼容 data 为 null/undefined 的情况 + */ +function unwrap(res: any): T { + if (res && typeof res === 'object' && 'data' in res) { + return res.data as T + } + return res as T +} + // 添加收藏 -export function addShopGoodsFavorite(data: { goodsId: number }) { - return request.post('/shop/goods/favorite/add', data) +export async function addShopGoodsFavorite(data: { goodsId: number }) { + const res = await request.post('/shop/goods/favorite/add', data) + return unwrap(res) } // 取消收藏 -export function removeShopGoodsFavorite(data: { goodsId: number }) { - return request.post('/shop/goods/favorite/remove', data) +export async function removeShopGoodsFavorite(data: { goodsId: number }) { + const res = await request.post('/shop/goods/favorite/remove', data) + return unwrap(res) } -// 查询收藏状态 -export function getShopGoodsFavoriteStatus(params: { goodsId: number }) { - return request.get('/shop/goods/favorite/status', params) +// 查询收藏状态(返回 boolean:true=已收藏, false=未收藏) +export async function getShopGoodsFavoriteStatus(params: { goodsId: number }) { + const res = await request.get('/shop/goods/favorite/status', params) + return !!unwrap(res) // 确保返回纯布尔值 } // 收藏列表 -export function listShopGoodsFavorite(params: ShopGoodsFavoriteParam) { - return request.get('/shop/goods/favorite/list', params) +export async function listShopGoodsFavorite(params: ShopGoodsFavoriteParam) { + const res = await request.get('/shop/goods/favorite/list', params) + return unwrap(res) || [] } // 收藏列表(分页) -export function pageShopGoodsFavorite(params: ShopGoodsFavoriteParam) { - return request.get<{ list: ShopGoodsFavorite[]; total: number }>('/shop/goods/favorite/page', params) +export async function pageShopGoodsFavorite(params: ShopGoodsFavoriteParam) { + const res = await request.get('/shop/goods/favorite/page', params) + return unwrap<{ list: ShopGoodsFavorite[]; total: number }>(res) || { list: [], total: 0 } } diff --git a/src/pages/shop/product-detail.tsx b/src/pages/shop/product-detail.tsx index ee3bc16..df9f7eb 100644 --- a/src/pages/shop/product-detail.tsx +++ b/src/pages/shop/product-detail.tsx @@ -164,22 +164,13 @@ const ProductDetailPage: React.FC = () => { } const handleGoCart = () => { + // 购物车不是 tabBar 页面,使用 navigateTo;路径与 app.config.ts 中注册的 'pages/shop/cart' 对应 Taro.navigateTo({ url: '/pages/shop/cart' }) } const handleContactService = () => { - // 微信小程序客服:优先尝试打开客服会话 - if (Taro.openCustomerServiceChat) { - Taro.openCustomerServiceChat({ - extInfo: { url: '' }, // 需要在小程序后台配置客服链接 - fail: () => { - // 降级:跳转到客服页面 - Taro.navigateTo({ url: '/pages/user/customer-service/index' }) - }, - }) - } else { - Taro.navigateTo({ url: '/pages/user/customer-service/index' }) - } + // 直接跳转到在线客服页面(已实现完整功能:微信客服按钮 + 历史消息 + 热线 + 微信留言) + Taro.navigateTo({ url: '/pages/user/customer-service/index' }) } if (!product) {