食谱管理器 recipe-manager

食谱管理器技能是一个用于在CookMode V2中管理食谱数据的专业工具。它帮助用户创建、编辑、验证和维护食谱条目,确保数据遵循结构化对象格式。主要功能包括添加新食谱、修改现有食谱、修复格式错误、批量更新属性以及转换食谱格式。该技能适用于食谱数据管理、结构化数据转换、烹饪应用开发和数据验证等场景。

前端开发 0 次安装 0 次浏览 更新于 3/1/2026

name: recipe-manager description: 帮助在recipes.js中添加、编辑、验证和管理食谱数据。当用户想要创建新食谱、修改现有食谱、修复食谱格式或验证食谱结构时使用此技能。

食谱管理器技能

您的角色

您专门为CookMode V2管理食谱数据。您帮助用户按照既定模式和架构在recipes.js文件中创建、编辑和维护食谱条目。

何时使用此技能

当用户想要以下操作时,调用此技能:

  • 添加新食谱
  • 编辑现有食谱
  • 修复食谱格式或结构
  • 验证食谱数据
  • 转换食谱格式
  • 批量更新食谱属性

食谱数据架构(结构化对象格式)

标准食谱结构

'recipe-slug': {
    name: '显示名称',
    category: '主菜' | '配菜' | '汤品' | '甜点',
    components: {
        '组件名称': [
            {
                amount: number | string,    // 2, 0.5, '1/4', '1/3'
                unit: string,              // '杯', '汤匙', '盎司', '磅', 等
                ingredient: string,        // '胡萝卜', '橄榄油'
                prep: string               // 可选: '切丁', '切碎'
            }
        ]
    },
    instructions: [
        '步骤1说明',
        '步骤2说明'
    ],
    notes: '单个字符串' | ['数组', '字符串'],
    images: ['url1.jpg', 'url2.jpg'] // 可选
}

必填字段

  • name (字符串): 食谱的显示名称
  • category (字符串): 其中之一: 主菜, 配菜, 汤品, 甜点
  • components (对象): 按组件分组的配料列表(对象数组)
  • instructions (数组): 分步烹饪说明

可选字段

  • notes (字符串或数组): 额外提示或信息
  • images (数组): 食谱照片的URL

配料对象结构

必填字段(每个配料)

  • amount: 数字或分数字符串
    • 数字: 2, 0.5, 1.5
    • 分数: '1/2', '1/4', '1/3'
  • unit: 计量单位
    • 体积: '杯', '汤匙', '茶匙'
    • 重量: '盎司', '磅', '克', '千克'
    • 计数: '大个', '中等', '小个', '瓣', '整个'
    • 其他: '食谱', '一小撮', '少许'
  • ingredient: 配料名称
    • 描述性: '通用面粉', '克里米尼蘑菇'
    • 简单: '胡萝卜', '大蒜', '橄榄油'

可选字段(每个配料)

  • prep: 准备说明
    • 切割: '切丁', '切碎', '切片', '切块'
    • 状态: '软化', '融化', '室温'
    • 附加: '分开使用', '根据口味适量添加', '推荐使用黑皮诺'

示例

// 简单配料
{ amount: 2, unit: '杯', ingredient: '面粉' }

// 带准备说明
{ amount: 1, unit: '大个', ingredient: '洋葱', prep: '切丁' }

// 分数数量
{ amount: '1/4', unit: '茶匙', ingredient: '盐' }

// 复杂准备说明
{ amount: 5, unit: '大个', ingredient: '胡萝卜', prep: '去皮并切成大块' }

// 非标准单位
{ amount: 1, unit: '食谱', ingredient: '土豆泥', prep: '或配米饭食用' }

缩放逻辑(新增)

对象格式更简单!

function scaleIngredient(ingredientObj, multiplier) {
    const scaledAmount = parseAmount(ingredientObj.amount) * multiplier;
    return {
        ...ingredientObj,
        amount: scaledAmount
    };
}

function parseAmount(amount) {
    if (typeof amount === 'number') return amount;
    if (amount.includes('/')) {
        const [num, den] = amount.split('/').map(Number);
        return num / den;
    }
    return parseFloat(amount);
}

显示格式化

function formatIngredient(obj, orderCount = 1) {
    const scaledAmount = parseAmount(obj.amount) * orderCount;
    const prep = obj.prep ? `, ${obj.prep}` : '';
    return `${scaledAmount.toFixed(2)} ${obj.unit} ${obj.ingredient}${prep}`;
}

// 示例:
// { amount: 2, unit: '杯', ingredient: '面粉' }
// → "2.00 杯 面粉"

// { amount: 1, unit: '大个', ingredient: '洋葱', prep: '切丁' }
// → "1.00 大个 洋葱, 切丁"

// { amount: '1/4', unit: '茶匙', ingredient: '盐', prep: '根据口味适量添加' }
// → "0.25 茶匙 盐, 根据口味适量添加"

类别顺序

食谱按以下类别顺序显示:

  1. 主菜
  2. 配菜
  3. 汤品
  4. 甜点

定义于 /js/components/RecipeGrid.js:20

备注字段处理

RecipeModal.js 组件以两种格式处理备注:

  1. 字符串: 渲染为单个段落
  2. 数组: 将每个项目渲染为单独的段落
// 单个备注
notes: "使用手持搅拌器以获得蓬松质地。"

// 多个备注
notes: [
    "使用手持搅拌器以获得蓬松质地。",
    "与蘑菇红酒炖菜搭配良好。"
]

组件分组

常见组件模式:

  • 简单食谱: 单个组件(例如,‘配料’)
  • 复杂食谱: 多个组件(例如,‘面团’, ‘馅料’, ‘浇头’)
  • 酱汁: 通常为单独组件(例如,‘基底’, ‘酱汁’)

验证清单

添加/编辑食谱时,请验证:

  • [ ] 短链接为kebab-case(小写,连字符)
  • [ ] 名称为人类可读
  • [ ] 类别为其中之一: 主菜, 配菜, 汤品, 甜点
  • [ ] 所有配料均为具有amountunitingredient字段的对象
  • [ ] amount为数字或分数字符串(‘1/2’, ‘1/4’)
  • [ ] unit为字符串(非空)
  • [ ] ingredient为字符串(非空)
  • [ ] prep为可选字符串
  • [ ] 组件对象至少有一个条目
  • [ ] 每个组件都有配料对象数组
  • [ ] 说明数组至少有一个步骤
  • [ ] 备注字段为字符串或数组(非对象)
  • [ ] 图像为有效URL(如果提供)
  • [ ] 数组/对象中没有尾随逗号
  • [ ] 正确的JavaScript语法

常见任务

添加新食谱

  1. 创建kebab-case短链接
  2. 遵循架构结构(对象格式)
  3. 确保所有配料都有amountunitingredient字段
  4. 为准备说明添加可选prep字段
  5. 添加到适当的类别
  6. 验证语法

将字符串格式转换为对象格式

旧字符串格式:

'2 杯 通用面粉, 过筛'

新对象格式:

{ amount: 2, unit: '杯', ingredient: '通用面粉', prep: '过筛' }

使用ChatGPT/Claude批量转换:

“将这些食谱配料转换为具有amount、unit、ingredient、prep字段的结构化格式”

转换食谱

从外部来源导入时:

  1. 提取名称、类别、配料、说明
  2. 将配料分组到组件中
  3. 格式化配料,数量在前
  4. 将步骤转换为数组
  5. 添加到recipes.js

文件位置

recipes.js: /Users/adamfehse/Documents/gitrepos/cookmodeV2/recipes.js

此文件作为全局window.RECIPES对象加载,并由以下组件访问:

  • App.js - 传递给RecipeGrid和RecipeModal
  • RecipeGrid.js - 显示卡片和过滤器
  • RecipeModal.js - 显示完整食谱详情

最佳实践

  1. 保持简单: Pico CSS哲学也适用于数据
  2. 一致的格式: 遵循现有模式
  3. 清晰的组件名称: ‘酱汁’, ‘面团’, ‘馅料’而非’组件1’
  4. 精确的数量: 包括计量单位
  5. 可操作的说明: 每个步骤应清晰明了

示例:添加新食谱(新对象格式)

'巧克力曲奇': {
    name: '巧克力曲奇',
    category: '甜点',
    components: {
        '面团': [
            { amount: 2, unit: '杯', ingredient: '通用面粉' },
            { amount: 1, unit: '茶匙', ingredient: '小苏打' },
            { amount: 0.5, unit: '茶匙', ingredient: '盐' },
            { amount: 1, unit: '杯', ingredient: '黄油', prep: '软化' },
            { amount: 0.75, unit: '杯', ingredient: '砂糖' },
            { amount: 0.75, unit: '杯', ingredient: '红糖' },
            { amount: 2, unit: '大个', ingredient: '鸡蛋' },
            { amount: 2, unit: '茶匙', ingredient: '香草精' }
        ],
        '混合料': [
            { amount: 2, unit: '杯', ingredient: '巧克力豆' }
        ]
    },
    instructions: [
        '预热烤箱至375°F。',
        '在碗中混合面粉、小苏打和盐。',
        '将黄油和糖搅打至蓬松。',
        '打入鸡蛋和香草精。',
        '逐渐拌入面粉混合物。',
        '拌入巧克力豆。',
        '将圆勺大小的面团放在未抹油的烤盘上。',
        '烘烤9-11分钟或直至金黄色。'
    ],
    notes: '如需更耐嚼的曲奇,略微欠烤并在烤盘上冷却。'
}

ChatGPT转换提示

使用此提示转换现有食谱:

将此食谱转换为具有以下结构的JavaScript对象格式:
- amount: 数字或分数字符串('1/2', '1/4')
- unit: 字符串(杯, 汤匙, 茶匙, 盎司, 磅, 等)
- ingredient: 字符串(配料名称)
- prep: 字符串(可选,准备说明如'切丁', '软化')

[在此处粘贴食谱]

记住:保持食谱易于烹饪和维护!