diff --git a/.idea/claudeCodeTabState.xml b/.idea/claudeCodeTabState.xml index 0647f91..1016a4f 100644 --- a/.idea/claudeCodeTabState.xml +++ b/.idea/claudeCodeTabState.xml @@ -1,21 +1,62 @@ + + \ No newline at end of file diff --git a/other-module/canteen-device/canteen-nutrition-scale/00-login.html b/other-module/canteen-device/canteen-nutrition-scale/00-login.html new file mode 100644 index 0000000..8c241aa --- /dev/null +++ b/other-module/canteen-device/canteen-nutrition-scale/00-login.html @@ -0,0 +1,278 @@ + + + + + + 餐线营养秤 - 登录 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 餐线营养秤 - 员工登录 +
+ +
+
+ + + + + + +
+
+
👤
+
点击激活
人脸识别
+
+
+ 识别成功后即可进入功能菜单 +
+
+
+
+ + + +
+
+ +
+ + + + diff --git a/other-module/canteen-device/canteen-nutrition-scale/00-welcome.html b/other-module/canteen-device/canteen-nutrition-scale/00-welcome.html new file mode 100644 index 0000000..752f5f6 --- /dev/null +++ b/other-module/canteen-device/canteen-nutrition-scale/00-welcome.html @@ -0,0 +1,207 @@ + + + + + + 餐线营养秤 - 功能菜单 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 餐线营养秤 - 功能菜单 + -- + +
+ + + +
+ + + + diff --git a/other-module/canteen-device/canteen-nutrition-scale/05-dish-sampling.html b/other-module/canteen-device/canteen-nutrition-scale/05-dish-sampling.html index 6021eee..c2df439 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/05-dish-sampling.html +++ b/other-module/canteen-device/canteen-nutrition-scale/05-dish-sampling.html @@ -165,6 +165,8 @@ body { .action-bar .btn-save { flex: 1.5; padding: 10px; border: none; border-radius: 8px; background: #4a90d9; color: #fff; font-size: 14px; font-weight: 600; cursor: pointer; transition: background 0.2s; } .action-bar .btn-save:hover { background: #3d7fc0; } .action-bar .btn-resample { flex: 1; padding: 10px; border: 1px solid rgba(255,193,7,0.3); border-radius: 8px; background: rgba(255,193,7,0.08); color: #ffc107; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; } +.action-bar .btn-reidentify { flex: 1; padding: 10px; border: 1px solid rgba(74,144,217,0.3); border-radius: 8px; background: rgba(74,144,217,0.08); color: #4a90d9; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; } +.action-bar .btn-reidentify:hover { background: rgba(74,144,217,0.18); border-color: rgba(74,144,217,0.5); } .action-bar .btn-resample:hover { background: rgba(255,193,7,0.15); border-color: rgba(255,193,7,0.5); } .action-bar .btn-cancel { flex: 1; padding: 10px; border: 1px solid rgba(255,255,255,0.1); border-radius: 8px; background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.7); font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.2s; } .action-bar .btn-cancel:hover { background: rgba(255,255,255,0.1); color: #fff; } @@ -255,6 +257,7 @@ body {
+ @@ -468,6 +471,26 @@ function updateSelectedDishInfo() { selectedDescEl.innerHTML = selectedDish.catLabel + ' · ' + selectedDish.mainIngredient + ' · ' + selectedDish.kcal + 'kcal/100g'; } +/* ===== 重新识别:清除当前图片,重置摄像头,重新拍照识别 ===== */ +function handleReidentify() { + if (!selectedDish) { + showToast('⚠ 请先选择餐品', 1500); + return; + } + // 清除已采集图片 + capturedImages = []; + lastAddedIndex = -1; + renderResultGrid(); + // 重置摄像头预览 + cameraPreviewEl.style.display = 'none'; + cameraTextEl.style.display = ''; + cameraTextEl.innerHTML = '摄像头预览区域'; + cameraFrameEl.classList.remove('active'); + btnPhotoEl.classList.remove('shooting'); + btnPhotoEl.innerHTML = '📸
拍照采集'; + showToast('✅ 已重置,请重新拍照识别', 1500); +} + /* ===== Toast ===== */ function showToast(msg, duration) { toastEl.textContent = msg; diff --git a/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md b/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md index fe3e1f9..c312cb6 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md +++ b/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md @@ -1,5 +1,12 @@ # 餐线营养秤 - 变更记录 +## [2026-06-15] feat: 新增重新识别按钮 + +### 新增 +- **重新识别按钮**(`05-dish-sampling.html`):底部操作栏新增「🔄 重新识别」按钮(位于"取消"与"重新采样"之间),点击后清空当前已采图片、重置摄像头状态,保留餐品选中状态,可重新拍照识别。 + +--- + ## [2026-06-12] feat: 同步父级 canteen-device 导航页 PAD 外壳改造 + 根导航挂载 **变更背景**:父级"餐线设备"导航页与营养秤系列保持视觉一致;同时把本模块 9 个完成页面挂载至根目录 `index.html` 的"其他终端 → 餐厅终端设备"分组,使卡片显示"已完成"绿色边框。 diff --git a/other-module/canteen-device/canteen-nutrition-scale/doc/FLOW.md b/other-module/canteen-device/canteen-nutrition-scale/doc/FLOW.md index 588c436..b86d665 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/doc/FLOW.md +++ b/other-module/canteen-device/canteen-nutrition-scale/doc/FLOW.md @@ -104,6 +104,8 @@ │ └─ 重量 = 0 → "拍照"和"保存"按钮禁用 │ ├─ 右侧:摄像头拍照采集(最多9张) + │ │ + │ └─ 点击「重新识别」→ 清空已采图片与摄像头状态,保留餐品选中,可重新拍照 │ └─ 保存采集 → 携带 sampleDishId 返回 01-开餐界面 │ diff --git a/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md b/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md index f3745e0..23efc34 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md +++ b/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md @@ -278,6 +278,8 @@ stateDiagram-v2 │ ├─ 点击「取消」→ Toast 反馈 → 跳转至 02-待取餐界面 │ + ├─ 点击「重新识别」→ 清空当前已采图片与摄像头状态,保留餐品选中状态,Toast 反馈,可重新拍照识别 + │ ├─ 点击「重新采样」→ 删除该餐品全部已采图片,清空表单,保留餐品选中状态,Toast 反馈 │ ├─ 点击「保存采集」→ 提交数据 → 跳转至 02-待取餐界面(携带 dishId) @@ -308,6 +310,7 @@ stateDiagram-v2 | 按钮 | 正常采样模式 | 补充采集模式 | 行为 | |------|------------|------------|------| | 取消 | 显示 | 显示 | 清空当前操作状态 | +| 重新识别 | 显示 | 显示 | 清空已采图片与摄像头状态,保留餐品选中,可重新拍照识别 | | 重新采样 | 显示 | 显示 | 清空该餐品全部已采图片 | | 保存采集 | 显示 | 显示 | 提交数据 → 跳转至 02-待取餐界面 | | 保存并继续 | 显示 | **隐藏** | 提交数据 → 重置表单继续采集下一个餐品 | diff --git a/other-module/canteen-device/canteen-nutrition-scale/index.html b/other-module/canteen-device/canteen-nutrition-scale/index.html index 2ae7e5a..6458b9e 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/index.html +++ b/other-module/canteen-device/canteen-nutrition-scale/index.html @@ -94,6 +94,16 @@
+ + 🔐 +
员工登录
+
人脸识别、账号密码登录
+
+ + 📋 +
功能菜单
+
开餐、餐品展示、取餐、采样、设置
+
🍽️
开餐界面
diff --git a/other-module/canteen-device/clean-veg-ratio-scale/00-welcome.html b/other-module/canteen-device/clean-veg-ratio-scale/00-welcome.html new file mode 100644 index 0000000..4bbe5b6 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/00-welcome.html @@ -0,0 +1,312 @@ + + + + + + 净菜加工秤 - 欢迎 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 净菜加工秤 +
+
+ + +
+
+ + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/01-cutting-tasks.html b/other-module/canteen-device/clean-veg-ratio-scale/01-cutting-tasks.html new file mode 100644 index 0000000..1ded9d0 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/01-cutting-tasks.html @@ -0,0 +1,601 @@ + + + + + + 净菜加工秤 - 今日任务 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 今日切配任务 + -- +
+
+ +
+
+ 待处理 + 3 +
+
+ 已完成 + 2 +
+
+
+
+ +
+
🥔
+
+
土豆
+
+ 📦 需求: 5.0斤 + ⏰ 截止: 11:00 +
+
+
🔪 切丝
+
+
+
+
+
已切 2.0 / 需 5.0 斤
+
+
+ 待处理 +
+
+ +
+
+ +
+
🥕
+
+
胡萝卜
+
+ 📦 需求: 2.0斤 + ⏰ 截止: 11:30 +
+
+
🔪 切丝
+
+
+
+
+
已切 0 / 需 2.0 斤
+
+
+ 待处理 +
+
+ +
+
+ +
+
🥒
+
+
黄瓜
+
+ 📦 需求: 4.0斤 + ⏰ 截止: 10:30 +
+
+
🔪 切片
+
+
+
+
+
已切 4.2 / 需 4.0 斤
+
+
+ 已完成 +
+
+ +
+
+ +
+
🥔
+
+
土豆(晚餐)
+
+ 📦 需求: 3.0斤 + ⏰ 截止: 15:30 +
+
+
🔪 切块
+
+
+
+
+
已切 0 / 需 3.0 斤
+
+
+ 待处理 +
+
+ +
+
+ +
+
🥬
+
+
大白菜
+
+ 📦 需求: 8.0斤 + ⏰ 截止: 10:00 +
+
+
🔪 切段
+
+
+
+
+
已切 8.5 / 需 8.0 斤
+
+
+ 已完成 +
+
+ +
+
+ +
+
🍅
+
+
西红柿
+
+ 📦 需求: 3.5斤 + ⏰ 截止: 11:30 +
+
+
🔪 切块
+
+
+
+
+
已切 0 / 需 3.5 斤
+
+
+ 待处理 +
+
+ +
+
+
+
+
+ + + + +
+ + + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/02-weighing.html b/other-module/canteen-device/clean-veg-ratio-scale/02-weighing.html new file mode 100644 index 0000000..34210a0 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/02-weighing.html @@ -0,0 +1,357 @@ + + + + + + 净菜加工秤 - 称重录入 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 称重录入 + -- +
+
+
+
+
+ 当前任务 + 切换任务 +
+
+
🥔
+
+
土豆
+
截止 11:00 | 来自清洗工序
+
🔪 切丝
+
+
+
+
+
+ 2.0/5.0斤 +
+
+
+
+
+
📇
+
+
AI 识别结果
+
等待放置食材...
+
+
+ 待机 +
+
+ 0.00 + +
请将食材放置秤上
+
+
+ + +
+
+
+
+
+
+
4
+
今日切配次数
+
+
+
18.2
+
总重量(斤)
+
+
+
2
+
完成品类
+
+
+
+
+ 本次操作记录 + 共 0 条 +
+
+
+
📭
+
暂无切配记录
+
+
+
+
+
+
+ + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/03-cutting.html b/other-module/canteen-device/clean-veg-ratio-scale/03-cutting.html new file mode 100644 index 0000000..e859e03 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/03-cutting.html @@ -0,0 +1,316 @@ + + + + + + 净菜加工秤 - 切配操作 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 切配操作 + -- +
+
+
+
+
+
🥔
+
+
土豆
+
+ 重量: 1.85斤 + 批次 #20260613-C01 +
+
+
🔪 系统指定: 切丝
+
+
+
+
切法
+
+
+
+
粗细
+
3mm
+
+
+
刀工
+
直刀
+
+
+
预计耗时
+
5分钟
+
+
+
+
+
+ + + + +
+
0%
+
等待开始
+
+
+
+
+
🔪
+
切片
+
+
+
🔪
+
切丝
+
+
+
+
完成
+
+
+
+ + + +
+
+
+
+
+
+
2
+
今日已切配
+
+
+
8.5斤
+
总重量
+
+
+
100%
+
合格率
+
+
+
+
+ 待切配队列 + 共 3 项 +
+
+
+
🥕
+
+
胡萝卜
+
切丝
+
2.0斤
+
+ 待切配 +
+
+
🍅
+
+
西红柿
+
切块
+
3.5斤
+
+ 待切配 +
+
+
🥔
+
+
土豆(晚餐)
+
切块
+
3.0斤
+
+ 待切配 +
+
+
+
+
+
+ + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/04-history.html b/other-module/canteen-device/clean-veg-ratio-scale/04-history.html new file mode 100644 index 0000000..59b1343 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/04-history.html @@ -0,0 +1,251 @@ + + + + + + 净菜加工秤 - 切配记录 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 切配记录 + -- +
+
+
+
+ 日期 + +
+
+ 食材 + +
+
+ 切法 + +
+ + +
+
+
+
今日切配批次
+
8
+
+
+
切配总量
+
32.5斤
+
+
+
平均切配时长
+
5.3分钟
+
+
+
合格率
+
100%
+
+
+
+
+ 切配记录列表 + 共 8 条记录 +
+
+
批次号
+
食材
+
切法
+
重量
+
完成时间
+
时长
+
操作员
+
状态
+
操作
+
+
+
+
#20260613-C01
+
🥔 土豆
+
切丝
+
5.2斤
+
09:35
+
5分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C02
+
🥒 黄瓜
+
切片
+
4.2斤
+
09:52
+
4分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C03
+
🥬 大白菜
+
切段
+
8.5斤
+
10:15
+
6分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C04
+
🥕 胡萝卜
+
切丝
+
2.8斤
+
10:32
+
5分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C05
+
🍅 西红柿
+
切块
+
3.5斤
+
10:48
+
4分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C06
+
🥔 土豆
+
切块
+
3.2斤
+
14:20
+
5分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C07
+
🥔 土豆
+
切条
+
2.6斤
+
14:38
+
5分钟
+
赵六
+
已完成
+ +
+
+
#20260613-C08
+
🥕 胡萝卜
+
切丁
+
2.5斤
+
14:55
+
6分钟
+
赵六
+
已完成
+ +
+
+ +
+
+ + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/05-settings.html b/other-module/canteen-device/clean-veg-ratio-scale/05-settings.html new file mode 100644 index 0000000..0a3d40e --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/05-settings.html @@ -0,0 +1,173 @@ + + + + + + 净菜加工秤 - 设备设置 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 设备设置 + -- +
+
+
+ + + + + +
+
+
+
切配参数配置
+
+
默认切丝粗细
切丝模式的标准粗细
+
mm
+
+
+
默认切块大小
切块模式的标准大小
+
+
+
+
默认切丁大小
切丁模式的标准大小
+
+
+
+
默认刀工
默认使用的刀工方式
+
+
+
+ + + + + +
+
+
+ + + diff --git a/other-module/canteen-device/clean-veg-ratio-scale/doc/CHANGELOG.md b/other-module/canteen-device/clean-veg-ratio-scale/doc/CHANGELOG.md new file mode 100644 index 0000000..f0badc1 --- /dev/null +++ b/other-module/canteen-device/clean-veg-ratio-scale/doc/CHANGELOG.md @@ -0,0 +1,12 @@ +# 净菜加工秤 CHANGELOG + +## [1.0.0] - 2026-06-13 + +### 新增 +- 首次创建净菜加工秤模块(6个页面) +- `00-welcome.html` — 欢迎页:人脸识别+账号密码登录+功能菜单 +- `01-cutting-tasks.html` — 今日切配任务列表:任务卡片含切法标签、状态筛选、进度展示 +- `02-weighing.html` — 称重录入:AI识别品类、实时称重、确认后跳转切配页面 +- `03-cutting.html` — 切配操作:系统指定切法/粗细/刀工、圆形进度、三阶段(切片/切丝/完成)、待切配队列 +- `04-history.html` — 切配记录:日期/食材/切法筛选、统计卡片、切法标签、表格记录、分页 +- `05-settings.html` — 设备设置:切配参数/AI识别/秤参数/设备信息/关于 五个配置区 diff --git a/other-module/canteen-device/clean-veg-ratio-scale/index.html b/other-module/canteen-device/clean-veg-ratio-scale/index.html index d58e9db..22136ac 100644 --- a/other-module/canteen-device/clean-veg-ratio-scale/index.html +++ b/other-module/canteen-device/clean-veg-ratio-scale/index.html @@ -3,33 +3,78 @@ - 净菜配比秤 - 蚁熊智能餐养平台 + 净菜加工秤 - 蚁熊智能餐养平台
- ◀ 返回 - 净菜配比秤 + ◀ 返回 + 净菜加工秤
-
-
-
🚧
-
净菜配比秤 页面待开发
-
+
+ + 👋 +
+
欢迎页面
+
人脸识别/账号密码登录、功能菜单入口
+
+ +
+ + 📋 +
+
今日切配任务
+
系统分配的净菜切配任务列表
+
+ +
+ + ⚖️ +
+
称重录入
+
净菜上秤AI识别、称重、确认进入切配
+
+ +
+ + 🔪 +
+
切配操作
+
系统指定切法、切配进度跟踪
+
+ +
+ + 📝 +
+
切配记录
+
历史切配记录查看与筛选
+
+ +
+ + ⚙️ +
+
设备设置
+
切配参数、AI识别、秤参数配置
+
+ +
- \ No newline at end of file + diff --git a/other-module/canteen-device/index.html b/other-module/canteen-device/index.html index 342f778..5cf50f0 100644 --- a/other-module/canteen-device/index.html +++ b/other-module/canteen-device/index.html @@ -111,119 +111,114 @@
- -
营养秤系列
+ +
卫生供应
- - -
净菜系列
- - - -
毛菜系列
- - -
其他设备
+ +
健康生产
+ + +
营养用餐
+
diff --git a/other-module/canteen-device/nutrition-detection/index.html b/other-module/canteen-device/nutrition-detection/index.html new file mode 100644 index 0000000..297e698 --- /dev/null +++ b/other-module/canteen-device/nutrition-detection/index.html @@ -0,0 +1,35 @@ + + + + + + 营养检测设备 - 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 营养检测设备 +
+
+
+
🚧
+
营养检测设备 页面待开发
+
+
+ + diff --git a/other-module/canteen-device/ratio-scale/00-welcome.html b/other-module/canteen-device/ratio-scale/00-welcome.html new file mode 100644 index 0000000..ce18682 --- /dev/null +++ b/other-module/canteen-device/ratio-scale/00-welcome.html @@ -0,0 +1,230 @@ + + + + + + 净菜配比秤 - 欢迎 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 净菜配比秤 +
+
+ + +
+
+ + + diff --git a/other-module/canteen-device/ratio-scale/01-packing-tasks.html b/other-module/canteen-device/ratio-scale/01-packing-tasks.html new file mode 100644 index 0000000..04c4dec --- /dev/null +++ b/other-module/canteen-device/ratio-scale/01-packing-tasks.html @@ -0,0 +1,604 @@ + + + + + + 净菜配比秤 - 今日任务 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 今日打包任务 + -- +
+
+ +
+
+ 待处理 + 4 +
+
+ 已完成 + 6 +
+
+
+
+ +
+
🥔
+
+
土豆丝
+
+ 📦 总量: 5.0斤 + ⏰ 截止: 11:30 +
+
+
👤 分配给: 张三
+
+
+
已包 3.0 / 需 5.0 斤
+
+
待处理
+
+
+ +
+
🥕
+
+
胡萝卜丝
+
+ 📦 总量: 2.8斤 + ⏰ 截止: 12:00 +
+
+
👤 分配给: 李四
+
+
+
已包 0 / 需 2.8 斤
+
+
待处理
+
+
+ +
+
🥒
+
+
黄瓜片
+
+ 📦 总量: 4.2斤 + ⏰ 截止: 11:00 +
+
+
👤 分配给: 王五
+
+
+
已包 4.2 / 需 4.2 斤
+
+
已完成
+
+
+ +
+
🥬
+
+
白菜段
+
+ 📦 总量: 8.5斤 + ⏰ 截止: 10:30 +
+
+
👤 分配给: 赵六
+
+
+
已包 8.5 / 需 8.5 斤
+
+
已完成
+
+
+ +
+
🍅
+
+
西红柿块
+
+ 📦 总量: 3.5斤 + ⏰ 截止: 12:00 +
+
+
👤 分配给: 孙七
+
+
+
已包 0 / 需 3.5 斤
+
+
待处理
+
+
+ +
+
🥔
+
+
土豆块(晚餐)
+
+ 📦 总量: 3.2斤 + ⏰ 截止: 16:00 +
+
+
👤 分配给: 张三
+
+
+
已包 1.0 / 需 3.2 斤
+
+
待处理
+
+
+ +
+
🥕
+
+
胡萝卜丁
+
+ 📦 总量: 2.5斤 + ⏰ 截止: 11:00 +
+
+
👤 分配给: 周八
+
+
+
已包 2.5 / 需 2.5 斤
+
+
已完成
+
+
+ +
+
🥒
+
+
黄瓜条
+
+ 📦 总量: 3.0斤 + ⏰ 截止: 11:30 +
+
+
👤 分配给: 刘九
+
+
+
已包 3.0 / 需 3.0 斤
+
+
已完成
+
+
+ +
+
🥔
+
+
土豆条
+
+ 📦 总量: 2.6斤 + ⏰ 截止: 11:00 +
+
+
👤 分配给: 陈十
+
+
+
已包 2.6 / 需 2.6 斤
+
+
已完成
+
+
+ +
+
🍅
+
+
小番茄
+
+ 📦 总量: 1.8斤 + ⏰ 截止: 14:30 +
+
+
👤 分配给: 杨一
+
+
+
已包 1.8 / 需 1.8 斤
+
+
已完成
+
+
+
+
+
+ + + + +
+ + + + diff --git a/other-module/canteen-device/ratio-scale/02-weighing-packing.html b/other-module/canteen-device/ratio-scale/02-weighing-packing.html new file mode 100644 index 0000000..62efcb9 --- /dev/null +++ b/other-module/canteen-device/ratio-scale/02-weighing-packing.html @@ -0,0 +1,410 @@ + + + + + + 净菜配比秤 - 称重打包 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 称重打包 + -- +
+
+
+
+
+ 当前任务 + 切换任务 +
+
+
🥔
+
+
土豆丝
+
👤 分配给: 张三
+
+
+
+
+
+ 3.0/5.0斤 +
+
+
+ +
+
+
📇
+
+
AI 识别结果
+
等待放置食材...
+
+
+ 待机 +
+
+ 0.00 + +
请将食材放置秤上
+
+
+ + +
+
+
+ +
+
+
+
8
+
今日打包数
+
+
+
35.6
+
总重量(斤)
+
+
+
6
+
分配员工数
+
+
+ +
+
+ 📦 当前打包中 + 进行中 +
+
+
+
食材
+
土豆丝
+
+
+
目标员工
+
张三
+
+
+
目标重量
+
5.0斤
+
+
+
已打包
+
3.0斤
+
+
+
+ +
+
+ 本次打包记录 + 共 0 条 +
+
+
+
📭
+
暂无打包记录
+
+
+
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/ratio-scale/03-history.html b/other-module/canteen-device/ratio-scale/03-history.html new file mode 100644 index 0000000..83a3f25 --- /dev/null +++ b/other-module/canteen-device/ratio-scale/03-history.html @@ -0,0 +1,241 @@ + + + + + + 净菜配比秤 - 打包记录 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 打包记录 + -- +
+
+
+
日期
+
+ 食材 + +
+
+ 目标员工 + +
+ + +
+
+
今日打包批次
15
+
打包总量
48.6斤
+
分配员工数
8
+
塑封完成率
100%
+
+
+
+ 打包记录列表 + 共 15 条记录 +
+
+
批次号
+
食材
+
目标员工
+
重量
+
打包时间
+
塑封
+
操作员
+
状态
+
操作
+
+
+
+
#P20260613-001
+
🥔 土豆丝
+
张三
+
5.2斤
+
09:45
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-002
+
🥕 胡萝卜丝
+
李四
+
2.8斤
+
09:58
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-003
+
🥒 黄瓜片
+
王五
+
4.2斤
+
10:12
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-004
+
🥬 白菜段
+
赵六
+
8.5斤
+
10:28
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-005
+
🍅 西红柿块
+
孙七
+
3.5斤
+
10:42
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-006
+
🥔 土豆丝
+
周八
+
3.0斤
+
10:55
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-007
+
🥔 土豆块
+
张三
+
3.2斤
+
14:30
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-008
+
🥕 胡萝卜丁
+
陈十
+
2.5斤
+
14:45
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-009
+
🥔 土豆条
+
刘九
+
2.6斤
+
14:58
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+
#P20260613-010
+
🍅 小番茄
+
杨一
+
1.8斤
+
15:10
+
🔒 已塑封
+
刘九
+
已完成
+ +
+
+ +
+
+ + + diff --git a/other-module/canteen-device/ratio-scale/04-settings.html b/other-module/canteen-device/ratio-scale/04-settings.html new file mode 100644 index 0000000..ed8f6a7 --- /dev/null +++ b/other-module/canteen-device/ratio-scale/04-settings.html @@ -0,0 +1,172 @@ + + + + + + 净菜配比秤 - 设备设置 | 蚁熊智能餐养平台 + + + +
+ ◀ 返回 + 设备设置 + -- +
+
+
+ + + + + +
+
+
+
打包参数配置
+
+
自动塑封
打包完成后自动塑封
+
+
+
+
标签打印
打包完成后自动打印标签
+
+
+
+
重量误差范围
打包重量与目标重量的允许误差
+
+
+
+
打包完成提示音
打包完成时播放提示音
+
+
+
+ + + + + +
+
+
+ + + diff --git a/other-module/canteen-device/ratio-scale/doc/CHANGELOG.md b/other-module/canteen-device/ratio-scale/doc/CHANGELOG.md new file mode 100644 index 0000000..537674c --- /dev/null +++ b/other-module/canteen-device/ratio-scale/doc/CHANGELOG.md @@ -0,0 +1,11 @@ +# 净菜配比秤 CHANGELOG + +## [1.0.0] - 2026-06-13 + +### 新增 +- 首次创建净菜配比秤模块(5个页面) +- `00-welcome.html` — 欢迎页:人脸识别+账号密码登录+功能菜单 +- `01-packing-tasks.html` — 今日打包任务列表:任务卡片含目标员工、状态筛选、进度展示 +- `02-weighing-packing.html` — 称重打包:AI识别品类、实时称重、当前打包信息(食材/目标员工/目标重量/已打包)、打包记录(含塑封状态) +- `03-history.html` — 打包记录:日期/食材/目标员工筛选、统计卡片、塑封状态标签、表格记录、分页 +- `04-settings.html` — 设备设置:打包参数/AI识别/秤参数/设备信息/关于 五个配置区 diff --git a/other-module/canteen-device/ratio-scale/index.html b/other-module/canteen-device/ratio-scale/index.html index f0e113c..670be4f 100644 --- a/other-module/canteen-device/ratio-scale/index.html +++ b/other-module/canteen-device/ratio-scale/index.html @@ -3,33 +3,70 @@ - 配比秤 - 蚁熊智能餐养平台 + 净菜配比秤 - 蚁熊智能餐养平台
- ◀ 返回 - 配比秤 + ◀ 返回 + 净菜配比秤
-
-
-
🚧
-
配比秤 页面待开发
-
+
+ + 👋 +
+
欢迎页面
+
人脸识别/账号密码登录、功能菜单入口
+
+ +
+ + 📋 +
+
今日打包任务
+
系统分配的净菜打包任务列表
+
+ +
+ + 📦 +
+
称重打包
+
净菜AI识别、称重、按员工拆单打包塑封
+
+ +
+ + 📝 +
+
打包记录
+
历史打包记录查看与筛选
+
+ +
+ + ⚙️ +
+
设备设置
+
打包参数、AI识别、秤参数配置
+
+ +
- \ No newline at end of file + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/00-login.html b/other-module/canteen-device/raw-veg-inspection-scale/00-login.html new file mode 100644 index 0000000..c412d09 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/00-login.html @@ -0,0 +1,278 @@ + + + + + + 毛菜验收秤 - 登录 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 毛菜验收秤 - 员工登录 +
+ + + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/00-welcome.html b/other-module/canteen-device/raw-veg-inspection-scale/00-welcome.html new file mode 100644 index 0000000..2d74afc --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/00-welcome.html @@ -0,0 +1,198 @@ + + + + + + 毛菜验收秤 - 功能菜单 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 毛菜验收秤 - 功能菜单 + -- + +
+ + + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/01-verify-inspection.html b/other-module/canteen-device/raw-veg-inspection-scale/01-verify-inspection.html new file mode 100644 index 0000000..84e134c --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/01-verify-inspection.html @@ -0,0 +1,2624 @@ + + + + + + 毛菜验收秤 - 验收食材 | 蚁熊智能餐养平台 + + + + + +
+ + 食材验收识别屏 + +
+ + +
+
+
+
选择验收订单
+
按预计到货时间从近到远排列 · 左右滑动浏览
+
+ +
+
+
+
+
+ + +
+ +
+
📷 食材识别
+
+ 食材识别区域 +
+
+
+
+
+
📷
+
点击继续识别
+
+
+
+ + 就绪,等待食材放置 +
+ + + + + +
+
+ 智能识别候选 +
+
+
+
📷
+
等待食材放置后自动识别
+
+
+
场景监控后台静默录制中
+
+ + +
+ + + + +
+
+
+
订单号
+
--
+
+
+
供应商
+
--
+
+
+
发货人
+
--
+
+
+
来源类型
+
--
+
+
+
预计到货
+
--
+
+
+
食材数量
+
--
+
+ +
+
+ + + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + +
+
+
+
不合格处置
+ +
+
食材:--
+
+
处理方式
+
+
退货退款
+
仅退款
+
换货
+
+
+
+
处理范围
+
+
部分
+
全部
+
+
+ + +
+
不合格原因(必填)
+ +
+
+
处理说明(可选)
+ +
+ +
+
+ + +
+
+
未匹配到订单食材
+
AI 识别结果与订单中食材不符,请手动选择
+
+ +
+
+ + +
+
+
无订单验收
+
录入供应商信息,确认后进入AI识别验收流程
+
+
+
供应商(必填)
+ +
+
+
来源类型
+
外采
+
+
+
+
+
发货人
+ +
+
+
+ + +
+
+
+ + +
+
+
⚠️ 确认离开
+
验收尚未完成,当前验收数据将丢失。
确定要返回吗?
+
+ + +
+
+
+ + +
+
+
食材明细
+
+ +
+
+ + + +
+
+
验收完成
+
--
+
+
+
0
+
通过
+
+
+
0
+
不合格
+
+
+
+
+ + +
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/02-settings.html b/other-module/canteen-device/raw-veg-inspection-scale/02-settings.html new file mode 100644 index 0000000..f2cce29 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/02-settings.html @@ -0,0 +1,203 @@ + + + + + + 毛菜验收秤 - 设置 | 蚁熊智能餐养平台 + + + + +
+ + 设置 + +
+ +
+ + +
+
⚖️ 验收标准
+ +
+
+
偏差率阈值
+
重量偏差率≤阈值时自动判定为验收通过
+
+
+ + % +
+
+ + +
+ + +
+
💻 设备状态
+ +
+
人脸识别摄像头
+
+ + 已连接 +
+
+
+
食材识别摄像头
+
+ + 已连接 +
+
+
+
称重传感器
+
+ + 已连接 +
+
+
+
触摸屏
+
+ + 正常 +
+
+
+
网络连接
+
+ + 内网已连接 +
+
+ + ◀ 返回首页 +
+ +
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/03-verify-history.html b/other-module/canteen-device/raw-veg-inspection-scale/03-verify-history.html new file mode 100644 index 0000000..1f08e77 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/03-verify-history.html @@ -0,0 +1,789 @@ + + + + + + 毛菜验收秤 - 验收记录 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 验收记录 + +
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ + + +
+
+ + +
+ +
+ + +
+
+ + +
+
+
📋
+
3
今日验收总数
+
+
+
+
2
验收通过
+
+
+
+
1
验收不通过
+
+
+
📊
+
67%
合格率
+
+
+ + +
+
+ + + + + + +
订单号食材供应商支付方式配送方式时间验收结果操作
+
+
📭
+
暂无验收记录
+
+
+ +
+ + +
+
+
+ 验收详情 + +
+
+
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/04-ingredient-sampling.html b/other-module/canteen-device/raw-veg-inspection-scale/04-ingredient-sampling.html new file mode 100644 index 0000000..3b2ce0e --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/04-ingredient-sampling.html @@ -0,0 +1,684 @@ + + + + + +毛菜验收秤 - 食材采样 | 蚁熊智能餐养平台 + + + + + +
+ ◀ 返回 + 食材采样 + 📝 采样历史 + +
+ +
+ +
+
🥬 食材选择
+ + + + + +
+ 全部 + 叶菜类 + 花菜类 + 瓜果类 + 根茎类 + 肉禽类 + 水产类 +
+ + +
+
+ + +
+ +
+
+
+
请选择一个食材
+
点击左侧列表中的食材进行采样
+
+
+ + +
+
+ 摄像头预览区域 +
+
+
+
+
+
+ +
+ + +
+
+ 📋 采集结果 + 0/9 +
+
+
+ + +
+ + + + +
+
+
+ + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/05-sampling-history.html b/other-module/canteen-device/raw-veg-inspection-scale/05-sampling-history.html new file mode 100644 index 0000000..f6be8f8 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/05-sampling-history.html @@ -0,0 +1,521 @@ + + + + + +毛菜验收秤 - 采样历史 | 蚁熊智能餐养平台 + + + + + +
+ ◀ 返回 + 采样历史 + +
+ + +
+ + +
+
🔍 快捷查找
+ + + +
+
📁 按类目筛选
+
+ 全部 + 叶菜类 + 花菜类 + 瓜果类 + 根茎类 + 肉禽类 + 水产类 +
+
+ +
+ 共 0 条记录 +
+
+ + +
+
+
+ +
+ + + + + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/CHANGELOG.md b/other-module/canteen-device/raw-veg-inspection-scale/doc/CHANGELOG.md new file mode 100644 index 0000000..2f8b394 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/doc/CHANGELOG.md @@ -0,0 +1,36 @@ +# 毛菜验收秤 - 变更记录 + +## [2026-06-15] feat: 新增重新识别按钮 + 验收状态模型重构 + 暂时隐藏验收不通过逻辑 + +### 新增 +- **重新识别按钮**(`01-verify-inspection.html`):Step 2 食材识别区新增「🔄 重新识别」按钮,点击后清空候选列表并重新触发 AI 识别,重置识别状态与摄像头画面。 + +### 变更 +- **订单卡片状态标签重构**(`01-verify-inspection.html`): + - 原"发货状态"(全量发货 / 部分发货)改为"验收状态"(未验收 / 部分验收) + - 数据字段 `shipStatus` 字面量改为 `未验收` / `部分验收` + - 验收状态与发货无关,始终只判断是否全部验收通过,未全部通过即为"部分验收" + - 标签颜色:未验收(绿) / 部分验收(橙) +- **PRD.md**:同步更新订单卡片字段表、验收流程、验收汇总弹窗、mermaid 流程图等相关章节 +- **UI-SPEC.md**:同步更新标签颜色定义、订单卡片字段布局、Step2 布局图、操作列按钮说明 +- **flow.md**:同步更新 Step1 卡片结构、Step2 布局图、流程步骤描述 + +### 暂时隐藏(代码保留,后期可恢复) +- **验收不通过按钮**(`01-verify-inspection.html`):食材列表操作列中的「✗ 不通过」按钮隐藏(JS 注释 + 空字符串替换) +- **不合格处置弹窗**:验收不通过时唤起的处置策略面板(折叠式)整体隐藏 +- **支付类型标签**(`01-verify-inspection.html`):订单卡片底部「前置/后置」付款类型 pill 通过 `display:none` 隐藏 +- **验收汇总弹窗中的不通过数量/不合格明细/付款模式**:汇总弹窗中相关统计字段隐藏 +- PRD / UI-SPEC / flow.md 中对应内容均以 `~~删除线~~` + `**暂时隐藏**` 标注 + +--- + +## [2026-06-13] feat: 首次创建毛菜验收秤模块 + +### 新增 +- 首次创建毛菜验收秤模块(6 个页面) +- `00-welcome.html` — 欢迎页:人脸识别 + 账号密码登录 + 功能菜单 +- `01-verify-inspection.html` — 验收食材:Step1 订单卡片选择 + Step2 食材识别称重验收 +- `02-settings.html` — 设置:偏差率阈值配置 + 设备状态监控 +- `03-verify-history.html` — 验收记录:食材/订单维度切换 + 日期条筛选 +- `04-ingredient-sampling.html` — 食材采样:拍照采集 + 品级判定 +- `05-sampling-history.html` — 采样历史:瀑布流卡片 + 详情弹窗 + 补充采集 diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.docx b/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.docx new file mode 100644 index 0000000..7c391ce Binary files /dev/null and b/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.docx differ diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.md b/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.md new file mode 100644 index 0000000..15f5922 --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/doc/PRD.md @@ -0,0 +1,710 @@ +# 毛菜验收秤 — 产品需求文档 + +> 原型目录:`other-module/canteen-device/raw-veg-inspection-scale/` +> 创建时间:2026-06-13 | 最后更新:2026-06-13 + +--- + +## 一、模块概述 + +毛菜验收秤是食堂毛菜入库流程中的核心硬件终端,承担食材验收、采样、记录查询三大职能。设备配备触摸屏、称重传感器、食材识别摄像头、人脸识别摄像头和场景监控摄像头,通过分步向导在单页面内完成从选单到提交的全流程。 + +### 页面导航结构 + +``` +00 欢迎页(人脸识别 / 账号密码登录) +├── 验收食材 → 01-verify-inspection +│ ├── Step 1:选择订单(含无订单验收入口) +│ └── Step 2:食材识别 + 称重验收 + 不合格处置 +├── 验收记录 → 03-verify-history +│ ├── 食材维度视图 +│ └── 订单维度视图 +├── 食材采样 → 04-ingredient-sampling +├── 采样历史 → 05-sampling-history +└── 设置 → 02-settings +``` + +#### 页面间跳转关系 + +| 来源页 | 触发操作 | 目标页 | 携带参数 | +|--------|----------|--------|----------| +| 根导航(index.html) | 进入毛菜验收秤 | 00 欢迎页 | — | +| 00 欢迎页 | 登录成功后点击菜单 | 01 / 02 / 03 / 04 / 05 | `?user=姓名&uid=工号` | +| 01 Step2 | 提交验收结果 | 00 欢迎页 | `?user=...&uid=...` | +| 01 汇总弹窗 | 提交并关闭 | 00 欢迎页 | `?user=...&uid=...` | +| 01 汇总弹窗 | 提交并继续 | 01 Step1(当前页重置) | — | +| 01 Step2 | 提交并继续(无订单模式) | 01 Step2(当前页清空数据) | — | +| 01 | 顶栏 ← 返回 | 来源页(动态检测) | — | +| 02 / 03 / 05 | 顶栏 ← 返回 | 00 欢迎页 | — | +| 04 | 顶栏 ← 返回 | 00 欢迎页 | — | +| 04 | 顶栏「采样历史」 | 05 采样历史 | — | +| 05 | 详情弹窗「补充采集」 | 04 食材采样 | `?resampleFoodId=...` | +| 01 ~ 05 | 顶栏「退出」按钮 | 00 欢迎页 | — | + +> **返回按钮动态检测**:01 页面根据 `document.referrer` 判断来源页(00/04/05),设置返回目标;若无法判断则默认返回 00。 + +### 核心状态流转 + +```mermaid +flowchart TD + A[欢迎页] -->|人脸识别/账号登录| B{功能菜单} + B -->|验收食材| C[Step1: 选择订单] + B -->|验收记录| H[验收记录页] + B -->|食材采样| S1[采样流程] + B -->|采样历史| S2[采样历史页] + B -->|设置| SET[设置页] + + C -->|点击订单卡片| D[Step2: 食材验收] + C -->|无订单验收| D2[无订单验收弹窗 → Step2] + + D --> E{称重完成} + E -->|拿起食材| F[自动通过] + %% E -->|点击✗不通过| G[不合格处置弹窗] 暂时隐藏,后期恢复 + %% G -->|确认处置| F2[标记不合格] + + F --> I{还有食材?} + %% F2 --> I 暂时隐藏 + I -->|是| E + I -->|否| J[提交验收] + J -->|提交验收结果| K[Toast成功 → 返回首页] + J -->|提交并继续| L[清空数据 → 继续当前订单] + + H -->|食材维度| H1[逐条食材记录] + H -->|订单维度| H2[按订单分组汇总] + + S1 --> S3[称重 + 识别 + 采样] + S3 --> S4[保存采样] + S4 -->|继续采样| S1 + S4 -->|进入验收| C +``` + +--- + +## 二、页面清单 + +| 编号 | 文件名 | 页面名称 | 类型 | 原型链接 | +|------|--------|----------|------|----------| +| 00 | `00-welcome.html` | 欢迎页 | 功能页 | [打开原型](../00-welcome.html) | +| 01 | `01-verify-inspection.html` | 验收食材 | 功能页(分步向导) | [打开原型](../01-verify-inspection.html) | +| 02 | `02-settings.html` | 设置 | 功能页 | [打开原型](../02-settings.html) | +| 03 | `03-verify-history.html` | 验收记录 | 功能页 | [打开原型](../03-verify-history.html) | +| 04 | `04-ingredient-sampling.html` | 食材采样 | 功能页 | [打开原型](../04-ingredient-sampling.html) | +| 05 | `05-sampling-history.html` | 采样历史 | 功能页 | [打开原型](../05-sampling-history.html) | + +**弹窗清单**: + +| 弹窗名称 | 所在页面 | 触发条件 | +|----------|----------|----------| +| 无订单验收弹窗 | 01 Step1 | 点击右上角「无订单验收」按钮 | +| 人工选择食材弹窗 | 01 Step2 | 点击识别区手动选择食材 | +| ~~不合格处置弹窗~~ | 01 Step2 | ~~点击操作列「✗」按钮~~ **暂时隐藏** | +| 验收汇总弹窗 | 01 Step2 | 全部食材验收完成(仅订单模式) | +| 返回确认弹窗 | 01 Step2 | 验收过程中点击返回 | + +--- + +## 三、逐页说明 + +### 3.1 欢迎页(00-welcome.html) + +[打开原型](../00-welcome.html) + +#### 功能说明 + +设备开机后的入口页面。左侧为人脸识别区域(调用人脸识别摄像头),右侧为功能菜单。支持两种登录方式:人脸识别登录、账号密码登录。 + +#### 页面布局 + +``` +┌────────────────────────────────────────────────┐ +│ 左侧(440px) │ 右侧(flex:1) │ +│ │ │ +│ 人脸识别摄像头画面 │ 功能按钮: │ +│ · 点击激活识别 │ · 验收食材 │ +│ · 识别中动画 │ · 验收记录 │ +│ · 识别成功(显示姓名+工号) │ · 食材采样 │ +│ │ · 采样历史 │ +│ ── 或 ── │ · 设置 │ +│ 账号密码登录 │ │ +│ · Tab切换 │ 登录状态提示 │ +│ · 账号输入框 │ │ +│ · 密码输入框 │ │ +│ · 登录按钮 │ │ +└────────────────────────────────────────────────┘ +``` + +#### 交互说明 + +- **人脸识别登录**:点击识别区域激活摄像头 → 识别中(动画)→ 识别成功显示姓名和工号 → 解锁右侧菜单 +- **账号密码登录**:点击 Tab 切换到账号登录 → 输入账号密码 → 点击登录 → 验证通过后解锁菜单 +- **权限拦截**:未登录时点击任意菜单按钮 → Toast 提示「您无权使用该设备,请联系管理员添加权限」 +- **登录成功**:携带 `user` + `uid` 参数跳转目标页面 + +#### 字段说明 + +| 字段 | 类型 | 说明 | +|------|------|------| +| 账号 | 文本输入 | 用户账号 | +| 密码 | 密码输入 | 用户密码 | + +--- + +### 3.2 验收食材(01-verify-inspection.html) + +[打开原型](../01-verify-inspection.html) + +本页面采用**分步向导**形式,在单页面内完成从选单到提交的全过程。 + +#### 3.2.1 Step 1:选择订单 + +##### 功能说明 + +展示当前操作人关联的待验收订单列表,采用横向滑动卡片布局。页面右上角常驻「无订单验收」入口。 + +##### 页面布局 + +``` +┌────────────────────────────────────────────────┐ +│ 顶部栏:← 返回 | 标题 | 操作人 | [退出] | [无订单验收] │ +├────────────────────────────────────────────────┤ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ 订单卡片1 │ │ 订单卡片2 │ │ 订单卡片3 │ ←横滑 │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +└────────────────────────────────────────────────┘ +``` + +##### 订单卡片字段 + +| 区域 | 字段 | 说明 | +|------|------|------| +| 顶部 | 供应商名称 | 订单供应商 | +| 顶部 | 订单编号 | PO 编号 | +| 中间 | 食材种类数 + 食材标签 | 合并显示(如「13种食材」),食材过多时显示「+N项」可点击弹窗查看全部 | +| 日期区 | 采购日期 | 虚线框内左右排列 | +| 日期区 | 预计到货 | 虚线框内左右排列,蓝色字体 | +| 配送行 | 配送方式 | 本地配送 / 三方快递 | +| 配送行 | 配送码/物流单号 | — | +| 底部 | 验收状态标签 | 未验收(绿)/ 部分验收(橙) | +| ~~底部~~ | ~~付款类型~~ | ~~前置付款 / 后置付款~~ **暂时隐藏** | +| 底部 | 采购人 | — | +| CTA | 进入验收按钮 | 点击整张卡片或按钮进入 Step2 | + +##### 无订单验收弹窗 + +点击右上角「无订单验收」按钮弹出: + +| 字段 | 类型 | 必填 | 说明 | +|------|------|------|------| +| 供应商 | 下拉选择 | 是 | 外采供应商 | +| 来源类型 | 只读 | — | 固定为「外采」 | + +确认后进入 Step2 无订单模式。 + +--- + +#### 3.2.2 Step 2:食材识别 + 验收判定 + +##### 功能说明 + +两列布局。左列为食材识别区(摄像头画面 + 候选食材卡片),右列为订单信息 + 食材列表 + 操作区。 + +##### 页面布局 + +``` +┌────────────────────────────────────────────────────────┐ +│ 顶部栏:← 返回 | 标题 | 操作人头像+姓名 | [退出] │ +├──────────────┬─────────────────────────────────────────┤ +│ 左列(440px) │ 右列(flex:1) │ +│ │ │ +│ 食材识别摄像头 │ ┌─────────────────────────────────────┐│ +│ · 十字准线 │ │ 订单信息卡片 ││ +│ · 四角标记 │ │ 入库单号|订单号|供应商|发货人|来源类型 ││ +│ · 点击手动选择 │ │ 预计到货|食材数量|(应付总金额) ││ +│ │ └─────────────────────────────────────┘│ +│ 识别状态栏 │ │ +│ · 就绪/称重中 │ ┌─────────────────────────────────────┐│ +│ · 称重完成 │ │ 食材列表 ││ +│ │ │ 食材|采购规格|采购量|采购单价|应付金额 ││ +│ [🔄 重新识别] │ │ |实收规格|实收量|操作 ││ +│ 验收进度条 │ │ ││ +│ │ │ ││ +│ 候选食材 2×N │ │ [行数据...] ││ +│ · 图片+名称 │ └─────────────────────────────────────┘│ +│ · 点击选中 │ │ +│ │ ┌─────────────────────────────────────┐│ +│ │ │ 操作区 ││ +│ │ │ [↻ 称重清零(重新放置)] ││ +│ │ │ [提交并继续] [提交验收结果] ││ +│ │ └─────────────────────────────────────┘│ +└──────────────┴─────────────────────────────────────────┘ +``` + +##### 订单信息卡片字段 + +| 字段 | 显示条件 | 说明 | +|------|----------|------| +| 入库单号 | 始终 | 系统生成(IN-xxxx) | +| 订单号 | 有订单模式 | PO 编号;无订单模式隐藏 | +| 供应商 | 有订单模式 | 订单供应商;无订单模式隐藏 | +| 发货人 | 有订单模式 | 订单发货人;无订单模式隐藏 | +| 来源类型 | 有订单模式 | 自产 / 外采;无订单模式隐藏 | +| 预计到货 | 有订单模式 | 预计到货时间;无订单模式隐藏 | +| 食材数量 | 始终 | 订单中食材种类数(如「13 种」) | +| 应付总金额 | 后置付款订单 / 无订单模式 | 所有食材应付金额汇总,黄色高亮 | + +##### 食材列表字段(8列) + +| 列名 | 说明 | 交互 | +|------|------|------| +| 食材 | 食材名称 + 分类标签(蔬菜/调料等)+ 溯源码 | 只读 | +| 采购规格 | 采购单位 | **下拉单选**(斤/公斤/克/千克/袋/瓶/箱/桶/罐/份/个/只/条/把) | +| 采购量 | 订单采购数量/重量 | 只读;**无订单模式显示"--"** | +| 采购单价 | 单价 | **可编辑输入框**(数字) | +| 应付金额 | 单价 × 采购量 | 自动计算,黄色显示 | +| 实收规格 | 实际验收单位 | **下拉单选**(同采购规格选项),默认跟随采购规格 | +| 实收量 | 实际验收数量/重量 | 调料显示数量选择器(±按钮);普通食材显示称重值 | +| 操作 | 删除(~~+ 验收不通过~~ 暂时隐藏) | 见下方交互说明 | + +##### 操作列交互 + +| 按钮 | 有订单模式 | 无订单模式 | +|------|-----------|-----------| +| 🗑 删除 | 有验收记录时可用,清零该食材记录 | **始终可用**,从列表彻底移除 | +| ~~✗ 验收不通过~~ | ~~有验收记录时可用,打开处置弹窗~~ **暂时隐藏** | **不显示** | + +##### 验收流程 + +``` +食材放上秤盘 + ↓ +自动称重(食材识别摄像头同步识别品种) + ↓ +重量稳定(约3秒) + ↓ +拿起食材 → 自动判定通过 ✓ + ↓ +称重归零,进入下一个食材 + ↓ +全部食材完成 → 提交 +``` + +- 同一食材多次放上秤盘 → 重量累计增加 +- 称重稳定后,操作区显示提示「称重完成 · 拿起食材即视为通过」 +- 拿起食材后自动判定通过,无需手动确认 +- ~~不拿起食材时可点击「✗」打开不合格处置弹窗~~ **暂时隐藏,后期恢复** +- 点击识别区下方的「🔄 重新识别」按钮可清除当前结果,重新触发 AI 识别 + +##### 候选食材区域 + +- AI 识别摄像头扫描后推送相似度最高的候选食材(2列网格卡片) +- 每张卡片显示:食材图片/emoji + 名称 +- 点击卡片 → 选中该食材 → 自动开始称重 +- 无订单模式:识别到什么就添加什么,同名食材累加重量 +- 有订单模式:优先匹配订单内食材,匹配不到则新增 +- **重新识别**:点击识别状态条下方的「🔄 重新识别」按钮,可清空当前候选结果,重新触发 AI 识别流程 + +--- + +#### 3.2.3 不合格处置弹窗 **(暂时隐藏,后期恢复)** + +> ⚠️ 当前版本已隐藏此弹窗入口,操作列中的「✗ 验收不通过」按钮不显示。以下为原始设计文档,保留备后期恢复参考。 + +##### 触发条件 + +~~点击操作列「✗ 验收不通过」按钮。~~ + +##### 弹窗字段 + +| 字段 | 类型 | 必填 | 说明 | +|------|------|------|------| +| 食材信息 | 只读 | — | 显示当前食材名称和重量 | +| 处理方式 | 单选按钮 | 是 | 退货退款 / 仅退款 / 换货 | +| 处理范围 | 单选按钮 | 是 | 部分 / 全部 | +| 退款金额 | 数值 | 前置付款可编辑,后置付款只读 | 根据处置自动计算 | +| 计算说明 | 只读文字 | — | 常驻显示:退款重量 = 应收 − 实收 | +| 不合格原因 | 下拉选择 | 是 | 原因列表(如发霉变色、枯萎严重、死鱼不收等) | +| 备注说明 | 文本输入 | 否 | 补充说明 | + +##### 处理方式与付款模式关系 + +| 付款模式 | 可选处理方式 | 退款相关 | +|----------|-------------|----------| +| 前置付款 | 退货退款、仅退款、换货 | 退款金额**可编辑** | +| 后置付款 | 仅换货 | 无退款,仅换货 | + +##### 处理范围自动判定 + +| 条件 | 自动判定 | 退款重量计算 | +|------|----------|-------------| +| 秤体有重量(实重 > 0) | 部分 | 退款重量 = 应收重量 − 当前秤上实收重量 | +| 秤体无重量(实重 = 0) | 全部 | 退款重量 = 应收重量 | + +用户可手动切换处理范围(部分 ↔ 全部),切换后退款重量重新计算。 + +##### 不合格原因选项 + +| 选项 | +|------| +| 重量不符(实收与订单差异超标) | +| 发错货(实物与订单品种不一致) | +| 新鲜度不足/腐烂变质(萎蔫/变色/异味/腐烂) | +| 存在异物/杂质 | +| 包装破损/污染 | +| 数量短缺 | +| 其他原因 | + +--- + +#### 3.2.4 验收汇总弹窗 + +##### 触发条件 + +全部食材验收完成后**自动弹出**(**仅订单模式**,无订单模式不弹出)。 + +> 弹窗为全屏遮罩层,弹出后底部按钮不可点击,用户必须从弹窗中选择操作。 + +##### 弹窗内容 + +| 内容 | 说明 | +|------|------| +| 订单信息 | 订单号 \| 供应商 \| ~~付款模式(前置/后置)~~ 暂时隐藏 | +| 通过数量 | 绿色高亮 | +| ~~不通过数量~~ | ~~红色高亮~~ **暂时隐藏** | +| ~~不合格明细~~ | ~~按不合格类型汇总项数~~ **暂时隐藏** | +| 金额汇总 | 应付金额、扣减金额(有扣减时显示)、最终金额(前置显示"应退"、后置显示"实付") | + +##### 弹窗操作 + +| 按钮 | 说明 | +|------|------| +| 提交并继续 | 关闭弹窗 → Toast「验收数据已提交」→ **清空验收数据,回到 Step 1** 选择下一张订单 | +| 提交并关闭 | 关闭弹窗 → Toast「验收数据已提交」→ **跳回欢迎页**(携带 user + uid 参数) | + +--- + +#### 3.2.5 操作与提交 + +##### 常驻按钮 + +| 按钮 | 位置 | 行为 | +|------|------|------| +| 🔄 重新识别 | 左列识别状态条下方 | 清除当前 AI 识别结果和候选区,重新触发 AI 识别(Toast「正在重新识别...」→ 1.2 秒后重新生成候选) | +| 称重清零 | 右侧操作区底部 | 清空当前秤上食材的称重数据,允许重新放置同一食材再次称重 | +| 提交验收结果 | 右下角(全部完成后激活) | 见下方提交流程 | +| 提交并继续 | 右下角(全部完成后激活) | 见下方提交流程 | + +##### 提交流程(两条路径) + +``` +全部食材验收完成 + ↓ +┌─ 有订单模式 → 自动弹出「验收汇总弹窗」(见 3.2.4) +│ ├─ 弹窗内「提交并继续」→ 回 Step 1 选新订单 +│ └─ 弹窗内「提交并关闭」→ 回欢迎页 +│ +└─ 无订单模式 → 不弹窗,直接点击底部按钮 + ├─「提交验收结果」→ Toast「提交成功」→ 回欢迎页 + └─「提交并继续」→ Toast「提交成功,继续验收」→ 清空验收数据,停留在 Step 2 +``` + +> 无订单模式下金额可直接在食材行编辑单价,不需要汇总弹窗确认,因此跳过弹窗直接提交。 + +> 注:食材列表下方的付款明细区域(应付金额 + 扣减金额)已取消独立展示,相关金额信息统一在订单卡片中呈现。 + +--- + +### 3.3 验收记录(03-verify-history.html) + +[打开原型](../03-verify-history.html) + +#### 功能说明 + +验收历史数据查询页面。支持日期筛选、状态筛选、关键词搜索,以及**食材维度/订单维度**切换。 + +#### 页面布局 + +``` +┌────────────────────────────────────────────────┐ +│ 顶部栏:← 返回 | 标题 | [退出] │ +├────────────────────────────────────────────────┤ +│ 日期条(横滑)| 模式切换(日/周)| 状态筛选 | 搜索 | 维度切换 │ +│ [今天][昨天][周一]... [日视图][本周] [全部][通过][不通过] │ 🔍 | [食材][订单] │ +├────────────────────────────────────────────────┤ +│ 统计行:今日验收总数 | 验收通过 | 验收不通过 | 合格率 │ +├────────────────────────────────────────────────┤ +│ 数据表格 │ +│ 入库单号|订单号|食材/数量|供应商|支付方式|配送方式 │ +│ |时间|验收结果/状态|操作 │ +├────────────────────────────────────────────────┤ +│ 底栏:共 X 条记录 │ +└────────────────────────────────────────────────┘ +``` + +#### 维度切换 + +| 维度 | 说明 | 食材列 | 结果列 | +|------|------|--------|--------| +| 食材维度 | 按食材逐条展示 | 食材名称 | 验收结果(通过/不通过/待验收) | +| 订单维度 | 按订单号分组汇总 | 食材数量(N 种) | 验收状态(验收完成/待验收) | + +- 订单维度下,同一订单的多条食材记录合并为一行 +- 无订单号的记录(无订单验收)各自独立成组 +- 订单维度下,若该订单所有食材均通过 → 「验收完成」;否则 → 「待验收」 + +#### 表格字段 + +| 列名 | 说明 | +|------|------| +| 入库单号 | IN-xxxx 格式 | +| 订单号 | PO 编号;无订单验收显示"--" | +| 食材(食材维度) | 食材名称 | +| 食材数量(订单维度) | 该订单包含的食材种类数 | +| 供应商 | 供应商名称 | +| 支付方式 | 前置(绿标签)/ 后置(橙标签) | +| 配送方式 | 本地配送 / 三方快递 | +| 时间 | 验收时间(HH:mm) | +| 验收结果(食材维度) | 通过(绿)/ 不通过(红)/ 待验收(蓝) | +| 验收状态(订单维度) | 验收完成(绿)/ 待验收(橙) | +| 操作 | 「详情」链接 → 打开详情抽屉 | + +#### 详情抽屉 + +点击「详情」后从右侧滑出,展示该条记录的完整信息: + +| 分组 | 字段 | +|------|------| +| 入库信息 | 入库单号、验收时间、操作人、来源类型 | +| 食材信息 | 食材名称、供应商、订单重量、实际重量、偏差率、验收结果 | +| 订单信息 | 订单号、支付方式、配送方式 | +| 不合格处置(仅不通过时) | 处理方式、处理范围、不合格原因 | + +--- + +### 3.4 食材采样(04-ingredient-sampling.html) + +[打开原型](../04-ingredient-sampling.html) + +#### 功能说明 + +采样是验收的前置环节,用于在正式验收前采集食材样本数据,为后续验收提供对比基准。 + +#### 采样流程 + +``` +选择待采样订单 → 食材放上秤盘 → 自动称重 + AI识别 + → 系统生成溯源码 + 拉取配送信息 + → 外观品级判定(合格/不合格) + → 填写采样备注(可选) + → [保存采集] 或 [保存并继续] +``` + +#### 采样字段 + +| 字段 | 来源 | 说明 | +|------|------|------| +| 采样编号 | 系统自动生成 | SP-xxxx 格式 | +| 溯源码 | 系统自动 | 自产:唯一匹配;外采:自动生成 | +| 来源类型 | 系统自动 | 自产 / 外采 | +| 供应商 | 系统自动 | 从订单获取 | +| 食材名称 | AI识别(可修正) | 食材识别摄像头输出 | +| 采样重量(kg) | 秤体传感器 | 核心产出 | +| 采样时间 | 系统自动 | — | +| 操作人 | 人脸识别自动 | — | +| 外观品级 | 采样人选择 | 合格 / 不合格 | +| 采样备注 | 采样人输入(可选) | 文字描述 | + +--- + +### 3.5 采样历史(05-sampling-history.html) + +[打开原型](../05-sampling-history.html) + +#### 功能说明 + +食材样本库,独立于验收流程。展示所有历史采样记录,供验收时对比参考。 + +#### 页面布局 + +卡片式列表,每张卡片展示一条采样记录。 + +#### 卡片字段 + +| 字段 | 说明 | +|------|------| +| 食材名称 | 采样食材 | +| 分类标签 | 蔬菜/调料等 | +| 预览图片 | 采样时拍摄 | +| 采样数量 | 该食材采样次数 | +| 采样时间 | 最近一次采样时间 | + +点击卡片 → 弹窗展示采样详情(采样备注等)。 + +> 注:采样历史不涉及验收合格/不合格概念,不涉及供应商信息,是独立的食材样本库。 + +--- + +### 3.6 设置(02-settings.html) + +[打开原型](../02-settings.html) + +#### 功能说明 + +设备参数配置页面。 + +#### 配置项 + +| 配置项 | 说明 | +|--------|------| +| 偏差率阈值(%) | 重量偏差率 ≤ 阈值 → 自动判定通过;> 阈值 → 自动判定不通过 | + +> 配置全局生效,所有验收秤共用同一阈值。 + +--- + +## 四、表单字段表 + +### 4.1 无订单验收弹窗 + +| 字段 | 类型 | 必填 | 校验规则 | +|------|------|------|----------| +| 供应商 | 下拉选择 | 是 | 必须选择一项 | +| 来源类型 | 只读 | — | 固定「外采」 | + +### 4.2 不合格处置弹窗 + +| 字段 | 类型 | 必填 | 校验规则 | +|------|------|------|----------| +| 处理方式 | 单选 | 是 | 退货退款/仅退款/换货(后置付款仅换货) | +| 处理范围 | 单选 | 是 | 部分/全部 | +| 退款金额 | 数值 | 前置付款必填 | ≥ 0,最多两位小数(后置付款只读) | +| 不合格原因 | 下拉选择 | 是 | 必须选择一项(重量不符/发错货/新鲜度不足/存在异物/包装破损/数量短缺/其他原因) | +| 备注说明 | 文本 | 否 | 最多 200 字 | + +### 4.3 采样表单 + +| 字段 | 类型 | 必填 | 校验规则 | +|------|------|------|----------| +| 食材名称 | AI识别 + 可修正 | 是 | 必须为食材库中存在的食材 | +| 外观品级 | 单选 | 是 | 合格/不合格 | +| 采样备注 | 文本 | 否 | 最多 200 字 | + +--- + +## 五、核心业务规则 + +### 5.1 付款模式 + +| 模式 | 说明 | 订单卡片 | 处置规则 | +|------|------|----------|----------| +| 前置付款 | 下单时已付款 | 不显示应付总金额 | 支持退货退款/仅退款/换货,退款金额可编辑 | +| 后置付款 | 验收后付款 | 显示应付总金额 | 仅支持换货,无退款 | + +### 5.2 有订单 vs 无订单验收 + +| 对比项 | 有订单模式 | 无订单模式 | +|--------|-----------|-----------| +| 食材来源 | 来自订单预设列表 | AI识别到什么添加什么 | +| 采购量 | 显示订单采购量 | 显示"--" | +| 采购规格/单价 | 来自订单 | 来自系统食材目录 | +| ~~验收不通过~~ | ~~可用~~ **暂时隐藏** | **不可用**(不渲染按钮) | +| 删除 | 有记录时可用 | **始终可用** | +| 验收汇总弹窗 | 全部完成后弹出 | **不弹出** | +| 应付总金额 | 后置付款显示 | 始终显示 | + +### 5.3 人脸验证策略 + +不持续监控人脸,仅在关键节点校验: + +| 时机 | 本人 | 换人 | +|------|------|------| +| 欢迎页进入系统 | 进入菜单 | 无权使用,Toast 提示 | +| 切换功能页面 | 携带身份参数跳转 | 跳回欢迎页重新验证 | +| 提交确认操作 | 正常提交 | Toast「请本人操作」,阻止提交 | + +### 5.4 摄像头职责 + +| 摄像头 | 前端展示 | 用途 | 交互 | +|--------|----------|------|------| +| 食材识别摄像头 | 01/04 页面左列识别区 | AI 识别食材品种 | 是 | +| 人脸识别摄像头 | 仅验证时调用,不常驻 | 关键节点身份校验 | 是 | +| 场景监控摄像头 | 不展示,后台静默录制 | 全程录像 | 否 | + +### 5.5 不合格处理方式 **(暂时隐藏,后期恢复)** + +> ⚠️ 当前版本已隐藏验收不通过入口,以下规则暂不启用,保留备后期恢复参考。 + +| 处理方式 | 范围 | 含义 | +|----------|------|------| +| 退货退款 | 全部/部分 | 退回供应商,全额或按比例退款 | +| 仅退款 | 全部/部分 | 不退货,全额或按比例退款 | +| 换货 | 全部/部分 | 退回不合格品,供应商补发 | + +--- + +## 六、全局交互约定 + +### 6.1 退出登录 + +所有子页面(01 ~ 05)顶栏右侧均放置「退出」按钮: + +- 样式:淡红色底 + 红色细边框,hover 变亮 +- 点击后弹出 `confirm` 确认对话框:「确定要退出登录吗?」 +- 确认后跳转至 `00-welcome.html`,清除当前会话状态 +- 欢迎页(00)无退出按钮(用户尚未登录) + +### 6.2 用户身份参数传递 + +| 环节 | 说明 | +|------|------| +| 登录成功 | 欢迎页将 `user`(姓名)+ `uid`(工号)编码为 URL 参数 | +| 跳转子页面 | 格式:`目标页.html?user=张三&uid=EMP-20260001` | +| 子页面读取 | 各页面通过 `getQueryParam('user')` 获取并展示操作人信息 | +| 提交返回 | 验收提交后返回首页时同样携带参数,首页可识别已登录状态 | + +### 6.3 Toast 提示规范 + +| 类型 | 颜色 | 使用场景 | +|------|------|----------| +| 成功(success) | 绿色背景 | 提交成功、保存成功 | +| 警告(warn) | 黄色背景 | 权限不足、必填项为空、已达上限 | +| 错误(error) | 红色背景 | 操作失败、网络异常 | +| 普通(默认) | 深色半透明背景 | 一般提示(删除成功、已取消等) | + +- 位置:屏幕顶部居中,固定定位 +- 自动消失,持续时间根据内容 1200 ~ 3000ms +- 同一时刻只显示一条,新 Toast 覆盖旧 Toast + +### 6.4 返回按钮行为 + +| 页面 | 返回目标 | 特殊处理 | +|------|----------|----------| +| 00 欢迎页 | `../index.html`(根导航) | — | +| 01 Step1 | 来源页(动态检测) | — | +| 01 Step2 | 有验收数据 → 弹出返回确认弹窗;无数据 → 回退到 Step1 | 确认弹窗防止误操作丢失数据 | +| 02 ~ 05 | `00-welcome.html` | — | + +--- + +## 七、秤端与后台职责划分 + +### 秤端 + +- 人脸识别 / 账号密码登录 +- 订单选择、食材识别、称重计量 +- AI 识别食材品种(可手动修正) +- 验收结果自动判定 + 手动修改 +- 不合格处置策略录入 +- 采样数据保存 +- 场景监控全程录像 + +### 后台 + +- 订单数据拉取(从绿色种采-采供管理) +- 溯源码分配(自产唯一匹配,外采自动生成) +- 入库单号生成 +- 偏差率阈值配置 +- 供应商类型映射 +- 库存联动(入库成功后更新仓储) +- 验收/采样记录查询导出 diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.docx b/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.docx new file mode 100644 index 0000000..522bf48 Binary files /dev/null and b/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.docx differ diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.md b/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.md new file mode 100644 index 0000000..4fb041c --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/doc/UI-SPEC.md @@ -0,0 +1,623 @@ +# 毛菜验收秤 — UI 设计规范 + +> 本文档面向 UI 设计师,用于独立理解项目全貌并完成视觉还原。 +> 配套文件:`PRD.md`(产品需求)、HTML 原型(可交互参考) +> 创建时间:2026-06-13 + +--- + +## 一、项目背景 + +### 1.1 产品定位 + +毛菜验收秤是「蚁熊智能餐养平台」中 **食堂毛菜入库流程** 的核心硬件终端,部署在仓库收货区。 + +### 1.2 上下游模块关系 + +``` + 根导航(index.html) + │ + ┌────────────────────┼────────────────────┐ + │ │ │ + 毛菜验收秤 档口营养秤 餐厅终端 + (本模块) (其他团队) (其他团队) + │ + ┌────┴────┐ + │ 本模块页面 │ + │ 00 ~ 05 │ + └─────────┘ +``` + +- **根导航**:设备启动后进入的总入口,列出该设备上所有可用应用 +- **毛菜验收秤**:本模块,负责食材验收、采样、记录查询 +- **后台系统**:订单数据来源于「绿色种采-采供管理」,验收结果回传至库存系统 + +### 1.3 核心用户 + +| 角色 | 使用场景 | +|------|----------| +| 仓库管理员 | 收货验收、称重、不合格处置 | +| 食堂主管 | 查看验收记录、审批 | +| 质检员 | 食材采样、品级判定 | + +--- + +## 二、设备形态 + +### 2.1 硬件参数 + +| 项目 | 规格 | +|------|------| +| 屏幕尺寸 | 工业触摸屏一体机 | +| 分辨率 | **1280 × 720**(固定,不可缩放) | +| 输入方式 | 触控(操作者可能戴手套,触控目标 ≥ 36px) | +| 外设 | 称重传感器、食材识别摄像头、人脸识别摄像头、场景监控摄像头 | +| 运行环境 | 内置 Android/Windows 终端,浏览器全屏运行 | + +### 2.2 使用场景 + +- **环境**:仓库收货区,光线可能偏暗 → 深色主题 +- **姿态**:操作者站立,单手操作触摸屏,另一手搬运食材 +- **操作节奏**:快速、连续 → 减少弹窗层级,关键操作一键完成 +- **干扰**:手湿/戴手套 → 按钮面积充足,间距宽松 + +### 2.3 设计约束 + +| 约束 | 说明 | +|------|------| +| 固定视口 | 1280×720,`overflow: hidden`,整页无滚动(局部区域可滚动) | +| 深色主题 | 唯一主题,无亮色模式 | +| 自包含 | 每个 HTML 文件独立,不引用外部 CSS/JS/字体/图片 | +| 墨刀兼容 | 禁止外部引用、简洁 DOM、内联 SVG | +| 字体 | 系统字体栈,不可使用 Web Font | + +--- + +## 三、设计约束补充 + +### 3.1 交互限制 + +- 所有可点击元素最小尺寸 **36 × 36px** +- 弹窗最多 **2 层**(主弹窗 + 确认弹窗),禁止嵌套更深 +- 同一时刻只显示 **1 个 Toast**,新 Toast 覆盖旧 Toast +- 全屏遮罩弹窗(z-index ≥ 200)出现后,底层按钮不可点击 + +### 3.2 技术约束 + +| 项 | 值 | +|------|------| +| 视口 | `` | +| body | `width: 1280px; height: 720px; overflow: hidden;` | +| 动画 | 仅用 CSS transition/animation,时长 ≤ 400ms | +| 滚动条 | 自定义细滚动条(宽 3~6px,半透明) | + +--- + +## 四、视觉令牌 + +### 4.1 色板 + +#### 背景色 + +| 令牌 | 色值 | 用途 | +|------|------|------| +| `--bg-page` | `#0e1326` | 页面底色(最深) | +| `--bg-card` | `#1a2b4a` | 卡片、面板、顶栏 | +| `--bg-input` | `#121832` | 输入框、选择器内部 | +| `--bg-camera` | `#0D1117` | 摄像头预览区 | + +#### 主色 & 语义色 + +| 令牌 | 色值 | 用途 | +|------|------|------| +| `--color-primary` | `#4a90d9` | 主操作、链接、高亮、头像背景 | +| `--color-success` | `#52c41a` | 通过、在线、完成、正向数值 | +| `--color-warning` | `#faad14` | 警告、后置付款标签 | +| `--color-error` | `#ff4d4f` | 不通过、离线、删除、错误 | +| `--color-danger-hover` | `#ff6b6d` | 退出按钮 hover 文字色 | + +#### 文字色 + +| 令牌 | 色值 | 用途 | +|------|------|------| +| `--text-title` | `rgba(255,255,255,0.85)` | 页面标题、卡片标题 | +| `--text-primary` | `#ffffff` | 正文、按钮文字 | +| `--text-secondary` | `rgba(255,255,255,0.7)` | 次要文字、返回按钮 | +| `--text-tertiary` | `rgba(255,255,255,0.5)` | 辅助说明、用户信息 | +| `--text-placeholder` | `rgba(255,255,255,0.2)` | 输入框占位符 | +| `--text-disabled` | `rgba(255,255,255,0.25)` | 禁用状态文字 | + +#### 边框色 + +| 令牌 | 色值 | 用途 | +|------|------|------| +| `--border-default` | `rgba(255,255,255,0.06~0.1)` | 卡片、输入框默认边框 | +| `--border-focus` | `#4a90d9` | 输入框聚焦 | +| `--border-primary` | `rgba(74,144,217,0.25)` | 主色按钮边框 | +| `--border-danger` | `rgba(255,77,79,0.2)` | 危险按钮边框 | + +#### 透明度用法 + +``` +0.85 标题文字 +0.7 次要文字 / hover 状态 +0.5 辅助说明 +0.4 标签文字 / 提示 +0.2 占位符 / 禁用 +0.1 边框 / 分割线 +0.06 卡片边框(最弱) +0.04 背景叠加(统计卡片) +``` + +### 4.2 字号层级 + +| 级别 | 大小 | 字重 | 用途 | +|------|------|------|------| +| H1 | 18px | 700 | 弹窗标题 | +| H2 | 16px | 600 | 区域标题、步骤标题 | +| H3 | 15px | 600 | 顶栏页面标题 | +| BODY | 14px | 400~500 | 正文、按钮文字、返回按钮 | +| CAPTION | 13px | 400~500 | 输入框文字、次按钮 | +| SMALL | 12px | 400~600 | 辅助说明、标签、统计数字、状态 | +| MINI | 11px | 400~500 | 字段标签、进度文字、极小注释 | + +> 字体栈:`-apple-system, "Microsoft YaHei", "PingFang SC", sans-serif` + +### 4.3 圆角 + +| 令牌 | 值 | 用途 | +|------|------|------| +| `--radius-xs` | 2px | 滚动条滑块 | +| `--radius-sm` | 4~5px | 退出按钮、下拉选择器 | +| `--radius-md` | 6~8px | 输入框、按钮、标签、进度条、状态栏 | +| `--radius-lg` | 10~12px | 卡片、摄像头框 | +| `--radius-xl` | 14~16px | 弹窗 | +| `--radius-full` | 50% | 头像、状态圆点 | + +### 4.4 间距系统 + +| 级别 | 值 | 用途 | +|------|------|------| +| xs | 4px | 图标与文字间距、标签内间距 | +| sm | 8px | 紧凑元素间距、候选卡片间距 | +| md | 12~16px | 表单字段间距、面板内间距 | +| lg | 20~24px | 区域间距、弹窗内间距 | +| xl | 28~32px | 页面边距、大面板内间距 | + +### 4.5 阴影 & 发光 + +| 效果 | CSS | 用途 | +|------|------|------| +| 状态点发光 | `box-shadow: 0 0 6px #52c41a` | 就绪/在线状态圆点 | +| 弹窗阴影 | `box-shadow: 0 20px 60px rgba(0,0,0,0.5)` | 详情弹窗 | +| 按钮 hover | `box-shadow: 0 4px 14px rgba(74,144,217,0.3)` | 主按钮悬停 | +| 遮罩层 | `background: rgba(0,0,0,0.7)` | 弹窗背景遮罩 | + +--- + +## 五、通用组件 + +### 5.1 按钮 + +#### 主操作按钮 + +``` +背景:#4a90d9 文字:#fff 圆角:8px 字号:13~15px 字重:600 +hover:背景 #3a7bc8 + 阴影 +active:scale(0.98) +disabled:背景 rgba(255,255,255,0.08) 文字 rgba(255,255,255,0.25) +``` + +#### 次要按钮 + +``` +背景:rgba(255,255,255,0.06) 文字:rgba(255,255,255,0.5~0.7) +边框:1px solid rgba(255,255,255,0.08~0.1) 圆角:8px +hover:背景 rgba(255,255,255,0.1) 文字 #fff +``` + +#### 危险按钮(退出) + +``` +背景:rgba(255,77,79,0.08) 文字:rgba(255,77,79,0.7) +边框:1px solid rgba(255,77,79,0.2) 圆角:5px 字号:11px +hover:背景 rgba(255,77,79,0.18) 文字 #ff6b6d 边框 rgba(255,77,79,0.4) +``` + +#### 文字按钮(链接样式) + +``` +无背景无边框 文字:#4a90d9 字号:12~13px +hover:文字加亮 / 下划线 +``` + +### 5.2 标签(Tag) + +``` +基础:padding 2px 8px border-radius 8px font-size 11px + +绿色(未验收/通过/前置/在线):背景 rgba(82,196,26,0.15) 文字 #52c41a +橙色(部分验收/警告/后置):背景 rgba(250,173,22,0.15) 文字 #faad14 +红色(不通过/离线):背景 rgba(255,77,79,0.15) 文字 #ff4d4f +蓝色(待验收):背景 rgba(74,144,217,0.15) 文字 #4a90d9 +``` + +### 5.3 Toast 提示 + +``` +位置:fixed 顶部 60px 水平居中 +背景:rgba(0,0,0,0.8) 文字:#fff 圆角:8px +padding:10~12px 24~28px font-size:13px +最大宽度:90% 单行不换行 + +入场:translateY(-20px) → translateY(0) duration 300ms +出场:opacity 1 → 0 duration 300ms + +类型变体: + success → 背景 rgba(82,196,26,0.9) + warn → 背景 rgba(250,173,22,0.92) + error → 背景 rgba(255,77,79,0.9) + 默认 → 背景 rgba(0,0,0,0.8) +``` + +### 5.4 弹窗(Modal / Dialog) + +``` +遮罩:position fixed inset 0 background rgba(0,0,0,0.7) z-index 200~250 +面板:background #1a2b4a border-radius 14~16px padding 24~28px + border 1px solid rgba(255,255,255,0.08) + box-shadow 0 20px 60px rgba(0,0,0,0.5) +宽度:480~520px(常规弹窗) / 700px(详情弹窗) +最大高度:80~90vh,超出区域内部滚动 + +入场:opacity 0→1 + translateY(-20px)→0 duration 300ms +``` + +### 5.5 输入框 + +``` +背景:#121832 边框:1px solid rgba(255,255,255,0.1) 圆角:6~8px +文字:#fff 13~14px 占位符:rgba(255,255,255,0.2) +高度:34~42px padding:0 10~14px + +focus:border-color #4a90d9 +disabled:背景 rgba(255,255,255,0.04) 文字 rgba(255,255,255,0.25) +``` + +### 5.6 下拉选择器(Select) + +``` +外观:appearance auto(使用系统原生下拉箭头) +背景:rgba(255,255,255,0.05) 边框:1px solid rgba(255,255,255,0.1) +圆角:4px padding:2px 4px 字号:11px 文字居中 +focus:border-color #4a90d9 背景 rgba(74,144,217,0.08) +option 背景:#1a2b4a 文字:#fff +``` + +### 5.7 表格 + +``` +表头:background rgba(255,255,255,0.04) 字号 12px 字重 600 + 文字 rgba(255,255,255,0.6) +表体行:background transparent 字号 13px 文字 rgba(255,255,255,0.8) + hover:background rgba(74,144,217,0.06) +行高:36~40px +分割线:border-bottom 1px solid rgba(255,255,255,0.06) +``` + +### 5.8 卡片 + +``` +背景:#1a2b4a 圆角:12~14px +边框:1px solid rgba(255,255,255,0.06) +padding:16~24px +hover(可点击卡片):border-color rgba(74,144,217,0.3) + background rgba(74,144,217,0.06) + transform translateY(-2px) +``` + +--- + +## 六、页面逐一说明 + +### 6.1 欢迎页(00-welcome.html) + +**功能目标**:设备启动后的身份验证入口,登录成功后解锁功能菜单。 + +**布局**:左右两栏 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← 返回(回根导航) 毛菜验收秤 │ 44px +├──────────────────┬─────────────────────────────────────┤ +│ │ │ +│ 左侧(420px) │ 右侧(flex:1) │ +│ │ │ +│ ┌──────────┐ │ [功能菜单] │ +│ │ 人脸识别 │ │ ┌───────────────────────────┐ │ +│ │ 圆形区域 │ │ │ ⚖️ 验收食材 │ │ +│ │ 220×220 │ │ │ 订单选择、称重验收... │ │ +│ │ 虚线边框 │ │ └───────────────────────────┘ │ +│ └──────────┘ │ ┌───────────────────────────┐ │ +│ 识别状态信息 │ │ 📝 验收记录 │ │ +│ ── 或 ── │ └───────────────────────────┘ │ +│ 账号密码表单 │ ...更多菜单按钮 │ +│ │ │ +└──────────────────┴─────────────────────────────────────┘ +``` + +**交互状态**: + +| 状态 | 视觉变化 | +|------|----------| +| 未登录 | 菜单按钮 `.disabled`(opacity 0.4,不可点击) | +| 识别中 | 圆形区域边框变实线 + 脉冲动画,图标变 🔍 | +| 识别成功 | 边框变绿色,图标变 ✅,显示姓名+工号,菜单解锁 | +| 权限不足 | 点击菜单 → Toast 黄色警告 | + +**无退出按钮**(用户尚未登录)。 + +--- + +### 6.2 验收食材(01-verify-inspection.html) + +**功能目标**:核心业务页面,分两步完成订单选择 → 食材称重验收。 + +#### Step 1:选择订单 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← | 食材验收识别屏 | 头像 张三 | [退出] | [无订单验收] │ 52px +├────────────────────────────────────────────────────────┤ +│ 选择验收订单 提示文字 │ +│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ +│ │订单卡1│ │订单卡2│ │订单卡3│ │订单卡4│ ← 横向滑动 │ +│ │供应商 │ │供应商 │ │供应商 │ │供应商 │ │ +│ │PO编号 │ │PO编号 │ │PO编号 │ │PO编号 │ │ +│ │13种食材│ │食材标签│ │食材标签│ │食材标签│ │ +│ │采购/到货│ │采购/到货│ │采购/到货│ │采购/到货│ │ +│ │配送方式│ │配送方式│ │配送方式│ │配送方式│ │ +│ │[前置] │ │[后置] │ │[前置] │ │[前置] │ │ +│ └──────┘ └──────┘ └──────┘ └──────┘ │ +└────────────────────────────────────────────────────────┘ +``` + +**订单卡片尺寸**:约 240×260px,间距 16px + +**卡片字段布局**: + +| 区域 | 字段 | 样式 | +|------|------|------| +| 顶部 | 供应商名称 | 14px 600 | +| 顶部 | 订单编号 | 12px rgba(0.45) | +| 中间 | 食材种类数 + 标签 | 合并显示,过多时「+N项」可点击 | +| 日期区 | 采购日期 / 预计到货 | 虚线框内左右排列,到货日期蓝色 | +| 底部 | 验收状态标签 | 未验收(绿) / 部分验收(橙)(~~原发货状态~~,验收与发货无关,仅判断是否全部验收通过) | +| ~~底部 | 付款类型 | 前置(绿tag) / 后置(橙tag)~~ **暂时隐藏,后期恢复** | +| CTA | 进入验收 | 整张卡片可点击 | + +#### Step 2:食材验收(两列布局) + +``` +┌────────────────────────────────────────────────────────┐ +│ ← | 食材验收识别屏 | 头像 张三 | [退出] │ 52px +├───────────────┬────────────────────────────────────────┤ +│ 左列(440px) │ 右列(flex:1) │ +│ │ │ +│ [摄像头画面] │ ┌────────────────────────────────────┐ │ +│ 200px高 │ │ 订单信息卡片 │ │ +│ 十字准线 │ │ 入库单号 | 订单号 | 供应商 | 发货人 │ │ +│ 四角蓝色标记 │ │ 来源类型 | 预计到货 | 食材数量 | 金额 │ │ +│ │ └────────────────────────────────────┘ │ +│ [识别状态栏] │ ┌────────────────────────────────────┐ │ +│ ● 就绪/称重中 │ │ 食材列表(8列表格) │ │ +│ │ │ 食材|采购规格|采购量|单价|应付|实收规格 │ │ +│ [🔄 重新识别] │ │ |实收量|操作 │ │ +│ │ └────────────────────────────────────┘ │ +│ [进度条] │ │ +│ ████░░ 3/13 │ [↻ 称重清零(重新放置)] │ +│ │ │ +│ [候选食材2×N] │ [提交验收结果] [提交并继续] │ +│ ┌────┐ ┌────┐ │ │ +│ │🥬 │ │🥕 │ │ │ +│ │菠菜│ │胡萝卜│ │ │ +│ └────┘ └────┘ │ │ +└───────────────┴────────────────────────────────────────┘ +``` + +**食材列表 8 列宽度**:`1fr 56px 50px 56px 58px 50px 50px 52px` + +**操作列按钮**: + +| 按钮 | 样式 | 显示条件 | +|------|------|----------| +| 🗑 删除 | 文字按钮,红色 | 有订单:有记录时可用;无订单:始终可用 | +| ~~✗ 不通过~~ | ~~文字按钮,红色~~ | **暂时隐藏,后期恢复**(原有订单:有记录时可用;无订单:**不显示**) | + +--- + +### 6.3 验收记录(03-verify-history.html) + +**功能目标**:历史数据查询,支持多维度筛选。 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← 返回 | 验收记录 | [退出] │ 44px +├────────────────────────────────────────────────────────┤ +│ [日视图|本周] | [全部|通过|不通过] | 日期条(横滑) | 🔍 | [食材|订单] │ +├────────────────────────────────────────────────────────┤ +│ 📋 3 今日验收总数 | ✅ 2 验收通过 | ❌ 1 不通过 | 📊 66% │ +├────────────────────────────────────────────────────────┤ +│ 入库单号 | 订单号 | 食材/数量 | 供应商 | 支付方式 │ +│ | 配送方式 | 时间 | 验收结果 | 操作 │ +├────────────────────────────────────────────────────────┤ +│ 共 8 条记录 │ +└────────────────────────────────────────────────────────┘ +``` + +**维度切换**: + +| 维度 | 差异列 | 结果展示 | +|------|--------|----------| +| 食材维度 | 食材名称 | 通过(绿) / 不通过(红) / 待验收(蓝) | +| 订单维度 | 食材数量(N种) | 验收完成(绿) / 待验收(橙) | + +**日期条**:7 天横滑,今天高亮,点击切换 + +--- + +### 6.4 食材采样(04-ingredient-sampling.html) + +**功能目标**:验收前采集食材样本数据。 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← 返回 | 食材采样 📝 采样历史 | [退出] │ 44px +├─────────────────┬──────────────────────────────────────┤ +│ 左侧(400px) │ 右侧(flex:1) │ +│ │ │ +│ 搜索框 │ [摄像头预览区] │ +│ [全部][叶菜]... │ 拍照采集按钮 │ +│ 食材列表 │ │ +│ · 菠菜 > │ 采集结果(最多9张) │ +│ · 大白菜 > │ ┌──┐ ┌──┐ ┌──┐ │ +│ · 圆白菜 > │ │图1│ │图2│ │图3│ │ +│ │ └──┘ └──┘ └──┘ │ +│ │ │ +│ │ [取消] [↻ 重新采样] [保存采集] [保存并继续]│ +└─────────────────┴──────────────────────────────────────┘ +``` + +--- + +### 6.5 采样历史(05-sampling-history.html) + +**功能目标**:食材样本库,独立于验收流程。 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← 返回 | 采样历史 | [退出] │ 44px +├───────────┬────────────────────────────────────────────┤ +│ 快捷查找 │ 瀑布流卡片(3列) │ +│ 搜索框 │ ┌──────┐ ┌──────┐ ┌──────┐ │ +│ [全部] │ │🥬菠菜 │ │🥕土豆 │ │🥩猪排 │ │ +│ [叶菜类] │ │5张 │ │3张 │ │4张 │ │ +│ [花菜类] │ └──────┘ └──────┘ └──────┘ │ +│ [瓜果类] │ ┌──────┐ ┌──────┐ ┌──────┐ │ +│ ... │ │... │ │... │ │... │ │ +│ 共12条记录 │ └──────┘ └──────┘ └──────┘ │ +└───────────┴────────────────────────────────────────────┘ +``` + +点击卡片 → 详情弹窗(采样备注、图片网格、补充采集按钮) + +--- + +### 6.6 设置(02-settings.html) + +**功能目标**:设备参数配置。 + +``` +┌────────────────────────────────────────────────────────┐ +│ ← | 设置 | [退出] │ 44px +├──────────────────────────┬─────────────────────────────┤ +│ ⚖️ 验收标准 │ 💻 设备状态 │ +│ │ │ +│ 偏差率阈值 │ 人脸识别摄像头 ● 已连接 │ +│ [ 5 ] % │ 食材识别摄像头 ● 已连接 │ +│ │ 称重传感器 ● 已连接 │ +│ [保存设置] │ 触摸屏 ● 正常 │ +│ │ 网络连接 ● 已连接 │ +│ │ │ +│ │ [← 返回首页] │ +└──────────────────────────┴─────────────────────────────┘ +``` + +--- + +## 七、异常与边界 + +### 7.1 硬件异常 + +| 异常 | 表现 | UI 处理 | +|------|------|---------| +| 称重传感器断连 | 重量始终为 0 | 识别状态栏显示红色提示「称重传感器未连接」 | +| 摄像头遮挡 | 无法识别食材 | 摄像头区域显示「摄像头被遮挡,请清理」 | +| 人脸识别失败 | 3 秒内未识别到人脸 | 提示「未检测到人脸,请正对摄像头」 | +| 网络断开 | 无法拉取订单 | Toast「网络连接已断开」,订单列表为空 | + +### 7.2 数据边界 + +| 场景 | UI 处理 | +|------|---------| +| 订单列表为空 | 居中显示空状态文字「暂无待验收订单」 | +| 食材全部验收完成 | 进度条满,状态变「全部食材验收完成,请提交结果」,提交按钮激活 | +| 食材名称超长 | 单行截断,`text-overflow: ellipsis` | +| 数值极大 | 金额保留 2 位小数,重量保留 1 位小数 | +| 候选食材为 0 | 不显示候选区域,提示「未识别到食材,请手动选择」 | +| 采样图片达上限(9张) | 拍照按钮禁用,隐藏补充采集按钮 | +| 表格数据为空 | 居中显示「暂无数据」,底栏显示「共 0 条记录」 | + +### 7.3 操作边界 + +| 场景 | UI 处理 | +|------|---------| +| Step2 中点击返回 | 有验收数据 → 弹出确认弹窗「验收数据将丢失,确认返回?」;无数据 → 直接返回 | +| 未登录点击菜单 | Toast 黄色警告「您无权使用该设备,请联系管理员添加权限」 | +| 未选食材点击保存 | Toast「请先选择一个食材」 | +| 重复提交 | 提交后按钮立即 disabled,防止重复点击 | +| 无订单模式删除食材 | Toast「已删除「XXX」」;有订单模式删除 → Toast「已清空「XXX」验收记录」 | + +--- + +## 八、原型访问指南 + +### 8.1 本地打开原型 + +原型为独立 HTML 文件,直接在浏览器中打开即可: + +``` +文件路径:other-module/canteen-device/raw-veg-inspection-scale/ +├── 00-welcome.html ← 从这里开始 +├── 01-verify-inspection.html +├── 02-settings.html +├── 03-verify-history.html +├── 04-ingredient-sampling.html +├── 05-sampling-history.html +├── index.html ← 模块导航页 +└── doc/ + ├── PRD.md ← 产品需求文档 + ├── UI-SPEC.md ← 本文档 + └── CHANGELOG.md ← 变更记录 +``` + +### 8.2 页面跳转路径 + +**推荐浏览顺序**: + +``` +00-welcome.html(登录) + → 点击「验收食材」 + → 01 Step1(选订单) + → 点击订单卡片 + → 01 Step2(验收) + → 全部完成后弹窗 → 提交 + → 返回点击「验收记录」 + → 03(切换食材/订单维度) + → 返回点击「食材采样」 + → 04(选食材 → 拍照 → 保存) + → 返回点击「采样历史」 + → 05(瀑布流 → 点击卡片看详情) + → 返回点击「设置」 + → 02(调整阈值) +``` + +### 8.3 演示账号 + +| 账号 | 密码 | 角色 | +|------|------|------| +| zhangsan | 123456 | 仓库管理员 | +| lisi | 123456 | 食堂主管 | +| wangwu | 123456 | 质检员 | + +也支持姓名、工号、手机号登录。或直接点击人脸识别区域随机登录。 diff --git a/other-module/canteen-device/raw-veg-inspection-scale/doc/flow.md b/other-module/canteen-device/raw-veg-inspection-scale/doc/flow.md new file mode 100644 index 0000000..eb157ec --- /dev/null +++ b/other-module/canteen-device/raw-veg-inspection-scale/doc/flow.md @@ -0,0 +1,504 @@ +# 毛菜验收秤 — 系统流程与功能边界 + +> 创建时间:2026-06-11 | 最后更新:2026-06-12(候选卡片改造 + 无订单验收) + +--- + +## 一、硬件配置 + +| 组件 | 用途 | +|---|---| +| 触摸屏(尺寸待定) | 交互操作、信息确认、不合格处理 | +| 称重传感器 + 秤盘 | 自动读取重量(kg) | +| 食材识别摄像头 | AI 模型自动识别食材品种 | +| 人脸识别摄像头 | 操作人身份验证 | +| 场景监控摄像头 | 后台录像,全程静默监控,不参与前端交互 | + +> 无扫码器、无工牌读取器。设备共三个摄像头,各司其职。 + +--- + +## 一.1、人脸验证策略(关键逻辑) + +### 验证原则 + +**不持续监控人脸,仅在关键节点进行身份校验。** + +### 验证时机 + +| 时机 | 校验方式 | 本人 → | 换人 → | +|---|---|---|---| +| 欢迎页进入系统 | 人脸识别摄像头激活 | 进入功能菜单 | 无权使用,toast 提示 | +| 切换功能页面 | 从 A 功能页面点击跳转到 B 功能页面时触发 | 携带身份参数跳转 | 跳回 00 欢迎页重新验证 | +| 提交确认操作 | 点击「确认入库」等提交按钮时触发 | 正常提交 | toast 提示"请本人操作",阻止提交 | + +### 身份校验流程 + +``` +用户触发跳转/提交 + ↓ +调用摄像头捕获当前人脸 + ↓ +与进入系统时的身份对比 + ├─ 同一人 → 放行(继续操作) + └─ 不同人 → 拦截 + ├─ 跳转场景 → 跳回 00 欢迎页 + └─ 提交场景 → toast 提示"请本人操作" +``` + +### 摄像头职责分工 + +| 摄像头 | 显示位置 | 用途 | 是否交互 | +|---|---|---|---| +| 食材识别摄像头 | 验收/采样页面左列识别区 | AI 识别食材品种 | 是,展示识别结果可修正 | +| 人脸识别摄像头 | 仅在验证时调用,不常驻显示 | 关键节点身份校验 | 是,校验时短暂激活 | +| 场景监控摄像头 | 前端不展示,后台静默运行 | 全过程录像,记录所有操作行为 | 否,不参与前端交互 | + +### 页面摄像头展示 + +- **00 欢迎页**:仅展示人脸识别摄像头画面 +- **01 验收食材 / 04 食材采样**:左列展示食材识别画面(AI 识别中 → 显示识别结果) +- **场景监控摄像头不显示在页面上**,后台静默录制全程 + +### 操作行为记录(后台) + +所有操作行为均存储至后台,记录内容包括: + +| 记录内容 | 说明 | +|---|---| +| 操作人信息 | 姓名、工号、部门、职位 | +| 操作时间 | 每次操作的时间戳 | +| 操作类型 | 验收、采样、设置修改、提交等 | +| 操作数据 | 订单信息、食材名称、重量、验收结果、处置策略等 | +| 视频内容 | 场景监控摄像头全程录像,按操作时间索引关联 | + +--- + +## 二、食材采样流程(验收前置环节) + +> 采样是验收的前置环节,用于在正式验收前采集食材样本数据,为后续验收提供对比基准。 +> 从欢迎页点击「食材采样」进入(需先完成人脸识别)。 + +``` +Step S1: 从欢迎页点击「食材采样」进入(需先完成人脸识别) + ↓ +Step S2: 触摸屏展示该操作人关联的待采样订单列表 → 采样人选择目标订单 + ↓ +Step S3: 食材放上秤盘 → 秤体自动称重 + ↓ + 同时食材识别摄像头自动识别食材品种 + ↓ +Step S4: 系统自动匹配/生成溯源码 + 拉取订单配送信息 + ↓ +Step S5: 外观品级判定: + - 采样人选择外观品级(合格 / 不合格) + - AI 识别结果展示(可手动修正) + - 采样备注(可选填写) + ↓ +Step S6: 点击「保存采样」→ 记录采样数据 + - 采样编号(系统自动生成) + - 采样时间、操作人、食材品种 + - 采样重量(kg) + - 外观品级 + ↓ +Step S7: 采样完成 → 可选操作: + ├─ 继续采样(返回 Step S2) + └─ 进入验收流程 → 跳转至「三、验收流程」 +``` + +### 2.1 采样字段清单 + +| 字段 | 来源 | 说明 | +|---|---|---| +| 采样编号 | 系统自动生成 | 统一编号规则(SP-xxxx) | +| 溯源码 | 系统自动 | 自产:唯一/随机匹配;外采:自动生成 | +| 来源类型 | 系统自动 | 自产 / 外采 | +| 供应商 | 系统自动 | 从订单获取 | +| 食材名称 | AI识别(可手动修正) | 食材识别摄像头输出结果 | +| 采样重量(kg) | 秤体传感器 | 核心产出 | +| 采样时间 | 系统自动 | — | +| 操作人 | 人脸识别自动 | — | +| 外观品级 | 采样人选择 | 合格 / 不合格 | +| 采样备注 | 采样人输入(可选) | 文字描述 | + +--- + +## 三、验收食材流程 + +> 「验收食材」和「验收记录」为两个独立菜单。验收食材是验收操作流程,验收记录是历史数据查询。 + +### 流程概述 + +验收食材采用**分步向导**形式,在单页面内完成从选单到提交的全过程。 + +``` +Step 1: 选择订单 + 卡片布局,按预计到货时间从近到远排列 → 横滑浏览 → 点击卡片直接进入验收 + 页面右上角常驻「无订单验收」入口 + ↓ +Step 2: 食材识别 + 验收判定(同一页面) + ┌──────────────────────────────────────────────────────────┐ + │ 左列 │ 中列 │ 右列 │ + │ ·食材识别摄像头 │ ·订单信息(编号排第一) │ ·称重读数 │ + │ ·AI识别状态 │ ·当前验收食材展示 │ ·偏差信息 │ + │ ·识别结果(可修改) │ ·搜索框(常驻) │ ·验收结果 │ + │ │ ·候选食材卡片 3×2=6个 │ ·不合格处置 │ + │ │ (识别率88%~99%) │ ·操作按钮 │ + │ │ ·已验收食材列表(紧凑行) │ │ + └──────────────────────────────────────────────────────────┘ + 注:场景监控摄像头后台静默录制,页面不展示 + 交互: + · AI摄像头扫描 → 展示6个相似度最高候选食材(带识别率百分比) + · 操作人点击卡片选中食材 → 自动开始称重 + · 搜索框支持手动搜索食材(回车触发,结果替换候选区) + · 重量稳定 → 显示实重、偏差率、自动判定通过/不通过 + · 验收结果可手动修改(通过 ↔ 不通过) + · 同一食材多次选中 → 重量累计增加 + · 称重完成 → 自动进入下一轮候选展示 + · ~~不合格 → 唤起处置策略面板(折叠式)~~ **(暂时隐藏,后期恢复)** + · 重新识别 → 点击「🔄 重新识别」按钮可重置当前识别状态,清空候选列表并重新触发 AI 识别 + ↓ +~~Step 3: 处置策略(仅不合格时展开,折叠面板形式)~~ **(暂时隐藏,后期恢复)** + ~~处理方式 × 处理范围 × 退款重量 × 不合格原因~~ + ↓ +完成提交: + ├─ 提交并继续 → 保存后回到 Step 1 选下一个订单 + └─ 提交 → 保存后返回欢迎页 +``` + +### 核心规则 + +| 规则 | 说明 | +|---|---| +| **称重逻辑** | 操作人从候选卡片中选中食材后触发称重,不自动重置 | +| **同食材累计** | 同一食材可多次选中,重量累计增加 | +| **候选识别** | AI 摄像头扫描后推送 6 个相似度最高候选食材(识别率 88%~99%),3×2 网格卡片展示 | +| **手动搜索** | 搜索框常驻中列,输入关键词回车搜索食材库,结果替换候选区并标注"手动搜索" | +| **AI 编辑** | 可手动修改识别结果,修改时自动采集食材图片作为凭证 | +| **自动判定** | 称重稳定后对比偏差率阈值,自动判定通过/不通过,可手动修改 | +| **无订单验收** | 弹窗选择供应商(外采限定),食材不在弹窗中添加;进入验收后 AI 识别到什么就添加什么,同名食材累加重量,验收结果默认通过需手动切换 | +| **页面锁定** | 验收过程中禁止跳转其他功能,仅保留返回和提交入口 | +| **提交前提** | 订单中所有食材必须已验收完毕或有处置策略,否则提交按钮禁用;无订单模式下食材列表非空即可提交 | +| **删除** | 有订单模式:清空该食材验收记录回到未开始状态;无订单模式:从动态列表中彻底移除 | +| **卡片选择** | Step 1 采用卡片横向滑动布局,3 列显示,点击卡片或「进入验收」按钮直接进入验收 | + +### 订单-食材关系 + +一个订单包含多个食材(1对多)。订单选择后固定展示在页面顶部,食材按行显示验收状态: + +| 状态 | 含义 | +|---|---| +| 未开始 | 该食材尚未放上称重 | +| 部分完成 | 食材已称重但重量未达订单量 | +| 已完成 | 重量累计完成,验收结果已确定 | + +### 提交条件 + +所有食材必须满足以下条件之一才能提交: +- 已验收通过(重量验收完成 + 偏差率在阈值内) +- 已验收不通过(已填写处置策略) + +存在「未开始」或「部分完成」状态的食材时,提交按钮禁用。 + +### Step 1 订单卡片布局 + +| 排序规则 | 说明 | +|---|---| +| 按预计到货时间 | 从近到远排列(最近到货的排最前) | + +**卡片结构**(上下排列): +1. 顶部:供应商名称 + 订单编号(前置第一位) +2. 食材种类与具体名称(食材过多时点击标签弹窗展示) +3. 采购日期 + 预计到货日期 +4. ~~发货状态(全量发货 / 部分发货)~~ → **验收状态(未验收(绿) / 部分验收(橙))**(验收与发货无关,始终只判断是否全部验收通过)+ 采购人 +5. 底部:「进入验收」按钮(或点击整张卡片) + +**页面右上角**:常驻「无订单验收」按钮 + +**布局**:3 列卡片横向排列,支持横向滑动浏览。 + +### 验收页面布局 + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ 顶部栏:返回 | 标题(验收食材) | 操作人 │ +├──────┬──────────────────────────────────┬─────────────────────────┤ +│ 左列 │ 中列 │ 右列 │ +│ │ │ │ +│ 食材 │ 订单卡片(编号·供应商·发货人·来源·到货)│ 实时重量 XX.XX kg │ +│ 识别 │ │ 称重稳定指示灯 │ +│ 摄像 │ 当前验收食材(选中后显示) │ │ +│ 头画 │ 🥬 菠菜 实重 286.00 kg │ 偏差信息 │ +│ 面 │ │ 订单重量·累计实重·偏差率 │ +│ │ 🔍 搜索食材名称... │ │ +│ [预 │ │ 验收结果切换 │ +│ 览] │ │ [✓通过] [~~✗不通过~~] │ ← ✗ 暂时隐藏,后期恢复 +│ │ │ │ +│ [🔄 │ 智能识别候选(3×2网格卡片) │ ~~▼不合格处置(折叠)~~ │ ← 暂时隐藏,后期恢复 +│ 重新 │ ┌─────┬─────┬─────┐ │ ~~·处理方式 ·范围~~ │ +│ 识别] │ │菠菜 │土豆 │白菜 │ │ ~~·退款重量 ·原因~~ │ +│ │ │96% │93% │91% │ │ │ +│ │ ├─────┼─────┼─────┤ │ [称重清零] │ +│ │ │胡萝卜│猪里脊│西兰花│ │ │ +│ │ │89% │88% │90% │ │ [提交并继续] [提交] │ +│ │ └─────┴─────┴─────┘ │ │ +│ │ ▼已验收食材(紧凑行) │ │ +│ │ 菠菜·286.00·✓完成·🗑 │ │ +│ │ 白菜·210.00·✓完成·🗑 │ │ +│ │ │ │ +│ │ 注:场景监控后台静默录制,不展示 │ │ +└──────┴──────────────────────────────────┴─────────────────────────┘ +``` + +--- + +--- + +## 四、字段清单(秤端产出 → 对接毛菜入库) + +### 4.1 系统自动字段 + +| 字段 | 来源 | 说明 | +|---|---|---| +| 入库单号 | 后台生成 | 统一编号规则 | +| 溯源码 | 系统自动 | 自产:唯一/随机匹配;外采:自动生成 | +| 来源类型 | 系统自动 | 自产 / 外采(= 外部供应商) | +| 供应商 | 系统自动 | 从订单获取 | +| 入库规格 | 系统从订单获取 | — | +| 入库数量 | 系统从订单获取 | — | +| 入库时间 | 系统自动 | — | +| 操作人 | 人脸识别自动 | — | +| 订单重量(kg) | 系统从订单获取 | 采购订单中的配送重量 | +| 入库重量(kg) | 秤体传感器 | 核心产出 | +| 订单偏差(kg) | 系统计算 | \|订单重量 - 实重\| | +| 偏差率(%) | 系统计算 | 偏差 / 订单重量 × 100% | +| 偏差判定 | 系统判定 | 正常 / 超差(对比阈值) | +| 自动验收结果 | 系统判定 | 通过 / 不通过 | + +### 4.2 验收人录入字段 + +| 字段 | 来源 | 说明 | +|---|---|---| +| 食材名称 | AI识别(可手动修正) | 食材识别摄像头输出结果;手动修改时自动采集食材图片凭证 | +| 验收结果 | 系统自动 + 可手动修改 | 通过 / 不通过 | +| 外观品级 | 验收人选择 | 合格 / 不合格 | +| 食材图片 | 手动修改AI识别结果时自动采集 | 仅修改时拍摄,作为人工修正凭证 | +| 处理方式 | 验收人选择(仅不合格时) | 退货退款 / 仅退款 / 换货 | +| 处理范围 | 系统自动 + 可手动修改 | 部分 / 全部 | +| 退款重量(kg) | 系统自动计算 | 订单重量 - 秤体重量(部分时) | +| 不合格原因 | 验收人输入(仅不合格时) | 文字描述 | +| 处理说明 | 验收人输入(仅不合格时) | 补充备注 | + +### 4.3 采样历史字段(秤端本地存储) + +| 字段 | 说明 | +|---|---| +| 采样编号 | 唯一标识(SP-xxxx) | +| 采样时间 | 记录采样操作时间 | +| 操作人 | 采样操作人姓名 | +| 供应商 | 采样关联的供应商 | +| 食材名称 | AI 识别结果 | +| 采样重量(kg) | 采样时秤体重量 | +| 外观品级 | 合格 / 不合格 | +| 采样备注 | 可选文字备注 | + +### 4.4 后台分配字段(不经过秤端) + +| 字段 | 说明 | +|---|---| +| 存放区域 | 由毛菜库存柜进行信息流转,秤端不管 | +| 库存更新 | 入库成功后联动仓储管理 | +| 验收记录查询/导出 | 历史数据管理 | +| 采样记录查询/导出 | 历史采样数据管理 | +| 异常预警 | 偏差超阈值自动告警 | + +--- + +## 五、秤端 vs 后台职责划分 + +### 5.1 秤端(设备侧) + +| 职责 | 实现 | +|---|---| +| 欢迎页人脸识别 | 摄像头 + 模型,进入系统时验证一次 | +| 关键节点身份校验 | 切换页面/提交时调用摄像头校验,换人则拦截 | +| 选择待采样订单 | 触摸屏列表选择 | +| 选择待验收订单 | 触摸屏列表选择 | +| 称重计量 | 传感器自动读取 | +| AI识别食材品种 | 食材识别摄像头 + 模型,屏幕显示可修正 | +| 场景监控录像 | 后台静默录制全程,记录操作人、操作时间、视频内容 | +| 采样记录保存 | 一键保存采样数据 | +| 自动判定验收结果 | 对比偏差率阈值 | +| 验收结果手动修改 | 通过 ↔ 不通过可切换 | +| 外观品级判定 | 二选一:合格 / 不合格 | +| 不合格处置策略 | 三选一 + 部分/全部自动判定 | +| 不合格原因录入 | 文字输入(仅不合格时) | +| 确认入库 | 一键推送数据到后台 | + +### 5.2 后台(毛菜入库模块) + +| 职责 | 说明 | +|---|---| +| 订单数据拉取 | 从绿色种采-采供管理获取已填配送信息的订单 | +| 溯源码分配 | 自产唯一/随机匹配,外采自动生成 | +| 供应商类型映射 | 外部供应商 → 外采 | +| 入库单号生成 | 统一编号规则 | +| 偏差率阈值配置 | 设置中心可配置 | +| 库存联动 | 入库成功后更新仓储库存(由毛菜库存柜流转) | +| 采样记录管理 | 查询、导出、统计分析 | +| 验收记录管理 | 查询、导出、统计分析 | + +--- + +## 六、不合格处理方式明细 + +| 处理方式 | 处理范围 | 含义 | +|---|---|---| +| 退货退款 | 全部 | 全部退回供应商,全额退款 | +| 退货退款 | 部分 | 不合格部分退回,按比例退款 | +| 仅退款 | 全部 | 不退货,全额退款(供应商承担责任) | +| 仅退款 | 部分 | 不退货,按不合格比例退款 | +| 换货 | 全部 | 全部退回,供应商重新发货 | +| 换货 | 部分 | 不合格部分退回,补发合格品 | + +### 部分/全部自动判定规则 + +| 条件 | 自动判定 | 退款重量计算 | +|---|---|---| +| 秤体有重量(实重 > 0) | 部分 | 退款重量 = 订单重量 - 秤体重量 | +| 秤体无重量(实重 = 0 或空秤) | 全部 | 退款重量 = 订单重量 | + +> 验收人可手动修改处理范围(部分 ↔ 全部),修改后退款重量重新计算。 + +--- + +## 七、溯源码处理逻辑 + +| 场景 | 溯源码处理 | +|---|---| +| 内部供应(自产) | 系统根据菜品唯一匹配溯源码;同菜品多溯源码时随机匹配一个 | +| 外部采买(外采) | 系统自动生成溯源码(遵循 `ST-EX-xxx` 编码规则) | + +--- + +## 八、供应商来源类型映射 + +| 供应商类型 | 来源类型 | +|---|---| +| 外部供应商 | 外采 | +| 内部基地/自产 | 自产 | + +--- + +## 九、设置中心 — 偏差率阈值配置 + +| 配置项 | 说明 | +|---|---| +| 偏差率阈值(%) | 默认值待定义,验收人可自行修改。重量偏差率 ≤ 阈值 → 自动判定验收通过;> 阈值 → 自动判定验收不通过 | +| 配置位置 | 设置中心 | +| 生效范围 | 全局生效,所有验收秤共用同一阈值 | + +--- + +## 十、临时储位说明 + +秤端不负责存放区域分配。理论上存在**临时储位**概念,食材验收后暂存于某个临时位置,最终存储在哪里通过**毛菜库存柜**进行信息流转。秤端只需完成验收确认,后续储位分配由毛菜库存柜模块处理。 + +--- + +## 十一、页面映射关系 + +| 页面编号 | 文件名 | 页面名称 | 对应流程 | +|---|---|---|---| +| 00 | `00-welcome.html` | 欢迎页 | 人脸识别激活 + 菜单导航 | +| 01 | `01-verify-inspection.html` | 验收食材 | 验收流程(Step 1~8) | +| 02 | `02-settings.html` | 设置 | 偏差率阈值配置 | +| 03 | `03-verify-history.html` | 验收记录 | 验收历史查询 | +| 04 | `04-ingredient-sampling.html` | 食材采样 | 采样流程(Step S1~S7) | +| 05 | `05-sampling-history.html` | 采样历史 | 采样记录查询 | + +### 11.1 欢迎页流程 + +``` +┌───────────────────────────────────────┐ +│ 00 欢迎页 │ +│ 左侧:人脸识别区域 │ +│ · 点击激活人脸识别 │ +│ · 识别中 / 识别成功(显示姓名+工号) │ +│ 右侧:功能按钮列(需先识别身份) │ +│ · 验收食材 → 01-verify-inspection │ +│ · 验收记录 → 03-verify-history │ +│ · 食材采样 → 04-ingredient-sampling │ +│ · 采样历史 → 05-sampling-history │ +│ · 设置 → 02-settings │ +└───────────────────────────────────────┘ + +权限拦截规则: + 未识别身份时点击任意按钮 → Toast 提示 + "⚠️ 您无权使用该设备,请联系管理员添加权限" + 不跳转页面,停留在欢迎页 + +已识别身份时点击按钮: + 携带 user + uid 参数跳转目标页面 +``` + +### 11.2 页面跳转关系 + +``` +┌─────────────┐ 点击「验收食材」 +│ 00 欢迎页 │ ──────────────────→ ┌──────────────────┐ +│ ·人脸识别 │ │ 01 验收食材 │ +│ ·菜单导航 │ 点击「验收记录」 │ ·食材识别画面 │ +│ │ ──────────────────→ │ ·订单/称重/验收 │ +│ │ │ ·不合格处理 │ +└─────────────┘ └──┬──────────────┬┘ + │ 点击「采样」 │ 称重后确认 + ▼ ▼ + ┌──────────────┐ ┌──────────────┐ + │ 04 食材采样 │ │ 后台推送入库 │ + │ ·食材识别画面 │ └──────────────┘ + │ ·采样操作 │ + └──┬───────────┘ + │ 返回 + +跨功能页面切换 / 提交操作时: + 调用人脸摄像头校验身份 + ├─ 本人 → 放行 + └─ 换人 → 拦截(跳回首页 或 toast 提示) + +点击其他菜单(从欢迎页): + 点击「验收记录」→ 03-verify-history(验收历史查询) + 点击「食材采样」→ 04-ingredient-sampling(采样操作) + 点击「采样历史」→ 05-sampling-history(采样记录查询) + 点击「设置」→ 02-settings(阈值配置) + +各子页面返回: + 01 验收食材 → 返回 00 欢迎页 + 03 验收记录 → 返回 00 欢迎页 + 04 食材采样 → 返回 00 欢迎页 + 05 采样历史 → 返回 00 欢迎页 + 02 设置 → 返回 00 欢迎页 +``` + +--- + +## 十二、核心业务线路中的位置 + +``` +绿色种采-采供管理(填配送信息) + ↓ + 毛菜验收秤(本模块) + ├─ 欢迎页(人脸识别 + 菜单导航) + │ ├─ 验收食材 → 验收操作 → 入库 + │ ├─ 验收记录 → 历史查询 + │ ├─ 食材采样(前置环节)→ 可转验收 + │ ├─ 采样历史 → 历史查询 + │ └─ 设置 → 阈值配置 + └─ 毛菜入库(后台建档) + ↓ + 卫生检测 + ↓ + 仓储管理 → 毛菜库存柜(储位分配) + ↓ + 净菜加工 → ... +``` diff --git a/other-module/canteen-device/raw-veg-inspection-scale/index.html b/other-module/canteen-device/raw-veg-inspection-scale/index.html index 99c2f59..93bd3ea 100644 --- a/other-module/canteen-device/raw-veg-inspection-scale/index.html +++ b/other-module/canteen-device/raw-veg-inspection-scale/index.html @@ -10,26 +10,97 @@ font-family: -apple-system, "Microsoft YaHei", "PingFang SC", sans-serif; background: #0e1326; color: #fff; width: 1280px; height: 720px; overflow: hidden; } - .top-bar { display: flex; align-items: center; height: 44px; background: #1a2b4a; padding: 0 20px; } - .back-btn { font-size: 14px; cursor: pointer; color: rgba(255,255,255,0.7); text-decoration: none; transition: color 0.2s; } - .back-btn:hover { color: #fff; } - .top-bar__title { flex: 1; text-align: center; font-size: 15px; font-weight: 600; color: rgba(255,255,255,0.85); } - .main { display: flex; align-items: center; justify-content: center; height: calc(100% - 44px); } - .placeholder { text-align: center; color: rgba(255,255,255,0.3); } - .placeholder__icon { font-size: 48px; margin-bottom: 16px; } - .placeholder__text { font-size: 14px; } + .top-bar { + display: flex; align-items: center; height: 44px; background: #1a2b4a; padding: 0 20px; + } + .top-bar__title { + flex: 1; text-align: center; font-size: 15px; font-weight: 600; color: rgba(255,255,255,0.85); + } + .main-content { + display: grid; grid-template-columns: 1fr 1fr; gap: 16px 20px; + padding: 24px 40px; height: calc(100% - 44px); align-content: center; + } + .card { + display: flex; align-items: center; gap: 20px; padding: 24px 28px; + background: #1a2b4a; border-radius: 14px; text-decoration: none; cursor: pointer; + transition: all 0.2s; border: 1px solid rgba(255,255,255,0.06); + } + .card:hover { + transform: translateY(-2px); box-shadow: 0 8px 24px rgba(0,0,0,0.3); + border-color: rgba(74,144,217,0.3); + } + .card__icon { font-size: 28px; width: 40px; text-align: center; flex-shrink: 0; } + .card__info { flex: 1; } + .card__title { font-size: 16px; font-weight: 600; color: #fff; margin-bottom: 4px; } + .card__desc { font-size: 12px; color: rgba(255,255,255,0.5); } + .card__arrow { font-size: 18px; color: rgba(255,255,255,0.4); flex-shrink: 0; } +
- ◀ 返回 - 毛菜验收秤 + ◀ 返回 + 毛菜验收秤
-
-
-
🚧
-
毛菜验收秤 页面待开发
-
+ +
+ + 🔐 +
+
员工登录
+
人脸识别、账号密码登录
+
+ +
+ + 📋 +
+
功能菜单
+
验收食材、验收记录、食材采样、采样历史、设置
+
+ +
+ + ⚖️ +
+
验收操作
+
订单选择、称重验收、不合格处置
+
+ +
+ + 🔍 +
+
食材采样
+
采样操作、外观品级判定、保存采样
+
+ +
+ + 📋 +
+
采样历史
+
采样记录查看与筛选
+
+ +
+ + 📝 +
+
验收记录
+
历史验收记录查看与详情
+
+ +
+ + ⚙️ +
+
设置
+
偏差率阈值配置、设备状态
+
+ +
+ - \ No newline at end of file + diff --git a/other-module/canteen-device/raw-veg-processing-scale/00-login.html b/other-module/canteen-device/raw-veg-processing-scale/00-login.html new file mode 100644 index 0000000..4946f93 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/00-login.html @@ -0,0 +1,303 @@ + + + + + + 加工毛菜秤 - 登录 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 加工毛菜秤 - 员工登录 +
+ + + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/00-welcome.html b/other-module/canteen-device/raw-veg-processing-scale/00-welcome.html new file mode 100644 index 0000000..921c299 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/00-welcome.html @@ -0,0 +1,239 @@ + + + + + + 加工毛菜秤 - 功能菜单 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 加工毛菜秤 - 功能菜单 + -- + +
+ + + +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/01-washing-tasks.html b/other-module/canteen-device/raw-veg-processing-scale/01-washing-tasks.html new file mode 100644 index 0000000..de0a2fa --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/01-washing-tasks.html @@ -0,0 +1,440 @@ + + + + + + 加工毛菜秤 - 今日任务 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 今日清洗任务 + -- + +
+ +
+ +
+
+ 待处理 + 2 +
+
+ 已完成 + 1 +
+ + +
+ + +
+ +
+ + +
+
+
+ RW-20260613-001 + 待处理 +
+ +
+
+
+
+
🥒
+ 黄瓜 + 需 4.0 斤 + 截止 10:00 +
+
+
+ 土豆 + 需 5.0 斤 + 截止 10:30 +
+
+
🍅
+ 西红柿 + 需 3.5 斤 + 截止 11:00 +
+
+
+
+ + +
+
+
+ RW-20260613-002 + 待处理 +
+ +
+
+
+
+
🥕
+ 胡萝卜 + 需 2.0 斤 + 截止 11:30 +
+
+
🍅
+ 小番茄 + 需 1.5 斤 + 截止 14:00 +
+
+
+
+ + +
+
+
+ RW-20260613-003 + 已完成 +
+ ✓ 已完成 +
+
+
+
+
🥬
+ 大白菜 + 需 8.0 斤 + 截止 09:30 +
+
+
🥬
+ 娃娃菜 + 需 2.5 斤 + 截止 10:00 +
+
+
+ 土豆(晚餐) + 需 3.0 斤 + 截止 15:00 +
+
+
+
+ +
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/02-batch-weighing.html b/other-module/canteen-device/raw-veg-processing-scale/02-batch-weighing.html new file mode 100644 index 0000000..5bede9a --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/02-batch-weighing.html @@ -0,0 +1,973 @@ + + + + + + 加工毛菜秤 - 来料过秤 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 来料过秤(清洗前) + -- + +
+ +
+ +
+ + + + +
+ 当前批次 + LC-20260613-001 + 已录入 0 +
+ + +
+ 实时采样区预览 +
+
+
+
+
+ + +
+ + 就绪,等待食材放置 +
+ + + + + + + +
+
+ 智能识别候选 +
+
+
+
📷
+
等待食材放置后自动识别
+
+
+ + +
+ 溯源码 + -- + +
+ + +
+ 0.00 + +
请放置食材至秤台
+
+
+ + +
+ +
+
+
0
+
品类数
+
+
+
0.0
+
总重量(斤)
+
+
+
0
+
已匹配溯源
+
+
+ + +
+
+ 本批次清单 + 共 0 条 +
+
+
+
📭
+
尚未录入,请依次放置食材
+
+
+
+ + +
+ 待全部食材称重完成后提交 + +
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/02-weighing.html b/other-module/canteen-device/raw-veg-processing-scale/02-weighing.html new file mode 100644 index 0000000..d916137 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/02-weighing.html @@ -0,0 +1,587 @@ + + + + + + 加工毛菜秤 - 称重录入 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 称重录入 + -- +
+ +
+ +
+ +
+
+ 当前任务 + 切换任务 +
+
+
🥔
+
+
土豆
+
+ 午餐 | 截止 10:30 +
+
+
+
+
+
+ 3.0/5.0斤 +
+
+
+ + +
+ +
+
📇
+
+
AI 识别结果
+
等待放置食材...
+
+
+ 待机 +
+ + +
+ 0.00 + +
请将食材放置秤上
+
+ + +
+ + +
+
+
+ + +
+ +
+
+
5
+
今日称重次数
+
+
+
15.6
+
总重量(斤)
+
+
+
3
+
完成品类
+
+
+ + +
+
+ 本次操作记录 + 共 0 条 +
+
+
+
📭
+
暂无称重记录
+
+
+
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/03-batch-washing.html b/other-module/canteen-device/raw-veg-processing-scale/03-batch-washing.html new file mode 100644 index 0000000..eb5eaed --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/03-batch-washing.html @@ -0,0 +1,725 @@ + + + + + + 加工毛菜秤 - 净菜过秤 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 净菜过秤(清洗后) + -- +
+ +
+ +
+ +
+ 当前批次 + JC-20260613-001 + 已录入 0 +
+ + +
+ 实时采样区预览 +
+
+
+
+
+ + +
+ + 就绪,等待食材放置 +
+ + + + + +
+
+ 智能识别候选 +
+
+
+
📷
+
等待食材放置后自动识别
+
+
+ + +
+ 溯源码 + -- + +
+ + +
+ 0.00 + +
请放置食材至秤台
+
+
+ + +
+ +
+
+
0
+
品类数
+
+
+
0.0
+
总重量(斤)
+
+
+
0
+
已匹配溯源
+
+
+ + +
+
+ 本批次清单 + 共 0 条 +
+
+
+
📭
+
尚未录入,请依次放置清洗后食材
+
+
+
+ + +
+ 全部录入完成后提交本批次 + +
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/03-washing.html b/other-module/canteen-device/raw-veg-processing-scale/03-washing.html new file mode 100644 index 0000000..b47ff41 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/03-washing.html @@ -0,0 +1,521 @@ + + + + + + 加工毛菜秤 - 清洗操作 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 清洗操作 + -- +
+ +
+ +
+ +
+
+
🥔
+
+
土豆
+
+ 重量: 2.35斤 + 午餐 +
+
+
批次 #20260613-001
+
+ + +
+
+
水温
+
18°C
+
+
+
清洗时长
+
8分钟
+
+
+
水流强度
+
中等
+
+
+
消毒液浓度
+
50ppm
+
+
+
+ + +
+ +
+ + + + +
+
0%
+
等待开始
+
+
+ + +
+
+
💧
+
浸泡
+
+
+
🌊
+
冲洗
+
+
+
+
消毒
+
+
+
🌬
+
沥水
+
+
+ + +
+ + + +
+
+
+ + +
+ +
+
+
3
+
今日已清洗
+
+
+
12.5斤
+
总重量
+
+
+
100%
+
合格率
+
+
+ + +
+
+ 待清洗队列 + 共 4 项 +
+
+
+
🍅
+
+
西红柿
+
2.8斤
+
+ 待清洗 +
+
+
🥒
+
+
黄瓜
+
3.2斤
+
+ 待清洗 +
+
+
🥕
+
+
胡萝卜
+
1.8斤
+
+ 待清洗 +
+
+
🥬
+
+
大白菜
+
4.5斤
+
+ 待清洗 +
+
+
+
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/04-history.html b/other-module/canteen-device/raw-veg-processing-scale/04-history.html new file mode 100644 index 0000000..5928d31 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/04-history.html @@ -0,0 +1,486 @@ + + + + + + 加工毛菜秤 - 操作记录 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 操作记录 + -- + +
+ +
+ +
+ + 2026-06-13 + +
+ + +
+
+ 全部8 +
+
+ 来料过秤8 +
+
+ + +
+
+
总操作次数
+
8
+
+
+
总重量(斤)
+
33.3
+
+
+ + +
+
📅
+
该日期暂无操作记录
+
仅展示当日(2026-06-13)的过秤数据
+
+ + +
+ +
+
🥔
+
+
土豆
+
LC-20260613-001
+
+
来料过秤
+
+ 5.2 + +
+
+
溯源码
+
SC202606130001
+
+
+
张三
+
09:15
+
+
+ + +
+
🍅
+
+
西红柿
+
LC-20260613-001
+
+
来料过秤
+
+ 3.8 + +
+
+
溯源码
+
SC202606130002
+
+
+
张三
+
09:18
+
+
+ + +
+
🥬
+
+
大白菜
+
LC-20260613-001
+
+
来料过秤
+
+ 8.2 + +
+
+
溯源码
+
SC202606130003
+
+
+
张三
+
09:22
+
+
+ + +
+
🥕
+
+
胡萝卜
+
LC-20260613-001
+
+
来料过秤
+
+ 2.5 + +
+
+
溯源码
+
SC202606130004
+
+
+
张三
+
09:25
+
+
+ + +
+
🥒
+
+
黄瓜
+
LC-20260613-002
+
+
来料过秤
+
+ 4.3 + +
+
+
溯源码
+
SC202606130005
+
+
+
张三
+
10:05
+
+
+ + +
+
🥬
+
+
娃娃菜
+
LC-20260613-002
+
+
来料过秤
+
+ 2.6 + +
+
+
溯源码
+
SC202606130006
+
+
+
张三
+
10:08
+
+
+ + +
+
🥔
+
+
土豆
+
LC-20260613-003
+
+
来料过秤
+
+ 3.2 + +
+
+
溯源码
+
SC202606130007
+
+
+
张三
+
14:10
+
+
+ + +
+
🍅
+
+
西红柿
+
LC-20260613-003
+
+
来料过秤
+
+ 3.5 + +
+
+
溯源码
+
SC202606130008
+
+
+
张三
+
14:15
+
+
+ +
+ + +
+ 共 8 条记录 +
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/05-settings.html b/other-module/canteen-device/raw-veg-processing-scale/05-settings.html new file mode 100644 index 0000000..27a1de5 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/05-settings.html @@ -0,0 +1,226 @@ + + + + + + 加工毛菜秤 - 设备设置 | 蚁熊智能餐养平台 + + + + +
+ ◀ 返回 + 设备设置 + -- + +
+ +
+ +
+ + +
+ + +
+ +
+
设备信息
+ +
+
+
设备名称
+
加工毛菜秤-01
+
+
+
设备编号
+
GJMC-2026-001
+
+
+
固件版本
+
v2.3.1
+
+
+
AI模型版本
+
veg-ai-v4.2
+
+
+
设备状态
+
在线
+
+
+
网络状态
+
已连接
+
+
+
上次校准
+
2026-06-10
+
+
+
累计使用
+
186天
+
+
+
+ + + +
+
+ +
+ + + + diff --git a/other-module/canteen-device/raw-veg-processing-scale/doc/CHANGELOG.md b/other-module/canteen-device/raw-veg-processing-scale/doc/CHANGELOG.md new file mode 100644 index 0000000..db25692 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/doc/CHANGELOG.md @@ -0,0 +1,19 @@ +# 加工毛菜秤 CHANGELOG + +## [2026-06-15] feat: 新增重新识别按钮 + +### 新增 +- **重新识别按钮**(`02-batch-weighing.html`):AI 识别区新增「🔄 重新识别」按钮(位于识别状态下方),点击后重置称重状态、清空候选列表并重新触发 AI 识别。 + +--- + +## [1.0.0] - 2026-06-13 + +### 新增 +- 首次创建加工毛菜秤模块(6个页面) +- `00-welcome.html` — 欢迎页:人脸识别+账号密码登录+功能菜单 +- `01-washing-tasks.html` — 今日清洗任务列表:任务卡片、状态筛选、进度展示 +- `02-weighing.html` — 称重录入:AI识别品类、实时称重、任务匹配/不匹配Toast提示、手动确认提交 +- `03-washing.html` — 清洗操作:圆形进度、四阶段(浸泡/冲洗/消毒/沥水)、清洗参数展示、待清洗队列 +- `04-history.html` — 清洗记录:日期/食材/餐别筛选、统计卡片、表格记录、分页 +- `05-settings.html` — 设备设置:清洗参数/AI识别/秤参数/设备信息/关于 五个配置区 diff --git a/other-module/canteen-device/raw-veg-processing-scale/doc/PRD.docx b/other-module/canteen-device/raw-veg-processing-scale/doc/PRD.docx new file mode 100644 index 0000000..913313b Binary files /dev/null and b/other-module/canteen-device/raw-veg-processing-scale/doc/PRD.docx differ diff --git a/other-module/canteen-device/raw-veg-processing-scale/doc/UI-BRIEF.docx b/other-module/canteen-device/raw-veg-processing-scale/doc/UI-BRIEF.docx new file mode 100644 index 0000000..a75de11 Binary files /dev/null and b/other-module/canteen-device/raw-veg-processing-scale/doc/UI-BRIEF.docx differ diff --git a/other-module/canteen-device/raw-veg-processing-scale/doc/flow.md b/other-module/canteen-device/raw-veg-processing-scale/doc/flow.md new file mode 100644 index 0000000..8cfc330 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/doc/flow.md @@ -0,0 +1,184 @@ +# 加工毛菜秤 — 业务流程文档 + +> 创建时间:2026-06-15 + +--- + +## 一、整体业务流程 + +后台定时整合毛菜加工任务,推送到终端设备;终端自动检测新任务并提示,员工按需进入处理,完成称重录入后任务自动标记为已完成。 + +``` +后台系统 + │ + │ 定时整合加工任务,推送到终端 + ▼ +00-welcome(欢迎页) + │ + │ 定时轮询(每 30 秒) + ├─ 无新任务 → 按钮静默,正常等待 + └─ 有新任务 → 按钮蓝色边框 + 脉冲动画 + 数量角标 + Toast:「⚡ 新任务已到达」 + ↓ +员工点击「今日清洗任务」 + ↓ +01-washing-tasks(今日任务页) + │ 进入时立即拉取任务列表 + │ 之后每 30 秒自动刷新检测增量任务 + │ 新任务到达 → Toast 提示 + 新卡片高亮 3 秒 + │ + │ 以「任务单」为单位展示(一个任务单含多行食材) + │ 每行食材:名称 + 需求量 + 截止时间(超时标红) + │ 每个任务单卡片底部含「处理」按钮 + │ 已完成任务单:卡片灰化 + ✓ 已完成 标记 + ↓ +员工点击某任务单「处理」 + ↓ +02-batch-weighing?user=xxx&taskNo=RW-xxx + │ 左侧:AI 识别 + 称重区 + │ 右侧:批次清单 + 任务信息条 + │ 任务信息条:关联任务号 | 应录入 X 斤 | 已录入 X 斤(实时更新) + │ + │ 操作流程: + │ ① 按任务单取货,放上秤盘 + │ ② AI 自动识别食材 → 自动匹配溯源码 → 自动录入 + │ ③ 重复①②,直到本批次全部录入 + │ ④ 点击「提交本批次」→ 提交成功 + ↓ +自动返回 01-washing-tasks + └─ 该任务状态更新为「已完成」 +``` + +--- + +## 二、任务推送机制 + +### 2.1 推送流程 + +``` +后台系统(定时任务) + │ + │ 每隔 N 分钟整合一次加工任务 + ▼ +任务推送接口(POST /api/tasks/push) + │ + │ 推送到终端设备(HTTP 长轮询 / WebSocket) + ▼ +终端接收任务 + │ + ├─ 00-welcome 轮询:每 30 秒 GET /api/tasks/pending + │ └─ 有待处理任务 → 更新按钮状态 + │ + └─ 01-washing-tasks 轮询:每 30 秒 GET /api/tasks/today + └─ 有新增任务 → 追加到列表 + Toast 提示 +``` + +### 2.2 终端检测策略 + +| 页面 | 轮询间隔 | 检测接口 | 响应行为 | +|------|---------|---------|---------| +| 00-welcome | 30 秒 | `/api/tasks/pending` | 按钮变色 + 脉冲动画 + 角标 + Toast | +| 01-washing-tasks | 30 秒 | `/api/tasks/today` | 追加新任务卡片 + Toast + 高亮入场 | + +### 2.3 任务状态流转 + +``` +待处理(pending) + │ 员工点击「处理」→ 进入录入 + ▼ +进行中(processing) + │ 员工提交本批次 + ▼ +已完成(completed) + │ 01 任务列表自动刷新 + └─ 卡片灰化 + ✓ 标记 +``` + +--- + +## 三、页面职责与交互 + +### 3.1 00-welcome(欢迎页) + +**职责**:员工登录 + 任务到达提示入口 + +**关键行为**: +- 登录成功后启动定时轮询(每 30 秒) +- 「今日清洗任务」按钮状态: + - 无待处理任务:默认样式,正常可点击 + - 有待处理任务:蓝色边框 + 脉冲动画 + 右上角数量角标 +- 新任务到达时 Toast 提示「⚡ 新任务已到达」 + +### 3.2 01-washing-tasks(今日任务页) + +**职责**:任务列表展示 + 任务入口 + +**任务单卡片结构**: +| 区域 | 内容 | +|------|------| +| 头部 | 任务单编号(左)+ 状态徽章(右) | +| 主体 | 多行食材,每行:食材图标 + 名称 + 需求量 + 截止时间(超时标红) | +| 底部 | 「处理」按钮(右对齐,仅待处理任务单显示) | + +**关键行为**: +- 进入时立即拉取最新任务列表 +- 之后每 30 秒自动刷新,检测增量任务 +- 新任务到达:Toast 提示,新卡片高亮 3 秒后恢复正常 +- 任务完成后刷新列表,该任务单标记为「已完成」(灰化 + ✓) + +### 3.3 02-batch-weighing(来料过秤页) + +**职责**:核心称重录入操作 + +**任务信息条**(从 01 携带 taskNo 进入时显示): + +``` +关联任务 RW-20260613-001 | 应录入 5.0 斤 | 已录入 0.0 斤 +``` + +| 字段 | 颜色 | 数据来源 | +|------|------|---------| +| 关联任务 | 蓝色 | URL 参数 taskNo | +| 应录入 | 橙色 `#faad14` | 任务数据(后台推送) | +| 已录入 | 绿色 `#52c41a` | 实时称重累计(页面内更新) | + +--- + +## 四、任务数据结构 + +```javascript +// 任务单数据示例(后台推送格式) +{ + taskNo: "RW-20260613-001", // 任务单编号 + status: "pending", // pending / processing / completed + ingredients: [ // 食材行列表(按截止时间排序) + { name: "黄瓜", requiredWeight: 4.0, deadline: "10:00" }, + { name: "土豆", requiredWeight: 5.0, deadline: "10:30" }, + { name: "西红柿", requiredWeight: 3.5, deadline: "11:00" }, + ] +} +``` + +**任务编号格式**:`RW-YYYYMMDD-NNN`(RW = 任务,当日 3 位序号) + +--- + +## 五、页面跳转关系总览 + +``` +00-welcome(欢迎页) + │ + ├─ 今日清洗任务 → 01-washing-tasks(携带 user) + │ │ + │ ├─ 点击「处理」→ 02-batch-weighing(携带 user + taskNo) + │ │ │ + │ │ └─ 提交本批次 → 返回 01(任务标记已完成) + │ │ + │ └─ 定时刷新(每 30 秒,检测增量任务) + │ + ├─ 来料过秤 → 02-batch-weighing(无 taskNo) + │ + ├─ 操作记录 → 04-history + │ + └─ 设备设置 → 05-settings +``` diff --git a/other-module/canteen-device/raw-veg-processing-scale/doc/gen_prd.py b/other-module/canteen-device/raw-veg-processing-scale/doc/gen_prd.py new file mode 100644 index 0000000..8606234 --- /dev/null +++ b/other-module/canteen-device/raw-veg-processing-scale/doc/gen_prd.py @@ -0,0 +1,354 @@ +# -*- coding: utf-8 -*- +"""将 PRD.md 转换为 Word 文档""" +from docx import Document +from docx.shared import Pt, Cm, RGBColor +from docx.enum.table import WD_TABLE_ALIGNMENT +from docx.oxml.ns import qn + +doc = Document() + +# 页面边距 +for section in doc.sections: + section.top_margin = Cm(2.54) + section.bottom_margin = Cm(2.54) + section.left_margin = Cm(3.18) + section.right_margin = Cm(3.18) + +def set_run(run, size=10.5, bold=False, color=None): + run.font.size = Pt(size) + run.bold = bold + run.font.name = "微软雅黑" + run._element.rPr.rFonts.set(qn("w:eastAsia"), "微软雅黑") + if color: + run.font.color.rgb = RGBColor(*color) + +def h1(text): + h = doc.add_heading(text, level=1) + for r in h.runs: + r.font.name = "微软雅黑" + r._element.rPr.rFonts.set(qn("w:eastAsia"), "微软雅黑") + +def h2(text): + h = doc.add_heading(text, level=2) + for r in h.runs: + r.font.name = "微软雅黑" + r._element.rPr.rFonts.set(qn("w:eastAsia"), "微软雅黑") + +def h3(text): + h = doc.add_heading(text, level=3) + for r in h.runs: + r.font.name = "微软雅黑" + r._element.rPr.rFonts.set(qn("w:eastAsia"), "微软雅黑") + +def p(text, bold=False, size=10.5, color=None, indent=False): + para = doc.add_paragraph() + run = para.add_run(text) + set_run(run, size, bold, color) + if indent: + para.paragraph_format.first_line_indent = Cm(0.74) + return para + +def bullet(text): + para = doc.add_paragraph(style="List Bullet") + para.clear() + run = para.add_run(text) + set_run(run, 10.5) + return para + +def table(headers, rows): + t = doc.add_table(rows=1 + len(rows), cols=len(headers)) + t.style = "Light Grid Accent 1" + t.alignment = WD_TABLE_ALIGNMENT.CENTER + for i, h in enumerate(headers): + cell = t.rows[0].cells[i] + cell.text = "" + run = cell.paragraphs[0].add_run(h) + set_run(run, 10, bold=True) + for ri, row in enumerate(rows): + for ci, val in enumerate(row): + cell = t.rows[ri + 1].cells[ci] + cell.text = "" + run = cell.paragraphs[0].add_run(str(val)) + set_run(run, 9.5) + doc.add_paragraph() # 表后空行 + +def note(text): + para = doc.add_paragraph() + run = para.add_run(text) + set_run(run, 9.5, color=(102, 102, 102)) + return para + +# ========== 正文 ========== + +doc.add_heading("加工毛菜秤 — 产品需求文档", level=0) +for r in doc.paragraphs[0].runs: + r.font.name = "微软雅黑" + r._element.rPr.rFonts.set(qn("w:eastAsia"), "微软雅黑") + +note("模块位置:other-module/canteen-device/raw-veg-processing-scale/") + +# ===== 一、模块概述 ===== +h1("一、模块概述") +p( + "加工毛菜秤是食堂后厨加工间的称重设备(1280x720 PAD),核心功能覆盖员工登录、" + "今日清洗任务查看、来料过秤(AI 图像识别 + 称重 + 溯源码自动匹配)、操作记录查询、" + "设备参数配置等。设备仅处理「清洗前」的来料过秤环节,不涉及净菜过秤。", + indent=True +) + +h2("1.1 页面导航结构") +table( + ["起点", "终点", "触发条件"], + [ + ["00 欢迎页", "01 今日清洗任务", "登录成功 → 今日任务(携带 user)"], + ["00 欢迎页", "02 来料过秤", "登录成功 → 来料过秤"], + ["00 欢迎页", "04 操作记录", "登录成功 → 操作记录"], + ["00 欢迎页", "05 设备设置", "登录成功 → 设备设置"], + ["01 今日任务", "02 来料过秤", "任务卡片「处理」按钮(携带 user + taskNo)"], + ["02 来料过秤", "01 今日任务", "提交本批次 → 自动返回并刷新列表"], + ["01/02/04/05", "00 欢迎页", "返回 / 退出登录"], + ] +) + +h2("1.3 任务推送与整体业务流程") +p("后台定时整合毛菜加工任务并推送到终端,终端自动检测并提示,员工按需进入处理。", indent=True) +p("完整流程:", bold=True) +bullet("1. 后台定时整合任务,推送到终端设备") +bullet("2. 00 欢迎页:定时轮询(每 30 秒)检测新任务") +bullet("3. 检测到待处理任务 → 今日任务按钮变色(蓝色边框 + 脉冲动画)+ 显示任务数量角标") +bullet("4. 员工点击「今日清洗任务」→ 进入 01 任务列表") +bullet("5. 01 任务列表:以任务单为单位展示,每个任务单含多行食材,底部含「处理」按钮") +bullet("6. 员工点击某任务单「处理」→ 跳转 02 来料过秤(携带 taskNo)") +bullet("7. 02 页面自动加载任务数据(显示应录入重量),按任务单取货、上秤、AI 识别、逐项录入") +bullet("8. 提交本批次 → 自动返回 01 → 该任务标记为已完成") +p("新任务推送提示:", bold=True) +bullet("00 欢迎页:按钮脉冲动画 + 角标数字,Toast「⚡ 新任务已到达」") +bullet("01 任务列表:新任务到达时 Toast 提示,新卡片高亮 3 秒后恢复") + +h2("1.2 状态流转") +p("详见 Mermaid 状态图(PRD.md 第 1.2 节)。") + +# ===== 二、角色定义 ===== +h1("二、角色定义") +table( + ["角色", "说明", "权限"], + [ + ["清洗员", "加工车间员工,负责来料过秤", "登录、查看任务、来料过秤、查看操作记录"], + ["质检员", "质检部门员工", "登录、查看操作记录、设备设置"], + ] +) + +h2("2.1 登录方式") +table( + ["方式", "说明"], + [ + ["人脸识别", "点击激活 -> 2 秒识别动画 -> 随机匹配模拟用户 -> 登录成功"], + ["账号密码", "输入员工工号 + 密码 -> 校验通过 -> 登录成功"], + ] +) + +h2("2.2 模拟用户数据") +table( + ["姓名", "工号", "员工ID", "部门", "角色"], + [ + ["张三", "10001", "EMP-20260001", "加工车间", "清洗员"], + ["李四", "10002", "EMP-20260015", "加工车间", "清洗员"], + ["王五", "10003", "EMP-20260023", "质检部", "质检员"], + ] +) + +# ===== 三、页面清单 ===== +h1("三、页面清单") +table( + ["序号", "文件", "页面名称", "说明"], + [ + ["1", "00-welcome.html", "欢迎页面", "员工登录 + 功能菜单入口"], + ["2", "01-washing-tasks.html", "今日清洗任务", "当日待处理任务列表,含流程环节指示"], + ["3", "02-batch-weighing.html", "来料过秤", "AI 识别 + 称重 + 溯源码匹配 + 批次录入"], + ["4", "04-history.html", "操作记录", "过秤操作流水记录,支持日期/类型筛选"], + ["5", "05-settings.html", "设备设置", "清洗参数、AI 识别、秤参数、设备信息配置"], + ] +) + +# ===== 四、逐页说明 ===== +h1("四、逐页说明") + +# 4.1 +h2("4.1 欢迎页面") +note("文件:00-welcome.html") +h3("功能说明") +p("设备开机后的首个页面,提供员工登录和功能菜单两大区域。") +bullet("顶部导航栏:返回按钮(返回餐线设备导航页)+ 页面标题「加工毛菜秤」") +bullet("左侧登录面板(420px 宽):登录方式切换 Tab、人脸识别区、账号密码表单") +bullet("右侧功能菜单(4 个按钮):今日任务、来料过秤、操作记录、设备设置") +bullet("「今日任务」按钮支持自动刷新:每 30 秒轮询一次后台任务推送接口") +note("注:欢迎页本身即为登录页,无需「退出登录」按钮。") + +h3("业务规则") +bullet("未登录状态下,4 个菜单按钮均为禁用态(opacity: 0.4,不可点击)") +bullet("登录成功后按钮启用,顶部显示「当前用户:XXX」") +bullet("人脸识别为模拟流程:点击后 2 秒随机匹配一个模拟用户") +bullet("账号密码校验:匹配模拟用户数据中的工号和密码") +bullet("「今日任务」按钮自动刷新:每 30 秒检测一次是否有新任务到达") +bullet("有待处理任务时:按钮边框变蓝色 + 脉冲动画,右上角显示任务数量角标") +bullet("新任务到达时:Toast 提示「⚡ 新任务已到达」") + +h3("交互说明") +bullet("点击「人脸识别」/「账号密码」Tab 切换登录方式") +bullet("点击人脸识别圆形框激活识别 -> 2 秒后登录成功 -> Toast「欢迎,XXX」") +bullet("输入工号密码后点击「登录」-> 校验通过 -> 登录成功 / 校验失败 -> Toast「工号或密码错误」") +bullet("点击菜单按钮 -> 未登录时 Toast「请先登录」-> 登录后跳转对应页面(URL 携带 user 和 uid 参数)") +bullet("「今日任务」按钮:有待处理任务时边框蓝色脉冲 + 角标显示数量,点击跳转 01(携带 user)") + +# 4.2 +h2("4.2 今日清洗任务") +note("文件:01-washing-tasks.html") +h3("功能说明") +p("展示当日系统分配的毛菜清洗任务列表,以「任务单」为单位组织。") +bullet("顶部操作区:状态筛选 Tab(待处理橙色/已完成绿色)+ 「退出登录」按钮") +bullet("每个任务单卡片含多行食材,每行:食材图标 + 名称 + 需求量 + 截止时间(超时标红)") +bullet("任务单卡片头部显示任务单编号(左)+ 状态徽章(右)") +bullet("每个任务单卡片底部含「处理」按钮(右对齐),点击跳转来料过秤页(URL 携带 user + taskNo)") +bullet("已完成任务单卡片:整体灰化,底部显示「✓ 已完成」标记") +bullet("页面进入时自动拉取任务列表,之后每 30 秒自动刷新一次检测增量任务") + +h3("业务规则") +bullet("模拟 3 个任务单:2 个待处理 + 1 个已完成") +bullet("任务编号格式:RW-YYYYMMDD-NNN") +bullet("新任务到达时 Toast 提示,新任务单卡片高亮 3 秒后恢复正常样式") +bullet("任务提交后自动刷新列表,该任务单标记为「已完成」") + +h3("交互说明") +bullet("点击「待处理」/「已完成」Tab -> 筛选对应状态的任务单列表") +bullet("点击任务单「处理」按钮 -> 跳转到「来料过秤」页面(URL 携带 user 和 taskNo 参数)") +bullet("新任务到达 -> Toast「新任务单已到达」-> 新卡片高亮入场") + +# 4.3 +h2("4.3 来料过秤(清洗前)") +note("文件:02-batch-weighing.html") +h3("功能说明") +p("核心操作页面。左右布局:左侧识别称重区,右侧批次清单管理区。") + +p("左侧 — 识别区(440px 宽):", bold=True) +table( + ["区域", "说明"], + [ + ["任务关联条", "显示关联任务编号 + 应录入重量(橙)+ 已录入重量(绿,实时更新);未从任务页进入则隐藏"], + ["批次信息条", "当前批次号(LC-YYYYMMDD-NNN)+ 已录入件数"], + ["摄像头预览框", "150px 高,四角标记(蓝色),十字辅助线"], + ["识别状态条", "状态指示灯(灰/黄闪/绿)+ 状态文字"], + ["搜索栏", "搜索毛菜名称,回车确认"], + ["候选食材列表", "2 列网格,每个含图标、名称、相似度百分比"], + ["溯源码行", "标签 + 溯源码(SC+YYYYMMDD+4位序号)+ 匹配状态"], + ["重量显示", "大号数字(42px)+ 单位(斤)+ 状态文字"], + ] +) + +p("右侧 — 批次清单区:", bold=True) +table( + ["区域", "说明"], + [ + ["汇总卡片", "品类数 / 总重量(斤)/ 已匹配溯源数"], + ["清单列表", "每条:食材图标 + 名称 + 溯源码 + 重量 + 删除按钮"], + ["提交栏", "提示文字 + 「提交本批次」按钮(绿色)"], + ] +) + +h3("业务规则") +bullet("批次号格式:LC-YYYYMMDD-NNN") +bullet("溯源码格式:SC + YYYYMMDD + 4 位流水号,自动匹配") +p("AI 识别流程:", bold=True) +bullet("1. 页面加载后 1.5 秒自动开始首次检测") +bullet("2. 食材放置 -> 摄像头开始识别(黄色闪烁指示灯)") +bullet("3. 重量递增动画 -> 稳定后指示灯变绿") +bullet("4. 延迟 0.8 秒后自动生成 4 个候选食材,每个含相似度百分比(93%~98%)") +bullet("5. 自动选中相似度最高的候选") +bullet("6. 自动匹配溯源码") +bullet("7. 重量稳定 + 已选食材 -> 2 秒后自动录入批次") +bullet("8. 录入完成 -> Toast 提示 -> 秤体清零 -> 2.5 秒后自动触发下一次检测") +bullet("搜索功能:输入关键词回车 -> 模糊匹配 -> 替换候选列表") +bullet("批次清单:最新录入排最前面,每条可单独删除") +bullet("顶部「退出登录」按钮 -> 返回欢迎页") + +h3("交互说明") +bullet("搜索栏输入毛菜名称 -> 按回车 -> 候选列表替换为搜索结果") +bullet("点击候选卡片 -> 手动选中(绿色高亮)-> 若秤已稳定则立即录入") +bullet("点击批次清单中的删除按钮 -> 删除该条 -> Toast「XXX 已删除」") +bullet("点击「提交本批次」-> Toast「本批次提交成功」-> 1.5 秒后跳转到「今日清洗任务」") +bullet("批次为空时「提交本批次」按钮禁用") + +# 4.4 +h2("4.4 操作记录") +note("文件:04-history.html") +h3("功能说明") +p("查看历史过秤操作流水。") +bullet("日期导航:左右箭头切换日期") +bullet("类型 Tab:全部(8)/ 来料过秤(8)") +bullet("空状态:切换至非当日日期时,隐藏记录列表和统计卡片,显示「该日期暂无操作记录」") +bullet("统计卡片(2 张):总操作次数(蓝色)、总重量(斤)") +bullet("记录卡片:食材图标 + 名称 + 批次号 + 类型标签 + 重量 + 溯源码 + 操作员 + 时间") + +h3("业务规则") +bullet("模拟 8 条来料过秤记录(3 个批次)") +bullet("默认显示当天(2026-06-13)记录,总重量 33.3 斤") +bullet("非当日日期显示空状态") +bullet("底部汇总:「共 X 条记录」") +bullet("顶部「退出登录」按钮 -> 返回欢迎页") + +h3("交互说明") +bullet("点击日期箭头 -> 切换日期;当日显示记录,非当日显示空状态") +bullet("点击 Tab -> 筛选对应类型记录,列表和底部汇总同步更新") +bullet("点击「退出登录」-> 返回欢迎页") + +# 4.5 +h2("4.5 设备设置") +note("文件:05-settings.html") +h3("功能说明") +p("设备信息查看页面。左侧菜单 + 右侧内容面板,仅展示只读信息。") + +h3("设置分组及字段") +p("设备信息(默认显示):", bold=True) +table( + ["字段", "值"], + [ + ["设备名称", "加工毛菜秤-01"], + ["设备编号", "GJMC-2026-001"], + ["固件版本", "v2.3.1"], + ["AI 模型版本", "veg-ai-v4.2"], + ["设备状态", "在线"], + ["网络状态", "已连接"], + ["上次校准", "2026-06-10"], + ["累计使用", "186 天"], + ] +) + +p("关于:", bold=True) +table( + ["字段", "值"], + [ + ["系统名称", "蚁熊智能餐养平台"], + ["系统版本", "v5.8.0"], + ["设备类型", "加工毛菜秤"], + ["制造商", "蚁熊智能科技有限公司"], + ] +) + +h3("交互说明") +bullet("点击左侧菜单项 -> 右侧切换对应信息分组") +bullet("返回按钮 -> 回到欢迎页面") +bullet("顶部「退出登录」按钮 -> 返回欢迎页") + +# ===== 五、关键编码规则汇总 ===== +h1("五、关键编码规则汇总") +table( + ["编码类型", "格式", "示例", "说明"], + [ + ["任务编号", "RW-YYYYMMDD-NNN", "RW-20260613-001", "RW = 任务,当日序号 3 位"], + ["批次号", "LC-YYYYMMDD-NNN", "LC-20260613-001", "LC = 来料,当日序号 3 位"], + ["溯源码", "SCYYYYMMDDNNNN", "SC202606130001", "SC + 日期 + 4 位流水号"], + ] +) + +# 保存 +doc.save("PRD.docx") +print("OK: PRD.docx") diff --git a/other-module/canteen-device/raw-veg-processing-scale/index.html b/other-module/canteen-device/raw-veg-processing-scale/index.html index f3e6e9a..32858c6 100644 --- a/other-module/canteen-device/raw-veg-processing-scale/index.html +++ b/other-module/canteen-device/raw-veg-processing-scale/index.html @@ -6,30 +6,83 @@ 加工毛菜秤 - 蚁熊智能餐养平台
- ◀ 返回 + ◀ 返回 加工毛菜秤
-