feat: 净菜订单明细新增摆放顺序与理由,精简取餐/余量处置/明细列表字段
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
173634c40e
commit
0b4e15c3a4
@@ -859,15 +859,14 @@ function buildRawDataModal(data) {
|
||||
const statusTag = recStatus === '已识别' ? '<span class="tag tag-green">已识别</span>' : '<span class="tag tag-red">未识别</span>';
|
||||
|
||||
const samples = [
|
||||
{ t: minusSeconds(data.time, 5), w: (data.weight - 38).toFixed(1), d: '+' + (data.weight - 38).toFixed(1), stable: '否' },
|
||||
{ t: minusSeconds(data.time, 2), w: (data.weight - 9).toFixed(1), d: '+29.0', stable: '否' },
|
||||
{ t: data.time, w: data.weight.toFixed(1), d: '+9.0', stable: '是' }
|
||||
{ t: minusSeconds(data.time, 5), w: (data.weight - 38).toFixed(1), stable: '否' },
|
||||
{ t: minusSeconds(data.time, 2), w: (data.weight - 9).toFixed(1), stable: '否' },
|
||||
{ t: data.time, w: data.weight.toFixed(1), stable: '是' }
|
||||
];
|
||||
|
||||
const rowsHtml = samples.map(s => `<tr>
|
||||
<td>${s.t}</td>
|
||||
<td>${s.w}</td>
|
||||
<td>${s.d}</td>
|
||||
<td>${statusTag}</td>
|
||||
<td>${recUser}</td>
|
||||
<td>${s.stable === '是' ? '<span class="tag tag-green">是</span>' : '<span class="tag tag-orange">否</span>'}</td>
|
||||
@@ -878,7 +877,7 @@ function buildRawDataModal(data) {
|
||||
<div class="scale-info__item">设备名称:<strong>${data.device}</strong></div>
|
||||
</div>
|
||||
<table class="raw-data-table">
|
||||
<thead><tr><th>采样时间</th><th>当前重量(g)</th><th>较上次变化重量(g)</th><th>识别状态</th><th>用户</th><th>是否稳定</th></tr></thead>
|
||||
<thead><tr><th>采样时间</th><th>当前重量(g)</th><th>识别状态</th><th>用户</th><th>是否稳定</th></tr></thead>
|
||||
<tbody>${rowsHtml}</tbody>
|
||||
</table>`;
|
||||
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# 营养用餐管理端 CHANGELOG
|
||||
|
||||
## [2026-09-23] feat: 净菜订单明细新增摆放顺序与理由,三页列表字段精简
|
||||
|
||||
- `prod-clean-order-history.html` 净菜订单生成历史「数据明细」弹窗:
|
||||
- 餐品维度新增「摆放顺序」「摆放理由」两列:按餐线取餐动线(先取菜后取主食)对荤菜/素菜/主食/汤/饮品分类赋序,餐次分组内排序编号并给出摆放理由
|
||||
- 删除各环节数值下方的差异率趋势徽标(↑ 超 X% / ↓ 省 X% / — 持平),单元格仅保留数值;餐品展开的食材子表同步删除「差异率」列
|
||||
- `din-order-pickup.html` 取餐管理「秤原始数据」弹窗:删除「较上次变化重量(g)」列
|
||||
- `prod-proc-surplus.html` 余量处置列表:删除「交叉核对状态」字段(表头与各行「正常/异常(损耗超标)」标签),详情抽屉按表头动态渲染自动同步移除
|
||||
|
||||
## [2026-09-21] feat: 净菜订单生成历史双维度全链路对账 + 食物成分价格变更历史弹窗
|
||||
|
||||
- `prod-clean-order-history.html` 净菜订单生成历史「数据明细」弹窗重构为餐品/食材双维度对账视图:
|
||||
|
||||
@@ -124,8 +124,6 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
.val{font-weight:600;}
|
||||
.val--base{color:var(--primary);}
|
||||
.val-empty{color:var(--text-placeholder);font-weight:400;}
|
||||
.val-diff{margin-top:3px;line-height:1;}
|
||||
.tag--mini{font-size:10px;padding:1px 6px;border-radius:8px;}
|
||||
/* 空态 */
|
||||
.empty-state{text-align:center;color:var(--text-placeholder);padding:60px 0;font-size:var(--font-sm);}
|
||||
.empty-state .icon{font-size:40px;display:block;margin-bottom:12px;}
|
||||
@@ -221,6 +219,8 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
<th style="width:28px;" rowspan="2"></th>
|
||||
<th rowspan="2">餐次</th>
|
||||
<th rowspan="2">餐品名称</th>
|
||||
<th rowspan="2">摆放顺序</th>
|
||||
<th rowspan="2">摆放理由</th>
|
||||
<th colspan="2" class="th-group th-group--cook">熟重环节</th>
|
||||
<th colspan="3" class="th-group th-group--pickup">取餐环节</th>
|
||||
</tr>
|
||||
@@ -297,6 +297,23 @@ var ING_TYPE_CLS={'主材':'ing-type--main','辅材':'ing-type--aux','调料':'i
|
||||
var ING_YIELD={'鸡胸肉':0.88,'花生米':0.98,'黄瓜':0.85,'干辣椒':1,'葱姜蒜':0.9,'鲈鱼':0.82,'姜片':0.9,'葱丝':0.9,'五花肉':0.88,'酱油':1,'冰糖':1,'八角':1,'嫩豆腐':0.95,'肉末':0.9,'豆瓣酱':1,'花椒':1,'番茄':0.92,'鸡蛋':0.98,'葱花':0.9,'西兰花':0.82,'胡萝卜':0.88,'大蒜':0.88,'小米':1,'清水':1,'大米':1,'黄豆':1,'面粉':1,'酵母':1,'猪里脊':0.9,'木耳':1,'青椒':0.88,'猪排骨':0.85,'白糖':1,'香醋':1,'紫菜':1,'冬瓜':0.85,'酸奶':1,'茶叶':1};
|
||||
/* AI 预测熟成率(生重→熟重) */
|
||||
var COOK_YIELD=0.85;
|
||||
/* 餐线摆放规则:分类 → 摆放顺序权重 + 摆放理由(取餐动线:先取菜后取主食) */
|
||||
var DISH_PLACE_CAT={
|
||||
'荤菜':{order:1,reason:'主菜优先摆放,突出餐品重心'},
|
||||
'素菜':{order:2,reason:'素菜紧随主菜,均衡营养搭配'},
|
||||
'主食':{order:3,reason:'主食随后摆放,便于按需取量'},
|
||||
'汤':{order:4,reason:'汤品靠后摆放,避免取餐洒漏'},
|
||||
'饮品':{order:5,reason:'饮品置于末端,便于即取即走'}
|
||||
};
|
||||
/* 菜品 → 摆放分类 */
|
||||
var DISH_CAT={
|
||||
'宫保鸡丁':'荤菜','清蒸鲈鱼':'荤菜','红烧肉':'荤菜','番茄炒蛋':'荤菜','糖醋排骨':'荤菜',
|
||||
'鱼香肉丝':'荤菜','麻婆豆腐':'荤菜','糖醋里脊':'荤菜','煮鸡蛋':'荤菜','茶叶蛋':'荤菜',
|
||||
'炒时蔬':'素菜','清炒西兰花':'素菜',
|
||||
'米饭':'主食','馒头':'主食','白粥':'主食','小米粥':'主食',
|
||||
'冬瓜排骨汤':'汤','紫菜蛋花汤':'汤',
|
||||
'豆浆':'饮品','酸奶':'饮品'
|
||||
};
|
||||
function round2(n){return parseFloat(n.toFixed(2));}
|
||||
|
||||
/* ========== 净菜订单生成历史数据(订单维度,一个订单可含多个餐次) ========== */
|
||||
@@ -403,7 +420,7 @@ function nameHash(s){
|
||||
/* 餐品维度:AI 预测双值(生重/熟重)+ 下单/组配/烹制/取餐各环节实际值 */
|
||||
function deriveDetail(order){
|
||||
var generating=order.genStatus==='generating';
|
||||
return order.details.map(function(d){
|
||||
var list=order.details.map(function(d){
|
||||
var bom=recipeBom[d.foodName]||[];
|
||||
var baseRatio=d.actualRatio!=null?d.actualRatio:(order.actualRatio||1);
|
||||
var perDishGram=bom.reduce(function(s,i){return s+i.perServing;},0);
|
||||
@@ -426,13 +443,23 @@ function deriveDetail(order){
|
||||
var ingAct=parseFloat((ingRec*ingRatio).toFixed(3));
|
||||
return {name:ing.name,type:ing.type,perServing:ing.perServing,rec:ingRec,act:ingAct};
|
||||
});
|
||||
var cat=DISH_CAT[d.foodName]||'主食';
|
||||
var place=DISH_PLACE_CAT[cat]||DISH_PLACE_CAT['主食'];
|
||||
return {
|
||||
meal:d.meal,foodName:d.foodName,spec:d.spec,dinerCount:d.dinerCount,servings:d.servings,needSeasoning:d.needSeasoning,
|
||||
recRaw:recRaw,recCooked:recCooked,
|
||||
orderWeight:orderWeight,comboRaw:comboRaw,cookCooked:cookCooked,actualDiner:actualDiner,pickupWeight:pickupWeight,
|
||||
ingredients:ingredients
|
||||
ingredients:ingredients,
|
||||
placeWeight:place.order,placeReason:place.reason
|
||||
};
|
||||
});
|
||||
/* 按餐次分组,组内按餐线动线排序赋摆放序号 */
|
||||
var byMeal={};
|
||||
list.forEach(function(d){if(!byMeal[d.meal])byMeal[d.meal]=[];byMeal[d.meal].push(d);});
|
||||
Object.keys(byMeal).forEach(function(meal){
|
||||
byMeal[meal].slice().sort(function(a,b){return a.placeWeight-b.placeWeight;}).forEach(function(d,i){d.placeOrder=i+1;});
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
/* 食材维度:同一食材跨餐品合并一行,链路覆盖 AI 用量→采购/实收(毛)→净菜产出(净)→组配实际(净) */
|
||||
@@ -464,15 +491,6 @@ function deriveIngredients(order){
|
||||
});
|
||||
}
|
||||
|
||||
/* ========== 差异率 ========== */
|
||||
function diffInfo(act,rec){
|
||||
if(!rec)return {cls:'flat',text:'— 持平'};
|
||||
var pct=(act-rec)/rec*100;
|
||||
if(pct>1)return {cls:'tag-red',text:'↑ 超 '+pct.toFixed(1)+'%'};
|
||||
if(pct<-1)return {cls:'tag-green',text:'↓ 省 '+Math.abs(pct).toFixed(1)+'%'};
|
||||
return {cls:'tag-gray',text:'— 持平'};
|
||||
}
|
||||
|
||||
/* ========== 菜品种类(去重) ========== */
|
||||
function distinctDishCount(o){
|
||||
var set={};
|
||||
@@ -616,21 +634,18 @@ function switchDim(dim){
|
||||
document.getElementById('dimIngWrap').style.display=dim==='ing'?'':'none';
|
||||
}
|
||||
|
||||
/* ========== 数值 + 差异徽标单元格(生成中环节未发生时占位 —) ========== */
|
||||
function stageCell(val,rec){
|
||||
/* ========== 数值单元格(生成中环节未发生时占位 —) ========== */
|
||||
function stageCell(val){
|
||||
if(val==null)return '<td><span class="val-empty">—</span></td>';
|
||||
var diff=diffInfo(val,rec);
|
||||
return '<td><div class="val">'+val.toFixed(2)+'</div><div class="val-diff"><span class="tag tag--mini '+diff.cls+'">'+diff.text+'</span></div></td>';
|
||||
return '<td><div class="val">'+val.toFixed(2)+'</div></td>';
|
||||
}
|
||||
function dinerCell(actual,plan){
|
||||
function dinerCell(actual){
|
||||
if(actual==null)return '<td><span class="val-empty">—</span></td>';
|
||||
var diff=diffInfo(actual,plan);
|
||||
return '<td><div class="val">'+actual+'</div><div class="val-diff"><span class="tag tag--mini '+diff.cls+'">'+diff.text+'</span></div></td>';
|
||||
return '<td><div class="val">'+actual+'</div></td>';
|
||||
}
|
||||
function ingStageCell(val,rec){
|
||||
if(val==null||rec==null)return '<td><span class="val-empty">—</span></td>';
|
||||
var diff=diffInfo(val,rec);
|
||||
return '<td><div class="val">'+val.toFixed(3)+'</div><div class="val-diff"><span class="tag tag--mini '+diff.cls+'">'+diff.text+'</span></div></td>';
|
||||
function ingStageCell(val){
|
||||
if(val==null)return '<td><span class="val-empty">—</span></td>';
|
||||
return '<td><div class="val">'+val.toFixed(3)+'</div></td>';
|
||||
}
|
||||
function plainCell(val){
|
||||
if(val==null)return '<td><span class="val-empty">—</span></td>';
|
||||
@@ -645,16 +660,18 @@ function renderDishRows(details){
|
||||
html+='<td><span class="expand-arrow">▶</span></td>';
|
||||
html+='<td><span class="tag tag-blue">'+d.meal+'</span></td>';
|
||||
html+='<td style="font-weight:600;">'+d.foodName+'</td>';
|
||||
html+='<td><span class="tag tag-gray">'+d.placeOrder+'</span></td>';
|
||||
html+='<td style="color:var(--text-secondary);white-space:normal;max-width:200px;">'+d.placeReason+'</td>';
|
||||
/* 熟重环节 */
|
||||
html+='<td><span class="val val--base">'+d.recCooked.toFixed(2)+'</span></td>';
|
||||
html+=stageCell(d.cookCooked,d.recCooked);
|
||||
html+=stageCell(d.cookCooked);
|
||||
/* 取餐环节 */
|
||||
html+='<td><span class="val">'+d.dinerCount+'</span></td>';
|
||||
html+=dinerCell(d.actualDiner,d.dinerCount);
|
||||
html+=stageCell(d.pickupWeight,d.recCooked);
|
||||
html+=dinerCell(d.actualDiner);
|
||||
html+=stageCell(d.pickupWeight);
|
||||
html+='</tr>';
|
||||
html+='<tr class="ingredient-row" style="display:none;">';
|
||||
html+='<td colspan="8">'+buildIngredientsDetail(d)+'</td>';
|
||||
html+='<td colspan="10">'+buildIngredientsDetail(d)+'</td>';
|
||||
html+='</tr>';
|
||||
});
|
||||
document.getElementById('detailDishBody').innerHTML=html;
|
||||
@@ -672,12 +689,12 @@ function renderIngRows(ings){
|
||||
html+='<td><span class="val val--base">'+m.aiUsed.toFixed(3)+'</span></td>';
|
||||
/* 采供环节:采购(链路起点)+ 实收 vs 采购(收货损耗) */
|
||||
html+=plainCell(m.purchase);
|
||||
html+=ingStageCell(m.received,m.purchase);
|
||||
html+=ingStageCell(m.received);
|
||||
/* 加工环节:出净率 + 净菜产出 */
|
||||
html+='<td><span class="val">'+(m.received!=null?(m.yieldRate*100).toFixed(0)+'%':'—')+'</span></td>';
|
||||
html+=plainCell(m.netOut);
|
||||
/* 组配环节:实际用量 vs AI 生成用量(核心对账) */
|
||||
html+=ingStageCell(m.comboUsed,m.aiUsed);
|
||||
html+=ingStageCell(m.comboUsed);
|
||||
html+='</tr>';
|
||||
html+='<tr class="ingredient-row" style="display:none;">';
|
||||
html+='<td colspan="9">'+buildUsedByDetail(m)+'</td>';
|
||||
@@ -688,16 +705,14 @@ function renderIngRows(ings){
|
||||
document.querySelector('.modal-mask').addEventListener('click',function(e){if(e.target===this)closeDetail();});
|
||||
|
||||
function buildIngredientsDetail(d){
|
||||
var html='<table class="ing-table"><thead><tr><th>食材名称</th><th>类别</th><th>推荐总量(kg)</th><th>组配实际用量(kg)</th><th>差异率</th></tr></thead><tbody>';
|
||||
var html='<table class="ing-table"><thead><tr><th>食材名称</th><th>类别</th><th>推荐总量(kg)</th><th>组配实际用量(kg)</th></tr></thead><tbody>';
|
||||
d.ingredients.forEach(function(ing){
|
||||
var cls=ING_TYPE_CLS[ing.type]||'';
|
||||
var diff=diffInfo(ing.act,ing.rec);
|
||||
html+='<tr>';
|
||||
html+='<td>'+ing.name+'</td>';
|
||||
html+='<td><span class="ing-type '+cls+'">'+ing.type+'</span></td>';
|
||||
html+='<td>'+ing.rec.toFixed(3)+'</td>';
|
||||
html+='<td>'+ing.act.toFixed(3)+'</td>';
|
||||
html+='<td><span class="tag '+diff.cls+'">'+diff.text+'</span></td>';
|
||||
html+='</tr>';
|
||||
});
|
||||
html+='</tbody></table>';
|
||||
|
||||
@@ -190,16 +190,16 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="table-card__header"><div class="table-card__title">余量处置</div></div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr><th>处置单号</th><th>菜品名称</th><th>餐线</th><th>餐次</th><th>实际制作(kg)</th><th>销售/取餐(kg)</th><th>余量(kg)</th><th>余量率(%)</th><th>处置方式</th><th>备注</th><th>处置数量(kg)</th><th>交叉核对状态</th><th>处置时间</th><th>处置人员</th><th>操作</th></tr></thead>
|
||||
<thead><tr><th>处置单号</th><th>菜品名称</th><th>餐线</th><th>餐次</th><th>实际制作(kg)</th><th>销售/取餐(kg)</th><th>余量(kg)</th><th>余量率(%)</th><th>处置方式</th><th>备注</th><th>处置数量(kg)</th><th>处置时间</th><th>处置人员</th><th>操作</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>SUR-002</td><td>白米饭</td><td>A区中餐线</td><td>午餐</td><td>62.0</td><td>54.0</td><td class="td-surplus">8.0</td><td>12.9%</td><td>捐赠</td><td>捐赠予未央环卫</td><td>5.0</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-002</td><td>白米饭</td><td>A区中餐线</td><td>午餐</td><td>62.0</td><td>54.0</td><td class="td-surplus">8.0</td><td>12.9%</td><td><a class="link" onclick="openWelfareModal('白米饭','SUR-002','3.0')">员工福利</a></td><td>加班餐</td><td>3.0</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-004</td><td>蒜蓉菠菜</td><td>B区中餐线</td><td>午餐</td><td>14.8</td><td>10.0</td><td class="td-surplus">4.8</td><td>32.4%</td><td>废弃</td><td>叶片发黄</td><td>3.0</td><td><span class="tag tag-red">异常(损耗超标)</span></td><td>2026-04-22 15:00</td><td>李主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-004</td><td>蒜蓉菠菜</td><td>B区中餐线</td><td>午餐</td><td>14.8</td><td>10.0</td><td class="td-surplus">4.8</td><td>32.4%</td><td>加工再利用</td><td>制作蔬菜饼</td><td>1.8</td><td><span class="tag tag-red">异常(损耗超标)</span></td><td>2026-04-22 15:00</td><td>李主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-001</td><td>宫保鸡丁</td><td>A区中餐线</td><td>午餐</td><td>43.0</td><td>39.5</td><td class="td-surplus">3.5</td><td>8.1%</td><td><a class="link" onclick="openWelfareModal('宫保鸡丁','SUR-001','2.0')">员工福利</a></td><td>加班餐</td><td>2.0</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-001</td><td>宫保鸡丁</td><td>A区中餐线</td><td>午餐</td><td>43.0</td><td>39.5</td><td class="td-surplus">3.5</td><td>8.1%</td><td>捐赠</td><td>捐赠予安保部</td><td>1.5</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-005</td><td>红烧肉</td><td>B区中餐线</td><td>午餐</td><td>48.5</td><td>45.3</td><td class="td-surplus">3.2</td><td>6.6%</td><td><a class="link" onclick="openWelfareModal('红烧肉','SUR-005','3.2')">员工福利</a></td><td>加班餐</td><td>3.2</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:45</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-003</td><td>香辣大虾</td><td>C区快餐线</td><td>午餐</td><td>20.5</td><td>18.3</td><td class="td-surplus">2.2</td><td>10.7%</td><td>废弃</td><td>只剩辣椒和虾头</td><td>2.2</td><td><span class="tag tag-green">正常</span></td><td>2026-04-22 14:30</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-002</td><td>白米饭</td><td>A区中餐线</td><td>午餐</td><td>62.0</td><td>54.0</td><td class="td-surplus">8.0</td><td>12.9%</td><td>捐赠</td><td>捐赠予未央环卫</td><td>5.0</td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-002</td><td>白米饭</td><td>A区中餐线</td><td>午餐</td><td>62.0</td><td>54.0</td><td class="td-surplus">8.0</td><td>12.9%</td><td><a class="link" onclick="openWelfareModal('白米饭','SUR-002','3.0')">员工福利</a></td><td>加班餐</td><td>3.0</td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-004</td><td>蒜蓉菠菜</td><td>B区中餐线</td><td>午餐</td><td>14.8</td><td>10.0</td><td class="td-surplus">4.8</td><td>32.4%</td><td>废弃</td><td>叶片发黄</td><td>3.0</td><td>2026-04-22 15:00</td><td>李主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-004</td><td>蒜蓉菠菜</td><td>B区中餐线</td><td>午餐</td><td>14.8</td><td>10.0</td><td class="td-surplus">4.8</td><td>32.4%</td><td>加工再利用</td><td>制作蔬菜饼</td><td>1.8</td><td>2026-04-22 15:00</td><td>李主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-001</td><td>宫保鸡丁</td><td>A区中餐线</td><td>午餐</td><td>43.0</td><td>39.5</td><td class="td-surplus">3.5</td><td>8.1%</td><td><a class="link" onclick="openWelfareModal('宫保鸡丁','SUR-001','2.0')">员工福利</a></td><td>加班餐</td><td>2.0</td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-001</td><td>宫保鸡丁</td><td>A区中餐线</td><td>午餐</td><td>43.0</td><td>39.5</td><td class="td-surplus">3.5</td><td>8.1%</td><td>捐赠</td><td>捐赠予安保部</td><td>1.5</td><td>2026-04-22 14:00</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-005</td><td>红烧肉</td><td>B区中餐线</td><td>午餐</td><td>48.5</td><td>45.3</td><td class="td-surplus">3.2</td><td>6.6%</td><td><a class="link" onclick="openWelfareModal('红烧肉','SUR-005','3.2')">员工福利</a></td><td>加班餐</td><td>3.2</td><td>2026-04-22 14:45</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>SUR-003</td><td>香辣大虾</td><td>C区快餐线</td><td>午餐</td><td>20.5</td><td>18.3</td><td class="td-surplus">2.2</td><td>10.7%</td><td>废弃</td><td>只剩辣椒和虾头</td><td>2.2</td><td>2026-04-22 14:30</td><td>张主管</td><td class="td-actions"><a class="link">食材溯源链路</a> <a class="link">查看视频</a> <span class="action-more"><a class="action-more__trigger">更多 ▾</a><div class="action-more__menu"><a class="action-more__item" onclick="showDetail(this)">详情</a><a class="action-more__item">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user