diff --git a/.claude/memory/project_progress.md b/.claude/memory/project_progress.md index e16d3f6..979c2d1 100644 --- a/.claude/memory/project_progress.md +++ b/.claude/memory/project_progress.md @@ -46,6 +46,8 @@ Web 管理端和员工端 APP 的其余模块(系统管理、运动管理、 - 覆盖模块:17 个(含三端+其他终端) ## 近期里程碑 +- 2026-05-22:味养创新交互完善——人工创新查看详情弹窗/审核双模/AI推演弹窗重构及侧边栏修复,功能说明9.5章节同步更新 +- 2026-05-22:绿色种采模块全面重构——采供管理整页重构(采购单维度主表+子表、5种状态联动操作、配送/取消弹窗交互、详情抽屉动态信息),采收入库/供应商管理/种植监控/养殖监控多页面优化,功能说明文档9.4章节同步更新 - 2026-05-22:营养用餐模块多页面交互优化——数据分析页新增食堂切换栏/周选择器/餐品明细弹窗重构,食材效益页新增级联分类选择器,大模型管理新增API_KEY/API_URL列及接入/编辑弹窗,小模型管理新增新增模型弹窗,终端管理筛选栏/表格列精简,餐线管理操作列移除编辑按钮 - 2026-05-20:营养用餐模块交互完善——用户管理等级配置tab增加新增/查看/编辑弹窗,消费管理筛选优化(日期默认今天、金额范围双输入框、消费类型标签化、单位部门级联筛选、流水号筛选、交易明细弹窗全字段对齐),取餐管理新增总金额列和餐品金额列 - 2026-05-19:卫生供应模块8页面交互优化(侧边栏菜单顺序统一、多页面新增弹窗表单、表格列重构、溯源码前移、菜品名称格式统一),补充营养管理功能说明文档及调整记录 diff --git a/CLAUDE.md b/CLAUDE.md index 862cda9..96b07c2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ - + # 项目约束 diff --git a/web-admin/nutrition/din-data-consume.html b/web-admin/nutrition/din-data-consume.html index cb8a5fe..2f7fd2b 100644 --- a/web-admin/nutrition/din-data-consume.html +++ b/web-admin/nutrition/din-data-consume.html @@ -282,7 +282,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
-
diff --git a/web-admin/nutrition/din-dish-all.html b/web-admin/nutrition/din-dish-all.html index 39a73ab..1cc67e2 100644 --- a/web-admin/nutrition/din-dish-all.html +++ b/web-admin/nutrition/din-dish-all.html @@ -232,7 +232,7 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
- +
@@ -274,41 +274,41 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} + - + \ No newline at end of file diff --git a/web-admin/nutrition/farm-supplier.html b/web-admin/nutrition/farm-supplier.html index e1854d9..cd0ee5b 100644 --- a/web-admin/nutrition/farm-supplier.html +++ b/web-admin/nutrition/farm-supplier.html @@ -118,8 +118,35 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .form-item textarea{height:80px;padding:8px 12px;resize:vertical;} .form-item select{background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;padding-right:28px;} /* 评分星星 */ -.star-rating{display:flex;gap:4px;font-size:24px;cursor:pointer;} -.star-rating .star{color:#ddd;transition:color .2s;}.star-rating .star.active{color:#FAAD14;} +/* 地块多行展示 */ +.td-land{white-space:normal !important;line-height:1.8;min-width:180px;} +/* 多选下拉模拟 */ +.multi-select{position:relative;} +.multi-select__trigger{min-height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 28px 4px 8px;font-size:var(--font-sm);cursor:pointer;display:flex;flex-wrap:wrap;gap:4px;align-items:center;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;} +.multi-select__trigger:focus{border-color:var(--primary);outline:none;} +.multi-select__tag{display:inline-flex;align-items:center;gap:2px;background:var(--primary-light);color:var(--primary);padding:1px 6px;border-radius:3px;font-size:11px;} +.multi-select__tag .remove{cursor:pointer;font-size:14px;line-height:1;} +.multi-select__placeholder{color:var(--text-placeholder);font-size:var(--font-sm);} +.multi-select__dropdown{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);z-index:10;max-height:200px;overflow-y:auto;display:none;} +.multi-select.open .multi-select__dropdown{display:block;} +.multi-select__option{padding:8px 12px;font-size:var(--font-sm);cursor:pointer;display:flex;align-items:center;gap:8px;} +.multi-select__option:hover{background:#F5F7FA;} +.multi-select__option input{margin:0;} +/* 只读字段 */ +.form-readonly{height:36px;line-height:36px;padding:0 12px;background:#F5F7FA;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--font-sm);color:var(--text-secondary);} +/* 资质证书缩略图(表格内) */ +.td-cert{white-space:nowrap !important;} +.cert-thumb{display:inline-block;width:32px;height:32px;border-radius:4px;background:#E6F7FF url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Crect x='1' y='2' width='14' height='12' rx='1.5' fill='none' stroke='%231890FF' stroke-width='1.2'/%3E%3Ccircle cx='5' cy='7' r='1.5' fill='%231890FF'/%3E%3Cpath d='M3 12l3-3 2 1.5L11 7l2 3' stroke='%231890FF' stroke-width='1' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center;vertical-align:middle;margin-right:4px;border:1px solid #BAE7FF;} +.cert-count{font-size:11px;color:var(--text-secondary);vertical-align:middle;} +/* 图片上传区域(弹窗内) */ +.upload-area{display:flex;flex-wrap:wrap;gap:8px;} +.upload-preview{position:relative;width:80px;height:80px;border-radius:var(--radius-sm);border:1px solid var(--border);overflow:hidden;} +.upload-img{width:100%;height:100%;background:#E6F7FF url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Crect x='2' y='4' width='28' height='24' rx='3' fill='none' stroke='%231890FF' stroke-width='1.5'/%3E%3Ccircle cx='10' cy='14' r='3' fill='%231890FF'/%3E%3Cpath d='M5 24l7-7 4 3L22 13l5 7' stroke='%231890FF' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") no-repeat center;} +.upload-del{position:absolute;top:2px;right:2px;width:18px;height:18px;background:rgba(0,0,0,.45);color:#fff;border-radius:50%;font-size:12px;line-height:18px;text-align:center;cursor:pointer;display:none;} +.upload-preview:hover .upload-del{display:block;} +.upload-btn{width:80px;height:80px;border:1px dashed var(--border);border-radius:var(--radius-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;gap:2px;color:#999;font-size:12px;transition:border-color .2s;} +.upload-btn:hover{border-color:var(--primary);color:var(--primary);} +.upload-hint{font-size:11px;color:var(--text-placeholder);margin-top:4px;width:100%;} @@ -244,17 +271,17 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - + + - - - - - - + + + + + +
编号基地/场所名称供应类别负责人地块/养殖区当前产能(kg/月)运营状态最近供货操作编号基地/场所名称供应类别负责人负责人电话地块/养殖区年均产能产能单位累计订单运营状态最近供货操作
SUP-IN-001A区蔬菜基地蔬菜李负责人LAND-001/LAND-0022,400运营中今日编辑删除
SUP-IN-002B区根茎基地蔬菜王负责人LAND-0021,200运营中今日编辑删除
SUP-IN-003C区菌菇大棚蔬菜张负责人LAND-003480运营中昨日编辑删除
SUP-IN-004D区豆类基地蔬菜李负责人LAND-004860休耕中3天前编辑删除
SUP-IN-005A1-猪舍肉禽赵负责人BREED-A13,200运营中本周编辑删除
SUP-IN-006B3-鸡舍肉禽陈负责人BREED-B31,800运营中本周编辑删除
SUP-IN-001A区蔬菜基地蔬菜李负责人138****6601LAND-001【一号菠菜大棚】
LAND-002【二号叶菜大棚】
28,800公斤86运营中2026-05-22编辑删除
SUP-IN-002B区根茎基地蔬菜王负责人139****7702LAND-003【根茎种植区】
LAND-004【萝卜专区】
14,400公斤62运营中2026-05-22编辑删除
SUP-IN-003C区菌菇大棚蔬菜张负责人137****3303LAND-005【菌菇培育棚】5,760公斤41运营中2026-05-21编辑删除
SUP-IN-004D区豆类基地蔬菜李负责人138****6601LAND-006【豆类种植区】
LAND-007【豆类育苗棚】
10,320公斤38休耕中2026-05-19编辑删除
SUP-IN-005生猪养殖基地肉禽赵负责人136****5505BREED-A1【生猪养殖一区】
BREED-A2【生猪养殖二区】
38024运营中2026-05-20编辑删除
SUP-IN-006土鸡养殖基地肉禽陈负责人135****4406BREED-B3【散养鸡舍】6,00018运营中2026-05-20编辑删除
@@ -282,9 +309,9 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
- +
@@ -293,7 +320,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
-
@@ -306,16 +332,17 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - + + + - - - - + + + + +
供应商名称供应类别联系电话地址资质状态综合评分合作年限累计订单上次供货最近评价操作供应商名称供应类别联系人联系电话地址资质证书综合评分合作期限合作状态累计订单上次供货操作
绿源蔬菜配送蔬菜138-0001-0001本市郊区蔬菜基地正常4.63年128单今日质量优/准时编辑删除
鲜肉直供公司肉类139-0002-0002本市农贸市场A区正常4.42年96单今日质量良/准时编辑删除
海鲜水产配送水产136-0003-0003滨海水产批发市场即将到期4.11年48单昨日质量良/延迟编辑删除
粮油批发商行粮油135-0004-0004本市粮油批发中心正常4.54年156单3天前质量优/准时编辑删除
中粮粮油陈经理138-0001-0001西安运营中心4.62023-03-01至2026-12-31正常1282026-05-22编辑删除
绿源蔬菜配送蔬菜张经理138-0001-0001本市郊区蔬菜基地4.62023-03-01至2026-12-31正常1282026-05-22编辑删除
鲜肉直供公司肉类李总139-0002-0002本市农贸市场A区4.42024-01-15至2025-12-31合同终止962026-05-22编辑删除
海鲜水产配送水产王经理136-0003-0003滨海水产批发市场4.12025-06-01至2026-05-31即将到期482026-05-21编辑删除
粮油批发商行粮油赵主管135-0004-0004本市粮油批发中心1.52022-01-01至2026-12-31黑名单362025-05-19编辑删除
@@ -341,10 +368,31 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
-
-
+
+
+
+
+ LAND-001【一号菠菜大棚】× + LAND-002【二号叶菜大棚】× +
+
+ + + + + + + + + + +
+
+
+
+
+
86(系统自动统计)
-
@@ -360,11 +408,25 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
+
-
+
+
+
+
×
+
×
+
+ + 上传图片 +
+
+
支持 JPG、PNG 格式,单张不超过 5MB,最多上传 5 张
+
-
+
+
+
@@ -372,21 +434,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - diff --git a/web-admin/nutrition/prod-clean-order.html b/web-admin/nutrition/prod-clean-order.html index 8551679..15dc6c1 100644 --- a/web-admin/nutrition/prod-clean-order.html +++ b/web-admin/nutrition/prod-clean-order.html @@ -100,6 +100,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .form-item input,.form-item select,.form-item textarea{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;} .form-item input:focus,.form-item select:focus{border-color:var(--primary);} .form-item select{appearance:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;padding-right:28px;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -161,12 +182,12 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - + + + + + +
订单号溯源码净菜类型净菜/餐品包装规格需求份数需求计量(kg)订单状态申领时间预定配送时间创建人操作
CO-001NC-INT-BOCA-20260422-01🥬 净菜包菠菜500g/袋5025已完成2026-04-22 07:302026-04-22 10:00张厨师详情 删除
CO-002NC-INT-ZLRJ-20260422-01🥬 净菜包猪排骨2kg/盘2040配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-003NC-INT-JXRJ-20260422-01🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-005NC-INT-QZYU-20260422-01🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送2026-04-22 09:002026-04-22 11:00王厨师详情 删除
CO-006NC-INT-TDSI-20260422-01🥬 净菜包土豆(土豆丝)500g/袋4020备货中2026-04-22 09:152026-04-22 11:00张厨师详情 删除
CO-008NC-INT-XLHU-20260422-01🥬 净菜包西兰花500g/袋3015已完成2026-04-22 10:002026-04-22 11:30王厨师详情 删除
CO-001NC-INT-BOCA-20260422-01🥬 净菜包菠菜500g/袋5025已完成2026-04-22 07:302026-04-22 10:00张厨师详情 删除
CO-002NC-INT-ZLRJ-20260422-01🥬 净菜包猪排骨2kg/盘2040配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-003NC-INT-JXRJ-20260422-01🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中2026-04-22 08:002026-04-22 10:30李主管确认收货 详情 删除
CO-005NC-INT-QZYU-20260422-01🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送2026-04-22 09:002026-04-22 11:00王厨师详情 删除
CO-006NC-INT-TDSI-20260422-01🥬 净菜包土豆(土豆丝)500g/袋4020备货中2026-04-22 09:152026-04-22 11:00张厨师详情 删除
CO-008NC-INT-XLHU-20260422-01🥬 净菜包西兰花500g/袋3015已完成2026-04-22 10:002026-04-22 11:30王厨师详情 删除
@@ -233,6 +254,23 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} + + diff --git a/web-admin/nutrition/prod-proc-cabinet.html b/web-admin/nutrition/prod-proc-cabinet.html index 4cae194..8bd62ed 100644 --- a/web-admin/nutrition/prod-proc-cabinet.html +++ b/web-admin/nutrition/prod-proc-cabinet.html @@ -160,6 +160,27 @@ tbody tr.row-active td.td-actions{background:var(--primary-light);} .video-info{display:flex;gap:24px;margin-top:16px;padding:12px 0;border-top:1px solid var(--border);} .video-info__item{display:flex;align-items:center;gap:6px;font-size:var(--font-sm);color:var(--text-secondary);} .video-info__item span{color:var(--text-primary);font-weight:500;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -311,12 +332,12 @@ tbody tr.row-active td.td-actions{background:var(--primary-light);} - - - - - - + + + + + + @@ -413,6 +434,36 @@ function showVideo(code,name){ document.body.appendChild(mask); } function closeVideoModal(){var m=document.getElementById('videoModal');if(m)m.remove();} + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; +function showDetail(el){ + var row=el.closest('tr'); + var table=row.closest('table'); + var headers=table.querySelectorAll('thead th'); + var cells=row.querySelectorAll('td'); + var html='
详细信息
'; + for(var i=0;i'+cells[i].innerHTML.trim()+'
'; + } + html+='
'; + Drawer.open('保温柜详情 — '+cells[0].textContent.trim(),html); +} diff --git a/web-admin/nutrition/prod-proc-combo.html b/web-admin/nutrition/prod-proc-combo.html index 0cd40c4..49b3d38 100644 --- a/web-admin/nutrition/prod-proc-combo.html +++ b/web-admin/nutrition/prod-proc-combo.html @@ -97,6 +97,30 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .action-more__item:hover{background:var(--primary-light);color:var(--primary);} .action-more__item--danger{color:var(--danger);} .action-more__item--danger:hover{background:#FFF1F0;color:var(--danger);} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} +/* 顶部提示条 */ +.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%) translateY(-20px);background:#f6ffed;border:1px solid #b7eb8f;color:#52c41a;padding:10px 24px;border-radius:var(--radius-sm);font-size:var(--font-sm);font-weight:500;z-index:9999;box-shadow:var(--shadow-md);opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} @@ -155,14 +179,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
净菜组配
格口溯源码存放净菜类型初始重量(kg)当前余量(kg)操作人温度(℃)保质剩余存入时间状态操作
A1-01NC-CAB-BOCA-0422-01土豆(土豆丝)🥬 净菜12.510.2张厨师4.2剩余32h04-22 09:15存放中溯源 视频 详情 编辑
A1-02NC-CAB-HLUB-0422-01净胡萝卜🥬 净菜18.015.6李主管4.1剩余46h04-22 09:20存放中溯源 视频 详情编辑
A1-03NC-CAB-XGUO-0422-01净香菇🥬 净菜9.06.8王厨师4.3剩余6h04-22 09:30临期预警溯源 视频 详情编辑
A1-04NC-CAB-XLHU-0422-01净西兰花🥬 净菜10.08.5张厨师4.0剩余50h04-22 09:40存放中溯源 视频 详情编辑
A1-05PKG-DH-001宫保鸡丁🍱 餐品包6.05.4李主管3.8剩余44h04-22 10:20存放中溯源 视频 详情编辑
A1-06NC-CAB-BCAI-0422-01净白菜🥬 净菜22.018.0王厨师7.8剩余40h04-22 08:50已过期溯源 视频 详情编辑
A1-01NC-CAB-BOCA-0422-01土豆(土豆丝)🥬 净菜12.510.2张厨师4.2剩余32h04-22 09:15存放中溯源 视频 详情 编辑
A1-02NC-CAB-HLUB-0422-01净胡萝卜🥬 净菜18.015.6李主管4.1剩余46h04-22 09:20存放中溯源 视频 详情编辑
A1-03NC-CAB-XGUO-0422-01净香菇🥬 净菜9.06.8王厨师4.3剩余6h04-22 09:30临期预警溯源 视频 详情编辑
A1-04NC-CAB-XLHU-0422-01净西兰花🥬 净菜10.08.5张厨师4.0剩余50h04-22 09:40存放中溯源 视频 详情编辑
A1-05PKG-DH-001宫保鸡丁🍱 餐品包6.05.4李主管3.8剩余44h04-22 10:20存放中溯源 视频 详情编辑
A1-06NC-CAB-BCAI-0422-01净白菜🥬 净菜22.018.0王厨师7.8剩余40h04-22 08:50已过期溯源 视频 详情编辑
A1-074.1空闲
A1-084.1空闲
A1-094.2空闲
- + - - - - - - + + + + + +
任务编号目标餐品餐品规格份数任务截止时间食材配方任务来源组配状态负责人完成时间操作
任务编号目标餐品餐品规格份数任务截止时间食材配方任务来源组配状态负责人操作类型完成时间操作
CMB-001宫保鸡丁标准份(300g)502026-05-20 11:00食材明细餐线已完成李组配2026-05-20 10:30:00食材溯源链路 查看视频 更多 ▾
CMB-002番茄炒蛋大份(500g)802026-05-20 11:00食材明细餐线已完成王组配2026-05-20 10:45:00食材溯源链路 查看视频 更多 ▾
CMB-003红烧肉标准份(300g)602026-05-20 11:30食材明细餐线组配中张组配食材溯源链路 查看视频 更多 ▾ 完成组配
CMB-004清蒸鱼标准份(500g)402026-05-20 12:00食材明细点餐待组配食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-005炒时蔬小份(200g)202026-05-20 11:00食材明细录入已完成赵组配2026-05-20 10:50:00食材溯源链路 查看视频 更多 ▾
CMB-006豆腐小份(200g)352026-05-20 12:00食材明细点餐待组配食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-001宫保鸡丁标准份(300g)502026-05-20 11:00食材明细餐线已完成李组配设备自动2026-05-20 10:30:00食材溯源链路 查看视频 更多 ▾
CMB-002番茄炒蛋大份(500g)802026-05-20 11:00食材明细餐线已完成王组配设备自动2026-05-20 10:45:00食材溯源链路 查看视频 更多 ▾
CMB-003红烧肉标准份(300g)602026-05-20 11:30食材明细餐线组配中张组配人工录入食材溯源链路 查看视频 更多 ▾ 完成组配
CMB-004清蒸鱼标准份(500g)402026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
CMB-005炒时蔬小份(200g)202026-05-20 11:00食材明细录入已完成赵组配设备自动2026-05-20 10:50:00食材溯源链路 查看视频 更多 ▾
CMB-006豆腐小份(200g)352026-05-20 12:00食材明细点餐待组配人工录入食材溯源链路 查看视频 更多 ▾ 开始组配
@@ -213,6 +237,10 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} +
+ + +
@@ -260,6 +288,88 @@ document.getElementById('modalOverlay').addEventListener('click',function(e){if( function openRecipeModal(name){document.getElementById('recipeModalTitle').textContent='食材明细 - '+name;document.getElementById('recipeModal').style.display='flex';} function closeRecipeModal(){document.getElementById('recipeModal').style.display='none';} document.getElementById('recipeModal').addEventListener('click',function(e){if(e.target===this)closeRecipeModal();}); + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; + +/* 顶部提示条 */ +var _toastTimer=null; +function showToast(msg){ + var el=document.getElementById('globalToast'); + if(!el){ + el=document.createElement('div'); + el.id='globalToast'; + el.className='toast'; + document.body.appendChild(el); + } + clearTimeout(_toastTimer); + el.innerHTML=msg; + el.classList.remove('show'); + void el.offsetWidth; + el.classList.add('show'); + _toastTimer=setTimeout(function(){el.classList.remove('show');},2000); +} + +/* 开始组配 */ +function startCombo(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + var taskId=tds[0].textContent; + // 状态列(第7列)改为"组配中" + tds[7].innerHTML='组配中'; + // 按钮替换为"完成组配" + el.style.color='var(--success)'; + el.setAttribute('onclick','finishCombo(this)'); + el.textContent='完成组配'; + showToast('✅ '+taskId+' 已开始组配'); +} + +/* 完成组配 */ +function finishCombo(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + var taskId=tds[0].textContent; + // 状态列改为"已完成" + tds[7].innerHTML='已完成'; + // 完成时间列(第10列)填入当前时间 + var now=new Date(); + var ts=now.getFullYear()+'-'+String(now.getMonth()+1).padStart(2,'0')+'-'+String(now.getDate()).padStart(2,'0')+' '+String(now.getHours()).padStart(2,'0')+':'+String(now.getMinutes()).padStart(2,'0')+':'+String(now.getSeconds()).padStart(2,'0'); + tds[10].textContent=ts; + // 移除按钮 + el.remove(); + showToast('✅ '+taskId+' 组配已完成'); +} + +/* 详情抽屉 */ +function showDetail(el){ + var tr=el.closest('tr'); + var ths=tr.closest('table').querySelectorAll('thead th'); + var tds=tr.querySelectorAll('td'); + var labels=[]; + for(var i=0;i
'+tds[i].innerHTML+'
'; + } + html+=''; + Drawer.open('组合详情 — '+taskId,html); +} diff --git a/web-admin/nutrition/prod-proc-cook.html b/web-admin/nutrition/prod-proc-cook.html index 9e413c5..7f08397 100644 --- a/web-admin/nutrition/prod-proc-cook.html +++ b/web-admin/nutrition/prod-proc-cook.html @@ -110,6 +110,30 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .temp-chart__x{position:absolute;left:48px;right:16px;bottom:8px;display:flex;justify-content:space-between;font-size:11px;color:#999;} .temp-chart__area{width:100%;height:100%;position:relative;} .temp-chart__svg{width:100%;height:100%;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} +/* 顶部提示条 */ +.toast{position:fixed;top:24px;left:50%;transform:translateX(-50%) translateY(-20px);background:#f6ffed;border:1px solid #b7eb8f;color:#52c41a;padding:10px 24px;border-radius:var(--radius-sm);font-size:var(--font-sm);font-weight:500;z-index:9999;box-shadow:var(--shadow-md);opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} @@ -171,13 +195,13 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - - + + + + + + +
烹制任务号来源类型组配任务号菜品名称餐品规格需求份数烹制份数烹制日期烹制开始烹制结束烹制状态厨师食材明细温度过程模型数据生重(kg)熟重(kg)生熟比操作
COOK-001点餐CMB-001宫保鸡丁标准份(300g)50502026-05-2011:0011:20已完成张厨师食材明细温度曲线92分8.57.21:0.85食材溯源链路 查看视频 更多 ▾通知取餐
COOK-002点餐CMB-002番茄炒蛋大份(500g)80802026-05-2011:0511:20已完成李厨师食材明细温度曲线88分12.010.41:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-003餐线CMB-003红烧肉标准份(300g)602026-05-2011:10烹制中王厨师食材明细温度曲线分析中10.0食材溯源链路 查看视频 更多 ▾烹制完成
COOK-004餐线CMB-004清蒸鱼标准份(500g)402026-05-2011:15烹制中张厨师食材明细温度曲线分析中6.5食材溯源链路 查看视频 更多 ▾烹制完成
COOK-005餐线CMB-005蒜蓉菠菜标准份(300g)1002026-05-20待烹制食材明细15.0食材溯源链路 查看视频 更多 ▾开始烹制
COOK-006餐线CMB-005炒时蔬小份(200g)20202026-05-2011:1011:30已完成赵厨师食材明细温度曲线95分18.015.61:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-007点餐CMB-006豆腐小份(200g)35352026-05-2011:2011:35已完成陈厨师食材明细温度曲线78分4.23.91:0.93食材溯源链路 查看视频 更多 ▾通知取餐
COOK-001点餐CMB-001宫保鸡丁标准份(300g)50502026-05-2011:0011:20已完成张厨师食材明细温度曲线92分8.57.21:0.85食材溯源链路 查看视频 更多 ▾通知取餐
COOK-002点餐CMB-002番茄炒蛋大份(500g)80802026-05-2011:0511:20已完成李厨师食材明细温度曲线88分12.010.41:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-003餐线CMB-003红烧肉标准份(300g)602026-05-2011:10烹制中王厨师食材明细温度曲线分析中10.0食材溯源链路 查看视频 更多 ▾烹制完成
COOK-004餐线CMB-004清蒸鱼标准份(500g)402026-05-2011:15烹制中张厨师食材明细温度曲线分析中6.5食材溯源链路 查看视频 更多 ▾烹制完成
COOK-005餐线CMB-005蒜蓉菠菜标准份(300g)1002026-05-20待烹制食材明细15.0食材溯源链路 查看视频 更多 ▾开始烹制
COOK-006餐线CMB-005炒时蔬小份(200g)20202026-05-2011:1011:30已完成赵厨师食材明细温度曲线95分18.015.61:0.87食材溯源链路 查看视频 更多 ▾通知取餐
COOK-007点餐CMB-006豆腐小份(200g)35352026-05-2011:2011:35已完成陈厨师食材明细温度曲线78分4.23.91:0.93食材溯源链路 查看视频 更多 ▾通知取餐
@@ -298,6 +322,97 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} function openIngredientModal(name){document.getElementById('ingredientTitle').textContent='食材明细 - '+name;document.getElementById('ingredientModal').style.display='flex';} function openTempModal(){document.getElementById('tempModal').style.display='flex';} function openModelModal(){document.getElementById('modelModal').style.display='flex';} + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; + +/* 顶部提示条 */ +var _toastTimer=null; +function showToast(msg){ + var el=document.getElementById('globalToast'); + if(!el){ + el=document.createElement('div'); + el.id='globalToast'; + el.className='toast'; + document.body.appendChild(el); + } + clearTimeout(_toastTimer); + el.innerHTML=msg; + el.classList.remove('show'); + void el.offsetWidth; + el.classList.add('show'); + _toastTimer=setTimeout(function(){el.classList.remove('show');},2000); +} +function _timeNow(){var d=new Date();return String(d.getHours()).padStart(2,'0')+':'+String(d.getMinutes()).padStart(2,'0');} + +/* 开始烹制 */ +function startCook(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + var taskId=tds[0].textContent; + // 状态列(第10列)改为"烹制中" + tds[10].innerHTML='烹制中'; + // 烹制开始列(第8列)填入当前时间 + tds[8].textContent=_timeNow(); + // 按钮替换为"烹制完成" + el.setAttribute('onclick','finishCook(this)'); + el.textContent='烹制完成'; + showToast('✅ '+taskId+' 已开始烹制'); +} + +/* 烹制完成 */ +function finishCook(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + var taskId=tds[0].textContent; + // 状态列改为"已完成" + tds[10].innerHTML='已完成'; + // 烹制结束列(第9列)填入当前时间 + tds[9].textContent=_timeNow(); + // 按钮替换为"通知取餐" + el.setAttribute('onclick','notifyPickup(this)'); + el.textContent='通知取餐'; + showToast('✅ '+taskId+' 烹制已完成'); +} + +/* 通知取餐 */ +function notifyPickup(el){ + var tr=el.closest('tr'); + var taskId=tr.querySelectorAll('td')[0].textContent; + var dishName=tr.querySelectorAll('td')[3].textContent; + showToast('✅ '+taskId+'('+dishName+')已通知取餐'); +} + +/* 详情抽屉 */ +function showDetail(el){ + var tr=el.closest('tr'); + var ths=tr.closest('table').querySelectorAll('thead th'); + var tds=tr.querySelectorAll('td'); + var fields=''; + for(var i=0;i
'+value+'
'; + } + var key=tds[0].textContent; + var bodyHtml='
基本信息
'+fields+'
'; + Drawer.open('烹饪详情 — '+key, bodyHtml); +} diff --git a/web-admin/nutrition/prod-proc-serve.html b/web-admin/nutrition/prod-proc-serve.html index b71407c..09ddb6d 100644 --- a/web-admin/nutrition/prod-proc-serve.html +++ b/web-admin/nutrition/prod-proc-serve.html @@ -95,6 +95,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .autofill-card__item{display:flex;flex-direction:column;gap:2px;} .autofill-card__label{font-size:11px;color:#8c8c8c;} .autofill-card__value{font-size:13px;color:#262626;font-weight:500;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -139,12 +160,12 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - + + + + + +
送达餐线餐次送达设备(秤台)识别方式菜品名称当前余量(kg)上餐重量(kg)出锅时间送达餐线时间上餐状态烹制任务号出锅温度(℃)厨师操作
A区中餐线午餐00025号秤🤖 自动识别宫保鸡丁12.538.211:1811:30上餐完成COOK-00182张厨师食材溯源链路 查看视频 更多 ▾
A区中餐线午餐00025号秤🤖 自动识别番茄炒蛋8.322.611:2011:30上餐完成COOK-00278李厨师食材溯源链路 查看视频 更多 ▾
B区中餐线午餐00027号秤👤 人工选择红烧肉1.242.611:2211:38余量不足COOK-00386王厨师食材溯源链路 查看视频 更多 ▾
A区早餐线早餐00022号秤🤖 自动识别小米粥012.607:2007:28上餐完成COOK-00675赵厨师食材溯源链路 查看视频 更多 ▾
B区早餐线早餐00023号秤👤 人工选择燕麦粥2.18.407:2207:35上餐完成COOK-00772陈厨师食材溯源链路 查看视频 更多 ▾
C区快餐线午餐00028号秤👤 人工选择蒜蓉菠菜待上餐COOK-005食材溯源链路 查看视频 更多 ▾
A区中餐线午餐00025号秤🤖 自动识别宫保鸡丁12.538.211:1811:30上餐完成COOK-00182张厨师食材溯源链路 查看视频 更多 ▾
A区中餐线午餐00025号秤🤖 自动识别番茄炒蛋8.322.611:2011:30上餐完成COOK-00278李厨师食材溯源链路 查看视频 更多 ▾
B区中餐线午餐00027号秤👤 人工选择红烧肉1.242.611:2211:38余量不足COOK-00386王厨师食材溯源链路 查看视频 更多 ▾
A区早餐线早餐00022号秤🤖 自动识别小米粥012.607:2007:28上餐完成COOK-00675赵厨师食材溯源链路 查看视频 更多 ▾
B区早餐线早餐00023号秤👤 人工选择燕麦粥2.18.407:2207:35上餐完成COOK-00772陈厨师食材溯源链路 查看视频 更多 ▾
C区快餐线午餐00028号秤👤 人工选择蒜蓉菠菜待上餐COOK-005食材溯源链路 查看视频 更多 ▾
@@ -260,6 +281,42 @@ function onDishChange(sel){ document.getElementById('af_recog').textContent=d.recog; document.getElementById('af_weight').textContent=d.weight+' kg'; } + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; + +/* 详情抽屉 —— 通用函数,根据 thead 动态生成字段 */ +function showDetail(el){ + var tr=el.closest('tr'); + var table=tr.closest('table'); + var ths=table.querySelectorAll('thead th'); + var tds=tr.querySelectorAll('td'); + var dishName=''; + var fields=''; + for(var i=0;i
'+value+'
'; + } + var body='
上餐信息
'+fields+'
'; + Drawer.open('上餐详情 — '+dishName,body); +} diff --git a/web-admin/nutrition/prod-proc-surplus.html b/web-admin/nutrition/prod-proc-surplus.html index 2155fa5..8bf7c0d 100644 --- a/web-admin/nutrition/prod-proc-surplus.html +++ b/web-admin/nutrition/prod-proc-surplus.html @@ -108,6 +108,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .welfare-meta__label{font-size:12px;color:#8c8c8c;} .welfare-meta__value{font-size:14px;color:#262626;font-weight:500;} .welfare-summary{margin-top:16px;padding:12px 16px;background:#f6ffed;border-radius:6px;border:1px solid #b7eb8f;font-size:13px;color:#595959;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -171,14 +192,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - - - + + + + + + + +
处置单号菜品名称餐线餐次计划制作(kg)实际制作(kg)销售/取餐(kg)余量(kg)余量率(%)处置方式备注处置数量(kg)交叉核对状态处置时间处置人员操作
SUR-002白米饭A区中餐线午餐60.062.054.08.012.9%捐赠捐赠予未央环卫5.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-002白米饭A区中餐线午餐60.062.054.08.012.9%员工福利加班餐3.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-004蒜蓉菠菜B区中餐线午餐15.014.810.04.832.4%废弃叶片发黄3.0异常(损耗超标)2026-04-22 15:00李主管食材溯源链路 查看视频 更多 ▾
SUR-004蒜蓉菠菜B区中餐线午餐15.014.810.04.832.4%加工再利用制作蔬菜饼1.8异常(损耗超标)2026-04-22 15:00李主管食材溯源链路 查看视频 更多 ▾
SUR-001宫保鸡丁A区中餐线午餐42.543.039.53.58.1%员工福利加班餐2.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-001宫保鸡丁A区中餐线午餐42.543.039.53.58.1%捐赠捐赠予安保部1.5正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-005红烧肉B区中餐线午餐50.048.545.33.26.6%员工福利加班餐3.2正常2026-04-22 14:45张主管食材溯源链路 查看视频 更多 ▾
SUR-003香辣大虾C区快餐线午餐20.020.518.32.210.7%废弃只剩辣椒和虾头2.2正常2026-04-22 14:30张主管食材溯源链路 查看视频 更多 ▾
SUR-002白米饭A区中餐线午餐60.062.054.08.012.9%捐赠捐赠予未央环卫5.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-002白米饭A区中餐线午餐60.062.054.08.012.9%员工福利加班餐3.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-004蒜蓉菠菜B区中餐线午餐15.014.810.04.832.4%废弃叶片发黄3.0异常(损耗超标)2026-04-22 15:00李主管食材溯源链路 查看视频 更多 ▾
SUR-004蒜蓉菠菜B区中餐线午餐15.014.810.04.832.4%加工再利用制作蔬菜饼1.8异常(损耗超标)2026-04-22 15:00李主管食材溯源链路 查看视频 更多 ▾
SUR-001宫保鸡丁A区中餐线午餐42.543.039.53.58.1%员工福利加班餐2.0正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-001宫保鸡丁A区中餐线午餐42.543.039.53.58.1%捐赠捐赠予安保部1.5正常2026-04-22 14:00张主管食材溯源链路 查看视频 更多 ▾
SUR-005红烧肉B区中餐线午餐50.048.545.33.26.6%员工福利加班餐3.2正常2026-04-22 14:45张主管食材溯源链路 查看视频 更多 ▾
SUR-003香辣大虾C区快餐线午餐20.020.518.32.210.7%废弃只剩辣椒和虾头2.2正常2026-04-22 14:30张主管食材溯源链路 查看视频 更多 ▾
@@ -344,6 +365,31 @@ function onSurplusMethodChange(){ document.getElementById('surplusWelfareSection').style.display=(v==='员工福利')?'block':'none'; } +/* 右侧抽屉组件 */ +function showDetail(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + var ths=document.querySelectorAll('.table-card table thead th'); + var firstVal=tds[0].textContent.trim(); + // 构建抽屉 + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + var fieldsHtml=''; + for(var i=0;i'+value+''; + } + overlay.innerHTML='
余量处置详情 — '+firstVal+'
基本信息
'+fieldsHtml+'
'; + document.body.appendChild(overlay); + overlay.addEventListener('click',function(e){if(e.target===overlay)closeDrawer(overlay.querySelector('.drawer__close'));}); +} +function closeDrawer(btn){ + var overlay=btn.closest('.drawer-overlay'); + overlay.classList.add('closing'); + setTimeout(function(){overlay.remove();},200); +} + function openWelfareModal(name,code,total){ document.getElementById('welfareTitle').textContent='员工福利取餐明细 — '+name; document.getElementById('welfareName').textContent=name; diff --git a/web-admin/nutrition/prod-qc-daily.html b/web-admin/nutrition/prod-qc-daily.html index 7108f39..7084fbe 100644 --- a/web-admin/nutrition/prod-qc-daily.html +++ b/web-admin/nutrition/prod-qc-daily.html @@ -192,6 +192,27 @@ tbody tr:hover{background:#F8FBFF;} thead th:last-child,tbody td.td-actions{position:sticky;right:0;background:#fff;box-shadow:-4px 0 8px rgba(0,0,0,0.04);z-index:2;white-space:nowrap;} thead th:last-child{background:#FAFAFA;} tbody tr:hover td.td-actions{background:#F8FBFF;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -315,11 +336,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} 时间摄像头位置违规类型违规人员状态操作 2026-04-22 11:15:20CAM-A-04洗手区入口未洗手直接操作张伟待处理视频回放 处理 - 2026-04-22 10:26:11CAM-B-03分拣区-2号位未戴厨师帽陈刚已处理视频回放 详情 + 2026-04-22 10:26:11CAM-B-03分拣区-2号位未戴厨师帽陈刚已处理视频回放 详情 2026-04-22 10:12:36CAM-A-01炒菜区-1号位未戴口罩赵敏待处理视频回放 处理 - 2026-04-21 14:38:05CAM-A-01炒菜区-1号位未戴口罩李娜已处理视频回放 详情 - 2026-04-21 09:55:47CAM-C-02配菜区-1号位违规使用手机王磊已处理视频回放 详情 - 2026-04-20 16:22:31CAM-B-03分拣区-2号位未穿工作服张伟已处理视频回放 详情 + 2026-04-21 14:38:05CAM-A-01炒菜区-1号位未戴口罩李娜已处理视频回放 详情 + 2026-04-21 09:55:47CAM-C-02配菜区-1号位违规使用手机王磊已处理视频回放 详情 + 2026-04-20 16:22:31CAM-B-03分拣区-2号位未穿工作服张伟已处理视频回放 详情 @@ -347,11 +368,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - + + + + +
区域天然气浓度(ppm)天然气状态消防设施温度/湿度污废处理状态行为安全最近检查操作
炒菜区0.02正常正常28.6℃ / 62%正常正常2026-04-22 11:00详情 编辑
冷库区正常正常4.1℃ / 85%正常正常2026-04-22 11:00详情 编辑
粗加工间0.01正常正常22.4℃ / 68%正常正常2026-04-22 10:30详情 编辑
备餐区0.03告警正常24.8℃ / 71%预警告警2026-04-22 10:00详情 编辑
洗碗间正常异常26.2℃ / 78%异常正常2026-04-21 18:00详情 编辑
炒菜区0.02正常正常28.6℃ / 62%正常正常2026-04-22 11:00详情 编辑
冷库区正常正常4.1℃ / 85%正常正常2026-04-22 11:00详情 编辑
粗加工间0.01正常正常22.4℃ / 68%正常正常2026-04-22 10:30详情 编辑
备餐区0.03告警正常24.8℃ / 71%预警告警2026-04-22 10:00详情 编辑
洗碗间正常异常26.2℃ / 78%异常正常2026-04-21 18:00详情 编辑
@@ -405,11 +426,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - + + + + +
人员编号姓名岗位工作区域人员照片健康证编号证件照片发证日期有效期至有效期状态操作
EMP001张伟厨师A区厨房📷 查看HC-2025-00128📷 查看2025-05-102026-05-09即将到期详情 编辑 删除
EMP002李娜配餐员B区厨房📷 查看HC-2025-00176📷 查看2025-09-122026-09-11有效详情 编辑 删除
EMP003王磊洗碗工C区后厨📷 查看HC-2024-00302📷 查看2024-03-012025-02-28已过期详情 编辑 删除
EMP004赵敏厨师A区厨房📷 查看HC-2025-00211📷 查看2025-11-182026-11-17有效详情 编辑 删除
EMP005陈刚分拣员B区后厨📷 查看HC-2025-00089📷 查看2025-04-202026-04-19即将到期详情 编辑 删除
EMP001张伟厨师A区厨房📷 查看HC-2025-00128📷 查看2025-05-102026-05-09即将到期详情 编辑 删除
EMP002李娜配餐员B区厨房📷 查看HC-2025-00176📷 查看2025-09-122026-09-11有效详情 编辑 删除
EMP003王磊洗碗工C区后厨📷 查看HC-2024-00302📷 查看2024-03-012025-02-28已过期详情 编辑 删除
EMP004赵敏厨师A区厨房📷 查看HC-2025-00211📷 查看2025-11-182026-11-17有效详情 编辑 删除
EMP005陈刚分拣员B区后厨📷 查看HC-2025-00089📷 查看2025-04-202026-04-19即将到期详情 编辑 删除
@@ -488,13 +509,13 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - - - - - - + + + + + + +
记录日期用电量(kWh)电费(元)用水量(m³)水费(元)用气量(m³)气费(元)合计能耗成本(元)分摊每份餐(元)操作
2026-05-07372¥334.840¥144.0120¥750.0¥1,228.8¥0.83详情
2026-05-06398¥358.245¥162.0130¥812.5¥1,332.7¥0.89详情
2026-05-05386¥347.442¥151.2126¥787.5¥1,286.1¥0.86详情
2026-05-04362¥325.838¥136.8115¥718.8¥1,181.4¥0.81详情
2026-05-03405¥364.546¥165.6132¥825.0¥1,355.1¥0.91详情
2026-05-02380¥342.041¥147.6122¥762.5¥1,252.1¥0.85详情
2026-05-01358¥322.236¥129.6110¥687.5¥1,139.3¥0.79详情
2026-05-07372¥334.840¥144.0120¥750.0¥1,228.8¥0.83详情
2026-05-06398¥358.245¥162.0130¥812.5¥1,332.7¥0.89详情
2026-05-05386¥347.442¥151.2126¥787.5¥1,286.1¥0.86详情
2026-05-04362¥325.838¥136.8115¥718.8¥1,181.4¥0.81详情
2026-05-03405¥364.546¥165.6132¥825.0¥1,355.1¥0.91详情
2026-05-02380¥342.041¥147.6122¥762.5¥1,252.1¥0.85详情
2026-05-01358¥322.236¥129.6110¥687.5¥1,139.3¥0.79详情
@@ -737,6 +758,35 @@ function cancelEnergyEdit(type){ var btn=card.querySelector('.energy-entry-btn'); disp.style.display='block';edit.style.display='none';btn.textContent='✏️ 录入';btn.style.color='var(--primary)'; } +/* 抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; +function showDetail(el){ + var row=el.closest('tr'); + var table=row.closest('table'); + var headers=table.querySelectorAll('thead th'); + var cells=row.querySelectorAll('td'); + var html='
详细信息
'; + for(var i=0;i'+cells[i].innerHTML.trim()+'
'; + } + html+='
'; + Drawer.open('详情 — '+cells[0].textContent.trim(),html); +} \ No newline at end of file diff --git a/web-admin/nutrition/prod-qc-nutrition-add.html b/web-admin/nutrition/prod-qc-nutrition-add.html index ea2aa81..c855249 100644 --- a/web-admin/nutrition/prod-qc-nutrition-add.html +++ b/web-admin/nutrition/prod-qc-nutrition-add.html @@ -240,6 +240,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
+
diff --git a/web-admin/nutrition/prod-qc-nutrition-sync.html b/web-admin/nutrition/prod-qc-nutrition-sync.html index f497706..fa21fc3 100644 --- a/web-admin/nutrition/prod-qc-nutrition-sync.html +++ b/web-admin/nutrition/prod-qc-nutrition-sync.html @@ -130,6 +130,28 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei .detail-item__value{font-size:var(--font-sm);color:var(--text-primary);} .section-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--border);} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} + /* Dialog 顶部均值区 */ .dialog__avg{flex-shrink:0;border-bottom:1px solid var(--border);padding:16px 24px 12px;background:#FAFBFC;} .dialog__avg-title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin-bottom:10px;display:flex;align-items:center;gap:6px;} @@ -350,7 +372,7 @@ function renderTable(){ +''+s.syncTime+'' +''+s.operator+'' +''+s.recordIdxs.length+'' - +'详情' + +'详情' +''; }).join(''); document.getElementById('tableBody').innerHTML = html; @@ -615,6 +637,67 @@ function toggleSubgroup(header){ header.parentElement.classList.toggle('open'); if(s) s.classList.add('open'); })(); +/* ===== 右侧抽屉组件 ===== */ +function showDetail(syncIdx){ + var s = SYNC_DATA[syncIdx]; + var recs = s.recordIdxs.map(function(i){ return RECORDS[i]; }); + + var html = '
' + +'
同步信息
' + +'
' + +'
餐品
'+s.dish+'
' + +'
同步时间
'+s.syncTime+'
' + +'
操作人
'+s.operator+'
' + +'
已选检验记录
'+s.recordIdxs.length+' 条
' + +'
'; + + /* 关联检验记录列表 */ + html += '
' + +'
关联检验记录
'; + recs.forEach(function(r){ + html += '
' + +'
检验单号
'+r.no+'
' + +'
检验时间
'+r.time+'
' + +'
检验人员
'+r.inspector+'
' + +'
批次
'+r.batch+'
' + +'
食堂
'+r.category+'
' + +'
餐线
'+r.line+'
' + +'
营养检验
'+nutriTag(r.nutri)+'
' + +'
味道评级
'+gradeTag(r.tasteData.grade)+'
' + +'
口感评级
'+gradeTag(r.textureData.grade)+'
' + +'
色泽评级
'+gradeTag(r.colorData.grade)+'
' + +'
'; + }); + html += '
'; + + openDrawer('同步记录详情 - ' + s.dish, html); +} + +function openDrawer(title, bodyHtml){ + /* 移除已有抽屉 */ + var old = document.querySelector('.drawer-overlay'); + if(old) old.remove(); + + var overlay = document.createElement('div'); + overlay.className = 'drawer-overlay'; + overlay.onclick = function(e){ if(e.target === overlay) closeDrawer(overlay); }; + overlay.innerHTML = '
' + +'
' + +''+title+'' + +'' + +'
' + +'
'+bodyHtml+'
' + +'
'; + document.body.appendChild(overlay); +} + +function closeDrawer(overlay){ + if(!overlay) overlay = document.querySelector('.drawer-overlay'); + if(!overlay) return; + overlay.classList.add('closing'); + setTimeout(function(){ overlay.remove(); }, 200); +} + /* ===== 初始化 ===== */ renderTable(); diff --git a/web-admin/nutrition/sup-clean-external.html b/web-admin/nutrition/sup-clean-external.html index d26b55d..41bd20f 100644 --- a/web-admin/nutrition/sup-clean-external.html +++ b/web-admin/nutrition/sup-clean-external.html @@ -101,6 +101,27 @@ textarea.form-control{height:auto;padding:8px 12px;resize:vertical;min-height:60 .form-divider{grid-column:1/-1;border:none;border-top:1px solid var(--border);margin:4px 0;} /* 只读字段 */ .form-control[readonly]{background:#F5F5F5;color:var(--text-secondary);cursor:default;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -188,14 +209,14 @@ textarea.form-control{height:auto;padding:8px 12px;resize:vertical;min-height:60 订单号溯源码客户名称净菜类型净菜/餐品包装规格售卖份数计量(kg)单价(元/kg)小计金额出库区域下单时间物流单号订单状态操作 - EXT-001NC-INT-BOCA-20260422-01社区便民超市🥬 净菜包土豆(土豆丝)5kg/箱1050¥3.5¥175A仓-蔬菜区-012026-04-22 08:00SF1234567890已完成详情 删除 - EXT-001NC-INT-HLUB-20260422-01社区便民超市🥬 净菜包土豆(土豆块)5kg/箱630¥3.5¥105A仓-蔬菜区-032026-04-22 08:00SF1234567890已完成详情 删除 - EXT-002NC-INT-ZLRJ-20260422-01周边餐饮企业🥬 净菜包净猪里脊1kg/箱550¥28¥1,400B仓-肉类区-012026-04-22 09:30SF9876543210配送中确认收货 详情 删除 - EXT-003NC-INT-JXRJ-20260422-01周边餐饮企业🍱 餐品净菜包宫保鸡丁标准份(500g)4020¥12¥240B仓-肉类区-022026-04-22 09:30SF9876543210配送中确认收货 详情 删除 - EXT-004NC-INT-BCAI-20260422-01学校食堂🥬 净菜包鸡肉(鸡肉块)1kg/箱660¥2.0¥120A仓-蔬菜区-022026-04-22 10:00—待配送立即发货 详情 删除 - EXT-004NC-INT-XLHU-20260422-01学校食堂🥬 净菜包净西兰花5kg/箱840¥4.5¥180A仓-蔬菜区-042026-04-22 10:00—待配送立即发货 详情 删除 - EXT-005NC-INT-QZYU-20260422-01职工家属区团购🍱 餐品净菜包清蒸鱼标准份(500g)2010¥15¥150C仓-水产区-012026-04-22 10:30—备货中备货完成 详情 删除 - EXT-006NC-INT-SRBC-20260422-01职工家属区团购🍱 餐品净菜包蒜蓉菠菜标准份(500g)3015¥8¥120A仓-蔬菜区-012026-04-22 10:30—备货中备货完成 详情 删除 + EXT-001NC-INT-BOCA-20260422-01社区便民超市🥬 净菜包土豆(土豆丝)5kg/箱1050¥3.5¥175A仓-蔬菜区-012026-04-22 08:00SF1234567890已完成详情 删除 + EXT-001NC-INT-HLUB-20260422-01社区便民超市🥬 净菜包土豆(土豆块)5kg/箱630¥3.5¥105A仓-蔬菜区-032026-04-22 08:00SF1234567890已完成详情 删除 + EXT-002NC-INT-ZLRJ-20260422-01周边餐饮企业🥬 净菜包净猪里脊1kg/箱550¥28¥1,400B仓-肉类区-012026-04-22 09:30SF9876543210配送中确认收货 详情 删除 + EXT-003NC-INT-JXRJ-20260422-01周边餐饮企业🍱 餐品净菜包宫保鸡丁标准份(500g)4020¥12¥240B仓-肉类区-022026-04-22 09:30SF9876543210配送中确认收货 详情 删除 + EXT-004NC-INT-BCAI-20260422-01学校食堂🥬 净菜包鸡肉(鸡肉块)1kg/箱660¥2.0¥120A仓-蔬菜区-022026-04-22 10:00—待配送立即发货 详情 删除 + EXT-004NC-INT-XLHU-20260422-01学校食堂🥬 净菜包净西兰花5kg/箱840¥4.5¥180A仓-蔬菜区-042026-04-22 10:00—待配送立即发货 详情 删除 + EXT-005NC-INT-QZYU-20260422-01职工家属区团购🍱 餐品净菜包清蒸鱼标准份(500g)2010¥15¥150C仓-水产区-012026-04-22 10:30—备货中备货完成 详情 删除 + EXT-006NC-INT-SRBC-20260422-01职工家属区团购🍱 餐品净菜包蒜蓉菠菜标准份(500g)3015¥8¥120A仓-蔬菜区-012026-04-22 10:30—备货中备货完成 详情 删除 @@ -362,6 +383,44 @@ textarea.form-control{height:auto;padding:8px 12px;resize:vertical;min-height:60 + + + + + + diff --git a/web-admin/nutrition/sup-clean-internal.html b/web-admin/nutrition/sup-clean-internal.html index 6f2c332..3b57c7c 100644 --- a/web-admin/nutrition/sup-clean-internal.html +++ b/web-admin/nutrition/sup-clean-internal.html @@ -96,6 +96,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} .form-item input,.form-item select,.form-item textarea{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;} .form-item input:focus,.form-item select:focus{border-color:var(--primary);} .form-item select{appearance:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;padding-right:28px;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -165,14 +186,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} 申领单号溯源码申领食堂净菜类型净菜/餐品包装规格申领份数申领数量(kg)订单状态关联仓库区域申领时间预定配送时间配送人操作 - INT-001NC-INT-BOCA-20260422-01一号食堂厨房🥬 净菜包菠菜500g/袋5025已完成A仓-蔬菜区-012026-04-22 07:302026-04-22 09:00李配送详情 删除 - INT-001NC-INT-BCAI-20260422-01一号食堂厨房🥬 净菜包玉米(玉米粒)1kg/盒2020已完成A仓-蔬菜区-022026-04-22 07:302026-04-22 09:00李配送详情 删除 - INT-002NC-INT-ZLRJ-20260422-01二号食堂厨房🥬 净菜包猪排骨2kg/盘2040配送中B仓-肉类区-012026-04-22 08:002026-04-22 10:00王配送确认收货 详情 删除 - INT-003NC-INT-JXRJ-20260422-01二号食堂厨房🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中B仓-肉类区-022026-04-22 08:002026-04-22 10:00王配送确认收货 详情 删除 - INT-004NC-INT-CAYO-20260422-01三号食堂厨房🥬 净菜包草鱼(鱼片)2kg/盘2040待配送C仓-水产区-012026-04-22 08:302026-04-22 10:30—立即配送 详情 删除 - INT-005NC-INT-QZYU-20260422-01一号食堂厨房🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送C仓-水产区-022026-04-22 09:002026-04-22 11:00—立即配送 详情 删除 - INT-006NC-INT-TDSI-20260422-01三号食堂厨房🥬 净菜包土豆(土豆丝)500g/袋4020备货中A仓-蔬菜区-032026-04-22 09:152026-04-22 11:30—备货完成 详情 删除 - INT-007NC-INT-SRBC-20260422-01二号食堂厨房🍱 餐品净菜包蒜蓉菠菜标准份(500g)2512.5备货中A仓-蔬菜区-012026-04-22 09:302026-04-22 12:00—备货完成 详情 删除 + INT-001NC-INT-BOCA-20260422-01一号食堂厨房🥬 净菜包菠菜500g/袋5025已完成A仓-蔬菜区-012026-04-22 07:302026-04-22 09:00李配送详情 删除 + INT-001NC-INT-BCAI-20260422-01一号食堂厨房🥬 净菜包玉米(玉米粒)1kg/盒2020已完成A仓-蔬菜区-022026-04-22 07:302026-04-22 09:00李配送详情 删除 + INT-002NC-INT-ZLRJ-20260422-01二号食堂厨房🥬 净菜包猪排骨2kg/盘2040配送中B仓-肉类区-012026-04-22 08:002026-04-22 10:00王配送确认收货 详情 删除 + INT-003NC-INT-JXRJ-20260422-01二号食堂厨房🍱 餐品净菜包宫保鸡丁标准份(500g)3015配送中B仓-肉类区-022026-04-22 08:002026-04-22 10:00王配送确认收货 详情 删除 + INT-004NC-INT-CAYO-20260422-01三号食堂厨房🥬 净菜包草鱼(鱼片)2kg/盘2040待配送C仓-水产区-012026-04-22 08:302026-04-22 10:30—立即配送 详情 删除 + INT-005NC-INT-QZYU-20260422-01一号食堂厨房🍱 餐品净菜包清蒸鱼标准份(500g)157.5待配送C仓-水产区-022026-04-22 09:002026-04-22 11:00—立即配送 详情 删除 + INT-006NC-INT-TDSI-20260422-01三号食堂厨房🥬 净菜包土豆(土豆丝)500g/袋4020备货中A仓-蔬菜区-032026-04-22 09:152026-04-22 11:30—备货完成 详情 删除 + INT-007NC-INT-SRBC-20260422-01二号食堂厨房🍱 餐品净菜包蒜蓉菠菜标准份(500g)2512.5备货中A仓-蔬菜区-012026-04-22 09:302026-04-22 12:00—备货完成 详情 删除 @@ -250,6 +271,74 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} + + + + + + + + + diff --git a/web-admin/nutrition/sup-hygiene-check.html b/web-admin/nutrition/sup-hygiene-check.html index 7d1898f..c83a588 100644 --- a/web-admin/nutrition/sup-hygiene-check.html +++ b/web-admin/nutrition/sup-hygiene-check.html @@ -105,6 +105,27 @@ tbody tr:hover{background:#F8FBFF;} thead th:last-child,tbody td.td-actions{position:sticky;right:0;background:#fff;box-shadow:-4px 0 8px rgba(0,0,0,0.04);z-index:2;white-space:nowrap;} thead th:last-child{background:#FAFAFA;} tbody tr:hover td.td-actions{background:#F8FBFF;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -177,22 +198,22 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - HYG-20260415-001ST-FH-FA01-VG-BOCA-286K-20260415-001菠菜农药残留合格0.02mg/kg<0.1mg/kg2026-04-15 10:00内部检测室李检测电子报告扫描RPT-20260415-001查看视频 详情 编辑 删除 + HYG-20260415-001ST-FH-FA01-VG-BOCA-286K-20260415-001菠菜农药残留合格0.02mg/kg<0.1mg/kg2026-04-15 10:00内部检测室李检测电子报告扫描RPT-20260415-001查看视频 详情 编辑 删除 - HYG-20260415-002ST-EX-XR01-MT-ZLRJ-080K-20260415-005猪里脊瘦肉精合格未检出未检出2026-04-15 10:30内部检测室王检测纸质OCR识别RPT-20260415-002查看视频 详情 编辑 删除 + HYG-20260415-002ST-EX-XR01-MT-ZLRJ-080K-20260415-005猪里脊瘦肉精合格未检出未检出2026-04-15 10:30内部检测室王检测纸质OCR识别RPT-20260415-002查看视频 详情 编辑 删除 - HYG-20260415-003ST-EX-HS01-SF-CAYO-060K-20260414-001草鱼甲醛不合格0.15mg/kg<0.05mg/kg2026-04-15 11:00第三方检测机构外部检测员电子报告扫描RPT-20260415-003查看视频 详情 编辑删除 隔离处理 + HYG-20260415-003ST-EX-HS01-SF-CAYO-060K-20260414-001草鱼甲醛不合格0.15mg/kg<0.05mg/kg2026-04-15 11:00第三方检测机构外部检测员电子报告扫描RPT-20260415-003查看视频 详情 编辑删除 隔离处理 - HYG-20260416-004ST-FH-FB01-VG-HLUB-420K-20260415-002胡萝卜重金属(铅)合格0.01mg/kg<0.1mg/kg2026-04-16 09:00内部检测室李检测手动录入RPT-20260416-004查看视频 详情 编辑 删除 + HYG-20260416-004ST-FH-FB01-VG-HLUB-420K-20260415-002胡萝卜重金属(铅)合格0.01mg/kg<0.1mg/kg2026-04-16 09:00内部检测室李检测手动录入RPT-20260416-004查看视频 详情 编辑 删除 - HYG-20260416-005ST-EX-LY01-VG-BOCA-050K-20260415-002菠菜(外采批)农药残留合格0.03mg/kg<0.1mg/kg2026-04-16 09:30内部检测室李检测纸质OCR识别RPT-20260416-005查看视频 详情 编辑 删除 + HYG-20260416-005ST-EX-LY01-VG-BOCA-050K-20260415-002菠菜(外采批)农药残留合格0.03mg/kg<0.1mg/kg2026-04-16 09:30内部检测室李检测纸质OCR识别RPT-20260416-005查看视频 详情 编辑 删除 - HYG-20260416-006ST-EX-XR01-MT-ZLRJ-080K-20260415-005猪里脊微生物(大肠杆菌)合格未检出未检出2026-04-16 10:00内部检测室王检测电子报告扫描RPT-20260416-006查看视频 详情 编辑 删除 + HYG-20260416-006ST-EX-XR01-MT-ZLRJ-080K-20260415-005猪里脊微生物(大肠杆菌)合格未检出未检出2026-04-16 10:00内部检测室王检测电子报告扫描RPT-20260416-006查看视频 详情 编辑 删除 @@ -262,6 +283,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} + + + diff --git a/web-admin/nutrition/sup-in-clean.html b/web-admin/nutrition/sup-in-clean.html index 3a137ac..0a31a95 100644 --- a/web-admin/nutrition/sup-in-clean.html +++ b/web-admin/nutrition/sup-in-clean.html @@ -113,6 +113,27 @@ tbody td.td-actions{white-space:nowrap;} .action-more .dropdown a:hover{background:var(--primary-light);color:var(--primary);} .action-more .dropdown a.danger{color:var(--danger);} .action-more .dropdown a.danger:hover{background:#FFF1F0;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -181,25 +202,25 @@ tbody td.td-actions{white-space:nowrap;} - PROC-001NC-IN-001NC-PROC-BOCA-20260415-01土豆土豆丝去皮/切割1008686.0李加工2026-04-15 08:002026-04-15 08:45合格已入库查看视频 更多 ▾ + PROC-001NC-IN-001NC-PROC-BOCA-20260415-01土豆土豆丝去皮/切割1008686.0李加工2026-04-15 08:002026-04-15 08:45合格已入库查看视频 更多 ▾ - PROC-002NC-PROC-HLUB-20260415-01土豆土豆片去皮/切割14012085.7王加工2026-04-15 08:302026-04-15 09:20合格未入库查看视频 生成入库单 更多 ▾ + PROC-002NC-PROC-HLUB-20260415-01土豆土豆片去皮/切割14012085.7王加工2026-04-15 08:302026-04-15 09:20合格未入库查看视频 生成入库单 更多 ▾ - PROC-003NC-PROC-XGUO-20260415-01土豆土豆泥去皮/切割564885.7李加工2026-04-15 09:002026-04-15 09:40合格未入库查看视频 生成入库单 更多 ▾ + PROC-003NC-PROC-XGUO-20260415-01土豆土豆泥去皮/切割564885.7李加工2026-04-15 09:002026-04-15 09:40合格未入库查看视频 生成入库单 更多 ▾ - PROC-004NC-PROC-SJDOU-20260415-01四季豆段(5cm)清洗605286.7张加工2026-04-15 09:302026-04-15 10:00待处理未入库查看视频 更多 ▾ + PROC-004NC-PROC-SJDOU-20260415-01四季豆段(5cm)清洗605286.7张加工2026-04-15 09:302026-04-15 10:00待处理未入库查看视频 更多 ▾ - PROC-005NC-IN-004NC-PROC-BCAI-20260415-01白菜整棵清洗807087.5张加工2026-04-15 07:302026-04-15 08:10合格未入库查看视频 生成入库单 更多 ▾ + PROC-005NC-IN-004NC-PROC-BCAI-20260415-01白菜整棵清洗807087.5张加工2026-04-15 07:302026-04-15 08:10合格未入库查看视频 生成入库单 更多 ▾ - PROC-006NC-IN-005NC-PROC-ZLRJ-20260415-01猪里脊丁(1.5cm)切割807695.0王加工2026-04-15 09:302026-04-15 09:55合格未入库查看视频 生成入库单 更多 ▾ + PROC-006NC-IN-005NC-PROC-ZLRJ-20260415-01猪里脊丁(1.5cm)切割807695.0王加工2026-04-15 09:302026-04-15 09:55合格未入库查看视频 生成入库单 更多 ▾ - PROC-007NC-PROC-ZLRJ-20260415-02猪里脊条(4cm)切割908594.4李加工2026-04-15 10:002026-04-15 10:30待处理未入库查看视频 更多 ▾ + PROC-007NC-PROC-ZLRJ-20260415-02猪里脊条(4cm)切割908594.4李加工2026-04-15 10:002026-04-15 10:30待处理未入库查看视频 更多 ▾ @@ -282,11 +303,11 @@ tbody td.td-actions{white-space:nowrap;} @@ -298,9 +319,66 @@ document.getElementById('videoModal').addEventListener('click',function(e){if(e. function openModal(){document.getElementById('modalOverlay').style.display='flex';} function closeModal(){document.getElementById('modalOverlay').style.display='none';} document.getElementById('modalOverlay').addEventListener('click',function(e){if(e.target===this)closeModal();}); -function confirmGenStock(){document.getElementById('confirmStockModal').style.display='flex';} +/* 生成入库单 */ +var _stockRowData=null; +function confirmGenStock(el){ + var tr=el.closest('tr'); + var tds=tr.querySelectorAll('td'); + /* 列序:0加工批次号 1关联单号 2溯源码 3食材名称 4净菜类型 5加工步骤 6毛菜重量 7净菜重量 */ + _stockRowData={ + batch:tds[0].textContent, + trace:tds[2].textContent, + food:tds[3].textContent, + cleanType:tds[4].textContent, + weight:tds[7].textContent + }; + document.getElementById('confirmStockModal').style.display='flex'; +} function closeConfirmStock(){document.getElementById('confirmStockModal').style.display='none';} document.getElementById('confirmStockModal').addEventListener('click',function(e){if(e.target===this)closeConfirmStock();}); +function doGenStock(){ + if(!_stockRowData)return; + var params=new URLSearchParams(); + params.set('from','clean'); + params.set('batch',_stockRowData.batch); + params.set('trace',_stockRowData.trace); + params.set('food',_stockRowData.food); + params.set('cleanType',_stockRowData.cleanType); + params.set('weight',_stockRowData.weight); + window.location.href='sup-in-cleanin.html?'+params.toString(); +} + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; + +/* 详情抽屉 */ +function showDetail(el){ + var tr=el.closest('tr'); + var ths=tr.closest('table').querySelectorAll('thead th'); + var tds=tr.querySelectorAll('td'); + var html='
基本信息
'; + for(var i=0;i
'+tds[i].innerHTML+'
'; + } + html+='
'; + var title='净菜加工详情 — '+tds[0].textContent; + Drawer.open(title,html); +} diff --git a/web-admin/nutrition/sup-in-cleanin.html b/web-admin/nutrition/sup-in-cleanin.html index efc65c2..b219c3f 100644 --- a/web-admin/nutrition/sup-in-cleanin.html +++ b/web-admin/nutrition/sup-in-cleanin.html @@ -113,6 +113,27 @@ tbody td.td-actions{white-space:nowrap;} .action-more .dropdown a:hover{background:var(--primary-light);color:var(--primary);} .action-more .dropdown a.danger{color:var(--danger);} .action-more .dropdown a.danger:hover{background:#FFF1F0;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -173,23 +194,23 @@ tbody td.td-actions{white-space:nowrap;}
- + - + - + - + - + - +
入库单号关联单号溯源码食材名称净菜类型入库规格入库数量入库重量(kg)当前库存(kg)操作时间保质期至存放区域存放温度(℃)操作人操作入库单号关联单号溯源码食材名称净菜类型入库规格入库数量入库重量(kg)当前库存(kg)操作时间保质期至存放区域存放温度(℃)操作人操作类型操作
NC-IN-001PROC-001NC-PROC-BOCA-20260415-01土豆土豆丝袋装/500g8643.031.02026-04-15 09:152026-04-17 09:15A仓-蔬菜区-014.1李入库查看视频 出库明细 更多 ▾NC-IN-001PROC-001NC-PROC-BOCA-20260415-01土豆土豆丝袋装/500g8643.031.02026-04-15 09:152026-04-17 09:15A仓-蔬菜区-014.1李入库设备自动查看视频 出库明细 更多 ▾
NC-IN-002PROC-002NC-PROC-HLUB-20260415-01土豆土豆片袋装/500g12060.047.52026-04-15 09:452026-04-18 09:45A仓-蔬菜区-024.2王入库查看视频 出库明细 更多 ▾NC-IN-002PROC-002NC-PROC-HLUB-20260415-01土豆土豆片袋装/500g12060.047.52026-04-15 09:452026-04-18 09:45A仓-蔬菜区-024.2王入库设备自动查看视频 出库明细 更多 ▾
NC-IN-003PROC-003NC-PROC-XGUO-20260415-01土豆土豆泥盒装/300g4814.49.02026-04-15 11:002026-04-17 11:00A仓-蔬菜区-034.0李入库查看视频 出库明细 更多 ▾NC-IN-003PROC-003NC-PROC-XGUO-20260415-01土豆土豆泥盒装/300g4814.49.02026-04-15 11:002026-04-17 11:00A仓-蔬菜区-034.0李入库人工录入查看视频 出库明细 更多 ▾
NC-IN-004PROC-005NC-PROC-BCAI-20260415-01白菜整棵散装/整棵7035.022.52026-04-15 11:302026-04-18 11:30A仓-蔬菜区-043.8张入库查看视频 出库明细 更多 ▾NC-IN-004PROC-005NC-PROC-BCAI-20260415-01白菜整棵散装/整棵7035.022.52026-04-15 11:302026-04-18 11:30A仓-蔬菜区-043.8张入库人工录入查看视频 出库明细 更多 ▾
NC-IN-005PROC-006NC-PROC-ZLRJ-20260415-01猪里脊丁(1.5cm)袋装/400g7630.418.82026-04-15 12:002026-04-16 12:00B仓-肉类区-01-2.0王入库查看视频 出库明细 更多 ▾NC-IN-005PROC-006NC-PROC-ZLRJ-20260415-01猪里脊丁(1.5cm)袋装/400g7630.418.82026-04-15 12:002026-04-16 12:00B仓-肉类区-01-2.0王入库设备自动查看视频 出库明细 更多 ▾
@@ -214,17 +235,19 @@ tbody td.td-actions{white-space:nowrap;}
diff --git a/web-admin/nutrition/sup-in-raw.html b/web-admin/nutrition/sup-in-raw.html index cedb568..3ce53d3 100644 --- a/web-admin/nutrition/sup-in-raw.html +++ b/web-admin/nutrition/sup-in-raw.html @@ -108,6 +108,27 @@ tbody tr:hover{background:#F8FBFF;} .form-item input:focus,.form-item select:focus,.form-item textarea:focus{border-color:#1890FF;} .form-item textarea{height:80px;padding:8px 12px;resize:vertical;} .action-bar{display:flex;align-items:center;gap:8px;margin-bottom:16px;} +/* 右侧抽屉 */ +.drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.45);z-index:1000;animation:modalFadeIn .2s ease;} +.drawer-overlay.closing{animation:modalFadeOut .2s ease forwards;} +@keyframes modalFadeIn{from{opacity:0}to{opacity:1}} +@keyframes modalFadeOut{from{opacity:1}to{opacity:0}} +.drawer{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:90vw;background:#fff;box-shadow:-6px 0 24px rgba(0,0,0,.12);display:flex;flex-direction:column;z-index:1001;animation:drawerSlideIn .25s ease;} +.drawer-overlay.closing .drawer{animation:drawerSlideOut .2s ease forwards;} +@keyframes drawerSlideIn{from{transform:translateX(100%)}to{transform:translateX(0)}} +@keyframes drawerSlideOut{from{transform:translateX(0)}to{transform:translateX(100%)}} +.drawer__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);flex-shrink:0;} +.drawer__title{font-size:var(--font-lg);font-weight:600;color:var(--text-primary);} +.drawer__close{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;border-radius:var(--radius-sm);color:var(--text-secondary);display:flex;align-items:center;justify-content:center;} +.drawer__close:hover{background:#f5f5f5;color:var(--text-primary);} +.drawer__body{padding:0 24px 24px;overflow-y:auto;flex:1;} +.drawer-section{margin-top:20px;} +.drawer-section__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:6px;} +.drawer-section__title::before{content:'';display:inline-block;width:3px;height:14px;background:var(--primary);border-radius:2px;} +.drawer-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;} +.drawer-field{display:flex;flex-direction:column;gap:2px;} +.drawer-field__label{font-size:var(--font-xs);color:var(--text-placeholder);} +.drawer-field__value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;min-height:22px;} @@ -180,19 +201,19 @@ tbody tr:hover{background:#F8FBFF;} - IN-20260415-001设备自动ST-FH-FA01-VG-BOCA-286K-20260415-001自产菠菜A区蔬菜基地25kg/件12件2862026-04-15 10:30A仓-蔬菜区-01张三丰查看视频 编辑 详情 删除 + IN-20260415-001设备自动ST-FH-FA01-VG-BOCA-286K-20260415-001自产菠菜A区蔬菜基地25kg/件12件2862026-04-15 10:30A仓-蔬菜区-01张三丰查看视频 编辑 详情 删除 - IN-20260415-002设备自动ST-EX-LY01-VG-BOCA-050K-20260415-002外采菠菜绿源蔬菜配送10kg/筐5筐502026-04-15 08:30A仓-蔬菜区-02李三丰查看视频 编辑 详情 删除 + IN-20260415-002设备自动ST-EX-LY01-VG-BOCA-050K-20260415-002外采菠菜绿源蔬菜配送10kg/筐5筐502026-04-15 08:30A仓-蔬菜区-02李三丰查看视频 编辑 详情 删除 - IN-20260415-003人工录入ST-EX-XR01-MT-ZLRJ-080K-20260415-005外采猪里脊鲜肉直供公司20kg/箱4箱802026-04-15 09:15B仓-肉类区-01王三丰查看视频 编辑 详情 删除 + IN-20260415-003人工录入ST-EX-XR01-MT-ZLRJ-080K-20260415-005外采猪里脊鲜肉直供公司20kg/箱4箱802026-04-15 09:15B仓-肉类区-01王三丰查看视频 编辑 详情 删除 - IN-20260415-004人工录入ST-EX-HS01-SF-CAYO-060K-20260414-001外采草鱼海鲜水产配送散装(kg)60kg602026-04-15 09:45C仓-水产区-01李三丰查看视频 编辑 详情 删除 + IN-20260415-004人工录入ST-EX-HS01-SF-CAYO-060K-20260414-001外采草鱼海鲜水产配送散装(kg)60kg602026-04-15 09:45C仓-水产区-01李三丰查看视频 编辑 详情 删除 - IN-20260416-005设备自动ST-FH-FB01-VG-HLUB-420K-20260415-002自产胡萝卜B区根茎基地25kg/件17件4202026-04-16 11:00A仓-蔬菜区-03张三丰查看视频 编辑 详情 删除 + IN-20260416-005设备自动ST-FH-FB01-VG-HLUB-420K-20260415-002自产胡萝卜B区根茎基地25kg/件17件4202026-04-16 11:00A仓-蔬菜区-03张三丰查看视频 编辑 详情 删除 @@ -281,6 +302,38 @@ document.getElementById('modalOverlay').addEventListener('click',function(e){if( function openVideo(){document.getElementById('videoOverlay').style.display='flex';} function closeVideo(){document.getElementById('videoOverlay').style.display='none';} document.getElementById('videoOverlay').addEventListener('click',function(e){if(e.target===this)closeVideo();}); + +/* 右侧抽屉组件 */ +var Drawer={ + open:function(title,bodyHtml){ + this.close(); + var overlay=document.createElement('div'); + overlay.className='drawer-overlay'; + overlay.innerHTML='
'+title+'
'+bodyHtml+'
'; + overlay.addEventListener('click',function(e){if(e.target===overlay)Drawer.close();}); + document.body.appendChild(overlay); + }, + close:function(){ + var o=document.querySelector('.drawer-overlay'); + if(!o)return; + o.classList.add('closing'); + setTimeout(function(){o.remove();},200); + } +}; + +/* 详情抽屉 */ +function showDetail(el){ + var tr=el.closest('tr'); + var ths=tr.closest('table').querySelectorAll('thead th'); + var tds=tr.querySelectorAll('td'); + var html='
入库信息
'; + for(var i=0;i
'+tds[i].innerHTML+'
'; + } + html+='
'; + var title='入库详情 — '+tds[0].textContent; + Drawer.open(title,html); +} diff --git a/web-admin/nutrition/sup-pkg-label.html b/web-admin/nutrition/sup-pkg-label.html index 9ad93d0..2cad9bf 100644 --- a/web-admin/nutrition/sup-pkg-label.html +++ b/web-admin/nutrition/sup-pkg-label.html @@ -244,14 +244,14 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
- + - - - - - + + + + +
包装批次号溯源码包装餐品包装规格包装方式包装份数包含食材包装日期保质期至存放温度(℃)关联单号包装人终端设备操作包装批次号溯源码包装餐品包装规格包装方式包装份数包含食材包装日期保质期至存放温度(℃)关联单号包装人终端设备操作类型操作
BATCH-DH-20260415-01NC-PROC-JXRJ-20260415-01宫保鸡丁标准份(500g)冷鲜袋10鸡胸肉 120g
花生 20g
干辣椒 5g
2026-04-152026-04-173.8INT-001赵配餐PKG-T03查看视频 编辑 删除
BATCH-DH-20260415-01NC-PROC-JXRJ-20260415-01宫保鸡丁标准份(500g)冷鲜袋10鸡胸肉 120g
花生 20g
干辣椒 5g
2026-04-152026-04-173.8INT-001赵配餐PKG-T03查看视频 编辑 删除
BATCH-DH-20260415-02NC-PROC-CAYO-20260415-01清蒸鱼标准份(500g)保鲜盒8草鱼 100g
姜片适量
2026-04-152026-04-173.5INT-002陈配餐PKG-T03查看视频 编辑 删除
BATCH-DH-20260415-03NC-PROC-BOCA-20260415-01蒜蓉菠菜标准份(500g)冷鲜袋12净菠菜 120g
大蒜 8g
2026-04-152026-04-174.0EXT-001陈配餐PKG-T04查看视频 编辑 删除
BATCH-DH-20260415-04NC-PROC-HLUB-20260415-01炒胡萝卜大份(800g)保鲜盒6净胡萝卜 260g
葱姜适量
2026-04-152026-04-174.2INT-003赵配餐PKG-T04查看视频 编辑 删除
BATCH-DH-20260415-01NC-PROC-JXRJ-20260415-01宫保鸡丁标准份(500g)冷鲜袋10鸡胸肉 120g
花生 20g
干辣椒 5g
2026-04-152026-04-173.8INT-001赵配餐PKG-T03设备自动查看视频 编辑 删除
BATCH-DH-20260415-01NC-PROC-JXRJ-20260415-01宫保鸡丁标准份(500g)冷鲜袋10鸡胸肉 120g
花生 20g
干辣椒 5g
2026-04-152026-04-173.8INT-001赵配餐PKG-T03设备自动查看视频 编辑 删除
BATCH-DH-20260415-02NC-PROC-CAYO-20260415-01清蒸鱼标准份(500g)保鲜盒8草鱼 100g
姜片适量
2026-04-152026-04-173.5INT-002陈配餐PKG-T03人工录入查看视频 编辑 删除
BATCH-DH-20260415-03NC-PROC-BOCA-20260415-01蒜蓉菠菜标准份(500g)冷鲜袋12净菠菜 120g
大蒜 8g
2026-04-152026-04-174.0EXT-001陈配餐PKG-T04人工录入查看视频 编辑 删除
BATCH-DH-20260415-04NC-PROC-HLUB-20260415-01炒胡萝卜大份(800g)保鲜盒6净胡萝卜 260g
葱姜适量
2026-04-152026-04-174.2INT-003赵配餐PKG-T04设备自动查看视频 编辑 删除
@@ -421,6 +421,10 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
终端设备
+
+
操作类型*
+ +
@@ -244,13 +265,13 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - WH-AA仓-蔬菜常温库加工中心一楼北侧常温500张仓管138-0000-1001使用中编辑 详情 + WH-AA仓-蔬菜常温库加工中心一楼北侧常温500张仓管138-0000-1001使用中编辑 详情 - WH-BB仓-肉类冷藏库加工中心一楼南侧冷藏(0~4℃)200王仓管138-0000-1002使用中编辑 详情 + WH-BB仓-肉类冷藏库加工中心一楼南侧冷藏(0~4℃)200王仓管138-0000-1002使用中编辑 详情 - WH-CC仓-水产冷冻库加工中心地下一层冷冻(-18℃)150李仓管138-0000-1003空置中编辑 详情 + WH-CC仓-水产冷冻库加工中心地下一层冷冻(-18℃)150李仓管138-0000-1003空置中编辑 详情 @@ -289,15 +310,15 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} 区域编号区域名称所属仓库适存品类容量(㎥)状态操作 - WH-A-01A仓-蔬菜区-01A仓-蔬菜常温库叶菜类80使用中编辑 详情 - WH-A-02A仓-蔬菜区-02A仓-蔬菜常温库叶菜类80使用中编辑 详情 - WH-A-03A仓-蔬菜区-03A仓-蔬菜常温库根茎类100使用中编辑 详情 - WH-A-04A仓-蔬菜区-04A仓-蔬菜常温库瓜果类80空置中编辑 详情 - WH-B-01B仓-肉类区-01B仓-肉类冷藏库猪肉类60使用中编辑 详情 - WH-B-02B仓-肉类区-02B仓-肉类冷藏库禽肉类60使用中编辑 详情 - WH-B-03B仓-肉类区-03B仓-肉类冷藏库蛋品类40空置中编辑 详情 - WH-C-01C仓-水产区-01C仓-水产冷冻库淡水鱼类80使用中编辑 详情 - WH-C-02C仓-水产区-02C仓-水产冷冻库海水产类70空置中编辑 详情 + WH-A-01A仓-蔬菜区-01A仓-蔬菜常温库叶菜类80使用中编辑 详情 + WH-A-02A仓-蔬菜区-02A仓-蔬菜常温库叶菜类80使用中编辑 详情 + WH-A-03A仓-蔬菜区-03A仓-蔬菜常温库根茎类100使用中编辑 详情 + WH-A-04A仓-蔬菜区-04A仓-蔬菜常温库瓜果类80空置中编辑 详情 + WH-B-01B仓-肉类区-01B仓-肉类冷藏库猪肉类60使用中编辑 详情 + WH-B-02B仓-肉类区-02B仓-肉类冷藏库禽肉类60使用中编辑 详情 + WH-B-03B仓-肉类区-03B仓-肉类冷藏库蛋品类40空置中编辑 详情 + WH-C-01C仓-水产区-01C仓-水产冷冻库淡水鱼类80使用中编辑 详情 + WH-C-02C仓-水产区-02C仓-水产冷冻库海水产类70空置中编辑 详情 @@ -312,22 +333,6 @@ tbody tr:hover td.td-actions{background:#F8FBFF;} - - + + diff --git a/问题梳理.md b/问题梳理.md deleted file mode 100644 index f80b4dc..0000000 --- a/问题梳理.md +++ /dev/null @@ -1,59 +0,0 @@ -### 核心问题 -- 需要将目前后台的规划的菜单根据不同的使用群体就行归类,会影响到整个业务流程的串联!!! -- 如何区分净菜和毛菜?是两种不同的食材?还是同一种食材人为主观判断不同的形态 - -### 一 、溯源总览 -- 溯源主线业务应该有两个分支:1.对外售净菜包或餐品净菜包的扫码溯源(涉及到溯源码的生成)2.食堂用餐后对本餐次中餐品或者食材的溯源 -- 目前的业务流程设计只有对堂食订单中按食材维度进行溯源,没有考虑扫码溯源的业务 -- 按食材溯源目前存在的问题:按单烹制中用到的食材或者是辅料并未和具体的库存-批次就行关联,靠什么去关联本餐中用到的食材溯源信息?重要! -- 目前的库存管理分散在仓储管理和净菜进柜两部分,这两处的库存管理有什么联系? -- 若按食材进行溯源 则每个食材的溯源链路是不同的,需要确定什么类型的食材 有哪些溯源链路节点(举例:调料类的食材 如花椒就没有净菜加工和净菜入柜等) -- 若按食材进行溯源 溯源链路中后续的节点(按单烹制,上餐监控,营养监测,用户取餐)都是按餐品维度开展的并不是食材维度 -- 建议:堂食订单中的餐品溯源 先不要细化到食材级别,溯源链路的第一个节点就是食材信息(简单介绍每种食材的概要信息,第二个节点是净菜组配...) - -### 二、档案 -- 档案模块下三个菜单功能已重构 -- 缺少一个用户用餐记录查看营养明细的交互(建议可复用营养管理(din-data-nutri.html)下操作项的弹窗交互) - -### 三、绿色种采 -#### 3.1、土地环境 -- 缺少地块的种养殖记录维护入口,缺少查看监测环境的历史记录(目前只能看当前),若需要看食材的生长环境 应该看的是均值或区间(如日平均光照时长,温度区间在18-26度),可加到第二个菜单种养监控中 -- 种植作物和养殖作物是否要和食材总库中的食材关联,若不关联后续靠什么串联从种->采->供->做的业务流程(涉及到溯源) -- 第二个菜单的种养监控菜单整改建议:两个菜单的列表都应显示种养殖的记录(和地块挂钩),操作项后跟巡检记录或者是疫苗接种记录以及环境监控的历史记录(日维度) - -#### 3.2、收成入库 -- 目前收成入库中的设计是将采收批次和地块关联,理论上应关联的是种养殖记录(种养殖批次) -- 入库数量单位不一定是kg,比如生猪出栏单位应该是头 ,但是生猪出栏理论上没有入库的操作(也不排除养猪场自己屠宰,自己屠宰了就需要入库) - -#### 3.3、供商管理 -- 内部供应商为什么会和地块/养殖区绑定,产能计量kg/月没有意义, 很多作物都是一年一熟 -- 外部供应商列表上的 评价供应商作用是什么?不能在编辑中改综合评分? - -#### 3.4、采供管理 -- 采供管理 应该区分供应商页面和食堂管理员界面,对应的操作权限不一样, 对应核心问题,采购单应该于不同群体而言有不同的状态流转 -- 采购单设计不合理,理论上一个采购单中会包含多种食材,而不是一种食材对应一个采购单 -- 如果采购单流转到内部供应商,采购数量是否要和本系统的采收入库数量做联动,比如这边采购100公斤的辣椒,收成入库就要减100公斤的辣椒库存,如果是这样就要增加出库单的业务 -- 通过食谱自动创建的采购单如何指定供应商? -- 列表后的查看视频是看什么视频? - -### 四、卫生供应 -#### 4.1、卫生检测 -- 卫生检测记录是否是必须关联到采购单? 如果不关联采购单这条检验记录后续有什么业务用途 -- 具体有哪些检测项目? 检测值和标准限值从哪里来 -- 数据来源类型字段是什么意思 -- 隔离处理按钮有什么业务用途 -- 列表后的查看视频是看什么视频? - -#### 4.2、毛菜入库 - 毛菜入库和仓储管理菜单顺序调换 -- 毛菜入库单是否必须要和采购单建立关联关系? -- 入库的规格需要细化管理,例:入库规则是箱,但一箱中有xx盒,一盒中有xx袋,一袋中有XX克,设计到后续库存的维护 -- 目前整个系统涉及到库存概念的场景很多,如收成入库,毛菜入库,净菜入库,净菜进柜等,这些库存之前存在什么样的关联关系 -- 净菜入库和净菜进柜的区别是什么?必须先入库再近柜,就不能直接进柜? - -#### 4.3、仓储管理 -- 仓库档案和区域管理是什么样的业务联系? -- 在库库存是以食材维度开展还是以仓储区域维度开展?会不会存在同一个仓储区放多种食材的情况 - -#### 4.4、净菜加工 -- \ No newline at end of file