diff --git a/.claude/memory/MEMORY.md b/.claude/memory/MEMORY.md index d2b382b..0b1c274 100644 --- a/.claude/memory/MEMORY.md +++ b/.claude/memory/MEMORY.md @@ -1,11 +1,11 @@ -_Last synced: 2026-08-06 | Base commit: `6a505f2`_ +_Last synced: 2026-08-05 | Base commit: `4fd44f1`_ # 记忆索引 | 文件 | 描述 | 类型 | 最后更新 | |------|------|------|----------| | project_overview.md | 项目技术栈、架构与模块结构 | project | 2026-05-14 | -| project_progress.md | 各模块原型开发进度 | project | 2026-08-06 | -| decisions.md | 关键设计决策与架构约定 | project | 2026-06-15 | +| project_progress.md | 各模块原型开发进度 | project | 2026-08-05 | +| decisions.md | 关键设计决策与架构约定 | project | 2026-08-05 | | feedback.md | 协作规范与用户纠正记录 | feedback | 2026-06-15 | | user_profile.md | 用户角色与偏好 | user | 2026-04-21 | | lint_report.md | 记忆健康检查报告 | lint | 2026-08-06 | diff --git a/.claude/memory/decisions.md b/.claude/memory/decisions.md index f87f023..79f030d 100644 --- a/.claude/memory/decisions.md +++ b/.claude/memory/decisions.md @@ -74,3 +74,39 @@ body { - **日期**:2026-06-12 - **首次落地**:餐线营养秤 9 页 + canteen-device/index.html(commit 2373704) + +## 规格体系统一化改造(跨设备端 + Web 端 + 辅助页) + +**结论**:设备端重量字段统一「克存储 + 展示层兼容显示斤」;切配规格 / 包装规格多形态字符串统一为结构化对象;建立跨页共享 `localStorage['dish_specs_v1']` + `nutri_sync_log_v1` 机制;分析页与字典页字段语义对齐权威字典。 + +**Why**:原状态字段散落各页面,重量单位(斤/克)混用、`cutSpec` / `packSpec` 既有 `"20mm×1mm×1mm · 细丝 · 平刀"` 字符串又有 `"500g"` `"大份800g"` 等多形态字符串,导致: +- 数据沉淀(localStorage)口径不一致,跨页读写不可靠 +- 设备端复用同一食材数据需要重复换算 +- 营养质控同步逻辑只能"toast 假落地",无法真正写回餐品总库 +- 分析页字典语义与权威字典 (`spec_cut_shape` / `pack_method`) 错位 + +**How to apply**: +- **存储层**:所有重量字段统一存「克」,展示层通过 `formatGram(g)` / `formatGramForCanteen(g)` 自动还原"斤"显示(如 2000g → "4 斤") +- **字段结构化**: + - `cutSpec`:字符串 → `{length, width, height, shape, technique}` 对象 + - `packSpec`:字符串 → `{baseGram, unit, portion?}` 对象 + - 兼容老数据:`parseLegacyCutSpec()` / `parseLegacyPackSpec()` 解析旧字符串 + - 渲染统一走 `formatSpec(specObj)` / `formatCutSpec(cutObj)` +- **跨页共享**: + - 餐品总库 `localStorage['dish_specs_v1']` 作为权威源 + - 营养质控同步日志 `localStorage['nutri_sync_log_v1']`(按时间倒序最多 100 条) + - 缺省回退:`FALLBACK_DISH_DATA` / `FALLBACK_SYNC_DATA` +- **字典语义对齐**:`spec_cut_shape`(丝/片/丁/块/段/末/泥/条 — 形状名词而非"切丝/切片"动作);`pack_method`(真空/气调/普通/冷鲜/保鲜盒/散装托盘)独立于 `packSpec` +- **设备端墨刀兼容**:工具函数内联到每个 HTML 页面(不引入外部 JS) +- **权威源参考**:`web-admin/nutrition/doc/spec-utils-reference.md` + +**改造分阶段记录**(详见 `web-admin/nutrition/doc/规格体系统一化改造任务清单.md`): +- 阶段一~三:Web 端档案/字典/数据沉淀类页面(已先期完成) +- 阶段四(commit 4fd44f1):设备端 9 任务 14 文件全部完成 +- 阶段五(commit 4fd44f1):辅助页 3 任务 6 文件全部完成(质控真同步落地 + 字典语义修正 + 净菜进柜 spec 多形态结构化) + +**See Also**: +- [[feedback.md]](暂无直接关联条目,后续若新增规格体系相关规范在此补引用) + +- **日期**:2026-08-05 +- **首次全阶段落地**:commit 4fd44f1 diff --git a/.claude/memory/project_progress.md b/.claude/memory/project_progress.md index eedcffa..fbe4618 100644 --- a/.claude/memory/project_progress.md +++ b/.claude/memory/project_progress.md @@ -2,8 +2,8 @@ name: 项目进度 description: 各模块原型开发进度与里程碑 type: project -last_updated: 2026-08-06 -commit: 6a505f2 +last_updated: 2026-08-05 +commit: 4fd44f1 --- # 项目进度 @@ -105,6 +105,8 @@ Web 管理端和员工端 APP 的其余模块(系统管理、运动管理、 - 覆盖模块:18 个(含三端+其他终端) ## 近期里程碑 +- 2026-08-05:规格体系统一化改造阶段四(设备端)+ 阶段五(辅助页)全部完成(commit 4fd44f1)——阶段四覆盖设备端 9 任务 14 文件:①毛菜验收秤 `verifyType` 字段(weight/count)+ UNIT_OPTIONS 分类;②毛菜加工秤 4 页存储层斤→克、`formatGram` 展示层兼容、`yieldRate` 字段、04-history 语法错误修复;③净菜加工秤设置页删除"重量单位"select、滚刀块 cm→mm;④净菜包装贴标秤 3 页(最复杂)5 个工具函数内联、`cutSpec`/`packSpec` 全部结构化、`portions`→`packSize` 重命名;⑤净菜组配秤 3 页工具函数内联 + `localStorage['dish_specs_v1']` 跨页共享 + `resolvePackSpec` 兜底。阶段五覆盖辅助页 3 任务 6 文件:①营养质控 3 页(confirmSync 真落地写入餐品总库、菜品下拉跨页共享、同步日志驱动);②分析页字典语义修正(`sup-process-analysis` 切配线"切丝"→"丝"形状名词、新增独立 `pack_method` 字典;`sup-biz-analysis` 投料/产出吨→kg 对齐);③净菜进柜 `prod-proc-cabinet` 的 `spec` 多形态字符串结构化(含决策点 #10:`'6份/箱'` 理解为 6 个份型单位装一箱)。新增权威源 `doc/spec-utils-reference.md`、改造任务清单与研发同步说明。阶段四+五完成标志着规格体系统一化五个阶段全部完成。 +- 2026-08-05:体重管理新增 `eat-exercise-detail-v2.html`(饮食运动详情 v2);西安中心应急大屏迭代至 `index-v4.html`。 - 2026-08-06:营养管理后台「批量充值」从 `din-user-mgmt.html` 弹窗抽离为独立原型页 `din-user-recharge.html`(用户筛选/候选用户表/充值配置区/汇总栏),原页面清理相关 CSS/JS/HTML 共 ≈800 行,操作栏「批量充值」按钮改为 `` 跳转;`index.html` SITE_MAP 在「用户管理」后追加入口。同日 `din-user-account.html` 充值弹窗支付方式精简为微信/现金/支付宝三种;小程序 `me-account.html` 姓名行增加可编辑态(与手机号行一致)。 - 2026-08-05/06:营养管理后台餐品档案定价区与成本核算交互改造——`din-dish-add/own/all.html` 三页同步:餐品定价区去特殊化(原蓝色渐变卡片改为普通 `.info-section`)、定价字段精简为「称重基础价/利润率/食材成本/成本核算按钮」、新增「🧮 成本核算」按钮 + `calcCostPrice()` 计算「每百克成本 = 食材成本 ÷ 熟重 × 100」+ 小问号明细浮窗 + 「应用到称重基础价」按钮;四大项营养指标样式精简(四色渐变改为统一浅灰);移除「营养等级」字段。`din-dish-add.html` 修复「成本核算」按钮无响应问题(增加演示数据 fallback)。 - 2026-08-04:营养管理后台餐品档案 4 项核心改造同步落地——①宣传视频多视频上传(`promoVideoEnabled` boolean 字段废弃,改用 `promoVideos: [{name,size,enabled}]` 数组);②营养指标自动计算(由食材清单累加,新增 `recalcAddNutri()`,4 大卡 + 16 项折叠);③烹饪工艺精简(删除「用油量/用盐量/出品量」3 字段,步骤数 9→6);④餐品定价独立分区(DISHES 数据新增 `pricing: {basePrice, ingredientCost, per100gCost, profitRate}` 嵌套对象)。 diff --git a/other-module/canteen-device/canteen-nutrition-scale/02-dish-display.html b/other-module/canteen-device/canteen-nutrition-scale/02-dish-display.html index e007c98..6bc4f84 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/02-dish-display.html +++ b/other-module/canteen-device/canteen-nutrition-scale/02-dish-display.html @@ -223,16 +223,16 @@ /* ===== 餐品数据映射(模拟后端) ===== */ var DISH_MAP = { - 1: { name: '红烧肉', price: 5, kcal: 480, colors: ['#8B3A2A', '#D4764E', '#C05030'] }, - 2: { name: '宫保鸡丁', price: 5, kcal: 420, colors: ['#C87030', '#E8A040', '#D08028'] }, - 3: { name: '麻婆豆腐', price: 4, kcal: 280, colors: ['#706040', '#B89060', '#807050'] }, - 4: { name: '清炒时蔬', price: 3, kcal: 120, colors: ['#306028', '#50A040', '#408030'] }, - 5: { name: '香煎带鱼', price: 6, kcal: 320, colors: ['#805020', '#B88040', '#A06830'] }, - 6: { name: '糖醋排骨', price: 7, kcal: 520, colors: ['#802018', '#C05030', '#A03820'] }, - 7: { name: '蒜茸西兰花', price: 3, kcal: 110, colors: ['#207040', '#40A868', '#308848'] }, - 8: { name: '米饭', price: 1.5, kcal: 260, colors: ['#D0D0C0', '#E8E8D8', '#E0E0C8'] }, - 9: { name: '紫菜蛋花汤', price: 2, kcal: 80, colors: ['#503028', '#805040', '#603830'] }, - 10: { name: '西红柿炒蛋', price: 4, kcal: 180, colors: ['#E8A030', '#F0C040', '#D89020'] } + 1: { name: '红烧肉', price: 5, kcal: 480, colors: ['#8B3A2A', '#D4764E', '#C05030'] }, + 2: { name: '宫保鸡丁', price: 5, kcal: 420, colors: ['#C87030', '#E8A040', '#D08028'] }, + 3: { name: '麻婆豆腐', price: 4, kcal: 280, colors: ['#706040', '#B89060', '#807050'] }, + 4: { name: '清炒时蔬', price: 3, kcal: 120, colors: ['#306028', '#50A040', '#408030'] }, + 5: { name: '香煎带鱼', price: 6, kcal: 320, colors: ['#805020', '#B88040', '#A06830'] }, + 6: { name: '糖醋排骨', price: 7, kcal: 520, colors: ['#802018', '#C05030', '#A03820'] }, + 7: { name: '蒜蓉西兰花', price: 3, kcal: 110, colors: ['#207040', '#40A868', '#308848'] }, + 8: { name: '米饭', price: 1.5, kcal: 260, colors: ['#D0D0C0', '#E8E8D8', '#E0E0C8'] }, + 9: { name: '紫菜蛋花汤', price: 2, kcal: 80, colors: ['#503028', '#805040', '#603830'] }, + 10: { name: '西红柿炒蛋', price: 4, kcal: 180, colors: ['#E8A030', '#F0C040', '#D89020'] } }; /* ===== 解析 URL 参数 ===== */ @@ -306,7 +306,7 @@ document.getElementById('settingsBtn').addEventListener('click', function(e) { e.preventDefault(); if (!isEmployee) { - showToast('⚠️ 非餐厅员工,无权操作系统', 2000); + showToast('⚠️ 非餐厅员工,无权操作系统', 2000); return; } window.location.href = '04-settings.html'; diff --git a/web-admin/nutrition/doc/screenshots/prod-clean-order-modal-cp.png b/web-admin/nutrition/doc/screenshots/prod-clean-order-modal-cp.png deleted file mode 100644 index 34218e0..0000000 Binary files a/web-admin/nutrition/doc/screenshots/prod-clean-order-modal-cp.png and /dev/null differ