fix: 修复Tool模块相关问题 - 优化签到、社区、食物和AI服务功能
This commit is contained in:
@@ -119,8 +119,8 @@ export function getCheckinList(data) {
|
||||
* 获取打卡记录详情
|
||||
* @param {Number} id - 打卡记录ID
|
||||
*/
|
||||
export function getCheckinDetail(id) {
|
||||
return request.get('tool/checkin/detail/' + id);
|
||||
export function getCheckinDetail(id, opt) {
|
||||
return request.get('tool/checkin/detail/' + id, {}, opt || {});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,7 +196,7 @@ export function shareCheckinToCommunity(checkinId) {
|
||||
* @param {Number} data.limit - 每页数量
|
||||
*/
|
||||
export function searchFood(data) {
|
||||
return request.get('tool/food/search', data);
|
||||
return request.get('tool/food/search', data, { noAuth: true });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -205,9 +205,31 @@ export function searchFood(data) {
|
||||
* @param {String} data.category - 分类:all/grain/vegetable/fruit/meat/seafood
|
||||
* @param {Number} data.page - 页码
|
||||
* @param {Number} data.limit - 每页数量
|
||||
*
|
||||
* 响应 data 为分页:list[] 项含 image、nutrientsJson、energy、protein、钾/磷/钠/钙、suitabilityLevel(ToolFoodServiceImpl)
|
||||
*/
|
||||
export function getFoodList(data) {
|
||||
return request.get('tool/food/list', data);
|
||||
return request.get('tool/food/list', data, { noAuth: true });
|
||||
}
|
||||
|
||||
/** 将列表/路由上的 id 规范为整数字符串(兼容 Long 序列化为 123、123.0、"123.0" 等,拒绝小数与非数字) */
|
||||
export function normalizeFoodDetailIdString(v) {
|
||||
if (v === undefined || v === null || v === '') return '';
|
||||
let input = v;
|
||||
if (typeof input === 'string') {
|
||||
input = input.trim();
|
||||
if (input === '') return '';
|
||||
}
|
||||
const n = Number(input);
|
||||
if (Number.isFinite(n)) {
|
||||
const t = Math.trunc(n);
|
||||
if (Math.abs(n - t) > 1e-6) return '';
|
||||
return String(t);
|
||||
}
|
||||
const s = String(input).trim();
|
||||
if (s === '') return '';
|
||||
if (/^-?\d+$/.test(s)) return s;
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -215,14 +237,18 @@ export function getFoodList(data) {
|
||||
* @param {Number|String} id - 食物ID(必须为数字,不能传名称)
|
||||
*/
|
||||
export function getFoodDetail(id) {
|
||||
const numId = typeof id === 'number' && !isNaN(id) ? id : parseInt(String(id), 10);
|
||||
// 打印请求参数便于确认(后端仅接受 Long 类型 id,传 name 会 400)
|
||||
const apiPath = 'tool/food/detail/' + numId;
|
||||
console.log('[api/tool] getFoodDetail 请求参数:', { id, numId, type: typeof id, apiPath });
|
||||
if (isNaN(numId)) {
|
||||
const rawId = normalizeFoodDetailIdString(id);
|
||||
// 严格按整型 ID 校验,避免 parseInt('123abc') 这类误判;路径用字符串拼接避免超过 JS 安全整数时 Number() 精度丢失
|
||||
const isIntegerId = rawId !== '' && /^-?\d+$/.test(rawId);
|
||||
const apiPath = 'tool/food/detail/' + rawId;
|
||||
const numId = isIntegerId ? Number(rawId) : NaN;
|
||||
// 打印请求参数便于确认(后端仅接受 Long 类型 id,传 name 会导致 400 NumberFormatException)
|
||||
console.log('[api/tool] getFoodDetail 请求参数:', { id, rawId, numId, idType: typeof id, apiPath, isNumeric: !isNaN(numId) });
|
||||
if (!isIntegerId) {
|
||||
return Promise.reject(new Error('食物详情接口需要数字ID,当前传入: ' + id));
|
||||
}
|
||||
return request.get(apiPath);
|
||||
// 与食物百科列表一致:只读接口免登录,避免未带 token 时请求被拦截导致详情页空白/仅 toast
|
||||
return request.get(apiPath, {}, { noAuth: true });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -244,7 +270,8 @@ export function getSimilarFoods(foodId) {
|
||||
* @param {Number} data.limit - 每页数量
|
||||
*/
|
||||
export function getKnowledgeList(data) {
|
||||
return request.get('tool/knowledge/list', data);
|
||||
// 与后端 /api/front/tool/** 免登录一致,未登录用户也可浏览饮食指南/科普文章
|
||||
return request.get('tool/knowledge/list', data, { noAuth: true });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -252,7 +279,7 @@ export function getKnowledgeList(data) {
|
||||
* @param {Number} id - 知识ID
|
||||
*/
|
||||
export function getKnowledgeDetail(id) {
|
||||
return request.get('tool/knowledge/detail/' + id);
|
||||
return request.get('tool/knowledge/detail/' + id, {}, { noAuth: true });
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user