health-assistant / updated_addToDiary.js
yuting111222's picture
Add Health Assistant AI project with AI food analyzer and complete backend/frontend
89b8989
// 將食物加入飲食記錄
function addToDiary(foodName) {
if (!foodName) {
console.warn('無法加入空的食物名稱');
return false;
}
try {
// 確保 dailyMeals 是陣列
if (!Array.isArray(dailyMeals)) {
dailyMeals = [];
}
const today = new Date().toISOString().split('T')[0];
const now = new Date();
// 從營養資料庫獲取食物資訊,如果沒有則使用預設值
const foodInfo = nutritionDatabase[foodName] || {
calories: 200,
protein: 10,
carbs: 30,
fat: 5,
fiber: 2,
sugar: 5
};
const meal = {
id: Date.now(),
name: foodName,
...foodInfo, // 展開營養資訊
date: today,
time: now.toLocaleTimeString('zh-TW', {hour: '2-digit', minute:'2-digit'}),
timestamp: now.toISOString()
};
// 加入飲食記錄
dailyMeals.push(meal);
// 儲存到 localStorage
localStorage.setItem('dailyMeals', JSON.stringify(dailyMeals));
// 顯示成功訊息
showNotification(`已將「${foodName}」加入飲食記錄`, 'success');
// 更新 UI
if (typeof updateMealsList === 'function') {
updateMealsList();
}
if (typeof updateTrackingStats === 'function') {
updateTrackingStats();
}
// 觸發自定義事件,通知其他組件
document.dispatchEvent(new CustomEvent('mealAdded', { detail: meal }));
return true;
} catch (error) {
console.error('加入飲食記錄失敗:', error);
showNotification('加入飲食記錄時發生錯誤', 'error');
return false;
}
}
// 顯示通知訊息
function showNotification(message, type = 'info') {
// 檢查是否已經存在通知容器
let notificationContainer = document.getElementById('notification-container');
if (!notificationContainer) {
// 創建通知容器
notificationContainer = document.createElement('div');
notificationContainer.id = 'notification-container';
notificationContainer.style.position = 'fixed';
notificationContainer.style.top = '20px';
notificationContainer.style.right = '20px';
notificationContainer.style.zIndex = '1000';
document.body.appendChild(notificationContainer);
}
// 創建通知元素
const notification = document.createElement('div');
notification.className = `notification ${type}`;
notification.style.padding = '12px 20px';
notification.style.marginBottom = '10px';
notification.style.borderRadius = '4px';
notification.style.color = 'white';
notification.style.opacity = '0';
notification.style.transition = 'opacity 0.3s ease-in-out';
notification.style.boxShadow = '0 2px 10px rgba(0,0,0,0.1)';
// 根據類型設置背景色
const colors = {
success: '#4CAF50',
error: '#F44336',
warning: '#FF9800',
info: '#2196F3'
};
notification.style.backgroundColor = colors[type] || colors.info;
notification.textContent = message;
// 添加到容器
notificationContainer.appendChild(notification);
// 觸發動畫
setTimeout(() => {
notification.style.opacity = '1';
}, 10);
// 3秒後自動移除
setTimeout(() => {
notification.style.opacity = '0';
setTimeout(() => {
notification.remove();
// 如果容器為空,則移除容器
if (notificationContainer && notificationContainer.children.length === 0) {
notificationContainer.remove();
}
}, 300);
}, 3000);
}