From 6bcfacd2d1f3fdcfcbd760e4eaccae0e7786b453 Mon Sep 17 00:00:00 2001 From: ShenQiLun <97694732@qq.com> Date: Wed, 1 Jul 2026 10:05:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=89=8D=E7=AB=AF=20safeJsonParse=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=A4=A7=E6=95=B4=E6=95=B0=E7=B2=BE=E5=BA=A6?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/api.js | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/utils/api.js b/utils/api.js index 0333e07..23b702a 100644 --- a/utils/api.js +++ b/utils/api.js @@ -360,6 +360,18 @@ function buildFormBodyWithImages(params, imageUrls, imageKey) { export { buildFormBodyWithImages } +/** + * 安全解析 JSON,将超出 JS 安全整数范围的数字转为字符串 + */ +function safeJsonParse(text) { + return JSON.parse(text, function(key, value) { + if (typeof value === 'number' && !Number.isSafeInteger(value)) { + return String(value) + } + return value + }) +} + /** * 获取店铺列表(上书记录用) * @param {Object} params - { pageNum, pageSize, shop_type } @@ -372,13 +384,15 @@ export function getShopList(params = {}) { uni.request({ url: url, method: 'GET', + dataType: 'text', header: { 'Authorization': 'Bearer ' + token }, success: (res) => { - console.log('【店铺列表】响应:', JSON.stringify(res.data)) - if (res.statusCode === 200 && res.data && res.data.code === 0) { - resolve(res.data.data) + var data = typeof res.data === 'string' ? safeJsonParse(res.data) : res.data + console.log('【店铺列表】响应:', JSON.stringify(data)) + if (res.statusCode === 200 && data && data.code === 0) { + resolve(data.data) } else { resolve({ list: [], total: 0 }) } @@ -404,16 +418,18 @@ export function getShopDetail(params = {}) { uni.request({ url: url, method: 'GET', + dataType: 'text', header: { 'Authorization': 'Bearer ' + token }, success: (res) => { - console.log('【上书详情】响应:', JSON.stringify(res.data)) - if (res.statusCode === 200 && res.data) { - if (res.data.code === 200 && res.data.data) { - resolve(res.data.data) - } else if (res.data.data) { - resolve(res.data.data) + var data = typeof res.data === 'string' ? safeJsonParse(res.data) : res.data + console.log('【上书详情】响应:', JSON.stringify(data)) + if (res.statusCode === 200 && data) { + if (data.code === 200 && data.data) { + resolve(data.data) + } else if (data.data) { + resolve(data.data) } else { resolve({ products: [], total: 0, page: 1, page_size: 10 }) }