feat: 小程序就餐记录列表改造与拍照记录页新增,web-admin营养模块字段与终端设备列完善
- mini-program/eat-home.html: 今日就餐记录列表移除食物图标、加序号徽标、副信息改为重量/热量、新增就餐时间;数据来源扩展为员工食堂/补充记录/拍照记录三种;底部"自记餐品"按钮拆为"手动补录"+"拍照记录"双按钮 - mini-program/eat-photo-record.html: 新增拍照记录页,支持餐品名称输入+拍照/上传图片,可添加多个餐品并保存至 sessionStorage 与首页联动 - web-admin/nutrition: din-dish-add/din-dish-all 食材"是否主料"字段改为"食材类型"(主材/辅材/调料);prod-proc-combo/sup-in-cleanin/sup-in-raw/sup-pkg-label 新增"终端设备"列展示设备名与编号;din-recipe-mgmt 新增"同步至生产任务"按钮与"已同步"标签 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
fbc9fdbddf
commit
7d7488737b
@@ -1,5 +1,13 @@
|
||||
# 营养管理小程序 CHANGELOG
|
||||
|
||||
## [1.3.0] - 2026-06-22
|
||||
|
||||
### 变更
|
||||
|
||||
**吃模块**
|
||||
- `eat-home.html` — 今日就餐记录列表改造:移除食物图标,食物名称左上角新增序号徽标,食物名称下方副信息由「蛋白质/脂肪/碳水」改为「重量(g)· 热量(kcal)」;数据来源标识由两种扩展为三种(员工食堂 / 补充记录 / 拍照记录),其中拍照记录条目不显示重量与热量;底部「自记餐品」按钮拆分为「手动补录」+「拍照记录」两个按钮,分别跳转 `eat-self-record.html` 与新增页 `eat-photo-record.html`
|
||||
- `eat-photo-record.html` — 新增拍照记录页:支持手动输入餐品名称 + 拍照/上传图片,可添加多个餐品并保存至 `sessionStorage['photoRecord_餐次']`,与 `eat-home.html` 就餐记录联动
|
||||
|
||||
## [1.2.1] - 2026-06-17
|
||||
|
||||
### 变更
|
||||
|
||||
@@ -81,26 +81,37 @@
|
||||
border-bottom: 0.5px solid #f5f5f5; cursor: pointer; text-decoration: none; color: inherit;
|
||||
}
|
||||
.meal-item:last-child { border-bottom: none; }
|
||||
.meal-item .food-icon {
|
||||
width: 44px; height: 44px; border-radius: 12px; background: #f5f5f5;
|
||||
display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0;
|
||||
}
|
||||
.meal-item .food-info { flex: 1; min-width: 0; }
|
||||
.meal-item .food-name { font-size: 14px; font-weight: 500; }
|
||||
.meal-item .food-meta { font-size: 12px; color: #999; margin-top: 2px; }
|
||||
/* 右侧:热量 + 来源徽标(员工食堂 / 自记餐品) */
|
||||
.meal-item .food-right { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; flex-shrink: 0; }
|
||||
.meal-item .food-cal { font-size: 13px; font-weight: 600; color: #fa8c16; }
|
||||
.meal-item .food-source { font-size: 10px; color: #999; padding: 1px 6px; border-radius: 3px; background: #f5f5f5; }
|
||||
.meal-item .food-source.self { color: #1677ff; background: #e6f4ff; }
|
||||
/* 自记餐品按钮(位于餐品列表下方) */
|
||||
.self-record-btn-wrap { padding: 4px 16px 16px; background: #fff; }
|
||||
.self-record-btn {
|
||||
width: 100%; padding: 11px 0; border-radius: 12px; border: 1.5px dashed #1677ff;
|
||||
background: #f0f7ff; color: #1677ff; font-size: 14px; font-weight: 600;
|
||||
cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 4px;
|
||||
/* 食物名称行:序号 + 名称 + 重量/热量(右对齐) */
|
||||
.meal-item .food-name-row { display: flex; align-items: center; gap: 6px; }
|
||||
.meal-item .food-index {
|
||||
flex-shrink: 0; min-width: 18px; height: 18px; line-height: 18px; padding: 0 5px;
|
||||
border-radius: 9px; background: #1677ff; color: #fff;
|
||||
font-size: 11px; font-weight: 600; text-align: center;
|
||||
}
|
||||
.self-record-btn:active { background: #d6e8ff; }
|
||||
.meal-item .food-name { font-size: 14px; font-weight: 500; flex-shrink: 0; }
|
||||
.meal-item .food-meta { font-size: 12px; color: #999; text-align: right; }
|
||||
/* 就餐时间 */
|
||||
.meal-item .food-time { font-size: 11px; color: #bbb; margin-top: 4px; }
|
||||
/* 右侧:来源徽标(员工食堂 / 补充记录 / 拍照记录) */
|
||||
.meal-item .food-right { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; flex-shrink: 0; }
|
||||
.meal-item .food-source {
|
||||
font-size: 10px; color: #999; padding: 1px 6px; border-radius: 3px; background: #f5f5f5;
|
||||
}
|
||||
.meal-item .food-source.self { color: #1677ff; background: #e6f4ff; }
|
||||
.meal-item .food-source.photo { color: #fa8c16; background: #fff7e6; }
|
||||
/* 底部双按钮:手动补录 / 拍照记录 */
|
||||
.record-actions-wrap { padding: 4px 16px 16px; background: #fff; }
|
||||
.record-actions { display: flex; gap: 10px; }
|
||||
.record-action-btn {
|
||||
flex: 1; padding: 11px 0; border-radius: 12px;
|
||||
font-size: 14px; font-weight: 600; cursor: pointer;
|
||||
display: flex; align-items: center; justify-content: center; gap: 4px;
|
||||
border: 1.5px dashed #1677ff; background: #f0f7ff; color: #1677ff;
|
||||
}
|
||||
.record-action-btn.photo { border-color: #fa8c16; background: #fff7e6; color: #fa8c16; }
|
||||
.record-action-btn:active { opacity: 0.8; }
|
||||
.record-action-btn .ra-icon { font-size: 16px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -134,11 +145,16 @@
|
||||
<div class="meal-tab">晚餐</div>
|
||||
</div>
|
||||
<div class="meal-list"></div>
|
||||
<!-- 自记餐品按钮:跳转至自记餐品二级页面,按当前激活餐次 -->
|
||||
<div class="self-record-btn-wrap">
|
||||
<button class="self-record-btn" onclick="goSelfRecord()">
|
||||
<span style="font-size:16px;">+</span>自记餐品
|
||||
</button>
|
||||
<!-- 双按钮:手动补录 / 拍照记录 -->
|
||||
<div class="record-actions-wrap">
|
||||
<div class="record-actions">
|
||||
<button class="record-action-btn" onclick="goSelfRecord()">
|
||||
<span class="ra-icon">✏️</span>手动补录
|
||||
</button>
|
||||
<button class="record-action-btn photo" onclick="goPhotoRecord()">
|
||||
<span class="ra-icon">📷</span>拍照记录
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -156,26 +172,27 @@
|
||||
</div>
|
||||
<script>
|
||||
/* ========== 餐次菜品数据(来源:员工食堂) ========== */
|
||||
/* meta 改为「重量 + 热量」格式,去除食物图标,新增就餐时间 */
|
||||
var mealData = {
|
||||
'早餐': [
|
||||
{ icon: '🥛', name: '豆浆', meta: '蛋白质 3.6g · 碳水 8.2g', cal: '65kcal', source: '员工食堂' },
|
||||
{ icon: '🥖', name: '油条', meta: '碳水 24g · 脂肪 12.8g', cal: '198kcal', source: '员工食堂' },
|
||||
{ icon: '🥚', name: '水煮蛋', meta: '蛋白质 6.3g · 脂肪 5.3g', cal: '78kcal', source: '员工食堂' },
|
||||
{ icon: '🥣', name: '小米粥', meta: '碳水 16g · 蛋白质 1.8g', cal: '72kcal', source: '员工食堂' }
|
||||
{ name: '豆浆', weight: 250, cal: 65, source: '员工食堂', time: '2026-06-22 07:32:18' },
|
||||
{ name: '油条', weight: 80, cal: 198, source: '员工食堂', time: '2026-06-22 07:32:42' },
|
||||
{ name: '水煮蛋', weight: 50, cal: 78, source: '员工食堂', time: '2026-06-22 07:33:05' },
|
||||
{ name: '小米粥', weight: 200, cal: 72, source: '员工食堂', time: '2026-06-22 07:33:28' }
|
||||
],
|
||||
'午餐': [
|
||||
{ icon: '🍗', name: '宫保鸡丁', meta: '蛋白质 22.4g · 脂肪 14.2g', cal: '285kcal', source: '员工食堂' },
|
||||
{ icon: '🐟', name: '清蒸鱼', meta: '蛋白质 20.8g · 脂肪 4.6g', cal: '142kcal', source: '员工食堂' },
|
||||
{ icon: '🥦', name: '炒西兰花', meta: '蛋白质 3.2g · 脂肪 3.8g', cal: '68kcal', source: '员工食堂' },
|
||||
{ icon: '🍚', name: '米饭(中碗)', meta: '碳水 58g · 蛋白质 4.2g', cal: '232kcal', source: '员工食堂' },
|
||||
{ icon: '🥬', name: '蒜蓉油麦菜', meta: '蛋白质 1.8g · 脂肪 3.2g', cal: '52kcal', source: '员工食堂' },
|
||||
{ icon: '🍲', name: '番茄蛋花汤', meta: '蛋白质 4.6g · 脂肪 2.1g', cal: '48kcal', source: '员工食堂' }
|
||||
{ name: '宫保鸡丁', weight: 200, cal: 285, source: '员工食堂', time: '2026-06-22 12:08:15' },
|
||||
{ name: '清蒸鱼', weight: 180, cal: 142, source: '员工食堂', time: '2026-06-22 12:08:38' },
|
||||
{ name: '炒西兰花', weight: 150, cal: 68, source: '员工食堂', time: '2026-06-22 12:09:02' },
|
||||
{ name: '米饭(中碗)', weight: 200, cal: 232, source: '员工食堂', time: '2026-06-22 12:09:25' },
|
||||
{ name: '蒜蓉油麦菜', weight: 150, cal: 52, source: '员工食堂', time: '2026-06-22 12:09:48' },
|
||||
{ name: '番茄蛋花汤', weight: 200, cal: 48, source: '员工食堂', time: '2026-06-22 12:10:12' }
|
||||
],
|
||||
'晚餐': [
|
||||
{ icon: '🍳', name: '番茄炒蛋', meta: '蛋白质 10.2g · 脂肪 8.6g', cal: '156kcal', source: '员工食堂' },
|
||||
{ icon: '🫑', name: '青椒肉丝', meta: '蛋白质 14.8g · 脂肪 9.2g', cal: '178kcal', source: '员工食堂' },
|
||||
{ icon: '🥬', name: '紫菜蛋花汤', meta: '蛋白质 3.4g · 脂肪 1.2g', cal: '32kcal', source: '员工食堂' },
|
||||
{ icon: '🍞', name: '馒头', meta: '碳水 44g · 蛋白质 7.0g', cal: '221kcal', source: '员工食堂' }
|
||||
{ name: '番茄炒蛋', weight: 200, cal: 156, source: '员工食堂', time: '2026-06-22 18:15:33' },
|
||||
{ name: '青椒肉丝', weight: 180, cal: 178, source: '员工食堂', time: '2026-06-22 18:15:58' },
|
||||
{ name: '紫菜蛋花汤', weight: 200, cal: 32, source: '员工食堂', time: '2026-06-22 18:16:22' },
|
||||
{ name: '馒头', weight: 100, cal: 221, source: '员工食堂', time: '2026-06-22 18:16:45' }
|
||||
]
|
||||
};
|
||||
|
||||
@@ -232,7 +249,15 @@
|
||||
} catch (e) { return {}; }
|
||||
}
|
||||
|
||||
/* 把某餐次的自记记录转为主列表渲染格式 */
|
||||
/* 读取 sessionStorage 中某餐次的拍照记录 */
|
||||
function loadPhotoRecord(mealType) {
|
||||
try {
|
||||
var raw = sessionStorage.getItem('photoRecord_' + mealType);
|
||||
return raw ? JSON.parse(raw) : [];
|
||||
} catch (e) { return []; }
|
||||
}
|
||||
|
||||
/* 把某餐次的自记记录转为主列表渲染格式(补充记录来源) */
|
||||
function computeSelfItems(mealType) {
|
||||
var state = loadSelfRecord(mealType);
|
||||
var items = [];
|
||||
@@ -241,39 +266,66 @@
|
||||
if (!rec || !rec.qty || rec.qty <= 0) return;
|
||||
var d = findSelfDish(id);
|
||||
if (!d) return;
|
||||
var cal, qtyText;
|
||||
var cal, gram;
|
||||
if (rec.mode === '份') {
|
||||
gram = d.gram * rec.qty;
|
||||
cal = Math.round(d.cal * rec.qty);
|
||||
qtyText = rec.qty + ' 份';
|
||||
} else {
|
||||
gram = rec.qty;
|
||||
cal = Math.round(d.cal * rec.qty / d.gram);
|
||||
qtyText = rec.qty + ' g';
|
||||
}
|
||||
items.push({
|
||||
icon: d.icon, name: d.name,
|
||||
meta: qtyText + ' · ' + d.desc,
|
||||
cal: cal + 'kcal',
|
||||
source: '自记餐品', isSelf: true
|
||||
name: d.name,
|
||||
weight: gram, cal: cal,
|
||||
source: '补充记录', sourceClass: 'self',
|
||||
time: rec.time || formatNow()
|
||||
});
|
||||
});
|
||||
return items;
|
||||
}
|
||||
|
||||
/* 把某餐次的拍照记录转为主列表渲染格式(拍照记录来源,无重量/热量) */
|
||||
function computePhotoItems(mealType) {
|
||||
return loadPhotoRecord(mealType).map(function(p) {
|
||||
return {
|
||||
name: p.name,
|
||||
source: '拍照记录', sourceClass: 'photo',
|
||||
skipMeta: true,
|
||||
time: p.time || formatNow()
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/* 格式化当前时间为「YYYY-MM-DD HH:mm:ss」 */
|
||||
function formatNow() {
|
||||
function pad(n) { return n < 10 ? '0' + n : '' + n; }
|
||||
var d = new Date();
|
||||
return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate())
|
||||
+ ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds());
|
||||
}
|
||||
|
||||
/* ========== 主列表渲染 ========== */
|
||||
var mealTabs = document.querySelectorAll('.meal-tab');
|
||||
var mealList = document.querySelector('.meal-list');
|
||||
|
||||
function renderMeal(mealType) {
|
||||
currentMeal = mealType;
|
||||
var items = (mealData[mealType] || []).slice().concat(computeSelfItems(mealType));
|
||||
mealList.innerHTML = items.map(function(d) {
|
||||
var items = (mealData[mealType] || []).slice()
|
||||
.concat(computeSelfItems(mealType))
|
||||
.concat(computePhotoItems(mealType));
|
||||
mealList.innerHTML = items.map(function(d, idx) {
|
||||
/* 重量/热量放在餐品名后面(右对齐),拍照记录无此元素 */
|
||||
var metaHtml = d.skipMeta ? '' :
|
||||
'<span class="food-meta">重量 ' + d.weight + 'g · 热量 ' + d.cal + 'kcal</span>';
|
||||
return '<a class="meal-item" href="eat-dish-detail.html">'
|
||||
+ '<div class="food-icon">' + d.icon + '</div>'
|
||||
+ '<div class="food-info"><div class="food-name">' + d.name + '</div>'
|
||||
+ '<div class="food-meta">' + d.meta + '</div></div>'
|
||||
+ '<div class="food-info">'
|
||||
+ '<div class="food-name-row"><span class="food-index">' + (idx + 1) + '</span>'
|
||||
+ '<span class="food-name">' + d.name + '</span></div>'
|
||||
+ '<div class="food-time">' + (d.time || '') + '</div>'
|
||||
+ '</div>'
|
||||
+ '<div class="food-right">'
|
||||
+ '<span class="food-cal">' + d.cal + '</span>'
|
||||
+ '<span class="food-source' + (d.isSelf ? ' self' : '') + '">' + d.source + '</span>'
|
||||
+ metaHtml
|
||||
+ '<span class="food-source ' + (d.sourceClass || '') + '">' + d.source + '</span>'
|
||||
+ '</div></a>';
|
||||
}).join('');
|
||||
}
|
||||
@@ -286,11 +338,16 @@
|
||||
});
|
||||
});
|
||||
|
||||
/* 跳转到自记餐品二级页面,传当前餐次 */
|
||||
/* 跳转到手动补录页(原自记餐品),传当前餐次 */
|
||||
function goSelfRecord() {
|
||||
location.href = 'eat-self-record.html?meal=' + encodeURIComponent(currentMeal);
|
||||
}
|
||||
|
||||
/* 跳转到拍照记录页,传当前餐次 */
|
||||
function goPhotoRecord() {
|
||||
location.href = 'eat-photo-record.html?meal=' + encodeURIComponent(currentMeal);
|
||||
}
|
||||
|
||||
/* 初始渲染:午餐 */
|
||||
renderMeal('午餐');
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,324 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>拍照记录 | 智能餐养小程序</title>
|
||||
<style>
|
||||
/* 全局重置 */
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
background: #2a2a2a; display: flex; justify-content: center; align-items: flex-start;
|
||||
min-height: 100vh; font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', sans-serif;
|
||||
padding: 24px 0 40px;
|
||||
}
|
||||
/* 手机壳 */
|
||||
.phone-shell {
|
||||
width: 390px; height: 844px; background: #fff; border-radius: 44px;
|
||||
box-shadow: 0 20px 60px rgba(0,0,0,0.3), inset 0 0 0 2px #e0e0e0;
|
||||
overflow: hidden; position: relative; display: flex; flex-direction: column;
|
||||
}
|
||||
/* 状态栏 */
|
||||
.status-bar {
|
||||
height: 44px; background: #fff; display: flex; align-items: center;
|
||||
justify-content: space-between; padding: 0 24px; font-size: 12px; font-weight: 600; flex-shrink: 0;
|
||||
}
|
||||
.status-bar .time { font-size: 15px; font-weight: 700; }
|
||||
.status-bar .icons { display: flex; gap: 6px; align-items: center; }
|
||||
/* 导航栏 */
|
||||
.nav-bar {
|
||||
height: 44px; background: #fff; display: flex; align-items: center;
|
||||
padding: 0 16px; border-bottom: 0.5px solid #f0f0f0; flex-shrink: 0; position: relative;
|
||||
}
|
||||
.nav-bar .back { font-size: 22px; color: #1677ff; cursor: pointer; text-decoration: none; line-height: 1; }
|
||||
.nav-bar .title { position: absolute; left: 50%; transform: translateX(-50%); font-size: 17px; font-weight: 600; }
|
||||
.home-indicator {
|
||||
height: 20px; display: flex; align-items: center; justify-content: center; background: #fff; flex-shrink: 0;
|
||||
}
|
||||
.home-indicator::after { content: ''; width: 120px; height: 5px; background: #1a1a1a; border-radius: 3px; opacity: 0.2; }
|
||||
|
||||
/* === 业务样式 === */
|
||||
.page-body {
|
||||
flex: 1; overflow-y: auto; background: #f5f5f5;
|
||||
display: flex; flex-direction: column;
|
||||
}
|
||||
.page-body::-webkit-scrollbar { display: none; }
|
||||
|
||||
/* 当前餐次提示 */
|
||||
.meal-tip {
|
||||
padding: 10px 16px; background: #fff7e6; color: #fa8c16;
|
||||
font-size: 12px; border-bottom: 0.5px solid #ffe7ba;
|
||||
}
|
||||
|
||||
/* 添加区卡片 */
|
||||
.add-card {
|
||||
margin: 12px; background: #fff; border-radius: 12px; padding: 14px;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.04);
|
||||
}
|
||||
.add-card .label {
|
||||
font-size: 13px; color: #666; margin-bottom: 8px;
|
||||
}
|
||||
.name-input {
|
||||
width: 100%; height: 38px; border: 1px solid #e0e0e0; border-radius: 8px;
|
||||
padding: 0 12px; font-size: 14px; color: #333; outline: none;
|
||||
background: #fafafa;
|
||||
}
|
||||
.name-input:focus { border-color: #fa8c16; background: #fff; }
|
||||
.photo-row {
|
||||
display: flex; gap: 10px; margin-top: 12px; align-items: center;
|
||||
}
|
||||
/* 拍照按钮 */
|
||||
.photo-btn {
|
||||
flex: 1; height: 80px; border: 1.5px dashed #fa8c16; border-radius: 10px;
|
||||
background: #fff7e6; color: #fa8c16; font-size: 14px; font-weight: 600;
|
||||
cursor: pointer; display: flex; flex-direction: column; align-items: center;
|
||||
justify-content: center; gap: 4px;
|
||||
}
|
||||
.photo-btn .pb-icon { font-size: 26px; line-height: 1; }
|
||||
.photo-btn:active { opacity: 0.8; }
|
||||
.photo-btn input[type=file] { display: none; }
|
||||
/* 添加到列表按钮 */
|
||||
.add-list-btn {
|
||||
width: 80px; height: 80px; border-radius: 10px;
|
||||
background: #fa8c16; color: #fff; font-size: 13px; font-weight: 600;
|
||||
cursor: pointer; border: none;
|
||||
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
|
||||
}
|
||||
.add-list-btn:active { opacity: 0.85; }
|
||||
.add-list-btn .al-icon { font-size: 22px; line-height: 1; }
|
||||
|
||||
/* 已添加餐品列表 */
|
||||
.list-card {
|
||||
flex: 1; margin: 0 12px 12px; background: #fff; border-radius: 12px;
|
||||
padding: 4px 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.04);
|
||||
overflow-y: auto;
|
||||
}
|
||||
.list-card::-webkit-scrollbar { display: none; }
|
||||
.list-card .lc-title {
|
||||
font-size: 13px; color: #666; padding: 10px 0 6px;
|
||||
border-bottom: 0.5px solid #f0f0f0;
|
||||
}
|
||||
.list-empty {
|
||||
padding: 30px 0; text-align: center; color: #bbb; font-size: 13px;
|
||||
}
|
||||
|
||||
/* 餐品条目 */
|
||||
.dish-row {
|
||||
display: flex; align-items: center; gap: 10px; padding: 10px 0;
|
||||
border-bottom: 0.5px solid #f5f5f5;
|
||||
}
|
||||
.dish-row:last-child { border-bottom: none; }
|
||||
.dish-row .dish-thumb {
|
||||
width: 56px; height: 56px; border-radius: 8px; background: #f5f5f5;
|
||||
background-size: cover; background-position: center; flex-shrink: 0;
|
||||
display: flex; align-items: center; justify-content: center; font-size: 24px;
|
||||
}
|
||||
.dish-row .dish-info { flex: 1; min-width: 0; }
|
||||
.dish-row .dish-name {
|
||||
font-size: 14px; color: #333; font-weight: 500;
|
||||
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
||||
}
|
||||
.dish-row .dish-sub {
|
||||
font-size: 11px; color: #fa8c16; margin-top: 3px;
|
||||
}
|
||||
.dish-row .del-btn {
|
||||
width: 28px; height: 28px; border-radius: 50%; border: none;
|
||||
background: #fff1f0; color: #ff4d4f; font-size: 16px; cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.dish-row .del-btn:active { opacity: 0.8; }
|
||||
|
||||
/* 底部保存栏 */
|
||||
.save-bar {
|
||||
padding: 10px 16px 14px; background: #fff; border-top: 0.5px solid #f0f0f0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.save-btn {
|
||||
width: 100%; height: 44px; border-radius: 22px; border: none;
|
||||
background: #fa8c16; color: #fff; font-size: 15px; font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
.save-btn:active { opacity: 0.85; }
|
||||
.save-btn:disabled { background: #ffd6a8; cursor: not-allowed; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="phone-shell">
|
||||
<!-- 状态栏 -->
|
||||
<div class="status-bar">
|
||||
<span class="time">09:41</span>
|
||||
<div class="icons">
|
||||
<span>📶</span><span>WiFi</span><span>🔋</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 导航栏 -->
|
||||
<div class="nav-bar">
|
||||
<a class="back" href="eat-home.html">‹</a>
|
||||
<span class="title">拍照记录</span>
|
||||
</div>
|
||||
|
||||
<!-- 主体 -->
|
||||
<div class="page-body">
|
||||
<!-- 当前餐次提示 -->
|
||||
<div class="meal-tip">当前餐次:<strong id="mealName">午餐</strong></div>
|
||||
|
||||
<!-- 添加区 -->
|
||||
<div class="add-card">
|
||||
<div class="label">餐品名称</div>
|
||||
<input class="name-input" id="dishName" type="text" placeholder="请输入餐品名称" maxlength="20" />
|
||||
|
||||
<div class="photo-row">
|
||||
<!-- 拍照/上传 -->
|
||||
<label class="photo-btn">
|
||||
<span class="pb-icon">📷</span>
|
||||
<span id="photoBtnText">拍照 / 上传图片</span>
|
||||
<input id="photoInput" type="file" accept="image/*" capture="environment" />
|
||||
</label>
|
||||
|
||||
<!-- 添加到列表 -->
|
||||
<button class="add-list-btn" onclick="addDish()">
|
||||
<span class="al-icon">+</span>
|
||||
<span>添加</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 已添加餐品列表 -->
|
||||
<div class="list-card">
|
||||
<div class="lc-title">已添加餐品(<span id="dishCount">0</span>)</div>
|
||||
<div id="dishList"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 底部保存按钮 -->
|
||||
<div class="save-bar">
|
||||
<button class="save-btn" id="saveBtn" onclick="saveAll()">保存</button>
|
||||
</div>
|
||||
|
||||
<!-- Home Indicator -->
|
||||
<div class="home-indicator"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/* ========== 解析当前餐次 ========== */
|
||||
function getQueryMeal() {
|
||||
var m = decodeURIComponent((location.search.match(/meal=([^&]+)/) || [,''])[1]);
|
||||
return ['早餐','午餐','晚餐'].indexOf(m) >= 0 ? m : '午餐';
|
||||
}
|
||||
var currentMeal = getQueryMeal();
|
||||
document.getElementById('mealName').textContent = currentMeal;
|
||||
|
||||
/* ========== 已添加餐品列表(内存态,未保存前不持久化) ========== */
|
||||
/* 每条:{ name, image(DataURL 缩略图) } */
|
||||
var dishList = [];
|
||||
|
||||
/* 当前选中的图片(DataURL) */
|
||||
var pendingImage = null;
|
||||
|
||||
/* 格式化当前时间为「YYYY-MM-DD HH:mm:ss」 */
|
||||
function formatNow() {
|
||||
function pad(n) { return n < 10 ? '0' + n : '' + n; }
|
||||
var d = new Date();
|
||||
return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate())
|
||||
+ ' ' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds());
|
||||
}
|
||||
|
||||
/* 拍照/上传图片处理 */
|
||||
document.getElementById('photoInput').addEventListener('change', function(e) {
|
||||
var file = e.target.files && e.target.files[0];
|
||||
if (!file) return;
|
||||
/* 压缩为缩略图,避免 sessionStorage 撑爆 */
|
||||
var reader = new FileReader();
|
||||
reader.onload = function(ev) {
|
||||
var img = new Image();
|
||||
img.onload = function() {
|
||||
var canvas = document.createElement('canvas');
|
||||
var maxW = 200;
|
||||
var w = img.width, h = img.height;
|
||||
if (w > maxW) { h = h * maxW / w; w = maxW; }
|
||||
canvas.width = w; canvas.height = h;
|
||||
canvas.getContext('2d').drawImage(img, 0, 0, w, h);
|
||||
pendingImage = canvas.toDataURL('image/jpeg', 0.7);
|
||||
document.getElementById('photoBtnText').textContent = '已选图片 ✓';
|
||||
};
|
||||
img.src = ev.target.result;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
|
||||
/* 添加餐品到列表 */
|
||||
function addDish() {
|
||||
var nameEl = document.getElementById('dishName');
|
||||
var name = nameEl.value.trim();
|
||||
if (!name) {
|
||||
alert('请输入餐品名称');
|
||||
nameEl.focus();
|
||||
return;
|
||||
}
|
||||
if (!pendingImage) {
|
||||
alert('请先拍照或上传一张图片');
|
||||
return;
|
||||
}
|
||||
dishList.push({ name: name, image: pendingImage, time: formatNow() });
|
||||
/* 重置输入 */
|
||||
nameEl.value = '';
|
||||
pendingImage = null;
|
||||
document.getElementById('photoInput').value = '';
|
||||
document.getElementById('photoBtnText').textContent = '拍照 / 上传图片';
|
||||
renderList();
|
||||
}
|
||||
|
||||
/* 删除餐品 */
|
||||
function removeDish(idx) {
|
||||
dishList.splice(idx, 1);
|
||||
renderList();
|
||||
}
|
||||
|
||||
/* 渲染列表 */
|
||||
function renderList() {
|
||||
var listEl = document.getElementById('dishList');
|
||||
document.getElementById('dishCount').textContent = dishList.length;
|
||||
var saveBtn = document.getElementById('saveBtn');
|
||||
saveBtn.disabled = dishList.length === 0;
|
||||
|
||||
if (dishList.length === 0) {
|
||||
listEl.innerHTML = '<div class="list-empty">暂无餐品,请输入名称并拍照后添加</div>';
|
||||
return;
|
||||
}
|
||||
listEl.innerHTML = dishList.map(function(d, idx) {
|
||||
return '<div class="dish-row">'
|
||||
+ '<div class="dish-thumb" style="background-image:url(' + d.image + ')"></div>'
|
||||
+ '<div class="dish-info">'
|
||||
+ '<div class="dish-name">' + escapeHtml(d.name) + '</div>'
|
||||
+ '<div class="dish-sub">拍照记录</div>'
|
||||
+ '</div>'
|
||||
+ '<button class="del-btn" onclick="removeDish(' + idx + ')">×</button>'
|
||||
+ '</div>';
|
||||
}).join('');
|
||||
}
|
||||
|
||||
/* 简单转义,避免 name 中含 HTML 特殊字符 */
|
||||
function escapeHtml(s) {
|
||||
return s.replace(/[&<>"']/g, function(c) {
|
||||
return ({'&':'&','<':'<','>':'>','"':'"',"'":'''})[c];
|
||||
});
|
||||
}
|
||||
|
||||
/* 保存到 sessionStorage 并返回首页 */
|
||||
function saveAll() {
|
||||
if (dishList.length === 0) return;
|
||||
try {
|
||||
sessionStorage.setItem('photoRecord_' + currentMeal, JSON.stringify(dishList));
|
||||
} catch (e) {
|
||||
alert('保存失败:图片数据过大');
|
||||
return;
|
||||
}
|
||||
location.href = 'eat-home.html';
|
||||
}
|
||||
|
||||
/* 初始化 */
|
||||
renderList();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -274,7 +274,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
</div>
|
||||
<div class="form-group"><label>净菜类型<span class="required">*</span></label><select class="form-select" id="ingredientNetType" disabled><option value="">请先选择食材</option></select></div>
|
||||
</div>
|
||||
<div class="form-row"><div class="form-group"><label>用量(g/份)<span class="required">*</span></label><input class="form-input" type="number" id="ingredientAmount" placeholder="请输入用量"></div><div class="form-group"><label>是否主料</label><select class="form-select" id="ingredientIsMain"><option>辅料</option><option>主料</option></select></div></div>
|
||||
<div class="form-row"><div class="form-group"><label>用量(g/份)<span class="required">*</span></label><input class="form-input" type="number" id="ingredientAmount" placeholder="请输入用量"></div><div class="form-group"><label>食材类型</label><select class="form-select" id="ingredientType"><option>辅材</option><option>主材</option><option>调料</option></select></div></div>
|
||||
<div class="form-row"><div class="form-group"><label>过敏原</label><input class="form-input" type="text" id="ingredientAllergen" placeholder="无则填无"></div><div class="form-group"><label>备注</label><input class="form-input" type="text" id="ingredientNote" placeholder="请输入备注信息"></div></div>
|
||||
</div>
|
||||
<div class="dialog__footer">
|
||||
@@ -302,9 +302,9 @@ var INNOV_MAP = {
|
||||
expNo:'INN-H002', goal:'添加燕麦、藜麦,膳食纤维提升3倍', members:'厨师长陈磊 / 营养师王芳',
|
||||
name:'高纤维主食包', category:'主食', meal:'早/午', pyramid:'谷薯杂豆', allergen:'无', tag:'高纤维',
|
||||
composition:[
|
||||
{name:'燕麦',netType:'燕麦片',amount:80,pct:'40%',main:true,allergen:'无',note:'提升纤维'},
|
||||
{name:'藜麦',netType:'藜麦粒',amount:60,pct:'30%',main:true,allergen:'无',note:'低GI'},
|
||||
{name:'大米',netType:'熟米饭',amount:60,pct:'30%',main:false,allergen:'无',note:'基底'}
|
||||
{name:'燕麦',netType:'燕麦片',amount:80,pct:'40%',type:'主材',allergen:'无',note:'提升纤维'},
|
||||
{name:'藜麦',netType:'藜麦粒',amount:60,pct:'30%',type:'主材',allergen:'无',note:'低GI'},
|
||||
{name:'大米',netType:'熟米饭',amount:60,pct:'30%',type:'辅材',allergen:'无',note:'基底'}
|
||||
],
|
||||
cook:{mainMethod:'蒸',subMethod:'无',heat:'大火→中火',duration:30,oil:0,salt:3,temp:100,output:200,steps:4,desc:''},
|
||||
nutri:{calorie:342,protein:12.8,carb:58.4,fat:5.2,vitC:0,mineral:38,fiber:9.6,sodium:210},
|
||||
@@ -317,10 +317,10 @@ var INNOV_MAP = {
|
||||
expNo:'INN-H004', goal:'搭配维C食材,补铁效率提升2倍', members:'厨师长赵敏 / 营养师李明',
|
||||
name:'富铁青菜汤', category:'汤品', meal:'午/晚', pyramid:'蔬菜', allergen:'大豆', tag:'高铁',
|
||||
composition:[
|
||||
{name:'菠菜',netType:'菠菜段',amount:120,pct:'40%',main:true,allergen:'无',note:'高铁来源'},
|
||||
{name:'豆腐',netType:'豆腐块',amount:80,pct:'27%',main:true,allergen:'大豆',note:'补充蛋白'},
|
||||
{name:'胡萝卜',netType:'胡萝卜丝',amount:40,pct:'13%',main:false,allergen:'无',note:'维C协同'},
|
||||
{name:'食用油',netType:'净油',amount:5,pct:'2%',main:false,allergen:'无',note:'少量'}
|
||||
{name:'菠菜',netType:'菠菜段',amount:120,pct:'40%',type:'主材',allergen:'无',note:'高铁来源'},
|
||||
{name:'豆腐',netType:'豆腐块',amount:80,pct:'27%',type:'主材',allergen:'大豆',note:'补充蛋白'},
|
||||
{name:'胡萝卜',netType:'胡萝卜丝',amount:40,pct:'13%',type:'辅材',allergen:'无',note:'维C协同'},
|
||||
{name:'食用油',netType:'净油',amount:5,pct:'2%',type:'调料',allergen:'无',note:'少量'}
|
||||
],
|
||||
cook:{mainMethod:'煮',subMethod:'无',heat:'大火→小火',duration:15,oil:5,salt:2,temp:100,output:300,steps:3,desc:''},
|
||||
nutri:{calorie:68,protein:5.4,carb:6.2,fat:2.8,vitC:32,mineral:86,fiber:2.4,sodium:320},
|
||||
@@ -394,7 +394,7 @@ var STEP_HTML = [
|
||||
<button class="btn btn-primary" style="height:30px;font-size:var(--font-xs);" onclick="openIngredientDialog()">➕ 新增食材</button>
|
||||
</div>
|
||||
<table class="ingredient-table">
|
||||
<thead><tr><th>食材名称</th><th>净菜类型</th><th>用量(g/份)</th><th>是否主料</th><th>过敏原</th><th>备注</th><th>操作</th></tr></thead>
|
||||
<thead><tr><th>食材名称</th><th>净菜类型</th><th>用量(g/份)</th><th>食材类型</th><th>过敏原</th><th>备注</th><th>操作</th></tr></thead>
|
||||
<tbody><tr><td colspan="7" style="text-align:center;color:var(--text-placeholder);padding:32px;">暂无食材,请点击"新增食材"添加</td></tr></tbody>
|
||||
</table>`,
|
||||
|
||||
@@ -564,7 +564,7 @@ function resetIngredientForm(){
|
||||
netTypeSelect.disabled=true;
|
||||
}
|
||||
document.getElementById('ingredientAmount').value='';
|
||||
document.getElementById('ingredientIsMain').selectedIndex=0;
|
||||
document.getElementById('ingredientType').selectedIndex=0;
|
||||
document.getElementById('ingredientAllergen').value='';
|
||||
document.getElementById('ingredientNote').value='';
|
||||
}
|
||||
@@ -591,7 +591,7 @@ function confirmAddIngredient(){
|
||||
if(!name){alert('请选择食材');return;}
|
||||
if(!netType){alert('请选择净菜类型');return;}
|
||||
if(!amount){alert('请填写用量');return;}
|
||||
var isMain=document.getElementById('ingredientIsMain').value;
|
||||
var ingredientType=document.getElementById('ingredientType').value;
|
||||
var allergen=document.getElementById('ingredientAllergen').value.trim()||'无';
|
||||
var note=document.getElementById('ingredientNote').value.trim()||'—';
|
||||
var tbody=document.querySelector('.ingredient-table tbody');
|
||||
@@ -599,8 +599,9 @@ function confirmAddIngredient(){
|
||||
var emptyRow=tbody.querySelector('td[colspan]');
|
||||
if(emptyRow) emptyRow.parentElement.remove();
|
||||
var tr=document.createElement('tr');
|
||||
var typeTagMap={'主材':'tag-blue','辅材':'tag-gray','调料':'tag-orange'};
|
||||
tr.innerHTML='<td>'+name+'</td><td>'+netType+'</td><td>'+amount+'</td>'
|
||||
+'<td>'+(isMain==='主料'?'<span class="tag tag-blue">主料</span>':'<span class="tag tag-gray">辅料</span>')+'</td>'
|
||||
+'<td><span class="tag '+(typeTagMap[ingredientType]||'tag-gray')+'">'+ingredientType+'</span></td>'
|
||||
+'<td>'+allergen+'</td>'
|
||||
+'<td>'+note+'</td>'
|
||||
+'<td><a class="link" onclick="this.closest(\'tr\').remove()">删除</a></td>';
|
||||
@@ -678,7 +679,7 @@ var EDIT_DATA = {
|
||||
allergen:'无', tag:'高蛋白', status:'上架',
|
||||
crowd:[{name:'成人',level:'推荐'},{name:'高血脂人群',level:'慎食'},{name:'高血压人群',level:'适量'}],
|
||||
specs:[{spec:'标准份',weight:200,price:12,isDefault:true},{spec:'小份',weight:120,price:8,isDefault:false},{spec:'大份',weight:300,price:18,isDefault:false}],
|
||||
composition:[{name:'五花肉',netType:'红烧块',amount:150,pct:'60%',main:true,allergen:'无',note:'—'},{name:'冰糖',netType:'糖浆',amount:20,pct:'8%',main:false,allergen:'无',note:'上色'},{name:'酱油',netType:'调味汁',amount:15,pct:'6%',main:false,allergen:'含大豆',note:'调味'},{name:'料酒',netType:'料酒汁',amount:10,pct:'4%',main:false,allergen:'无',note:'去腥'}],
|
||||
composition:[{name:'五花肉',netType:'红烧块',amount:150,pct:'60%',type:'主材',allergen:'无',note:'—'},{name:'冰糖',netType:'糖浆',amount:20,pct:'8%',type:'调料',allergen:'无',note:'上色'},{name:'酱油',netType:'调味汁',amount:15,pct:'6%',type:'调料',allergen:'含大豆',note:'调味'},{name:'料酒',netType:'料酒汁',amount:10,pct:'4%',type:'调料',allergen:'无',note:'去腥'}],
|
||||
cook:{mainMethod:'炖',subMethod:'煎',heat:'中火→小火',duration:45,oil:15,salt:3,temp:100,output:200,steps:6,desc:'1.五花肉切块焯水;2.锅中煎至金黄;3.加冰糖炒色;4.加酱油料酒;5.加水小火炖40分钟;6.大火收汁'},
|
||||
nutri:{calorie:385,protein:18.2,carb:12.4,fat:28.6,vitC:2.1,mineral:45,fiber:1.8,sodium:486},
|
||||
taste:{sour:1,sweet:3,bitter:1,spicy:1,salty:4,smell:4.2,flavorScore:3.8,flavorGrade:'good'},
|
||||
@@ -773,8 +774,8 @@ function fillEditData(){
|
||||
d.composition.forEach(function(c){
|
||||
var tr = document.createElement('tr');
|
||||
tr.innerHTML = (pageMode==='convert'
|
||||
? '<td>'+c.name+'</td><td>'+(c.netType||'—')+'</td><td>'+c.amount+'g</td><td><span class="tag tag-'+(c.main?'green':'gray')+'">'+(c.main?'主料':'辅料')+'</span></td><td>'+c.allergen+'</td><td>'+c.note+'</td><td><span style="color:#bbb;cursor:not-allowed;">编辑</span> <span style="color:#bbb;cursor:not-allowed;">删除</span></td>'
|
||||
: '<td>'+c.name+'</td><td>'+(c.netType||'—')+'</td><td>'+c.amount+'g</td><td><span class="tag tag-'+(c.main?'green':'gray')+'">'+(c.main?'主料':'辅料')+'</span></td><td>'+c.allergen+'</td><td>'+c.note+'</td><td><span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td>');
|
||||
? '<td>'+c.name+'</td><td>'+(c.netType||'—')+'</td><td>'+c.amount+'g</td><td><span class="tag '+(c.type==='主材'?'tag-blue':c.type==='调料'?'tag-orange':'tag-gray')+'">'+(c.type||'辅材')+'</span></td><td>'+c.allergen+'</td><td>'+c.note+'</td><td><span style="color:#bbb;cursor:not-allowed;">编辑</span> <span style="color:#bbb;cursor:not-allowed;">删除</span></td>'
|
||||
: '<td>'+c.name+'</td><td>'+(c.netType||'—')+'</td><td>'+c.amount+'g</td><td><span class="tag '+(c.type==='主材'?'tag-blue':c.type==='调料'?'tag-orange':'tag-gray')+'">'+(c.type||'辅材')+'</span></td><td>'+c.allergen+'</td><td>'+c.note+'</td><td><span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td>');
|
||||
tbody.appendChild(tr);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -275,7 +275,7 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
// 餐品数据
|
||||
const DISHES = [
|
||||
{id:'DISH001',name:'红烧肉',icon:'🥩',category:'荤菜',tags:['高蛋白'],specs:[{name:'标准份',weight:200,price:12,isDefault:true},{name:'小份',weight:120,price:8},{name:'大份',weight:300,price:18}],method:'炖',meal:'午/晚',allergen:'无',status:'启用',source:'手动添加',weightBasePrice:'6.00',weightVipPrice:'5.40',crowd:[{name:'成人',level:'推荐'},{name:'高血脂人群',level:'慎食'},{name:'高血压人群',level:'适量'}],crowdNote:'高血脂人群控制摄入量',
|
||||
composition:[{name:'猪五花肉',netType:'红烧块',amount:160,pct:'80%',state:'净菜',main:true,allergen:'无',note:'—'},{name:'生姜',netType:'姜片',amount:5,pct:'2.5%',state:'净菜',main:false,allergen:'无',note:'—'},{name:'生抽',netType:'调味汁',amount:15,pct:'7.5%',state:'原料',main:false,allergen:'含麸质',note:'酱油'},{name:'冰糖',netType:'糖浆',amount:10,pct:'5%',state:'原料',main:false,allergen:'无',note:'上色提味'},{name:'料酒',netType:'料酒汁',amount:10,pct:'5%',state:'原料',main:false,allergen:'无',note:'去腥'}],
|
||||
composition:[{name:'猪五花肉',netType:'红烧块',amount:160,pct:'80%',state:'净菜',type:'主材',allergen:'无',note:'—'},{name:'生姜',netType:'姜片',amount:5,pct:'2.5%',state:'净菜',type:'辅材',allergen:'无',note:'—'},{name:'生抽',netType:'调味汁',amount:15,pct:'7.5%',state:'原料',type:'调料',allergen:'含麸质',note:'酱油'},{name:'冰糖',netType:'糖浆',amount:10,pct:'5%',state:'原料',type:'调料',allergen:'无',note:'上色提味'},{name:'料酒',netType:'料酒汁',amount:10,pct:'5%',state:'原料',type:'调料',allergen:'无',note:'去腥'}],
|
||||
nutri:{calorie:385,protein:18.2,carb:12.4,fat:28.6,vitC:0.8,mineral:42,fiber:0.3,sodium:486,nutriGrade:'偏差',note:'铁2.4mg、锌1.8mg'},
|
||||
cook:{mainMethod:'炖',subMethod:'煎',heat:'中火→小火',duration:45,oil:15,salt:3,temp:'100→80',output:200,steps:6},
|
||||
taste:{sour:1,sweet:3,bitter:1,spicy:1,salty:4,smell:4.2,flavorScore:3.8,flavorGrade:'良好'},
|
||||
@@ -283,7 +283,7 @@ const DISHES = [
|
||||
texture:{hardness:2,sticky:3,crispy:1,smooth:4,elastic:3,textureScore:3.6,textureGrade:'良好'}
|
||||
},
|
||||
{id:'DISH002',name:'清炒时蔬',icon:'🥬',category:'素菜',tags:['低脂','素食'],specs:[{name:'标准份',weight:150,price:6,isDefault:true},{name:'小份',weight:100,price:4}],method:'炒',meal:'早/午/晚',allergen:'无',status:'启用',source:'系统内置',weightBasePrice:'3.00',weightVipPrice:'2.70',crowd:[{name:'全人群',level:'推荐'},{name:'糖尿病人群',level:'推荐'},{name:'肾结石人群',level:'慎食'}],crowdNote:'肾结石人群慎食(草酸含量高)',
|
||||
composition:[{name:'时令青菜',netType:'青菜段',amount:120,pct:'80%',state:'净菜',main:true,allergen:'无',note:'—'},{name:'蒜末',netType:'蒜末',amount:5,pct:'3.3%',state:'净菜',main:false,allergen:'无',note:'—'},{name:'食用油',netType:'净油',amount:8,pct:'5.3%',state:'原料',main:false,allergen:'无',note:'—'},{name:'食盐',netType:'盐粒',amount:2,pct:'1.3%',state:'原料',main:false,allergen:'无',note:'—'}],
|
||||
composition:[{name:'时令青菜',netType:'青菜段',amount:120,pct:'80%',state:'净菜',type:'主材',allergen:'无',note:'—'},{name:'蒜末',netType:'蒜末',amount:5,pct:'3.3%',state:'净菜',type:'调料',allergen:'无',note:'—'},{name:'食用油',netType:'净油',amount:8,pct:'5.3%',state:'原料',type:'调料',allergen:'无',note:'—'},{name:'食盐',netType:'盐粒',amount:2,pct:'1.3%',state:'原料',type:'调料',allergen:'无',note:'—'}],
|
||||
nutri:{calorie:68,protein:2.1,carb:8.6,fat:3.2,vitC:28.5,mineral:86,fiber:2.4,sodium:186,nutriGrade:'达标',note:'铁1.2mg、钙45mg'},
|
||||
cook:{mainMethod:'炒',subMethod:'—',heat:'大火',duration:5,oil:8,salt:2,temp:'200',output:150,steps:4},
|
||||
taste:{sour:1,sweet:2,bitter:1,spicy:1,salty:2,smell:3.5,flavorScore:3.2,flavorGrade:'一般'},
|
||||
@@ -291,7 +291,7 @@ const DISHES = [
|
||||
texture:{hardness:3,sticky:1,crispy:4,smooth:3,elastic:2,textureScore:3.4,textureGrade:'良好'}
|
||||
},
|
||||
{id:'DISH003',name:'番茄鸡蛋汤',icon:'🍅',category:'汤品',tags:['低卡'],specs:[{name:'标准份',weight:300,price:5,isDefault:true}],method:'煮',meal:'午/晚',allergen:'含蛋类',status:'启用',source:'系统内置',weightBasePrice:'1.67',weightVipPrice:'1.50',crowd:[{name:'全人群',level:'推荐'},{name:'儿童',level:'推荐'},{name:'老年人',level:'推荐'}],crowdNote:'',
|
||||
composition:[{name:'番茄',netType:'番茄块',amount:150,pct:'50%',state:'净菜',main:true,allergen:'无',note:'—'},{name:'鸡蛋',netType:'鸡蛋液',amount:60,pct:'20%',state:'原料',main:true,allergen:'含蛋类',note:'—'},{name:'食用油',netType:'净油',amount:5,pct:'1.7%',state:'原料',main:false,allergen:'无',note:'—'},{name:'食盐',netType:'盐粒',amount:2,pct:'0.7%',state:'原料',main:false,allergen:'无',note:'—'}],
|
||||
composition:[{name:'番茄',netType:'番茄块',amount:150,pct:'50%',state:'净菜',type:'主材',allergen:'无',note:'—'},{name:'鸡蛋',netType:'鸡蛋液',amount:60,pct:'20%',state:'原料',type:'主材',allergen:'含蛋类',note:'—'},{name:'食用油',netType:'净油',amount:5,pct:'1.7%',state:'原料',type:'调料',allergen:'无',note:'—'},{name:'食盐',netType:'盐粒',amount:2,pct:'0.7%',state:'原料',type:'调料',allergen:'无',note:'—'}],
|
||||
nutri:{calorie:45,protein:3.8,carb:4.2,fat:2.1,vitC:18.2,mineral:32,fiber:1.1,sodium:280,nutriGrade:'达标',note:'铁0.8mg、钾210mg'},
|
||||
cook:{mainMethod:'煮',subMethod:'炒',heat:'中火',duration:12,oil:5,salt:2,temp:'100',output:300,steps:5},
|
||||
taste:{sour:3,sweet:2,bitter:1,spicy:1,salty:2,smell:3.8,flavorScore:3.5,flavorGrade:'良好'},
|
||||
@@ -299,7 +299,7 @@ const DISHES = [
|
||||
texture:{hardness:1,sticky:2,crispy:1,smooth:5,elastic:2,textureScore:3.8,textureGrade:'良好'}
|
||||
},
|
||||
{id:'DISH004',name:'米饭',icon:'🍚',category:'主食',tags:['主食'],specs:[{name:'标准份',weight:200,price:3,isDefault:true},{name:'小份',weight:100,price:2},{name:'大份',weight:300,price:4}],method:'蒸',meal:'早/午/晚',allergen:'无',status:'启用',source:'系统内置',weightBasePrice:'1.50',weightVipPrice:'1.35',crowd:[{name:'全人群',level:'推荐'},{name:'糖尿病人群',level:'适量'}],crowdNote:'糖尿病人群注意控制量',
|
||||
composition:[{name:'大米',netType:'熟米饭',amount:100,pct:'100%',state:'原料',main:true,allergen:'无',note:'—'}],
|
||||
composition:[{name:'大米',netType:'熟米饭',amount:100,pct:'100%',state:'原料',type:'主材',allergen:'无',note:'—'}],
|
||||
nutri:{calorie:232,protein:4.8,carb:51.2,fat:0.6,vitC:0,mineral:12,fiber:0.4,sodium:3,nutriGrade:'达标',note:'—'},
|
||||
cook:{mainMethod:'蒸',subMethod:'—',heat:'大火→中火',duration:30,oil:0,salt:0,temp:'100',output:200,steps:2},
|
||||
taste:{sour:1,sweet:2,bitter:1,spicy:1,salty:1,smell:3.0,flavorScore:2.8,flavorGrade:'一般'},
|
||||
@@ -307,7 +307,7 @@ const DISHES = [
|
||||
texture:{hardness:2,sticky:3,crispy:1,smooth:3,elastic:2,textureScore:3.2,textureGrade:'一般'}
|
||||
},
|
||||
{id:'DISH005',name:'糖醋里脊',icon:'🍖',category:'荤菜',tags:['高糖'],specs:[{name:'标准份',weight:180,price:14,isDefault:true},{name:'大份',weight:280,price:20}],method:'炸',meal:'午',allergen:'无',status:'停用',source:'味养创新',weightBasePrice:'7.78',weightVipPrice:'7.00',crowd:[{name:'成人',level:'推荐'},{name:'糖尿病人群',level:'慎食'},{name:'高血脂人群',level:'适量'}],crowdNote:'糖尿病人群慎食,含糖量高',
|
||||
composition:[{name:'猪里脊肉',netType:'里脊丝',amount:120,pct:'66.7%',state:'净菜',main:true,allergen:'无',note:'—'},{name:'淀粉',netType:'淀粉糊',amount:20,pct:'11.1%',state:'原料',main:false,allergen:'无',note:'挂糊'},{name:'白糖',netType:'糖浆',amount:25,pct:'13.9%',state:'原料',main:false,allergen:'无',note:'糖醋汁'},{name:'食醋',netType:'调味汁',amount:15,pct:'8.3%',state:'原料',main:false,allergen:'无',note:'糖醋汁'}],
|
||||
composition:[{name:'猪里脊肉',netType:'里脊丝',amount:120,pct:'66.7%',state:'净菜',type:'主材',allergen:'无',note:'—'},{name:'淀粉',netType:'淀粉糊',amount:20,pct:'11.1%',state:'原料',type:'辅材',allergen:'无',note:'挂糊'},{name:'白糖',netType:'糖浆',amount:25,pct:'13.9%',state:'原料',type:'调料',allergen:'无',note:'糖醋汁'},{name:'食醋',netType:'调味汁',amount:15,pct:'8.3%',state:'原料',type:'调料',allergen:'无',note:'糖醋汁'}],
|
||||
nutri:{calorie:420,protein:22.4,carb:38.2,fat:18.6,vitC:1.2,mineral:28,fiber:0.6,sodium:620,nutriGrade:'未达标',note:'铁1.8mg'},
|
||||
cook:{mainMethod:'炸',subMethod:'炒',heat:'大火',duration:15,oil:50,salt:1,temp:'180',output:180,steps:7},
|
||||
taste:{sour:4,sweet:4,bitter:1,spicy:1,salty:3,smell:4.0,flavorScore:4.2,flavorGrade:'良好'},
|
||||
@@ -385,9 +385,9 @@ function renderBasic(d){
|
||||
}
|
||||
|
||||
function renderComposition(d){
|
||||
const rows = (d.composition||[]).map(c=>`<tr><td>${c.name}</td><td>${c.netType}</td><td>${c.amount}</td><td>${c.pct}</td><td><span class="tag tag-${c.main?'green':'gray'}">${c.main?'主料':'辅料'}</span></td><td>${c.allergen}</td><td>${c.note}</td></tr>`).join('');
|
||||
const rows = (d.composition||[]).map(c=>`<tr><td>${c.name}</td><td>${c.netType}</td><td>${c.amount}</td><td>${c.pct}</td><td><span class="tag tag-${c.type==='主材'?'blue':c.type==='调料'?'orange':'gray'}">${c.type||'辅材'}</span></td><td>${c.allergen}</td><td>${c.note}</td></tr>`).join('');
|
||||
return `<div class="info-section"><div class="info-section__title">食材构成(共 ${(d.composition||[]).length} 项) <span><a class="link" href="din-dish-add.html?mode=edit&tab=1">编辑</a></span></div>
|
||||
<table class="info-table"><thead><tr><th>食材名称</th><th>净菜类型</th><th>用量(g/份)</th><th>占比(%)</th><th>是否主料</th><th>过敏原</th><th>备注</th></tr></thead><tbody>${rows}</tbody></table></div>`;
|
||||
<table class="info-table"><thead><tr><th>食材名称</th><th>净菜类型</th><th>用量(g/份)</th><th>占比(%)</th><th>食材类型</th><th>过敏原</th><th>备注</th></tr></thead><tbody>${rows}</tbody></table></div>`;
|
||||
}
|
||||
|
||||
function renderCook(d){
|
||||
@@ -513,7 +513,7 @@ renderDetail();
|
||||
<div class="form-group"><label>加工状态</label><select class="form-select"><option>请选择</option><option>原料</option><option>净菜</option><option>半成品</option></select></div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group"><label>是否主料</label><select class="form-select"><option>辅料</option><option>主料</option></select></div>
|
||||
<div class="form-group"><label>食材类型</label><select class="form-select"><option>辅材</option><option>主材</option><option>调料</option></select></div>
|
||||
<div class="form-group"><label>过敏原</label><input class="form-input" type="text" placeholder="无则填无"></div>
|
||||
</div>
|
||||
<div class="form-group"><label>备注</label><input class="form-input" type="text" placeholder="请输入备注信息"></div>
|
||||
|
||||
@@ -97,6 +97,8 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
.btn-outline-danger:hover{background:#FFF1F0;}
|
||||
.btn-outline-primary{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:1px solid var(--primary);color:var(--primary);background:#fff;display:inline-flex;align-items:center;gap:6px;transition:all .2s;}
|
||||
.btn-outline-primary:hover{background:var(--primary-light);}
|
||||
.sync-tag{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 12px;border-radius:var(--radius-sm);background:#F6FFED;border:1px solid #B7EB8F;color:var(--success);font-size:var(--font-sm);}
|
||||
.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--success);box-shadow:0 0 0 3px rgba(82,196,26,0.18);}
|
||||
|
||||
.week-grid{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden;border:1px solid var(--border);}
|
||||
.week-grid table{width:100%;border-collapse:collapse;table-layout:fixed;}
|
||||
@@ -319,6 +321,8 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<button class="btn-outline-danger" id="btnResetWeek">↻ 重置本周</button>
|
||||
<button class="btn-outline-primary" id="btnReuseRecipe">📋 复用规划食谱</button>
|
||||
<button class="btn-outline-primary">⧉ 复制到下周</button>
|
||||
<span class="sync-tag" id="syncTag" style="display:none;"><span class="sync-dot"></span>已同步</span>
|
||||
<button class="btn-outline-primary" id="btnSyncProd">⇄ 同步至生产任务</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -810,6 +814,27 @@ function toggleSubgroup(header){header.parentElement.classList.toggle('open');}
|
||||
document.getElementById('btnResetWeek').addEventListener('click',resetWeek);
|
||||
})();
|
||||
|
||||
/* ===== 同步至生产任务 ===== */
|
||||
(function(){
|
||||
var btn=document.getElementById('btnSyncProd');
|
||||
var tag=document.getElementById('syncTag');
|
||||
var synced=false;
|
||||
btn.addEventListener('click',function(){
|
||||
synced=!synced;
|
||||
if(synced){
|
||||
btn.className='btn-outline-danger';
|
||||
btn.innerHTML='↩ 撤销已同步的生产任务';
|
||||
tag.style.display='inline-flex';
|
||||
alert('已同步至生产任务');
|
||||
}else{
|
||||
btn.className='btn-outline-primary';
|
||||
btn.innerHTML='⇄ 同步至生产任务';
|
||||
tag.style.display='none';
|
||||
alert('已撤销同步的生产任务');
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
/* ===== 复用规划食谱弹窗逻辑 ===== */
|
||||
(function(){
|
||||
var RECIPES=[
|
||||
|
||||
@@ -185,14 +185,14 @@ 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>任务截止时间</th><th>食材配方</th><th>任务来源</th><th>组配状态</th><th>负责人</th><th>操作类型</th><th>完成时间</th><th>操作</th></tr></thead>
|
||||
<thead><tr><th>任务编号</th><th>目标餐品</th><th>餐品规格</th><th>份数</th><th>任务截止时间</th><th>食材配方</th><th>任务来源</th><th>组配状态</th><th>负责人</th><th>操作类型</th><th>终端设备</th><th>完成时间</th><th>操作</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>CMB-001</td><td>宫保鸡丁</td><td>标准份(300g)</td><td>50</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('宫保鸡丁')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-green">已完成</span></td><td>李组配</td><td><span class="tag tag-blue">设备自动</span></td><td>2026-05-20 10:30:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-002</td><td>番茄炒蛋</td><td>大份(500g)</td><td>80</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('番茄炒蛋')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-green">已完成</span></td><td>王组配</td><td><span class="tag tag-blue">设备自动</span></td><td>2026-05-20 10:45:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-003</td><td>红烧肉</td><td>标准份(300g)</td><td>60</td><td>2026-05-20 11:30</td><td><a class="link" onclick="openRecipeModal('红烧肉')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-blue">组配中</span></td><td>张组配</td><td><span class="tag tag-green">人工录入</span></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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" style="color:var(--success)" onclick="finishCombo(this)">完成组配</a></td></tr>
|
||||
<tr><td>CMB-004</td><td>清蒸鱼</td><td>标准份(500g)</td><td>40</td><td>2026-05-20 12:00</td><td><a class="link" onclick="openRecipeModal('清蒸鱼')">食材明细</a></td><td><span class="tag tag-orange">点餐</span></td><td><span class="tag tag-orange">待组配</span></td><td>—</td><td><span class="tag tag-green">人工录入</span></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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" onclick="startCombo(this)">开始组配</a></td></tr>
|
||||
<tr><td>CMB-005</td><td>炒时蔬</td><td>小份(200g)</td><td>20</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('炒时蔬')">食材明细</a></td><td><span class="tag tag-gray">录入</span></td><td><span class="tag tag-green">已完成</span></td><td>赵组配</td><td><span class="tag tag-blue">设备自动</span></td><td>2026-05-20 10:50:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-006</td><td>豆腐</td><td>小份(200g)</td><td>35</td><td>2026-05-20 12:00</td><td><a class="link" onclick="openRecipeModal('豆腐')">食材明细</a></td><td><span class="tag tag-orange">点餐</span></td><td><span class="tag tag-orange">待组配</span></td><td>—</td><td><span class="tag tag-green">人工录入</span></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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" onclick="startCombo(this)">开始组配</a></td></tr>
|
||||
<tr><td>CMB-001</td><td>宫保鸡丁</td><td>标准份(300g)</td><td>50</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('宫保鸡丁')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-green">已完成</span></td><td>李组配</td><td><span class="tag tag-blue">设备自动</span></td><td><div>智能组配秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">CMB-SCALE-001</div></td><td>2026-05-20 10:30:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-002</td><td>番茄炒蛋</td><td>大份(500g)</td><td>80</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('番茄炒蛋')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-green">已完成</span></td><td>王组配</td><td><span class="tag tag-blue">设备自动</span></td><td><div>智能组配秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">CMB-SCALE-002</div></td><td>2026-05-20 10:45:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-003</td><td>红烧肉</td><td>标准份(300g)</td><td>60</td><td>2026-05-20 11:30</td><td><a class="link" onclick="openRecipeModal('红烧肉')">食材明细</a></td><td><span class="tag tag-blue">餐线</span></td><td><span class="tag tag-blue">组配中</span></td><td>张组配</td><td><span class="tag tag-green">人工录入</span></td><td>—</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" style="color:var(--success)" onclick="finishCombo(this)">完成组配</a></td></tr>
|
||||
<tr><td>CMB-004</td><td>清蒸鱼</td><td>标准份(500g)</td><td>40</td><td>2026-05-20 12:00</td><td><a class="link" onclick="openRecipeModal('清蒸鱼')">食材明细</a></td><td><span class="tag tag-orange">点餐</span></td><td><span class="tag tag-orange">待组配</span></td><td>—</td><td><span class="tag tag-green">人工录入</span></td><td>—</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" onclick="startCombo(this)">开始组配</a></td></tr>
|
||||
<tr><td>CMB-005</td><td>炒时蔬</td><td>小份(200g)</td><td>20</td><td>2026-05-20 11:00</td><td><a class="link" onclick="openRecipeModal('炒时蔬')">食材明细</a></td><td><span class="tag tag-gray">录入</span></td><td><span class="tag tag-green">已完成</span></td><td>赵组配</td><td><span class="tag tag-blue">设备自动</span></td><td><div>智能组配秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">CMB-SCALE-003</div></td><td>2026-05-20 10:50:00</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span></td></tr>
|
||||
<tr><td>CMB-006</td><td>豆腐</td><td>小份(200g)</td><td>35</td><td>2026-05-20 12:00</td><td><a class="link" onclick="openRecipeModal('豆腐')">食材明细</a></td><td><span class="tag tag-orange">点餐</span></td><td><span class="tag tag-orange">待组配</span></td><td>—</td><td><span class="tag tag-green">人工录入</span></td><td>—</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" onclick="openEditModal(this)">编辑</a><a class="action-more__item action-more__item--danger">删除</a></div></span> <a class="link" onclick="startCombo(this)">开始组配</a></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -200,23 +200,23 @@ tbody td.td-actions{white-space:nowrap;}
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>入库单号</th><th>操作类型</th><th>溯源码</th><th>食材名称</th><th>净菜类型</th><th>入库规格</th><th>入库数量</th><th>入库重量(kg)</th><th>当前库存(kg)</th><th>操作时间</th><th>保质期至</th><th>存储方式</th><th>存放区域</th><th>存放温度(℃)</th><th>操作人</th><th>操作</th>
|
||||
<th>入库单号</th><th>操作类型</th><th>终端设备</th><th>溯源码</th><th>食材名称</th><th>净菜类型</th><th>入库规格</th><th>入库数量</th><th>入库重量(kg)</th><th>当前库存(kg)</th><th>操作时间</th><th>保质期至</th><th>存储方式</th><th>存放区域</th><th>存放温度(℃)</th><th>操作人</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>NC-IN-001</td><td><span class="tag tag-blue">设备自动</span></td><td>NC-PROC-BOCA-20260415-01</td><td>土豆</td><td>土豆丝</td><td>袋装/500g</td><td>86</td><td>43.0</td><td>31.0</td><td>2026-04-15 09:15</td><td>2026-04-17 09:15</td><td><span class="tag tag-blue">净菜柜</span></td><td>8号柜-A01格口</td><td>4.1</td><td>李入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-001')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
<td>NC-IN-001</td><td><span class="tag tag-blue">设备自动</span></td><td><div>净菜入库秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">NC-IN-SCALE-001</div></td><td>NC-PROC-BOCA-20260415-01</td><td>土豆</td><td>土豆丝</td><td>袋装/500g</td><td>86</td><td>43.0</td><td>31.0</td><td>2026-04-15 09:15</td><td>2026-04-17 09:15</td><td><span class="tag tag-blue">净菜柜</span></td><td>8号柜-A01格口</td><td>4.1</td><td>李入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-001')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NC-IN-002</td><td><span class="tag tag-blue">设备自动</span></td><td>NC-PROC-HLUB-20260415-01</td><td>土豆</td><td>土豆片</td><td>袋装/500g</td><td>120</td><td>60.0</td><td>47.5</td><td>2026-04-15 09:45</td><td>2026-04-18 09:45</td><td><span class="tag tag-blue">净菜柜</span></td><td>8号柜-B03格口</td><td>4.2</td><td>王入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-002')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
<td>NC-IN-002</td><td><span class="tag tag-blue">设备自动</span></td><td><div>净菜入库秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">NC-IN-SCALE-002</div></td><td>NC-PROC-HLUB-20260415-01</td><td>土豆</td><td>土豆片</td><td>袋装/500g</td><td>120</td><td>60.0</td><td>47.5</td><td>2026-04-15 09:45</td><td>2026-04-18 09:45</td><td><span class="tag tag-blue">净菜柜</span></td><td>8号柜-B03格口</td><td>4.2</td><td>王入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-002')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NC-IN-003</td><td><span class="tag tag-green">人工录入</span></td><td>NC-PROC-XGUO-20260415-01</td><td>土豆</td><td>土豆泥</td><td>盒装/300g</td><td>48</td><td>14.4</td><td>9.0</td><td>2026-04-15 11:00</td><td>2026-04-17 11:00</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-03</td><td>4.0</td><td>李入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-003')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
<td>NC-IN-003</td><td><span class="tag tag-green">人工录入</span></td><td>—</td><td>NC-PROC-XGUO-20260415-01</td><td>土豆</td><td>土豆泥</td><td>盒装/300g</td><td>48</td><td>14.4</td><td>9.0</td><td>2026-04-15 11:00</td><td>2026-04-17 11:00</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-03</td><td>4.0</td><td>李入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-003')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NC-IN-004</td><td><span class="tag tag-green">人工录入</span></td><td>NC-PROC-BCAI-20260415-01</td><td>白菜</td><td>整棵</td><td>散装/整棵</td><td>70</td><td>35.0</td><td>22.5</td><td>2026-04-15 11:30</td><td>2026-04-18 11:30</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-04</td><td>3.8</td><td>张入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-004')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
<td>NC-IN-004</td><td><span class="tag tag-green">人工录入</span></td><td>—</td><td>NC-PROC-BCAI-20260415-01</td><td>白菜</td><td>整棵</td><td>散装/整棵</td><td>70</td><td>35.0</td><td>22.5</td><td>2026-04-15 11:30</td><td>2026-04-18 11:30</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-04</td><td>3.8</td><td>张入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-004')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NC-IN-005</td><td><span class="tag tag-blue">设备自动</span></td><td>NC-PROC-ZLRJ-20260415-01</td><td>猪里脊</td><td>丁(1.5cm)</td><td>袋装/400g</td><td>76</td><td>30.4</td><td>18.8</td><td>2026-04-15 12:00</td><td>2026-04-16 12:00</td><td><span class="tag tag-gray">仓库</span></td><td>B仓-肉类区-01</td><td>-2.0</td><td>王入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-005')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
<td>NC-IN-005</td><td><span class="tag tag-blue">设备自动</span></td><td><div>净菜入库秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">NC-IN-SCALE-003</div></td><td>NC-PROC-ZLRJ-20260415-01</td><td>猪里脊</td><td>丁(1.5cm)</td><td>袋装/400g</td><td>76</td><td>30.4</td><td>18.8</td><td>2026-04-15 12:00</td><td>2026-04-16 12:00</td><td><span class="tag tag-gray">仓库</span></td><td>B仓-肉类区-01</td><td>-2.0</td><td>王入库</td><td class="td-actions"><span class="link" onclick="openVideoModal()">查看视频</span> <span class="link" onclick="openOutModal('NC-IN-005')">出库明细</span> <span class="action-more"><span class="more-btn">更多 ▾</span><div class="dropdown"><a href="javascript:;" onclick="showDetail(this)">详情</a><a href="javascript:;" onclick="openModal()">编辑</a><a href="javascript:;" class="danger" onclick="if(confirm('确认删除该记录?')){}">删除</a></div></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -203,23 +203,23 @@ tbody tr:hover{background:#F8FBFF;}
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>入库单号</th><th>操作类型</th><th>溯源码</th><th>来源类型</th><th>食材名称</th><th>供应商</th><th>入库规格</th><th>入库数量</th><th>入库重量(kg)</th><th>入库时间</th><th>存储方式</th><th>存放区域</th><th>操作人</th><th>操作</th>
|
||||
<th>入库单号</th><th>操作类型</th><th>终端设备</th><th>溯源码</th><th>来源类型</th><th>食材名称</th><th>供应商</th><th>入库规格</th><th>入库数量</th><th>入库重量(kg)</th><th>入库时间</th><th>存储方式</th><th>存放区域</th><th>操作人</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>IN-20260415-001</td><td><span class="tag tag-green">设备自动</span></td><td>ST-FH-FA01-VG-BOCA-286K-20260415-001</td><td><span class="tag tag-blue">自产</span></td><td>菠菜</td><td>A区蔬菜基地</td><td>25kg/件</td><td>12件</td><td>286</td><td>2026-04-15 10:30</td><td><span class="tag tag-green">毛菜柜</span></td><td>8号柜-A01格口</td><td>张三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
<td>IN-20260415-001</td><td><span class="tag tag-green">设备自动</span></td><td><div>毛菜验收秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">RW-SCALE-001</div></td><td>ST-FH-FA01-VG-BOCA-286K-20260415-001</td><td><span class="tag tag-blue">自产</span></td><td>菠菜</td><td>A区蔬菜基地</td><td>25kg/件</td><td>12件</td><td>286</td><td>2026-04-15 10:30</td><td><span class="tag tag-green">毛菜柜</span></td><td>8号柜-A01格口</td><td>张三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IN-20260415-002</td><td><span class="tag tag-green">设备自动</span></td><td>ST-EX-LY01-VG-BOCA-050K-20260415-002</td><td><span class="tag tag-gray">外采</span></td><td>菠菜</td><td>绿源蔬菜配送</td><td>10kg/筐</td><td>5筐</td><td>50</td><td>2026-04-15 08:30</td><td><span class="tag tag-green">毛菜柜</span></td><td>8号柜-B03格口</td><td>李三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
<td>IN-20260415-002</td><td><span class="tag tag-green">设备自动</span></td><td><div>毛菜验收秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">RW-SCALE-002</div></td><td>ST-EX-LY01-VG-BOCA-050K-20260415-002</td><td><span class="tag tag-gray">外采</span></td><td>菠菜</td><td>绿源蔬菜配送</td><td>10kg/筐</td><td>5筐</td><td>50</td><td>2026-04-15 08:30</td><td><span class="tag tag-green">毛菜柜</span></td><td>8号柜-B03格口</td><td>李三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IN-20260415-003</td><td><span class="tag tag-orange">人工录入</span></td><td>ST-EX-XR01-MT-ZLRJ-080K-20260415-005</td><td><span class="tag tag-gray">外采</span></td><td>猪里脊</td><td>鲜肉直供公司</td><td>20kg/箱</td><td>4箱</td><td>80</td><td>2026-04-15 09:15</td><td><span class="tag tag-gray">仓库</span></td><td>B仓-肉类区-01</td><td>王三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
<td>IN-20260415-003</td><td><span class="tag tag-orange">人工录入</span></td><td>—</td><td>ST-EX-XR01-MT-ZLRJ-080K-20260415-005</td><td><span class="tag tag-gray">外采</span></td><td>猪里脊</td><td>鲜肉直供公司</td><td>20kg/箱</td><td>4箱</td><td>80</td><td>2026-04-15 09:15</td><td><span class="tag tag-gray">仓库</span></td><td>B仓-肉类区-01</td><td>王三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IN-20260415-004</td><td><span class="tag tag-orange">人工录入</span></td><td>ST-EX-HS01-SF-CAYO-060K-20260414-001</td><td><span class="tag tag-gray">外采</span></td><td>草鱼</td><td>海鲜水产配送</td><td>散装(kg)</td><td>60kg</td><td>60</td><td>2026-04-15 09:45</td><td><span class="tag tag-gray">仓库</span></td><td>C仓-水产区-01</td><td>李三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
<td>IN-20260415-004</td><td><span class="tag tag-orange">人工录入</span></td><td>—</td><td>ST-EX-HS01-SF-CAYO-060K-20260414-001</td><td><span class="tag tag-gray">外采</span></td><td>草鱼</td><td>海鲜水产配送</td><td>散装(kg)</td><td>60kg</td><td>60</td><td>2026-04-15 09:45</td><td><span class="tag tag-gray">仓库</span></td><td>C仓-水产区-01</td><td>李三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IN-20260416-005</td><td><span class="tag tag-green">设备自动</span></td><td>ST-FH-FB01-VG-HLUB-420K-20260415-002</td><td><span class="tag tag-blue">自产</span></td><td>胡萝卜</td><td>B区根茎基地</td><td>25kg/件</td><td>17件</td><td>420</td><td>2026-04-16 11:00</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-03</td><td>张三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
<td>IN-20260416-005</td><td><span class="tag tag-green">设备自动</span></td><td><div>毛菜验收秤</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">RW-SCALE-003</div></td><td>ST-FH-FB01-VG-HLUB-420K-20260415-002</td><td><span class="tag tag-blue">自产</span></td><td>胡萝卜</td><td>B区根茎基地</td><td>25kg/件</td><td>17件</td><td>420</td><td>2026-04-16 11:00</td><td><span class="tag tag-gray">仓库</span></td><td>A仓-蔬菜区-03</td><td>张三丰</td><td class="td-actions"><span class="link" onclick="openVideo()">查看视频</span> <span class="link">编辑</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -208,15 +208,15 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>包装批次号</th><th>溯源码</th><th>净菜名称</th><th>包装方式</th><th>包装规格</th><th>包装份数</th><th>包装日期</th><th>保质期至</th><th>存放温度(℃)</th><th>包装人</th><th>终端设备</th><th>操作</th>
|
||||
<th>包装批次号</th><th>溯源码</th><th>净菜名称</th><th>包装方式</th><th>包装规格</th><th>包装份数</th><th>包装日期</th><th>保质期至</th><th>存放温度(℃)</th><th>包装人</th><th>操作类型</th><th>终端设备</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>BATCH-NC-20260415-01</td><td>NC-PROC-BOCA-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>500</td><td>20</td><td>2026-04-15</td><td>2026-04-17</td><td>4.1</td><td>李包装</td><td>PKG-T01</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-01</td><td>NC-PROC-BOCA-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>500</td><td>20</td><td>2026-04-15</td><td>2026-04-17</td><td>4.1</td><td>李包装</td><td>PKG-T01</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-02</td><td>NC-PROC-HLUB-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">保鲜盒</span></td><td>1000</td><td>15</td><td>2026-04-15</td><td>2026-04-18</td><td>4.2</td><td>王包装</td><td>PKG-T01</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-02</td><td>NC-PROC-HLUB-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">保鲜盒</span></td><td>1000</td><td>15</td><td>2026-04-15</td><td>2026-04-18</td><td>4.2</td><td>王包装</td><td>PKG-T01</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-03</td><td>NC-PROC-XGUO-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">散装托盘</span></td><td>2000</td><td>8</td><td>2026-04-15</td><td>2026-04-17</td><td>4.0</td><td>张包装</td><td>PKG-T02</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-04</td><td>NC-PROC-LAJP-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>1000</td><td>12</td><td>2026-04-15</td><td>2026-04-17</td><td>4.3</td><td>李包装</td><td>PKG-T02</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-01</td><td>NC-PROC-BOCA-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>500</td><td>20</td><td>2026-04-15</td><td>2026-04-17</td><td>4.1</td><td>李包装</td><td><span class="tag tag-blue">设备自动</span></td><td><div>真空机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T01</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-01</td><td>NC-PROC-BOCA-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>500</td><td>20</td><td>2026-04-15</td><td>2026-04-17</td><td>4.1</td><td>李包装</td><td><span class="tag tag-blue">设备自动</span></td><td><div>真空机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T01</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-02</td><td>NC-PROC-HLUB-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">保鲜盒</span></td><td>1000</td><td>15</td><td>2026-04-15</td><td>2026-04-18</td><td>4.2</td><td>王包装</td><td><span class="tag tag-blue">设备自动</span></td><td><div>真空机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T01</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-02</td><td>NC-PROC-HLUB-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">保鲜盒</span></td><td>1000</td><td>15</td><td>2026-04-15</td><td>2026-04-18</td><td>4.2</td><td>王包装</td><td><span class="tag tag-blue">设备自动</span></td><td><div>真空机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T01</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-03</td><td>NC-PROC-XGUO-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">散装托盘</span></td><td>2000</td><td>8</td><td>2026-04-15</td><td>2026-04-17</td><td>4.0</td><td>张包装</td><td><span class="tag tag-green">人工录入</span></td><td>—</td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-NC-20260415-04</td><td>NC-PROC-LAJP-20260415-01</td><td>土豆-土豆丝</td><td><span class="tag tag-gray">真空袋</span></td><td>1000</td><td>12</td><td>2026-04-15</td><td>2026-04-17</td><td>4.3</td><td>李包装</td><td><span class="tag tag-blue">设备自动</span></td><td><div>真空机-2号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T02</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -253,14 +253,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>包装批次号</th><th>包装餐品</th><th>包装规格</th><th>包装方式</th><th>包装份数</th><th>包含食材</th><th>包装日期</th><th>保质期至</th><th>存放温度(℃)</th><th>包装人</th><th>终端设备</th><th>操作类型</th><th>操作</th>
|
||||
<th>包装批次号</th><th>包装餐品</th><th>包装规格</th><th>包装方式</th><th>包装份数</th><th>包含食材</th><th>包装日期</th><th>保质期至</th><th>存放温度(℃)</th><th>包装人</th><th>操作类型</th><th>终端设备</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>BATCH-DH-20260415-01</td><td>宫保鸡丁</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>10</td><td><span class="link" onclick="showIngredients(0)">3种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.8</td><td>赵配餐</td><td>PKG-T03</td><td><span class="tag tag-blue">设备自动</span></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-01</td><td>宫保鸡丁</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>10</td><td><span class="link" onclick="showIngredients(0)">3种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.8</td><td>赵配餐</td><td>PKG-T03</td><td><span class="tag tag-blue">设备自动</span></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-02</td><td>清蒸鱼</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">保鲜盒</span></td><td>8</td><td><span class="link" onclick="showIngredients(1)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.5</td><td>陈配餐</td><td>PKG-T03</td><td><span class="tag tag-green">人工录入</span></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-03</td><td>蒜蓉菠菜</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>12</td><td><span class="link" onclick="showIngredients(2)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>4.0</td><td>陈配餐</td><td>PKG-T04</td><td><span class="tag tag-green">人工录入</span></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-04</td><td>炒胡萝卜</td><td><span class="tag tag-blue">大份(800g)</span></td><td><span class="tag tag-gray">保鲜盒</span></td><td>6</td><td><span class="link" onclick="showIngredients(3)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>4.2</td><td>赵配餐</td><td>PKG-T04</td><td><span class="tag tag-blue">设备自动</span></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-01</td><td>宫保鸡丁</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>10</td><td><span class="link" onclick="showIngredients(0)">3种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.8</td><td>赵配餐</td><td><span class="tag tag-blue">设备自动</span></td><td><div>封口机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T03</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-01</td><td>宫保鸡丁</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>10</td><td><span class="link" onclick="showIngredients(0)">3种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.8</td><td>赵配餐</td><td><span class="tag tag-blue">设备自动</span></td><td><div>封口机-1号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T03</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-02</td><td>清蒸鱼</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">保鲜盒</span></td><td>8</td><td><span class="link" onclick="showIngredients(1)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>3.5</td><td>陈配餐</td><td><span class="tag tag-green">人工录入</span></td><td>—</td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-03</td><td>蒜蓉菠菜</td><td><span class="tag tag-green">标准份(500g)</span></td><td><span class="tag tag-gray">冷鲜袋</span></td><td>12</td><td><span class="link" onclick="showIngredients(2)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>4.0</td><td>陈配餐</td><td><span class="tag tag-green">人工录入</span></td><td>—</td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>BATCH-DH-20260415-04</td><td>炒胡萝卜</td><td><span class="tag tag-blue">大份(800g)</span></td><td><span class="tag tag-gray">保鲜盒</span></td><td>6</td><td><span class="link" onclick="showIngredients(3)">2种</span></td><td>2026-04-15</td><td>2026-04-17</td><td>4.2</td><td>赵配餐</td><td><span class="tag tag-blue">设备自动</span></td><td><div>封口机-2号</div><div style="font-size:var(--font-xs);color:var(--text-secondary);">PKG-T04</div></td><td class="td-actions"><span class="link">查看视频</span> <span class="link" onclick="openEditDh(this)">编辑</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user