fix: 问题修复,记忆文件同步
This commit is contained in:
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 行,操作栏「批量充值」按钮改为 `<a href>` 跳转;`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}` 嵌套对象)。
|
||||
|
||||
@@ -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';
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 122 KiB |
Reference in New Issue
Block a user