/** * 全量食材库:key 用于消除匹配,img 为 Twemoji PNG(小程序可用) */ import { getFoodImgUrl } from './gameFoodImg.js' export const GI_LABEL = { low: '低血糖', mid: '中血糖', high: '高血糖' } /** 若实际食用时的升糖幅度(教育提示用,正值=升糖) */ export function getEatVal(food) { if (food.eatVal != null) return food.eatVal if (food.gi === 'high') return Math.abs(food.val) if (food.gi === 'mid') return Math.max(1, food.val) return Math.max(1, Math.abs(food.val)) } /** 从餐盘消除该食物后的血糖变化(负值=控糖有益) */ export function getClearVal(food) { if (food.clearVal != null) return food.clearVal const eat = getEatVal(food) if (food.gi === 'high') return -Math.max(8, Math.round(eat * 0.5)) if (food.gi === 'mid') return -1 return 0 } /** 点击食材时的升糖说明文案 */ export function formatEatLabel(food) { if (food.gi === 'low') return '升糖低' return `若食用 +${getEatVal(food)}` } const RAW_FOODS = [ // 低 GI { key: 'lettuce', icon: '🥬', name: '生菜', gi: 'low', val: -3, color: '#8BC34A' }, { key: 'broccoli', icon: '🥦', name: '西兰花', gi: 'low', val: -3, color: '#4E8A3A' }, { key: 'apple', icon: '🍎', name: '苹果', gi: 'low', val: -2, color: '#E53935' }, { key: 'cucumber', icon: '🥒', name: '黄瓜', gi: 'low', val: -4, color: '#66A82F' }, { key: 'eggplant', icon: '🍆', name: '茄子', gi: 'low', val: -3, color: '#7E57C2' }, { key: 'tomato', icon: '🍅', name: '番茄', gi: 'low', val: -2, color: '#EF5350' }, { key: 'pepper', icon: '🫑', name: '青椒', gi: 'low', val: -3, color: '#43A047' }, { key: 'onion', icon: '🧅', name: '洋葱', gi: 'low', val: -2, color: '#CDA06B' }, { key: 'pear', icon: '🍐', name: '雪梨', gi: 'low', val: -2, color: '#C0CA33' }, { key: 'orange', icon: '🍊', name: '橙子', gi: 'low', val: -2, color: '#FB8C00' }, { key: 'peach', icon: '🍑', name: '桃子', gi: 'low', val: -2, color: '#FF8A65' }, { key: 'cherry', icon: '🍒', name: '樱桃', gi: 'low', val: -2, color: '#C2185B' }, { key: 'grape', icon: '🍇', name: '葡萄', gi: 'low', val: -1, color: '#8E24AA' }, { key: 'strawberry', icon: '🍓', name: '草莓', gi: 'low', val: -2, color: '#EC407A' }, { key: 'soybean', icon: '🫘', name: '黄豆', gi: 'low', val: -3, color: '#C9A063' }, { key: 'milk', icon: '🥛', name: '牛奶', gi: 'low', val: -2, color: '#B0BEC5' }, { key: 'tea', icon: '🍵', name: '红茶', gi: 'low', val: -1, color: '#A1573B' }, { key: 'mushroom', icon: '🍄', name: '香菇', gi: 'low', val: -3, color: '#8D6E63' }, { key: 'celery', icon: '🌿', name: '芹菜', gi: 'low', val: -4, color: '#7CB342' }, { key: 'greenBean', icon: '🫛', name: '四季豆', gi: 'low', val: -3, color: '#689F38' }, // 中 GI { key: 'brownRice', icon: '🍙', name: '糙米饭', gi: 'mid', val: 4, color: '#C9A26B' }, { key: 'sweetPotato', icon: '🍠', name: '番薯', gi: 'mid', val: 5, color: '#C75B39' }, { key: 'taro', icon: '🥔', name: '芋头', gi: 'mid', val: 5, color: '#B39DDB' }, { key: 'fish', icon: '🐟', name: '鱼肉', gi: 'mid', val: 2, color: '#4FA3C7' }, { key: 'chicken', icon: '🍗', name: '鸡肉', gi: 'mid', val: 3, color: '#D6A15A' }, { key: 'beef', icon: '🥩', name: '牛肉', gi: 'mid', val: 3, color: '#C0504D' }, { key: 'leanMeat', icon: '🍖', name: '瘦肉', gi: 'mid', val: 3, color: '#B5654D' }, { key: 'shrimp', icon: '🦐', name: '虾仁', gi: 'mid', val: 2, color: '#FF7043' }, { key: 'crab', icon: '🦀', name: '螃蟹', gi: 'mid', val: 2, color: '#F4623A' }, { key: 'banana', icon: '🍌', name: '香蕉', gi: 'mid', val: 6, color: '#FDD835' }, { key: 'mango', icon: '🥭', name: '芒果', gi: 'mid', val: 6, color: '#FFB300' }, { key: 'pineapple', icon: '🍍', name: '菠萝', gi: 'mid', val: 6, color: '#FBC02D' }, { key: 'kiwi', icon: '🥝', name: '奇异果', gi: 'mid', val: 4, color: '#9CCC65' }, { key: 'melon', icon: '🍈', name: '哈密瓜', gi: 'mid', val: 6, color: '#AED581' }, { key: 'honey', icon: '🍯', name: '蜂蜜', gi: 'mid', val: 6, color: '#F9A825' }, { key: 'wine', icon: '🍷', name: '红酒', gi: 'mid', val: 4, color: '#9B2C3B' }, { key: 'beer', icon: '🍺', name: '啤酒', gi: 'mid', val: 5, color: '#E0A83E' }, { key: 'coffee', icon: '☕', name: '咖啡', gi: 'mid', val: 2, color: '#6F4E37' }, { key: 'corn', icon: '🌽', name: '玉米', gi: 'mid', val: 5, color: '#F9C513' }, { key: 'udon', icon: '🍲', name: '乌冬面', gi: 'mid', val: 5, color: '#D9B88F' }, // 高 GI { key: 'whiteRice', icon: '🍚', name: '白米饭', gi: 'high', val: 18, color: '#E0E0E0' }, { key: 'whiteBread', icon: '🍞', name: '白面包', gi: 'high', val: 16, color: '#D9A85C' }, { key: 'mantou', icon: '🥯', name: '馒头', gi: 'high', val: 17, color: '#ECE0C8' }, { key: 'youtiao', icon: '🥖', name: '油条', gi: 'high', val: 20, color: '#D4943F' }, { key: 'donut', icon: '🍩', name: '甜甜圈', gi: 'high', val: 22, color: '#E87FB0' }, { key: 'popcorn', icon: '🍿', name: '爆米花', gi: 'high', val: 18, color: '#F5E6B3' }, { key: 'ramen', icon: '🍜', name: '拉面', gi: 'high', val: 17, color: '#E0A96D' }, { key: 'pumpkin', icon: '🎃', name: '南瓜', gi: 'high', val: 15, color: '#EF6C00' }, { key: 'bakedPotato', icon: '🍟', name: '焗薯', gi: 'high', val: 20, color: '#F2C14E' }, { key: 'watermelon', icon: '🍉', name: '西瓜', gi: 'high', val: 16, color: '#F0506A' }, { key: 'sugar', icon: '🍭', name: '砂糖', gi: 'high', val: 25, color: '#FF79B0' }, { key: 'maltose', icon: '🍬', name: '麦芽糖', gi: 'high', val: 24, color: '#FFA726' }, { key: 'soda', icon: '🥤', name: '汽水', gi: 'high', val: 25, color: '#C62828' }, { key: 'orangeJuice', icon: '🧃', name: '柳橙汁', gi: 'high', val: 22, color: '#FF9F1C' }, { key: 'stickyRice', icon: '🍡', name: '糯米饭', gi: 'high', val: 19, color: '#F2A7B8' } ] export const FOOD_LIBRARY = RAW_FOODS.map((f, i) => { const eatVal = getEatVal(f) const clearVal = getClearVal({ ...f, eatVal }) return { id: i + 1, ...f, eatVal, clearVal, giLabel: GI_LABEL[f.gi], get img() { return getFoodImgUrl(f.icon) } } }) /** 按 key 查找食材(目标栏等用) */ export function getFoodByKey(key) { return FOOD_LIBRARY.find((f) => f.key === key) || null } /** 为棋盘 tile 使用的 plain 对象(img 预计算,避免 getter 在响应式里反复触发) */ export function cloneFoodType(food) { return { id: food.id, key: food.key, icon: food.icon, name: food.name, gi: food.gi, giLabel: food.giLabel, val: food.val, color: food.color, img: getFoodImgUrl(food.icon) } }