diff --git a/web-admin/nutrition/doc/营养管理功能说明.md b/web-admin/nutrition/doc/营养管理功能说明.md index e525507..107b3db 100644 --- a/web-admin/nutrition/doc/营养管理功能说明.md +++ b/web-admin/nutrition/doc/营养管理功能说明.md @@ -1131,6 +1131,11 @@ - 新增右侧抽屉详情组件,点击"详情"以抽屉形式展示当前行所有字段 - 新增"确认收货"二次确认弹窗(配送中状态订单) - 新增"备货完成"二次确认弹窗(备货中状态订单) +- 列表移除「溯源码」「出库区域」列,精简表格宽度 +- 新建弹窗「包装批次号」字段始终显示(非必填),选择净菜后自动回显批次信息 +- 「备货完成」改为「补全备货信息」弹窗(选择包装批次号,确认后状态变更) +- 详情抽屉按净菜类型定制渲染:净菜包显示溯源码+包装批次号;餐品净菜包显示批次号+食材明细表 +- 新建外售弹窗客户信息后置(移至净菜选择之后),客户名称/联系人/电话改为手动输入框 ##### 2. sup-clean-internal.html(净菜内供) - 筛选栏"申领部门"改为"申领食堂" @@ -1142,6 +1147,10 @@ - 新增"确认收货"二次确认弹窗 - 新增"立即配送"弹窗(含配送人姓名、备注输入) - 新增"备货完成"二次确认弹窗 +- 列表移除「溯源码」「仓库」列,精简表格宽度 +- 新建弹窗「包装批次号」字段始终显示(非必填),选择净菜后自动回显批次信息 +- 「备货完成」改为「补全备货信息」弹窗(选择包装批次号,确认后状态变更) +- 详情抽屉按净菜类型定制渲染:净菜包显示溯源码+包装批次号;餐品净菜包显示批次号+食材明细表 ##### 3. sup-hygiene-check.html(卫生检测) - 新增监测弹窗以及交互 @@ -1272,6 +1281,11 @@ - 新增「操作类型」列(负责人与完成时间之间),值为"设备自动"(蓝色tag)/"人工录入"(绿色tag) - 新建任务弹窗补充「操作类型」必填下拉字段 - 新增右侧抽屉详情组件,下拉菜单"详情"以抽屉形式展示任务各字段 +- 新建/编辑共用弹窗:选择餐品后自动计算食材明细(含溯源码/食材名称/分类/标准用量/实际用量/单位) +- 食材明细弹窗溯源码改为可编辑输入框 +- 详情抽屉新增食材明细表格区域 +- 新增编辑弹窗(任务信息只读 + 食材明细溯源码可编辑) +- 新增原型备注区域(仅开发环境可见,标注交互说明) ##### 2. prod-proc-cook.html(按单烹制) - 筛选栏新增「当前食堂」「烹制日期」筛选,烹制日期默认当天 @@ -1282,6 +1296,10 @@ - 新增烹制状态对应不同的操作按钮 - 「开始烹制」「烹制完成」「通知取餐」按钮新增顶部 toast 提示交互(状态联动切换) - 新增右侧抽屉详情组件,下拉菜单"详情"以抽屉形式展示烹制任务各字段 +- 食材明细弹窗「食材编码」列改为「溯源码」,溯源码改为可编辑输入框 +- 详情抽屉新增食材明细表格区域(溯源码/食材名称/分类/标准用量/实际用量/单位) +- 新增编辑弹窗(640px):任务信息只读 + 厨师/生重(kg)/熟重(kg)可编辑 + 食材明细溯源码可编辑 +- 编辑保存时自动计算生熟比 ##### 3. prod-proc-serve.html(上餐监控) - 筛选栏新增「当前食堂」下拉 @@ -1326,6 +1344,10 @@ - 调整表格字段(净菜类型,调整规格与计量方式) - 「确认收货」按钮新增二次确认弹窗(含订单信息展示),确认后状态变为"已完成"并移除按钮 - 新增右侧抽屉详情组件,操作列"详情"以抽屉形式展示订单各字段 +- 列表移除「溯源码」列,新建弹窗移除溯源码字段 +- 新建订单默认状态改为「备货中」 +- 详情抽屉按净菜类型定制渲染:净菜包显示溯源码+包装批次号;餐品净菜包显示批次号+食材明细表 +- 「确认收货」按钮列索引修正 ##### 8. prod-proc-cabinet.html(净菜进柜) - 新增页面标题行 + 食堂切换下拉 diff --git a/web-admin/nutrition/prod-clean-order.html b/web-admin/nutrition/prod-clean-order.html index 15dc6c1..33c5ade 100644 --- a/web-admin/nutrition/prod-clean-order.html +++ b/web-admin/nutrition/prod-clean-order.html @@ -180,14 +180,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
净菜订单
- + - - - - - - + + + + + +
订单号溯源码净菜类型净菜/餐品包装规格需求份数需求计量(kg)订单状态申领时间预定配送时间创建人操作
订单号净菜类型净菜/餐品包装规格需求份数需求计量(kg)订单状态申领时间预定配送时间创建人操作
CO-001NC-INT-BOCA-20260422-01🥬 净菜包菠菜500g/袋5025已完成2026-04-22 07:302026-04-22 10:00张厨师详情 删除
CO-002NC-INT-ZLRJ-20260422-01🥬 净菜包猪排骨2kg/盘2040配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-003NC-INT-JXRJ-20260422-01🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-005NC-INT-QZYU-20260422-01🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送2026-04-22 09:002026-04-22 11:00王厨师详情 删除
CO-006NC-INT-TDSI-20260422-01🥬 净菜包土豆(土豆丝)500g/袋4020备货中2026-04-22 09:152026-04-22 11:00张厨师详情 删除
CO-008NC-INT-XLHU-20260422-01🥬 净菜包西兰花500g/袋3015已完成2026-04-22 10:002026-04-22 11:30王厨师详情 删除
CO-001🥬 净菜包菠菜500g/袋5025已完成2026-04-22 07:302026-04-22 10:00张厨师详情 删除
CO-002🥬 净菜包猪排骨2kg/盘2040配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-003🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-005🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送2026-04-22 09:002026-04-22 11:00王厨师详情 删除
CO-006🥬 净菜包土豆(土豆丝)500g/袋4020备货中2026-04-22 09:152026-04-22 11:00张厨师详情 删除
CO-008🥬 净菜包西兰花500g/袋3015已完成2026-04-22 10:002026-04-22 11:30王厨师详情 删除
@@ -206,10 +206,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} @@ -285,14 +281,14 @@ var _confirmReceiveRow=null; function confirmReceive(el){ _confirmReceiveRow=el.closest('tr'); var orderNo=_confirmReceiveRow.querySelectorAll('td')[0].textContent; - var foodName=_confirmReceiveRow.querySelectorAll('td')[3].textContent; + var foodName=_confirmReceiveRow.querySelectorAll('td')[2].textContent; document.getElementById('confirmReceiveMsg').innerHTML='确认已收到订单 '+orderNo+'('+foodName+')的净菜配送?'; openModal('modal-confirm-receive'); } function doConfirmReceive(){ if(!_confirmReceiveRow)return; - // 更新状态列为"已完成" - var statusTd=_confirmReceiveRow.querySelectorAll('td')[7]; + // 更新状态列为"已完成"(去掉溯源码后状态在第6列) + var statusTd=_confirmReceiveRow.querySelectorAll('td')[6]; statusTd.innerHTML='已完成'; // 移除"确认收货"按钮 var actionTd=_confirmReceiveRow.querySelector('.td-actions'); @@ -309,23 +305,111 @@ function closeDrawer(){ overlay.classList.add('closing'); setTimeout(function(){overlay.remove();},200); } + +/* ========== 餐品食材数据 ========== */ +var dishIngredients={ + '宫保鸡丁':[ + {trace:'NC-PROC-JXR-20260415-01',name:'鸡胸肉',type:'主材',amount:'120g'}, + {trace:'NC-PROC-HUS-20260415-01',name:'花生',type:'辅材',amount:'20g'}, + {trace:'NC-PROC-GLJ-20260415-01',name:'干辣椒',type:'调料',amount:'5g'} + ], + '清蒸鱼':[ + {trace:'NC-PROC-CYU-20260415-01',name:'草鱼',type:'主材',amount:'100g'}, + {trace:'NC-PROC-JPN-20260415-01',name:'姜片',type:'调料',amount:'适量'} + ], + '红烧排骨':[ + {trace:'NC-PROC-ZPG-20260415-01',name:'猪排骨',type:'主材',amount:'200g'}, + {trace:'NC-PROC-JYO-20260415-01',name:'酱油',type:'调料',amount:'15ml'} + ] +}; +// 餐品净菜包对应的包装批次号 +var dishBatch={ + '宫保鸡丁':'BATCH-DH-20260415-01', + '清蒸鱼':'BATCH-DH-20260415-02', + '红烧排骨':'BATCH-DH-20260415-03' +}; +// 净菜包溯源码映射 +var traceMap={ + '菠菜':'NC-INT-BOCA-20260422-01', + '猪排骨':'NC-INT-ZLRJ-20260422-01', + '土豆(土豆丝)':'NC-INT-TDSI-20260422-01', + '西兰花':'NC-INT-XLHU-20260422-01' +}; +// 净菜包对应的包装批次号 +var ncBatch={ + '菠菜':'BATCH-NC-20260422-01', + '猪排骨':'BATCH-NC-20260422-02', + '土豆(土豆丝)':'BATCH-NC-20260422-03', + '西兰花':'BATCH-NC-20260422-04' +}; + +/* ========== 详情抽屉(定制化渲染) ========== */ function showDetail(el){ var tr=el.closest('tr'); var tds=tr.querySelectorAll('td'); - var ths=document.querySelectorAll('thead th'); - // 获取订单号(第一列) + /* 列序:0订单号 1净菜类型 2净菜/餐品 3包装规格 4需求份数 5需求计量 6订单状态 7申领时间 8预定配送时间 9创建人 */ var orderNo=tds[0].textContent; - // 构建字段数据(排除最后的操作列) - var fields=''; - for(var i=0;i
'+tds[i].innerHTML+'
'; + var typeHtml=tds[1].innerHTML; + var typeText=tds[1].textContent.trim(); + var foodName=tds[2].textContent; + var spec=tds[3].textContent; + var qty=tds[4].textContent; + var weight=tds[5].textContent; + var statusHtml=tds[6].innerHTML; + var claimTime=tds[7].textContent; + var deliverTime=tds[8].textContent; + var creator=tds[9].textContent; + + var isCp=typeText.indexOf('餐品')>=0; + + // 基础信息区 + var html='
订单信息
'; + html+='
订单号
'+orderNo+'
'; + html+='
净菜类型
'+typeHtml+'
'; + html+='
净菜/餐品
'+foodName+'
'; + + // 根据类型显示不同字段 + if(!isCp){ + // 净菜包 → 显示溯源码 + 包装批次号 + html+='
溯源码
'+(traceMap[foodName]||'—')+'
'; + html+='
包装批次号
'+(ncBatch[foodName]||'—')+'
'; + } else { + // 餐品净菜包 → 显示包装批次号 + html+='
包装批次号
'+(dishBatch[foodName]||'—')+'
'; } - var html='
' + + html+='
包装规格
'+spec+'
'; + html+='
需求份数
'+qty+'
'; + html+='
需求计量(kg)
'+weight+'
'; + html+='
订单状态
'+statusHtml+'
'; + html+='
申领时间
'+claimTime+'
'; + html+='
预定配送时间
'+deliverTime+'
'; + html+='
创建人
'+creator+'
'; + html+='
'; + + // 餐品净菜包 → 追加净菜包明细表格 + if(isCp){ + var ings=dishIngredients[foodName]||[]; + var tagCls={'主材':'tag-blue','辅材':'tag-green','调料':'tag-orange'}; + html+='
净菜包明细
'; + html+=''; + if(ings.length>0){ + ings.forEach(function(i){ + html+=''; + }); + } else { + html+=''; + } + html+='
食材溯源码食材名称分类每份用量
'+i.trace+''+i.name+''+i.type+''+i.amount+'
暂无明细数据
'; + } + + // 渲染抽屉 + var drawerHtml='
' +'
' +'
净菜订单详情 — '+orderNo+'
' - +'
订单信息
'+fields+'
' + +'
'+html+'
' +'
'; - document.body.insertAdjacentHTML('beforeend',html); + document.body.insertAdjacentHTML('beforeend',drawerHtml); } diff --git a/web-admin/nutrition/prod-proc-combo.html b/web-admin/nutrition/prod-proc-combo.html index 49b3d38..901c96f 100644 --- a/web-admin/nutrition/prod-proc-combo.html +++ b/web-admin/nutrition/prod-proc-combo.html @@ -175,18 +175,24 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
+ +
+
📌 原型备注区域(不包含在交付效果内)
+
净菜组配和按单烹制绝大多数场景下是一一对应的关系,服务端需要在生成按单烹制任务的同时生成净菜组配任务并做关联处理;组配任务中具体使用到的净菜溯源码可在编辑或食材明细弹窗中进行补全。食材明细根据餐品规则自动计算。
+
+
净菜组配
- - - - - - + + + + + +
任务编号目标餐品餐品规格份数任务截止时间食材配方任务来源组配状态负责人操作类型完成时间操作
CMB-001宫保鸡丁标准份(300g)502026-05-20 11:00食材明细餐线已完成李组配设备自动2026-05-20 10:30:00食材溯源链路 查看视频 更多 ▾
CMB-002番茄炒蛋大份(500g)802026-05-20 11:00食材明细餐线已完成王组配设备自动2026-05-20 10:45:00食材溯源链路 查看视频 更多 ▾
CMB-003红烧肉标准份(300g)602026-05-20 11:30食材明细餐线组配中张组配人工录入食材溯源链路 查看视频 更多 ▾ 完成组配
CMB-004清蒸鱼标准份(500g)402026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-005炒时蔬小份(200g)202026-05-20 11:00食材明细录入已完成赵组配设备自动2026-05-20 10:50:00食材溯源链路 查看视频 更多 ▾
CMB-006豆腐小份(200g)352026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-001宫保鸡丁标准份(300g)502026-05-20 11:00食材明细餐线已完成李组配设备自动2026-05-20 10:30:00食材溯源链路 查看视频 更多 ▾
CMB-002番茄炒蛋大份(500g)802026-05-20 11:00食材明细餐线已完成王组配设备自动2026-05-20 10:45:00食材溯源链路 查看视频 更多 ▾
CMB-003红烧肉标准份(300g)602026-05-20 11:30食材明细餐线组配中张组配人工录入食材溯源链路 查看视频 更多 ▾ 完成组配
CMB-004清蒸鱼标准份(500g)402026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-005炒时蔬小份(200g)202026-05-20 11:00食材明细录入已完成赵组配设备自动2026-05-20 10:50:00食材溯源链路 查看视频 更多 ▾
CMB-006豆腐小份(200g)352026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
@@ -202,53 +208,58 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
+ diff --git a/web-admin/nutrition/prod-proc-cook.html b/web-admin/nutrition/prod-proc-cook.html index 7f08397..81007cb 100644 --- a/web-admin/nutrition/prod-proc-cook.html +++ b/web-admin/nutrition/prod-proc-cook.html @@ -134,6 +134,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} /* 顶部提示条 */ .toast{position:fixed;top:24px;left:50%;transform:translateX(-50%) translateY(-20px);background:#f6ffed;border:1px solid #b7eb8f;color:#52c41a;padding:10px 24px;border-radius:var(--radius-sm);font-size:var(--font-sm);font-weight:500;z-index:9999;box-shadow:var(--shadow-md);opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;display:flex;align-items:center;gap:8px;} .toast.show{opacity:1;transform:translateX(-50%) translateY(0);} +/* 表单项 */ +.form-item{display:flex;flex-direction:column;gap:6px;} +.form-item label{font-size:var(--font-sm);color:var(--text-secondary);} +.form-item input,.form-item select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;} +.form-item input:focus,.form-item select:focus{border-color:var(--primary);} @@ -195,13 +200,13 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - - + + + + + + +
烹制任务号来源类型组配任务号菜品名称餐品规格需求份数烹制份数烹制日期烹制开始烹制结束烹制状态厨师食材明细温度过程模型数据生重(kg)熟重(kg)生熟比操作
COOK-001点餐CMB-001宫保鸡丁标准份(300g)50502026-05-2011:0011:20已完成张厨师食材明细温度曲线92分8.57.21:0.85食材溯源链路 查看视频 更多 ▾通知取餐
COOK-002点餐CMB-002番茄炒蛋大份(500g)80802026-05-2011:0511:20已完成李厨师食材明细温度曲线88分12.010.41:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-003餐线CMB-003红烧肉标准份(300g)602026-05-2011:10烹制中王厨师食材明细温度曲线分析中10.0食材溯源链路 查看视频 更多 ▾烹制完成
COOK-004餐线CMB-004清蒸鱼标准份(500g)402026-05-2011:15烹制中张厨师食材明细温度曲线分析中6.5食材溯源链路 查看视频 更多 ▾烹制完成
COOK-005餐线CMB-005蒜蓉菠菜标准份(300g)1002026-05-20待烹制食材明细15.0食材溯源链路 查看视频 更多 ▾开始烹制
COOK-006餐线CMB-005炒时蔬小份(200g)20202026-05-2011:1011:30已完成赵厨师食材明细温度曲线95分18.015.61:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-007点餐CMB-006豆腐小份(200g)35352026-05-2011:2011:35已完成陈厨师食材明细温度曲线78分4.23.91:0.93食材溯源链路 查看视频 更多 ▾通知取餐
COOK-001点餐CMB-001宫保鸡丁标准份(300g)50502026-05-2011:0011:20已完成张厨师食材明细温度曲线92分8.57.21:0.85食材溯源链路 查看视频 更多 ▾通知取餐
COOK-002点餐CMB-002番茄炒蛋大份(500g)80802026-05-2011:0511:20已完成李厨师食材明细温度曲线88分12.010.41:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-003餐线CMB-003红烧肉标准份(300g)602026-05-2011:10烹制中王厨师食材明细温度曲线分析中10.0食材溯源链路 查看视频 更多 ▾烹制完成
COOK-004餐线CMB-004清蒸鱼标准份(500g)402026-05-2011:15烹制中张厨师食材明细温度曲线分析中6.5食材溯源链路 查看视频 更多 ▾烹制完成
COOK-005餐线CMB-005蒜蓉菠菜标准份(300g)1002026-05-20待烹制食材明细15.0食材溯源链路 查看视频 更多 ▾开始烹制
COOK-006餐线CMB-005炒时蔬小份(200g)20202026-05-2011:1011:30已完成赵厨师食材明细温度曲线95分18.015.61:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-007点餐CMB-006豆腐小份(200g)35352026-05-2011:2011:35已完成陈厨师食材明细温度曲线78分4.23.91:0.93食材溯源链路 查看视频 更多 ▾通知取餐
@@ -216,7 +221,7 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - + + + + diff --git a/web-admin/nutrition/sup-clean-external.html b/web-admin/nutrition/sup-clean-external.html index 6485bce..975b949 100644 --- a/web-admin/nutrition/sup-clean-external.html +++ b/web-admin/nutrition/sup-clean-external.html @@ -648,7 +648,9 @@ function showDetail(el){ html+='
包装批次号
'+batchNo+'
'; }else{ var trace=traceMap[foodName]||'—'; + var ncBatchMap={'净菠菜':'BATCH-NC-20260415-01','净胡萝卜':'BATCH-NC-20260415-02','净土豆丝':'BATCH-NC-20260415-03','净西兰花':'BATCH-NC-20260415-04','净白菜':'BATCH-NC-20260415-05','净黄瓜':'BATCH-NC-20260415-06','土豆(土豆丝)':'BATCH-NC-20260415-03','土豆(土豆块)':'BATCH-NC-20260415-07'}; html+='
溯源码
'+trace+'
'; + html+='
包装批次号
'+(ncBatchMap[foodName]||'—')+'
'; } html+='
净菜/餐品
'+foodName+'
'; diff --git a/web-admin/nutrition/sup-clean-internal.html b/web-admin/nutrition/sup-clean-internal.html index 0ed3e4d..3582bdc 100644 --- a/web-admin/nutrition/sup-clean-internal.html +++ b/web-admin/nutrition/sup-clean-internal.html @@ -536,9 +536,11 @@ function showDetail(el){ // 根据类型显示不同字段 if(!isCp){ - // 净菜包 → 显示溯源码 + // 净菜包 → 显示溯源码 + 包装批次号 var traceMap={'菠菜':'NC-INT-BOCA-20260422-01','玉米(玉米粒)':'NC-INT-BCAI-20260422-01','猪排骨':'NC-INT-ZLRJ-20260422-01','草鱼(鱼片)':'NC-INT-CAYO-20260422-01','土豆(土豆丝)':'NC-INT-TDSI-20260422-01'}; + var ncBatch={'菠菜':'BATCH-NC-20260422-01','玉米(玉米粒)':'BATCH-NC-20260422-02','猪排骨':'BATCH-NC-20260422-03','草鱼(鱼片)':'BATCH-NC-20260422-04','土豆(土豆丝)':'BATCH-NC-20260422-05'}; html+='
溯源码
'+(traceMap[foodName]||'—')+'
'; + html+='
包装批次号
'+(ncBatch[foodName]||'—')+'
'; } else { // 餐品净菜包 → 显示包装批次号 html+='
包装批次号
'+(dishBatch[foodName]||'—')+'
';