Prechádzať zdrojové kódy

fix(frontend): report-upload member selector + api.js dead code removal + comment mojibake restoration

- report-upload.vue: add familyId to parsePreview URL so backend can match family and show member selector
- api.js: remove unused parseReportPreview function (33 lines)
- api.js: restore 86 garbled Chinese comments (UTF-8 bytes decoded as GBK then re-encoded)
asus 3 mesiacov pred
rodič
commit
8293f8c5a7

+ 2 - 2
cfc-frontend/pages/health/report-upload.vue

@@ -265,7 +265,7 @@ export default {
       if (self.selectedFile) {
         // PDF文件上传
         uni.uploadFile({
-          url: apiPath + (self.memberId ? '?memberId=' + self.memberId : ''),
+          url: apiPath + '?familyId=' + self.familyId + (self.memberId ? '&memberId=' + self.memberId : ''),)
           filePath: filePath,
           name: 'file',
           header: {
@@ -289,7 +289,7 @@ export default {
       } else if (self.photoPath) {
         // 图片上传
         uni.uploadFile({
-          url: apiPath + '?type=image' + (self.memberId ? '&memberId=' + self.memberId : ''),
+          url: apiPath + '?type=image&familyId=' + self.familyId + (self.memberId ? '&memberId=' + self.memberId : ''),)
           filePath: filePath,
           name: 'file',
           header: {

+ 141 - 101
cfc-frontend/utils/api.js

@@ -75,7 +75,7 @@ const request = (url, method = 'POST', data = {}, options = {}) => {
   })
 }
 
-// ===================== LangGraph 适配层(含 Dify fallback) =====================
+//  LangGraph 适配层(含 Dify fallback) 
 //
 // langgraphRequest() 是 AI 对话/分析的统一入口:
 //   1. 先尝试调用 LangGraph 适配层(/api/v1/chat/completion 或 /api/v1/analysis/run)
@@ -158,7 +158,7 @@ export const phoneLogin = (data) => {
   return request('/api/auth/phone-login', 'POST', data)
 }
 
-// ===================== 街道地址相关 =====================
+//  街道地址相关 
 
 // 获取所有省份
 export const getProvinces = () => {
@@ -457,9 +457,9 @@ export const getExchangeHistory = (memberId, page = 1, size = 10) => {
   return request('/api/rewards/exchange-history', 'POST', { memberId, page, size })
 }
 
-// =============================================
+// ===
 // 家长任务模块(孩子分配给家长的任务)
-// =============================================
+// ===
 export const getTodayParentTasks = () => {
   return request('/api/tasks/today-parent', 'POST')
 }
@@ -468,9 +468,9 @@ export const completeParentTask = (taskId) => {
   return request(`/api/tasks/${taskId}/complete-parent`, 'POST', {})
 }
 
-// =============================================
+// ===
 // 家长心愿单模块
-// =============================================
+// ===
 export const createParentWishlist = (data) => {
   return request('/api/parent/wishlist', 'POST', data)
 }
@@ -492,9 +492,9 @@ export const approveParentWishlist = (id, pointsRequired) => {
   return request(`/api/parent/wishlist/${id}/approve`, 'POST', { pointsRequired })
 }
 
-// =============================================
+// ===
 // 家长心愿管理模块
-// =============================================
+// ===
 export const getPendingWishes = (familyId) => {
   return request('/api/wishes/pending', 'POST', { familyId })
 }
@@ -539,9 +539,9 @@ export const cancelWish = (id, reason) => {
   return request(`/api/wishes/${id}`, 'DELETE', { reason })
 }
 
-// =============================================
+// ===
 // 成长规划师/任务模板模块
-// =============================================
+// ===
 // 生成绑定邀请
 export const generateBindInvite = () => {
   return request('/api/guide/bind/invite', 'POST')
@@ -642,32 +642,32 @@ export const cancelPlan = (id) => {
   return request(`/api/market/plans/${id}/cancel`, 'POST')
 }
 
-// 纭缁戝畾鎴愰暱瑙勫垝甯?
+// 确认绑定成长规划师
 export const acceptBind = (data) => {
   return request('/api/bind/accept', 'POST', data)
 }
 
-// 鑾峰彇缁戝畾鐨勬垚闀胯鍒掑笀鍒楄〃
+// 获取绑定的成长规划师列表
 export const getBoundGuides = () => {
   return request('/api/bind/guides', 'POST')
 }
 
-// 鎴愰暱瑙勫垝甯堟敞鍐?
+// 成长规划师注册
 export const registerGuide = (data) => {
   return request('/api/guide/register', 'POST', data)
 }
 
-// 鐢熸垚閭€璇风爜
+// 生成邀请码
 export const generateInviteCode = () => {
   return request('/api/guide/invite-code/generate', 'POST')
 }
 
-// 鑾峰彇閭€璇风爜鍒楄〃
+// 获取邀请码列表
 export const getInviteCodes = () => {
   return request('/api/guide/invite-codes', 'GET')
 }
 
-// 楠岃瘉閭€璇风爜
+// 验证邀请码
 export const validateInviteCode = (code) => {
   return request('/api/guide/invite-code/validate', 'GET', null, { code })
 }
@@ -684,17 +684,17 @@ export const leaveCurrentTeam = () => {
   return request('/api/guide/team/leave', 'POST')
 }
 
-// 鑾峰彇涓嬬骇鎴愰暱瑙勫垝甯堝垪琛?
+// 获取下级成长规划师列表
 export const getChildGuides = () => {
   return request('/api/guide/child-guides', 'GET')
 }
 
-// 鑾峰彇鎵€鏈変笅绾ф垚闀胯鍒掑笀
+// 获取所有下级成长规划师
 export const getAllChildGuides = () => {
   return request('/api/guide/all-child-guides', 'GET')
 }
 
-// 鑾峰彇涓婄骇鎴愰暱瑙勫垝甯?
+// 获取上级成长规划师
 export const getParentGuide = () => {
   return request('/api/guide/parent-guide', 'GET')
 }
@@ -771,57 +771,57 @@ export const addGuidePackage = (guideId, packageId, price, commissionRate) => {
   return request('/api/guide/package/add', 'POST', { guideId, packageId, price, commissionRate })
 }
 
-// 鑾峰彇鎴愰暱瑙勫垝甯堝椁愬垪琛?
+// 获取成长规划师套餐列表
 export const getGuidePackages = (guideId) => {
   return request('/api/guide/packages', 'GET', null, { guideId })
 }
 
-// 鑾峰彇鎴愰暱瑙勫垝甯堝椁愬畾浠?
+// 获取成长规划师套餐定价
 export const getGuidePackage = (guideId, packageId) => {
   return request('/api/guide/package/' + packageId, 'GET', null, { guideId })
 }
 
-// 鏇存柊鎴愰暱瑙勫垝甯堝椁愪环鏍?
+// 更新成长规划师套餐价格
 export const updateGuidePackagePrice = (guideId, packageId, price) => {
   return request('/api/guide/package/' + packageId, 'PUT', { guideId, price })
 }
 
-// 鍒犻櫎鎴愰暱瑙勫垝甯堝椁?
+// 删除成长规划师套餐
 export const deleteGuidePackage = (guideId, packageId) => {
   return request('/api/guide/package/' + packageId, 'DELETE', null, { guideId })
 }
 
-// 鑾峰彇濂楅浠锋牸
+// 获取套餐价格
 export const getPackagePrice = (packageId, guideId, inviteCode) => {
   return request('/api/package/price', 'GET', null, { packageId, guideId, inviteCode })
 }
 
-// 鑾峰彇鍙敤鐨勬垚闀胯鍒掑笀鍒楄〃
+// 获取可用的成长规划师列表
 export const getAvailableGuides = (packageId) => {
   return request('/api/package/available-guides', 'GET', null, { packageId })
 }
 
-// 鍒涘缓濂楅璁㈠崟
+// 创建套餐订单
 export const createPackageOrder = (data) => {
   return request('/api/package/order/create', 'POST', data)
 }
 
-// 鑾峰彇璁㈠崟鐘舵€?
+// 获取订单状态
 export const getOrderStatus = (orderNo) => {
   return request('/api/payment/order/status/' + orderNo, 'GET')
 }
 
-// 鍒涘缓寰俊鏀粯璁㈠崟
+// 创建微信支付订单
 export const createWechatPayOrder = (orderNo, description, amount) => {
   return request('/api/payment/wechat/create', 'POST', { orderNo, description, amount })
 }
 
-// 鍒涘缓鏀粯瀹濊鍗?
+// 创建支付宝订单
 export const createAlipayOrder = (orderNo, description, amount) => {
   return request('/api/payment/alipay/create', 'POST', { orderNo, description, amount })
 }
 
-// 澶勭悊寰俊鏀粯鍥炶皟
+// 处理微信支付回调
 export const handleWechatCallback = (params) => {
   return request('/api/payment/wechat/callback', 'POST', params)
 }
@@ -831,32 +831,32 @@ export const handleAlipayCallback = (params) => {
   return request('/api/payment/alipay/callback', 'POST', params)
 }
 
-// 鑾峰彇鎴戠殑娴嬭瘎鎶ュ憡
+// 获取我的测评报告
 export const getMyAssessmentResults = (userId) => {
   return request('/api/dan-assessment/my-results', 'POST', { userId })
 }
 
-// 鑾峰彇涓嬬骇鎴愰暱瑙勫垝甯堢殑娴嬭瘎鎶ュ憡
+// 获取下级成长规划师的测评报告
 export const getChildAssessmentResults = (userId) => {
   return request('/api/dan-assessment/child-results', 'POST', { userId })
 }
 
-// 鑾峰彇娴嬭瘎鎶ュ憡璇︽儏
+// 获取测评报告详情
 export const getAssessmentResult = (id) => {
   return request('/api/dan-assessment/result/' + id, 'POST')
 }
 
-// 鍒涘缓娴嬭瘎棰勭害
+// 创建测评预约
 export const createAssessmentAppointment = (data) => {
   return request('/api/dan-assessment/appointment/create', 'POST', data)
 }
 
-// 鏀粯娴嬭瘎璁㈠崟
+// 支付测评订单
 export const payAssessmentOrder = (orderNo, payType) => {
   return request('/api/dan-assessment/order/pay', 'POST', { orderNo, payType })
 }
 
-// ===================== 虚拟支付 =====================
+//  虚拟支付 
 
 // 创建测评订单(返回 AssessmentOrder,含 orderNo)
 export const createAssessmentOrder = (data) => {
@@ -911,7 +911,7 @@ export const getVirtualPaymentEnv = () => {
   }
 }
 
-// 璁板綍娴嬭瘎缁撴灉
+// 记录测评结果
 export const recordAssessmentResult = (data) => {
   return request('/api/dan-assessment/result/record', 'POST', data)
 }
@@ -973,7 +973,7 @@ export const getGameLeaderboard = (params) => {
   return request('/api/game/leaderboard', 'POST', params)
 }
 
-// 閭€璇风爜鐩稿叧
+// 邀请码相关
 export const getInviteCode = () => {
   return request('/api/family/invite-code', 'GET')
 }
@@ -990,9 +990,9 @@ export const registerWithInviteCode = (data) => {
   return request('/api/auth/register-with-invite', 'POST', data)
 }
 
-// 鎴愰暱妗f
+// 成长档案
 export const createGrowthRecord = (data) => {
-  // 濡傛灉鍖呭惈 alsoPurchaseAssessment 瀛楁锛屼娇鐢ㄥ悎骞舵帴鍙?
+  // 如果包含 alsoPurchaseAssessment 字段,使用合并接口
   if (data.alsoPurchaseAssessment) {
     return request('/api/growth/record/create-with-order', 'POST', data)
   }
@@ -1054,7 +1054,7 @@ export const getGrowthSupplements = (id) => {
   return request('/api/growth/record/' + id + '/supplements', 'POST')
 }
 
-// 鎴愰暱瑙勫垝甯堟ā鍧桝PI
+// 成长规划师模块API
 export const getTeamMembers = () => {
   return request('/api/guide/team/members', 'POST')
 }
@@ -1075,7 +1075,7 @@ export const getOrderStats = () => {
   return request('/api/guide/orders/stats', 'POST')
 }
 
-// 浠诲姟瀹屾垚鐜囩粺璁?
+// 任务完成率统计
 export const getChildCompletionStats = (params) => {
   return request('/api/stats/child-completion', 'POST', params)
 }
@@ -1106,17 +1106,17 @@ export const acceptParentInvite = (code) => {
   return request('/api/guide/parent-invite/accept', 'POST', { code })
 }
 
-// 韪㈠嚭瀹跺涵鎴愬憳锛堜粎绠$悊鍛橈級
+// 踢出家庭成员(仅管理员)
 export const kickFamilyMember = (targetUserId) => {
   return request('/api/family/user/kick', 'POST', { targetUserId })
 }
 
-// 瀹跺涵閭€璇蜂簩缁寸爜
+// 家庭邀请二维码
 export const generateFamilyInviteQrCode = () => {
   return request('/api/family/invite/qrcode', 'POST')
 }
 
-// 閫氳繃閭€璇风爜鎺ュ彈閭€璇凤紙鎵爜鍚庤皟鐢級
+// 通过邀请码接受邀请(扫码后调用)
 export const acceptFamilyInviteByCode = (inviteCode) => {
   return request('/api/family/invite/accept-by-code', 'POST', { inviteCode })
 }
@@ -1133,7 +1133,7 @@ export const validateInvitation = (token) => {
   return request('/api/family/invite/validate', 'POST', { token })
 }
 
-// 鎺ュ彈閭€璇凤紙鍔犲叆瀹跺涵锛?
+// 接受邀请(加入家庭)
 export const acceptInvitation = (token, familyRole, mergeFamily) => {
   return request('/api/family/invite/accept', 'POST', { token, familyRole, mergeFamily: !!mergeFamily })
 }
@@ -1142,7 +1142,7 @@ export const generateQrCodeFromText = (content) => {
   return request('/api/common/qrcode', 'POST', { content })
 }
 
-// 妫€鏌ュ綋鍓嶇敤鎴峰搴姸鎬?
+// 检查当前用户家庭状态
 export const checkUserFamily = () => {
   return request('/api/family/invite/check-family', 'POST')
 }
@@ -1321,7 +1321,7 @@ export const aiSendHealthButlerMessage = (data) => {
   })
 }
 
-// ===================== 幸福邻里部落 - 服务商模块 =====================
+//  幸福邻里部落 - 服务商模块 
 
 // 提交服务商入驻申请
 export const vendorApply = (data) => {
@@ -1350,7 +1350,7 @@ export const vendorInfo = () => {
   return request('/api/vendor/info', 'POST', {})
 }
 
-// ===================== 幸福邻里部落 - 商品系统 =====================
+//  幸福邻里部落 - 商品系统 
 
 // 商品分类树(公开)— pages/shop/index 依赖此函数加载分类,缺失会导致 onLoad 中断
 export const goodsCategory = () => {
@@ -1387,32 +1387,32 @@ export const productUpdate = (params) => {
   return request('/api/product/update', 'POST', params)
 }
 
-// 鏈嶅姟鍟嗘煡璇㈣嚜宸辩殑鍟嗗搧
+// 服务商查询自己的商品
 export const productMy = (params) => {
   return request('/api/product/my', 'POST', params)
 }
 
-// 鏈嶅姟鍟嗕笂鏋?涓嬫灦鍟嗗搧
+// 服务商上架/下架商品
 export const productShelve = (params) => {
   return request('/api/product/shelve', 'POST', params)
 }
 
-// 鍒涘缓璁㈠崟
+// 创建订单
 export const productOrderCreate = (params) => {
   return request('/api/product/order/create', 'POST', params)
 }
 
-// 鏀粯璁㈠崟
+// 支付订单
 export const productOrderPay = (params) => {
   return request('/api/product/order/pay', 'POST', params)
 }
 
-// 鍙栨秷璁㈠崟
+// 取消订单
 export const productOrderCancel = (params) => {
   return request('/api/product/order/cancel', 'POST', params)
 }
 
-// 鎴戠殑璁㈠崟
+// 我的订单
 export const productOrderMy = (params) => {
   return request('/api/product/order/my', 'POST', params)
 }
@@ -1421,64 +1421,70 @@ export const productOrderCounts = () => {
   return request('/api/product/order/my/counts', 'POST', {})
 }
 
-// 璁㈠崟璇︽儏
+// 订单详情
 export const productOrderDetail = (params) => {
   return request('/api/product/order/detail', 'POST', params)
 }
 
-// 鏈嶅姟鍟嗘煡璇㈡敹鍒扮殑璁㈠崟
+// 服务商查询收到的订单
 export const productOrderVendor = (params) => {
   return request('/api/product/order/vendor', 'POST', params)
 }
 
-// 鏈嶅姟鍟嗙‘璁よ鍗曞畬鎴?
+// 服务商确认订单完成
 export const productOrderConfirm = (params) => {
   return request('/api/product/order/confirm', 'POST', params)
 }
 
-// 鐢ㄦ埛鐢宠璁㈠崟閫€娆?
+// 用户申请订单退款
 export const productOrderRefundApply = (params) => {
   return request('/api/product/order/refund/apply', 'POST', params)
 }
 
-// 绠$悊鍛橈細鍟嗗搧寰呭鏍稿垪琛?
+// 管理员:商品待审核列表
 export const adminProductPending = (params) => {
   return request('/api/admin/product/pending', 'POST', params)
 }
 
-// 绠$悊鍛橈細鍟嗗搧鍒楄〃
+// 管理员:商品列表
 export const adminProductList = (params) => {
   return request('/api/admin/product/list', 'POST', params)
 }
 
-// 绠$悊鍛橈細鍟嗗搧瀹℃牳
+// 管理员:商品审核
 export const adminProductReview = (params) => {
   return request('/api/admin/product/review', 'POST', params)
 }
 
-// 绠$悊鍛橈細璁㈠崟鍒楄〃
+// 管理员:订单列表
 export const adminOrderList = (params) => {
   return request('/api/admin/order/list', 'POST', params)
 }
 
-// 绠$悊鍛橈細绯荤粺閰嶇疆鍒楄〃
+// 管理员:系统配置列表
 export const adminConfigList = (params) => {
   return request('/api/admin/config/list', 'POST', params)
 }
 
-// 绠$悊鍛橈細绯荤粺閰嶇疆鏇存柊
+// 管理员:系统配置更新
 export const adminConfigUpdate = (params) => {
   return request('/api/admin/config/update', 'POST', params)
 }
 
-// 绠$悊鍛橈細鑾峰彇鎵€鏈夐厤缃?
+// 管理员:获取所有配置
 export const adminConfigAll = (params) => {
   return request('/api/admin/config/all', 'POST', params)
 }
 
-// ===================== 缁熻鎶ヨ〃 =====================
+
+//  缁熻鎶ヨ〃 
 export const getChildOverview = (memberId) => {
   return request('/api/stats/child/overview', 'POST', { memberId })
+
+//  统计报表 
+export const getChildOverview = (childId) => {
+  return request('/api/stats/child/overview', 'POST', { childId })
+
 }
 
 export const getFamilySummary = (familyId) => {
@@ -1489,7 +1495,7 @@ export const getPointsRanking = (familyId) => {
   return request('/api/stats/points/ranking', 'POST', { familyId })
 }
 
-// ===================== 鍕嬬珷绯荤粺 =====================
+//  鍕嬬珷绯荤粺 
 export const getActiveBadges = () => {
   return request('/api/badges/list', 'POST')
 }
@@ -1518,17 +1524,17 @@ export const getFamilyBadgeRanking = (familyId) => {
   return request('/api/badges/ranking/family', 'POST', { familyId })
 }
 
-// ===== 鍐呭鍖哄潡鏉冮檺 =====
+// ===== 内容区块权限 =====
 export const getVisibleSections = (data) => request('/api/content-sections/visible', 'POST', data)
 
-// ===================== 鍒嗕剑瑁傚彉绯荤粺 =====================
+//  分佣裂变系统 
 
-// 鑾峰彇/鍒涘缓鎴戠殑閭€璇风爜
+// 获取/创建我的邀请码
 export const getReferralCode = () => {
   return request('/api/invite/code', 'POST')
 }
 
-// 鑾峰彇閭€璇蜂簩缁寸爜
+// 获取邀请二维码
 export const getInviteQrCode = () => {
   return request('/api/invite/qrcode', 'POST')
 }
@@ -1537,17 +1543,17 @@ export const getShareQrCode = (page, scene) => {
   return request('/api/share/qrcode', 'POST', { page, scene })
 }
 
-// 缁戝畾鎺ㄨ崘浜?
+// 绑定推荐人
 export const bindReferral = (referralCode) => {
   return request('/api/invite/bind', 'POST', { referralCode })
 }
 
-// 鎴戠殑閭€璇峰垪琛?
+// 我的邀请列表
 export const getReferralList = (page = 1, size = 10) => {
   return request('/api/invite/list', 'POST', { page, size })
 }
 
-// 閭€璇风粺璁?
+// 邀请统计
 export const getReferralSummary = () => {
   return request('/api/invite/summary', 'POST')
 }
@@ -1576,14 +1582,14 @@ export const getWithdrawalHistory = (page = 1, size = 10) => {
   return request('/api/withdrawal/history', 'POST', { page, size })
 }
 
-// ===================== 浜旇鑳介噺娌欑洏 =====================
+//  浜旇鑳介噺娌欑洏 
 
-// 鑾峰彇瀹跺涵鑳介噺娌欑洏鏁版嵁锛堝搴簲缁?+ 姣忎釜鎴愬憳鐨勪釜浜烘暟鎹級
+// 获取家庭能量沙盘数据(家庭五维+ 每个成员的个人数据)
 export const getFamilyEnergySandbox = () => {
   return request('/api/energy/sandbox', 'POST')
 }
 
-// ===== 鏂囩珷鍐呭绯荤粺 =====
+// ===== 文章内容系统 =====
 export const getArticleCategories = () => request('/api/articles/categories', 'POST')
 export const getArticleList = (data) => request('/api/articles/list', 'POST', data)
 export const getArticleDetail = (data) => request('/api/articles/detail', 'POST', data)
@@ -1611,10 +1617,16 @@ export const submitQuiz = (data) => request('/api/articles/quiz/submit', 'POST',
 // ===== EMI蹇冪悊鎶ュ憡 =====
 export const getEmiReport = (memberId) => request('/api/emireport/latest', 'POST', { memberId })
 
+
 // ===== 璁ょ煡娴嬭瘎缁撴灉 =====
 export const getAssessmentLatestResult = (memberId) => request('/api/assessment/latest-result', 'POST', { memberId })
 export const getAssessmentHistory = (memberId, size) => request('/api/assessment/history', 'POST', { memberId, size: size || 5 })
 
+// ===== 认知测评结果 =====
+export const getAssessmentLatestResult = (childId) => request('/api/assessment/latest-result', 'POST', { childId })
+export const getAssessmentHistory = (childId, size) => request('/api/assessment/history', 'POST', { childId, size: size || 5 })
+
+
 // ===== 测评额度(商城化改造) =====
 export const getAssessmentQuotas = () => request('/api/assessment/quota/my-list', 'POST')
 export const getAssessmentQuotaDetail = (quotaId) => request('/api/assessment/quota/detail', 'POST', { quotaId })
@@ -1669,51 +1681,57 @@ export const getUserBadges = (memberId) => {
   return request('/api/badges/child/list', 'POST', { memberId })
 }
 
+
 // ===== 鎴愰暱鎶ュ憡 =====
 export const getGrowthReport = (memberId) => {
   return request('/api/stats/child/overview', 'POST', { memberId })
+
+// ===== 成长报告 =====
+export const getGrowthReport = (childId) => {
+  return request('/api/stats/child/overview', 'POST', { childId })
+
 }
 
-// ===== 鐢ㄦ埛琛屽姩缁熻锛堟垜鐨勯〉闈級 =====
+// ===== 用户行动统计(我的页面) =====
 export const getUserActionStats = () => {
   return request('/api/user/action-stats', 'POST')
 }
 
-// ===== 鐑棬娲诲姩锛堣杩?Tab锛?=====
+// ===== 热门活动(行Tab) =====
 export const getHotActivities = (data) => {
   return request('/api/activities/hot', 'POST', data)
 }
 
-// ===== 鎺ㄨ崘鍟嗗搧锛堣杩?Tab锛?=====
+// ===== 推荐商品(行Tab) =====
 export const getRecommendedProducts = (data) => {
   return request('/api/products/recommend', 'POST', data)
 }
 
-// ===================== 浼氬憳鍗囩骇涓庣画璐?=====================
+//  浼氬憳鍗囩骇涓庣画璐?
 
 // 鍗囩骇浼氬憳
 export const upgradeMember = (levelCode) => {
   return request('/api/membership/upgrade', 'POST', { levelCode })
 }
 
-// 鑾峰彇褰撳墠浼氬憳绛夌骇璇︽儏
+// 获取当前会员等级详情
 export const getMemberLevel = (levelCode) => {
   return request('/api/membership/level', 'POST', { levelCode })
 }
 
-// 鑾峰彇鍗囩骇璁板綍
+// 获取升级记录
 export const getUpgradeRecords = (page = 1, size = 10) => {
   return request('/api/membership/upgrade-records', 'POST', { page, size })
 }
 
-// ===================== 浣i噾鍥㈤槦缁熻 =====================
+//  佣金团队统计 
 
-// 鎺ㄥ箍鍥㈤槦鍒楄〃
+// 推广团队列表
 export const getCommissionTeam = (page = 1, size = 10) => {
   return request('/api/commission/team', 'POST', { page, size })
 }
 
-// 鎺ㄥ箍鍥㈤槦鎴愬憳鍒楄〃锛堝垎椤碉級
+// 推广团队成员列表(分页)
 export const getTeamList = (page = 1, size = 20, level = 'ALL') => {
   return request('/api/commission/team/list', 'POST', { page, size, level })
 }
@@ -1728,7 +1746,7 @@ export const getCommissionBalance = () => {
   return request('/api/commission/balance', 'POST')
 }
 
-// ===== 璐㈠瘜缁村害 路 璐㈠晢鎵撳崱 =====
+// ===== 财富维度 · 财商打卡 =====
 export const getCheckinList = (data) => {
   return request('/api/wealth/checkin/list', 'POST', data)
 }
@@ -1745,7 +1763,7 @@ export const deleteCheckin = (id) => {
   return request('/api/wealth/checkin/delete', 'POST', { id })
 }
 
-// ===== 璐㈠瘜缁村害 路 淇濆崟绠$悊 =====
+// ===== 财富维度 · 保单管理 =====
 export const getInsuranceList = (data) => {
   return request('/api/wealth/insurance/list', 'POST', data)
 }
@@ -1879,22 +1897,34 @@ export const distributeToMember = (data) => request('/api/earnings/admin/distrib
 export const toggleMemberBalance = (data) => request('/api/earnings/admin/toggle-member', 'POST', data)
 export const withdrawFamilyEarnings = (data) => request('/api/earnings/admin/withdraw', 'POST', data)
 
+
 // ===== 缁村害浠诲姟锛堝甫 category 绛涢€夛級 =====
 export const getTodayTasksByCategory = (memberId, category) => {
   return request('/api/tasks/today', 'POST', { memberId: memberId, category: category })
+
+// ===== 维度任务(带 category 筛选) =====
+export const getTodayTasksByCategory = (childId, category) => {
+  return request('/api/tasks/today', 'POST', { childId: childId, category: category })
+
 }
 export const getTaskHistoryByCategory = (memberId, category, page, size) => {
   return request('/api/tasks/history', 'POST', { memberId: memberId, category: category, page: page || 1, size: size || 10 })
 }
 
-// ===== 缁村害鍟嗗搧锛坉omain 绛涢€夛紝浣跨敤 productList锛?=====
+// ===== 维度商品(domain 筛选,使用 productList) =====
 export const getProductsByDomain = (domain, page, size) => {
   return productList({ domain: domain, page: page || 1, size: size || 6 })
 }
 
+
 // ===== 鍋ュ悍鎶ュ憡锛堜袱闃舵鍏ュ簱锛?=====
 export const getLatestHealthReport = (memberId) => request('/api/health/report/latest', 'POST', { memberId })
 export const getHealthIndicatorList = (memberId) => request('/api/health/indicator/list', 'POST', { memberId })
+
+// ===== 健康报告(两阶段入库) =====
+export const getLatestHealthReport = (childId) => request('/api/health/report/latest', 'POST', { childId })
+export const getHealthIndicatorList = (childId) => request('/api/health/indicator/list', 'POST', { childId })
+
 export const createHealthReport = (data) => request('/api/health/report/create', 'POST', data)
 export const getReportList = (memberId) => request('/api/health/report/list', 'POST', { memberId })
 export const getReportDetail = (reportId) => request('/api/health/report/detail', 'POST', { reportId })
@@ -1905,6 +1935,7 @@ export const queryKnowledgeBase = (itemType, itemName) => request('/api/health/k
 
 export const batchQueryKnowledgeBase = (queries) => request('/api/health/knowledge/batch-query', 'POST', { queries })
 
+
 // 闃舵1锛氫笂浼燩DF鈫掕В鏋愨啋瀛榙raft鈫掕繑鍥瀌raftId+payload+鎴愬憳鍖归厤锛堜笉钀藉簱锛?
 export const parseReportPreview = (filePath, memberId, familyId, type) => {
   return new Promise((resolve, reject) => {
@@ -1939,6 +1970,9 @@ export const parseReportPreview = (filePath, memberId, familyId, type) => {
 }
 
 // 闃舵2锛氱‘璁よ惤搴擄紙鍙€変紶淇敼鍚庣殑payload鍜宻ubjectId锛?
+
+// 阶段2:确认落库(可选传修改后的payload和subjectId)
+
 export const confirmReportPreview = (data) => request('/api/health/report/confirm', 'POST', data)
 
 // 鏀惧純鑽夌
@@ -1952,7 +1986,7 @@ export const getSurveyStatus = (reportId) => request('/api/health/survey/status'
 // ===== Report Feedback (gut flora report feedback) =====
 export const submitFeedback = (data) => request('/api/health/feedback/submit', 'POST', data)
 
-// ===== 閲嶈鍏崇郴锛堣仈绯讳汉锛?=====
+// ===== 重要关系(联系人) =====
 export const getContactList = (data) => request('/api/contact/list', 'POST', data)
 export const getContactDetail = (id) => request('/api/contact/detail', 'POST', { id: id })
 export const createContact = (data) => request('/api/contact/create', 'POST', data)
@@ -1981,7 +2015,7 @@ export const getNutritionTrend = (memberId) => request('/api/health/nutrition/tr
 export const getHealthAnalysis = (memberId) => request('/api/health/analysis', 'POST', { memberId })
 export const getNutritionMappings = (data) => request('/api/health/nutrition/mappings', 'POST', data || {})
 
-// ===== 鍋ュ悍缁村害 =====
+// ===== 健康维度 =====
 export const getDimensionOverview = (data) => request('/api/dimension/overview', 'POST', data)
 export const uploadDimensionScore = (data) => request('/api/dimension/upload', 'POST', data)
 export const submitDimensionQuestionnaire = (data) => request('/api/dimension/questionnaire', 'POST', data)
@@ -1995,7 +2029,7 @@ export const claimInviteMilestone = (milestone) => {
   return request('/api/invite/milestone/claim', 'POST', { milestone })
 }
 
-// ===================== 浼樻儬鍒告ā鍧?=====================
+//  浼樻儬鍒告ā鍧?
 export const getCouponList = () => {
   return request('/api/coupon/list', 'POST')
 }
@@ -2004,7 +2038,7 @@ export const claimCoupon = (couponId) => {
   return request('/api/coupon/claim', 'POST', { couponId })
 }
 
-// ===== 鏂版墜浠诲姟锛圤nboarding Rewards锛?=====
+// ===== 新手任务(Onboarding Rewards) =====
 export const getOnboardingProgress = () => {
   return request('/api/onboarding/progress', 'POST')
 }
@@ -2012,7 +2046,7 @@ export const claimOnboardingReward = (taskType) => {
   return request('/api/onboarding/claim', 'POST', { taskType })
 }
 
-// ===== 鎴愰暱浠诲姟锛堟瘡鏃?鏂版墜浠诲姟绯荤粺锛?=====
+// ===== 成长任务(每日新手任务系统) =====
 export const getGrowthTaskList = (type) => {
   return request('/api/growth-task/list', 'POST', { type: type || 'DAILY' })
 }
@@ -2021,7 +2055,7 @@ export const claimGrowthTaskReward = (taskLogId) => {
   return request('/api/growth-task/claim', 'POST', { taskLogId })
 }
 
-// ===== 鎺ㄥ箍鎺掕姒?=====
+// ===== 推广排行榜 =====
 export const getLeaderboardTop = () => {
   return request('/api/leaderboard/top', 'POST')
 }
@@ -2030,9 +2064,15 @@ export const getLeaderboardMyRank = () => {
   return request('/api/leaderboard/my-rank', 'POST')
 }
 
+
 // ===== 鏁板闂叧锛堣嚜宸卞嚭棰樿嚜宸辩瓟锛?=====
 export const getMathQuizStart = (memberId, age) => {
   return request('/api/wisdom/math/start', 'POST', { memberId, age })
+
+// ===== 数学闯关(自己出题自己答) =====
+export const getMathQuizStart = (childId, age) => {
+  return request('/api/wisdom/math/start', 'POST', { childId, age })
+
 }
 
 export const verifyMathAnswer = (memberId, expression, userAnswer) => {
@@ -2107,7 +2147,7 @@ export const getSelfCheckHistory = () => {
   return request('/api/family/self-check/history', 'POST', {})
 }
 
-// ===== 鑸岃瘖鐩稿叧锛堜袱闃舵娴佺▼锛?=====
+// ===== 舌诊相关(两阶段流程) =====
 export const parseTonguePreview = (data) => request('/api/health/report/parse-preview?type=tongue', 'POST', data)
 export const confirmTongue = (data) => request('/api/health/report/confirm?type=tongue', 'POST', data)
 export const discardTongue = (data) => request('/api/health/report/discard?type=tongue', 'POST', data)
@@ -2231,17 +2271,17 @@ export const supplierProducts = (data) => {
   return request('/api/supplier/products', 'POST', data)
 }
 
-// ========== 商品规格 ==========
+// === 商品规格 ===
 export const productSpecGroups = (productId) => {
   return request('/api/product/spec/groups', 'POST', { productId })
 }
 
-// ========== 推荐系统 - 维度商品 ==========
+// === 推荐系统 - 维度商品 ===
 export const getDimensionProducts = (data) => {
   return request('/api/recommend/dimension-products', 'POST', data)
 }
 
-// ========== 推荐系统 - 复购提醒 ==========
+// === 推荐系统 - 复购提醒 ===
 export const getRepurchaseReminders = (data) => {
   return request('/api/recommend/repurchase-reminders', 'POST', data)
 }
@@ -2250,7 +2290,7 @@ export const clickRepurchaseReminder = (id) => {
   return request('/api/recommend/repurchase-reminder/' + id + '/click', 'POST', {})
 }
 
-// ========== KB v3 知识库查询 ==========
+// === KB v3 知识库查询 ===
 
 // 查询菌属功能(支持属级回退)
 export const queryBacteriaKnowledge = (name) => {