-
+ 👤 运动员信息
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
- ⚖️ 摄入量 ({{ currentUnit }})
+
-
+
+
+
+
-
-
+ 📋 今日摄入清单
- {{ foodList.length }} 项 +🤖 自动评价
++ {{ autoEvaluation ? '评价内容由系统根据配置自动生成' : '系统已计算各类摄入量,请对照填写评价' }} +
-
-
-
- 🍃
- 暂无食物记录,请从上方选择食物添加
-
-
+
-
-
- {{ item.name }}
- {{ item.amount }} g
-
-
-
-
-
-
-
-
- 📡
- 待发送后端的 JSON 数据
-
-
+
+
+
+
- {{ prettyJson }}
{{ prettyJson }}
-
+
+
@@ -171,136 +164,468 @@
-
\ No newline at end of file
+
+.modal-preview {
+ max-width: 900px !important;
+ width: 90vw;
+ max-height: 85vh;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+}
+
+.preview-body {
+ max-height: 60vh;
+ overflow-y: auto;
+ padding: 1rem;
+}
+
+.excel-preview {
+ font-size: 0.85rem;
+}
+
+.preview-sheet {
+ margin-bottom: 1.5rem;
+}
+
+.sheet-title {
+ font-size: 1rem;
+ font-weight: 600;
+ color: #2d6a4f;
+ margin-bottom: 0.5rem;
+ padding-bottom: 0.3rem;
+ border-bottom: 2px solid #2d6a4f;
+}
+
+.table-wrapper {
+ overflow-x: auto;
+ border: 1px solid #e0e0e0;
+ border-radius: 4px;
+}
+
+.preview-table {
+ width: 100%;
+ border-collapse: collapse;
+ font-size: 0.8rem;
+}
+
+.preview-table td {
+ padding: 0.4rem 0.6rem;
+ border: 1px solid #e0e0e0;
+ text-align: center;
+ white-space: nowrap;
+}
+
+.preview-table td.header-cell {
+ background-color: #4F75B5;
+ color: white;
+ font-weight: 600;
+}
+
+.preview-table tr:nth-child(even) td {
+ background-color: #f8f9fa;
+}
+
+.preview-table tr:hover td {
+ background-color: #e8f4ea;
+}
+
diff --git a/src/components/ManualEvaluationForm.vue b/src/components/ManualEvaluationForm.vue
new file mode 100644
index 0000000..236e39c
--- /dev/null
+++ b/src/components/ManualEvaluationForm.vue
@@ -0,0 +1,148 @@
+
+ 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
- ⚠️
-
- 确认删除
+ 📊 +Excel 预览
-
确定要删除这条食物记录吗?
-- 食物:{{ getFoodNameById(deletingFoodId) }} -
+
+
+
+
+ {{ sheetName }}
+
+
+
+
+
+ | + {{ cell }} + | +
-
-
+
+
+
+
diff --git a/src/components/UserInfoForm.vue b/src/components/UserInfoForm.vue
new file mode 100644
index 0000000..58fac4d
--- /dev/null
+++ b/src/components/UserInfoForm.vue
@@ -0,0 +1,137 @@
+
+ ✍️ 手动填写评价
++ 下方已根据当前食物记录自动计算摄入量,请对照数值选择评价(不足 / 适宜 / 偏高,或选其他后自行填写)。 +
+ +⏳ 正在计算摄入量...
+ {{ previewError }}
+ 请先添加食物记录
+
+
+
+
+
+ 食物分类评价
+
+
+
+ 种类
+ 摄入量
+ 评价
+
+
+ {{ cat }}
+ {{ formatCategoryIntake(cat) }}
+
+
+
+
+
+ 整体评估及建议
+ +
+
+
+ 能量及钙摄入量评价
+
+
+
+ 项目
+ 摄入量
+ 评价
+
+
+ 总能量
+ {{ formatEnergyIntake() }}
+
+
+
+ 钙
+ {{ formatCalciumIntake() }}
+
+
+
+
+
+ 解读
+ +
+
+
+
+
diff --git a/src/services/api.js b/src/services/api.js
new file mode 100644
index 0000000..d1e0dfc
--- /dev/null
+++ b/src/services/api.js
@@ -0,0 +1,50 @@
+const BASE_URL = '/api/trophic'
+const REQUEST_TIMEOUT = 15000
+
+const LIQUID_CATEGORIES = ['饮料', '奶类', '酒类']
+
+function inferUnit(categoryName) {
+ return LIQUID_CATEGORIES.includes(categoryName) ? 'ml' : 'g'
+}
+
+async function fetchWithTimeout(url, options = {}) {
+ const controller = new AbortController()
+ const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT)
+ try {
+ const response = await fetch(url, { ...options, signal: controller.signal })
+ return response
+ } finally {
+ clearTimeout(timer)
+ }
+}
+
+export async function fetchCategories(name = '') {
+ const params = new URLSearchParams({ pageNum: '1', pageSize: '50' })
+ if (name) params.set('name', name)
+ const response = await fetchWithTimeout(`${BASE_URL}/category?${params}`)
+ const json = await response.json()
+ if (json.code !== 200) throw new Error(json.message || '获取分类失败')
+ return json.data.records.map(r => ({
+ id: r.id,
+ name: r.name
+ }))
+}
+
+export async function fetchFoodsByCategory(categoryId, categoryName, name = '') {
+ const params = new URLSearchParams({ categoryId, pageNum: '1', pageSize: '200' })
+ if (name) params.set('name', name)
+ const response = await fetchWithTimeout(`${BASE_URL}/goodsInfo?${params}`)
+ const json = await response.json()
+ if (json.code !== 200) throw new Error(json.message || '获取食物失败')
+ return json.data.records.map(r => ({
+ id: r.id,
+ name: r.name,
+ categoryId: r.categoryId,
+ unit: inferUnit(categoryName),
+ energy: r.energy,
+ protein: r.protein,
+ fat: r.fat,
+ carbohydrate: r.carbohydrate,
+ calcium: r.calcium
+ }))
+}
diff --git a/src/services/reportApi.js b/src/services/reportApi.js
new file mode 100644
index 0000000..cc56794
--- /dev/null
+++ b/src/services/reportApi.js
@@ -0,0 +1,16 @@
+const REPORT_BASE = 'http://localhost:5000/api'
+
+export async function fetchIntakePreview(payload) {
+ const response = await fetch(`${REPORT_BASE}/preview-intake`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(payload)
+ })
+
+ if (!response.ok) {
+ const err = await response.json().catch(() => ({}))
+ throw new Error(err.message || '摄入量计算失败')
+ }
+
+ return response.json()
+}
diff --git a/src/utils/energyEer.js b/src/utils/energyEer.js
new file mode 100644
index 0000000..8d6d183
--- /dev/null
+++ b/src/utils/energyEer.js
@@ -0,0 +1,46 @@
+import eerConfig from '../../config/female_energy_eer.json'
+
+function safeFloat(value, defaultValue = -1) {
+ const n = parseFloat(value)
+ return isNaN(n) ? defaultValue : n
+}
+
+export function lookupFemaleEnergyEer(user) {
+ if (!user) return null
+
+ const gender = user.gender || user.userGender
+ if (gender !== 'female') return null
+
+ const age = safeFloat(user.age ?? user.userAge)
+ const weight = safeFloat(user.weight ?? user.userWeight, 0)
+ const activity = String(user.activityLevel ?? user.userActivityLevel ?? '').trim()
+
+ if (age < 0 || !activity) return null
+
+ const ageGroup = eerConfig.age_groups.find(
+ g => g.age_min <= age && age < g.age_max
+ )
+ if (!ageGroup) return null
+
+ const levelData = ageGroup.levels[activity]
+ if (!levelData) return null
+
+ const activityLabel = eerConfig.activity_levels[activity]?.label || ''
+
+ if (levelData.type === 'per_kg') {
+ if (weight <= 0) return null
+ return {
+ kcal: Math.round(levelData.kcal * weight * 10) / 10,
+ ageLabel: ageGroup.label,
+ activityLabel,
+ note: `${levelData.kcal} kcal/kg·d`
+ }
+ }
+
+ return {
+ kcal: levelData.kcal,
+ ageLabel: ageGroup.label,
+ activityLabel,
+ note: `${ageGroup.label} · ${activityLabel}`
+ }
+}
diff --git a/src/utils/manualEvaluation.js b/src/utils/manualEvaluation.js
new file mode 100644
index 0000000..9eab5c4
--- /dev/null
+++ b/src/utils/manualEvaluation.js
@@ -0,0 +1,77 @@
+import nutritionTemplate from '../../config/nutrition_template.json'
+
+export const REPORT_CATEGORIES = Object.keys(nutritionTemplate.food_category_map)
+export const EVAL_PRESET_OPTIONS = ['不足', '适宜', '偏高']
+export const CHOICE_OTHER = '__other__'
+
+function emptyChoice() {
+ return { choice: '', other: '' }
+}
+
+export function createEmptyManualEvaluations() {
+ const categoryEvaluations = {}
+ REPORT_CATEGORIES.forEach(cat => {
+ categoryEvaluations[cat] = emptyChoice()
+ })
+ return {
+ categoryEvaluations,
+ overallSuggestions: '',
+ energyEvaluation: emptyChoice(),
+ calciumEvaluation: emptyChoice(),
+ interpretation: ''
+ }
+}
+
+export function resolveEvalValue(field) {
+ if (!field || !field.choice) return ''
+ if (field.choice === CHOICE_OTHER) {
+ return (field.other || '').trim()
+ }
+ return field.choice
+}
+
+/** 转为后端可用的纯文本格式 */
+export function resolveManualEvaluationsForSubmit(manual) {
+ const categoryEvaluations = {}
+ REPORT_CATEGORIES.forEach(cat => {
+ categoryEvaluations[cat] = resolveEvalValue(manual.categoryEvaluations[cat])
+ })
+ return {
+ categoryEvaluations,
+ overallSuggestions: manual.overallSuggestions || '',
+ energyEvaluation: resolveEvalValue(manual.energyEvaluation),
+ calciumEvaluation: resolveEvalValue(manual.calciumEvaluation),
+ interpretation: manual.interpretation || ''
+ }
+}
+
+function validateChoiceField(field, label, errors) {
+ if (!field?.choice) {
+ errors.push(`请选择「${label}」的评价`)
+ return
+ }
+ if (field.choice === CHOICE_OTHER && !field.other?.trim()) {
+ errors.push(`请填写「${label}」的其他评价内容`)
+ }
+}
+
+export function validateManualEvaluations(manual) {
+ const errors = []
+
+ REPORT_CATEGORIES.forEach(cat => {
+ validateChoiceField(manual.categoryEvaluations[cat], cat, errors)
+ })
+
+ if (!manual.overallSuggestions?.trim()) {
+ errors.push('请填写整体评估及建议')
+ }
+
+ validateChoiceField(manual.energyEvaluation, '总能量', errors)
+ validateChoiceField(manual.calciumEvaluation, '钙', errors)
+
+ if (!manual.interpretation?.trim()) {
+ errors.push('请填写解读内容')
+ }
+
+ return errors
+}
diff --git a/temp_pie.png b/temp_pie.png
index 5cecc93eb66ad7be855126aabceb6818e9d73d24..40dd708db55233a2b80671bdce4eaf2f183f3a95 100644
GIT binary patch
literal 26024
zcmeFZRa6~K&^AhhBv=R#f&~cf?(QzZ-6aHfx8UyX1b26rAR7V%3&CyU?hb$Re&6};
z&fU2@do5PhOwaUGcUM👤 运动员信息
+
+
+
+
+
+
+
+
+ {{ validationErrors.userName }}
+
+
+
+
+
+
+ -- 请选择性别 --
+ 男
+ 女
+
+
+ {{ validationErrors.userGender }}
+
+
+
+
+
+
+
+ {{ validationErrors.userAge }}
+
+
+
+
+
+
+
+ {{ validationErrors.userHeight }}
+
+
+
+
+
+
+
+ {{ validationErrors.userWeight }}
+
+
+
+
+
+
+ -- 请选择运动量 --
+ I 级 · 低强度
+ II 级 · 中等强度
+ III 级 · 高强度
+
+
+ {{ validationErrors.userActivityLevel }}
+
+
+
+
+ 📊 BMI: {{ bmi }} ({{ bmiStatus }})
+
+
+
+ ⚡ 推荐能量摄入: {{ energyStandard }} kcal/天
+ ({{ energyStandardNote }})
+
+