import { getTeacherPostureReport, getTraineePostureReport } from '../../../utils/serve/posture'; function displayValue(value) { if (value === null || value === undefined || value === '') return ''; if (typeof value === 'number') return String(Math.round(value * 100) / 100); if (typeof value === 'string') return value; return ''; } function buildView(report) { const input = report.inputNormalized || {}; const result = report.result || {}; const prescription = result.prescription || {}; const mapping = prescription.mapping || {}; const messages = result.messages || {}; const metrics = (report.metrics || []).map(item => ({ key: item.key || item.name, name: item.name || item.label || item.key, value: displayValue(item.currentValue), unit: item.unit || '', })).filter(item => item.value !== ''); const messageList = Object.keys(messages).map(key => ({ key, text: displayValue(messages[key]) })).filter(item => item.text); return { studentName: input.studentName || '', testDate: input.testDate || (report.generatedAt || '').slice(0, 10), age: result.age === null || result.age === undefined ? '' : String(result.age), bmi: displayValue(result.bmi), metrics, messageList, prescriptionSummary: displayValue(prescription.summary), actions: Array.isArray(mapping.actions) ? mapping.actions : [], homeTask: displayValue(mapping.homeTask), disclaimer: (report.rule || {}).disclaimer || '', }; } Page({ data: { teacherMode: false, studentNo: '', loading: true, empty: false, error: '', view: {}, }, onLoad(options) { this.setData({ teacherMode: options.mode === 'teacher', studentNo: decodeURIComponent(options.studentNo || ''), }); this.loadReport(); }, async loadReport() { this.setData({ loading: true, error: '', empty: false }); try { const res = this.data.teacherMode ? await getTeacherPostureReport(this.data.studentNo) : await getTraineePostureReport(); const report = res.data || res; if (!report || !report.success || !report.result) throw new Error('报告内容不完整'); this.setData({ view: buildView(report), loading: false }); } catch (e) { const message = e.message || '报告加载失败'; this.setData({ loading: false, empty: message.includes('未找到') || message.includes('暂无'), error: message, }); } }, async onPullDownRefresh() { await this.loadReport(); wx.stopPullDownRefresh(); }, });