From c94658f08374e94f488b380ee51f84c7e2de06ce Mon Sep 17 00:00:00 2001 From: zhangyan Date: Wed, 17 Jun 2026 12:01:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=87=80=E8=8F=9C=E9=85=8D?= =?UTF-8?q?=E6=AF=94=E7=A7=A4=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E6=89=81?= =?UTF-8?q?=E5=B9=B3=E5=8C=96=20&=20=E9=85=8D=E6=AF=94=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 01/02 页:任务改为一对多(mealPacks数组),支持净菜包+餐品净菜包混合 - 01 页:表格6列→8列,新增净菜/餐品、包装规格列 - 02 页:食材清单表格→卡片布局,AI识别后弹窗确认替代自动称重 - 03 页:候选列表按置信度降序排列 - 营养秤PRD:返回路径改为三级优先级(referer→document.referrer→index.html) Co-Authored-By: Claude Opus 4.6 --- .../canteen-nutrition-scale/doc/CHANGELOG.md | 11 + .../canteen-nutrition-scale/doc/PRD.md | 7 +- .../ratio-scale/01-packing-tasks.html | 163 +++--- .../ratio-scale/02-weighing-packing.html | 487 ++++++++++-------- .../ratio-scale/doc/CHANGELOG.md | 20 + 5 files changed, 384 insertions(+), 304 deletions(-) diff --git a/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md b/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md index c312cb6..d0cbcc1 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md +++ b/other-module/canteen-device/canteen-nutrition-scale/doc/CHANGELOG.md @@ -1,5 +1,16 @@ # 餐线营养秤 - 变更记录 +## [2026-06-17] refactor: 全局返回路径改为三级优先级机制 + +### 调整 +- **PRD 1.4 节**:返回按钮实现由 `history.back()` 改为三级优先级机制: + 1. URL 参数 `?referer=`(来源页跳转时主动携带) + 2. `document.referrer`(浏览器来源页,需同域) + 3. 兜底跳转 `index.html`(首页) +- 多入口页面通过 URL 参数 `?referer=` 传递来源页,确保返回路径准确 + +--- + ## [2026-06-15] feat: 新增重新识别按钮 ### 新增 diff --git a/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md b/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md index 23efc34..97d5938 100644 --- a/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md +++ b/other-module/canteen-device/canteen-nutrition-scale/doc/PRD.md @@ -72,7 +72,11 @@ > **核心原则**:从哪来回哪去。 - 所有页面的返回按钮必须指向进入该页面的来源页 -- 若页面有多个入口(如 06 可从 05 或 04 进入),返回按钮使用浏览器 `history.back()` 实现 +- 返回逻辑实现优先级: + 1. URL 参数 `?referer=xxx`(来源页跳转时主动携带) + 2. `document.referrer`(浏览器来源页,需同域) + 3. 兜底跳转 `index.html`(首页) +- 若页面有多个入口(如 06 可从 05 或 04 进入),来源页通过 URL 参数 `?referer=` 传递,确保返回路径准确 - 采样页面(05)的「取消」操作统一回到 02 待取餐界面(无论从何进入) - 采样页面(05)的「保存采集」操作统一跳转 02 待取餐界面(携带 dishId) @@ -738,3 +742,4 @@ stateDiagram-v2 | 2026-06-11 | v2.6 | 01 开餐界面流程补全:开餐成功自动提交 1 张图片到采样库并跳转至 02-待取餐界面(携带 dishId);修复采样页面返回时 sampleDishId 参数未处理导致不自动选中的 BUG;新增非员工点击设置按钮拦截(Toast 提示「非餐厅员工,无权操作系统」);明确自动选中规则(AI 识别选中识别率最高、搜索选中第一个结果、采样返回自动选中对应餐品);补全重量稳定判定(波动 < 5g 持续 3 秒)到开餐流程描述;明确营养秤开机默认进入 01-开餐界面 | | 2026-06-11 | v2.7 | 全局返回路径规则:从哪来回哪去;04 设置界面新增「开始开餐」按钮和「采样历史」入口,返回按钮改为回 01;05 采样页「取消」操作改为回到 02 待取餐界面,「保存采集」同样跳转 02;05/06 返回按钮改为 history.back()(遵循从哪来回哪去);02/03 页面餐品信息区域增加点击进入 01 开餐界面的交互;02 页面补全 dishId 参数处理 + 自动人脸识别触发(站在设备前自动识别)+ 识别成功跳转 03 + 新增设置按钮(非员工拦截);03 设置按钮修复跳转 04 + 非员工拦截;06 采样历史新增 04 设置页面入口;人脸识别明确为自动触发,无需手动摄像头入口 | | 2026-06-12 | v2.8 | 删除 8.2 图片存储上限与覆盖策略(单菜品 50 张上限 + 相似度覆盖逻辑),仅保留 8.1 反样本机制 | +| 2026-06-15 | v2.9 | 1.4 全局返回路径规则更新:返回按钮实现由 `history.back()` 改为三级优先级机制(URL 参数 `?referer=` → `document.referrer` → `index.html` 兜底),确保多入口页面返回路径准确 | diff --git a/other-module/canteen-device/ratio-scale/01-packing-tasks.html b/other-module/canteen-device/ratio-scale/01-packing-tasks.html index ee9ebf9..c6e379e 100644 --- a/other-module/canteen-device/ratio-scale/01-packing-tasks.html +++ b/other-module/canteen-device/ratio-scale/01-packing-tasks.html @@ -59,16 +59,16 @@ .task-card__pack-btn:hover { background: #5ba0e9; } .task-card__pack-btn:disabled { background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.4); cursor: not-allowed; } - /* 表格头(6列) */ + /* 表格头(8列) */ .item-table__head { - display: grid; grid-template-columns: 1.6fr 0.8fr 0.7fr 0.9fr 0.9fr 70px; gap: 8px; + display: grid; grid-template-columns: 1fr 0.6fr 0.55fr 0.6fr 0.5fr 0.65fr 0.6fr 50px; gap: 8px; padding: 6px 16px; background: rgba(0,0,0,0.2); font-size: 11px; color: rgba(255,255,255,0.4); font-weight: 500; } .item-table__body { display: flex; flex-direction: column; } /* 餐品净菜包主行 */ .item-parent-row { - display: grid; grid-template-columns: 1.6fr 0.8fr 0.7fr 0.9fr 0.9fr 70px; gap: 8px; + display: grid; grid-template-columns: 1fr 0.6fr 0.55fr 0.6fr 0.5fr 0.65fr 0.6fr 50px; gap: 8px; padding: 10px 16px; border-top: 1px solid rgba(255,255,255,0.04); align-items: center; background: rgba(74,144,217,0.06); } @@ -88,7 +88,7 @@ /* 食材子行 */ .item-child-row { - display: grid; grid-template-columns: 1.6fr 0.8fr 0.7fr 0.9fr 0.9fr 70px; gap: 8px; + display: grid; grid-template-columns: 1fr 0.6fr 0.55fr 0.6fr 0.5fr 0.65fr 0.6fr 50px; gap: 8px; padding: 8px 16px 8px 48px; border-top: 1px solid rgba(255,255,255,0.03); align-items: center; transition: background 0.2s; } @@ -166,67 +166,56 @@ /* 当前 Tab 筛选 */ var currentFilter = 'pending'; - /* 模拟数据:每任务只有1个餐品净菜包 */ + /* 模拟数据:净菜包=食材名,餐品净菜包=菜名 */ var mockData = [ { orderNo: 'PO-20260616-001', expectedArrival: '11:30', taskNo: 'T-001', - mealPack: { - packName: '宫保鸡丁套餐', - packSize: 3, - notes: '少辣', - ingredients: [ - { name: '土豆丝', icon: '🥔', iconClass: 'child-icon--potato', weightPerPack: 500, weighed: 750 }, - { name: '胡萝卜丝', icon: '🥕', iconClass: 'child-icon--carrot', weightPerPack: 500, weighed: 1500 }, - { name: '黄瓜片', icon: '🥒', iconClass: 'child-icon--cucumber', weightPerPack: 500, weighed: 0 }, - { name: '大葱丝', icon: '🧅', iconClass: 'child-icon--green-onion', weightPerPack: 500, weighed: 0 }, - { name: '紫洋葱丝', icon: '🧅', iconClass: 'child-icon--onion', weightPerPack: 500, weighed: 0 } - ] - } + mealPacks: [ + { type: '净菜包', packName: '土豆丝', packSize: 3, packSpec: '500g', notes: '', ingredients: [ + { name: '土豆丝', icon: '🥔', iconClass: 'child-icon--potato', weightPerPack: 500, weighed: 750 } + ]}, + { type: '净菜包', packName: '胡萝卜丝', packSize: 3, packSpec: '500g', notes: '', ingredients: [ + { name: '胡萝卜丝', icon: '🥕', iconClass: 'child-icon--carrot', weightPerPack: 500, weighed: 750 } + ]}, + { type: '净菜包', packName: '黄瓜片', packSize: 3, packSpec: '500g', notes: '', ingredients: [ + { name: '黄瓜片', icon: '🥒', iconClass: 'child-icon--cucumber', weightPerPack: 500, weighed: 0 } + ]} + ] }, { orderNo: 'PO-20260616-002', expectedArrival: '12:00', taskNo: 'T-002', - mealPack: { - packName: '鱼香肉丝套餐', - packSize: 2, - notes: '', - ingredients: [ - { name: '胡萝卜丝', icon: '🥕', iconClass: 'child-icon--carrot', weightPerPack: 750, weighed: 0 }, - { name: '白菜丝', icon: '🥬', iconClass: 'child-icon--cabbage', weightPerPack: 1000, weighed: 0 }, - { name: '土豆丝', icon: '🥔', iconClass: 'child-icon--potato', weightPerPack: 500, weighed: 0 } - ] - } + mealPacks: [ + { type: '净菜包', packName: '白菜丝', packSize: 2, packSpec: '1000g', notes: '', ingredients: [ + { name: '白菜丝', icon: '🥬', iconClass: 'child-icon--cabbage', weightPerPack: 1000, weighed: 0 } + ]}, + { type: '餐品净菜包', packName: '鱼香肉丝套餐', packSize: 2, packSpec: '大份800g', notes: '', ingredients: [ + { name: '鱼香肉丝', icon: '🥘', iconClass: 'child-icon--tomato', weightPerPack: 500, weighed: 0 } + ]} + ] }, { orderNo: 'PO-20260616-003', expectedArrival: '14:30', taskNo: 'T-003', - mealPack: { - packName: '番茄炒蛋套餐', - packSize: 4, - notes: '', - ingredients: [ - { name: '西红柿块', icon: '🍅', iconClass: 'child-icon--tomato', weightPerPack: 750, weighed: 3000 }, - { name: '鸡蛋', icon: '🥚', iconClass: 'child-icon--egg', weightPerPack: 500, weighed: 2000 } - ] - } + mealPacks: [ + { type: '餐品净菜包', packName: '番茄炒蛋套餐', packSize: 4, packSpec: '真空包装', notes: '', ingredients: [ + { name: '番茄炒蛋', icon: '🥘', iconClass: 'child-icon--tomato', weightPerPack: 500, weighed: 2000 } + ]} + ] }, { orderNo: 'PO-20260616-004', expectedArrival: '16:00', taskNo: 'T-004', - mealPack: { - packName: '凉拌黄瓜套餐', - packSize: 5, - notes: '多放蒜', - ingredients: [ - { name: '黄瓜条', icon: '🥒', iconClass: 'child-icon--cucumber', weightPerPack: 750, weighed: 3750 }, - { name: '小番茄', icon: '🍅', iconClass: 'child-icon--tomato', weightPerPack: 250, weighed: 1250 } - ] - } + mealPacks: [ + { type: '餐品净菜包', packName: '凉拌黄瓜套餐', packSize: 5, packSpec: '盒装', notes: '', ingredients: [ + { name: '凉拌黄瓜', icon: '🥘', iconClass: 'child-icon--cucumber', weightPerPack: 500, weighed: 2500 } + ]} + ] } ]; @@ -255,9 +244,10 @@ var doneCount = 0; mockData.forEach(function(order) { - var pack = order.mealPack; - var hasPending = hasPendingPack(pack); - if (hasPending) pendingCount++; else doneCount++; + var packs = order.mealPacks; + /* 订单整体状态:所有餐品包都已完成才算完成 */ + var orderAllDone = packs.every(function(p) { return !hasPendingPack(p); }); + if (orderAllDone) doneCount++; else pendingCount++; var taskCard = document.createElement('div'); taskCard.className = 'task-card'; @@ -269,61 +259,48 @@ '订单号:' + order.orderNo + '' + '任务号:' + order.taskNo + '' + '⏰ 期望到货:' + order.expectedArrival + '' + - '' + (hasPending ? '待配比' : '已完成') + '' + - (hasPending - ? '' - : ''); + '' + (orderAllDone ? '已完成' : '待配比') + '' + + (orderAllDone + ? '' + : ''); taskCard.appendChild(header); - /* 表格头(6列) */ + /* 表格头(8列) */ var tableHead = document.createElement('div'); tableHead.className = 'item-table__head'; - tableHead.innerHTML = '
名称
每份用量
打包规格
所需总重
已称
状态
'; + tableHead.innerHTML = '
名称
净菜/餐品
包装规格
每份用量
打包份数
所需总重
已称
状态
'; taskCard.appendChild(tableHead); /* 表格体 */ var tableBody = document.createElement('div'); tableBody.className = 'item-table__body'; - var packStatus = getPackStatus(pack); - var totalNeed = 0; - var totalWeighed = 0; - pack.ingredients.forEach(function(ing) { - totalNeed += ing.weightPerPack * pack.packSize; - totalWeighed += ing.weighed; - }); - totalNeed = Math.round(totalNeed * 100) / 100; - totalWeighed = Math.round(totalWeighed * 100) / 100; - var weightClass = totalWeighed >= totalNeed ? 'parent-weight--done' : ''; + packs.forEach(function(pack) { + var packStatus = getPackStatus(pack); + var totalNeed = 0; + var totalWeighed = 0; + pack.ingredients.forEach(function(ing) { + totalNeed += ing.weightPerPack * pack.packSize; + totalWeighed += ing.weighed; + }); + totalNeed = Math.round(totalNeed * 100) / 100; + totalWeighed = Math.round(totalWeighed * 100) / 100; + var weightClass = totalWeighed >= totalNeed ? 'parent-weight--done' : ''; - /* 主行:餐品净菜包 */ - var parentRow = document.createElement('div'); - parentRow.className = 'item-parent-row'; - parentRow.innerHTML = - '
📦
' + pack.packName + '
' + - '
' + - '
' + pack.packSize + ' 份
' + - '
需 ' + totalNeed + ' 克
' + - '
已 ' + totalWeighed + ' 克
' + - '
' + packStatus.text + '
'; - tableBody.appendChild(parentRow); + /* 主行:餐品净菜包 */ + var parentRow = document.createElement('div'); + parentRow.className = 'item-parent-row'; + parentRow.innerHTML = + '
📦
' + pack.packName + '
' + + '
' + pack.type + '
' + + '
' + (pack.packSpec || '—') + '
' + + '
' + (pack.type === '餐品净菜包' ? '—' : pack.ingredients[0].weightPerPack + ' 克') + '
' + + '
' + pack.packSize + '
' + + '
需 ' + totalNeed + ' 克
' + + '
已 ' + totalWeighed + ' 克
' + + '
' + packStatus.text + '
'; + tableBody.appendChild(parentRow); - /* 子行:每种食材 */ - pack.ingredients.forEach(function(ing) { - var need = Math.round(ing.weightPerPack * pack.packSize * 100) / 100; - var isDone = ing.weighed >= need; - var childWeightClass = isDone ? 'child-weight--done' : ''; - - var childRow = document.createElement('div'); - childRow.className = 'item-child-row'; - childRow.innerHTML = - '
' + ing.icon + '
' + ing.name + '
' + - '
' + ing.weightPerPack + ' 克
' + - '
×
' + - '
' + need + ' 克
' + - '
' + ing.weighed + ' 克
' + - '
' + (isDone ? '已完成' : '待配比') + '
'; - tableBody.appendChild(childRow); }); taskCard.appendChild(tableBody); @@ -353,8 +330,8 @@ } /* 去配比 */ - function handleWeigh(taskNo, orderNo, packName) { - var target = '02-weighing-packing.html?task=' + taskNo + '&pack=' + encodeURIComponent(packName) + '&order=' + encodeURIComponent(orderNo); + function handleWeigh(taskNo, orderNo) { + var target = '02-weighing-packing.html?task=' + taskNo + '&order=' + encodeURIComponent(orderNo); if (userName) target += '&user=' + encodeURIComponent(userName); window.location.href = target; } diff --git a/other-module/canteen-device/ratio-scale/02-weighing-packing.html b/other-module/canteen-device/ratio-scale/02-weighing-packing.html index 6f25d2a..cc0f858 100644 --- a/other-module/canteen-device/ratio-scale/02-weighing-packing.html +++ b/other-module/canteen-device/ratio-scale/02-weighing-packing.html @@ -192,47 +192,60 @@ .task-card__item-value--blue { color: #4a90d9; } .task-card__item-value--purple { color: #722ed1; } .task-card__item-value--green { color: #52c41a; } + .task-card__item-value--yellow { color: #faad14; } - /* 净菜清单表格 */ + /* 净菜清单卡片 */ .item-list { - background: #1a2b4a; border-radius: 10px; border: 1px solid rgba(255,255,255,0.06); + background: transparent; border-radius: 0; border: none; overflow: hidden; flex: 1; min-height: 0; display: flex; flex-direction: column; } .item-list__head { - display: grid; grid-template-columns: 1.2fr 0.7fr 0.6fr 0.7fr 0.7fr 50px 55px; gap: 6px; - padding: 8px 14px; background: rgba(255,255,255,0.03); - font-size: 11px; color: rgba(255,255,255,0.4); align-items: center; flex-shrink: 0; + display: none; } .item-list__body { - flex: 1; overflow-y: auto; min-height: 0; + flex: 1; overflow-y: auto; min-height: 0; display: flex; flex-direction: column; gap: 8px; } .item-list__body::-webkit-scrollbar { width: 3px; } .item-list__body::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.08); border-radius: 2px; } .item-row { - display: grid; grid-template-columns: 1.2fr 0.7fr 0.6fr 0.7fr 0.7fr 50px 55px; gap: 6px; - padding: 9px 14px; font-size: 13px; align-items: center; - border-top: 1px solid rgba(255,255,255,0.04); transition: background 0.15s; + background: #1a2b4a; border-radius: 10px; border: 1px solid rgba(255,255,255,0.06); + padding: 12px 14px; font-size: 13px; transition: all 0.15s; } - .item-row.current { background: rgba(74,144,217,0.08); } - .item-row__name { font-weight: 500; display: flex; align-items: center; gap: 6px; } - .item-row__name-icon { font-size: 14px; } - .item-row__per-pack { font-size: 12px; color: rgba(255,255,255,0.55); text-align: center; } - .item-row__pack-size { font-size: 12px; color: rgba(255,255,255,0.4); text-align: center; } - .item-row__need { font-size: 12px; color: rgba(255,255,255,0.6); text-align: right; } - .item-row__actual { font-weight: 600; text-align: right; } - .item-row__actual--done { color: #52c41a; } - .item-row__actual--progress { color: #4a90d9; } - .item-row__actual--zero { color: rgba(255,255,255,0.3); } - .item-row__status { font-size: 11px; text-align: center; } - .item-row__action { text-align: center; } + .item-row.current { border-color: rgba(74,144,217,0.4); background: rgba(74,144,217,0.08); } + /* 卡片头部:名称 + 状态 + 操作 */ + .item-card__header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } + .item-row__name { font-weight: 600; font-size: 14px; display: flex; align-items: center; gap: 6px; flex: 1; } + .item-row__name-icon { font-size: 18px; } + .item-row__status { font-size: 11px; flex-shrink: 0; } + .item-row__action { flex-shrink: 0; } .item-row__clear-btn { - padding: 2px 8px; border: 1px solid rgba(255,77,79,0.3); background: rgba(255,77,79,0.08); - color: rgba(255,77,79,0.7); border-radius: 4px; font-size: 10px; cursor: pointer; + padding: 3px 10px; border: 1px solid rgba(255,77,79,0.3); background: rgba(255,77,79,0.08); + color: rgba(255,77,79,0.7); border-radius: 4px; font-size: 11px; cursor: pointer; transition: all 0.2s; white-space: nowrap; } .item-row__clear-btn:hover { background: rgba(255,77,79,0.2); border-color: #ff4d4f; color: #ff4d4f; } .item-row__clear-btn:active { transform: scale(0.95); } .item-row__clear-btn:disabled { opacity: 0.25; cursor: not-allowed; } + /* 卡片元信息行 */ + .item-card__meta { + display: flex; align-items: center; gap: 6px; flex-wrap: wrap; + font-size: 11px; color: rgba(255,255,255,0.4); margin-bottom: 6px; + } + .item-card__meta-item { display: flex; align-items: center; gap: 3px; } + .item-card__meta-label { color: rgba(255,255,255,0.3); } + .item-card__meta-value { color: rgba(255,255,255,0.55); } + .item-card__meta-value--meal { color: #faad16; } + /* 卡片数据行:用量/份数/需/已 */ + .item-card__data { + display: flex; align-items: center; gap: 16px; + font-size: 12px; color: rgba(255,255,255,0.5); + } + .item-card__data-item { display: flex; align-items: center; gap: 4px; } + .item-card__data-label { color: rgba(255,255,255,0.35); } + .item-card__data-value { color: rgba(255,255,255,0.7); font-weight: 500; } + .item-card__data-value--done { color: #52c41a; } + .item-card__data-value--progress { color: #4a90d9; } + .item-card__data-value--zero { color: rgba(255,255,255,0.3); } /* 秤体重量显示 */ .scale-weight { @@ -266,51 +279,46 @@ cursor: not-allowed; box-shadow: none; } - /* 弹窗遮罩 */ + /* 配比确认弹窗(与净菜加工确认弹窗一致) */ .modal-overlay { - position: fixed; inset: 0; background: rgba(0,0,0,0.65); + position: fixed; inset: 0; background: rgba(0,0,0,0.6); z-index: 1000; display: none; align-items: center; justify-content: center; - z-index: 999; } .modal-overlay.show { display: flex; } - - /* 弹窗卡片 */ .modal { background: #1a2b4a; border-radius: 14px; border: 1px solid rgba(255,255,255,0.08); - width: 580px; padding: 24px 28px 20px; - box-shadow: 0 16px 48px rgba(0,0,0,0.5); + padding: 24px 28px; width: 360px; display: flex; flex-direction: column; gap: 16px; } - .modal__title { font-size: 16px; font-weight: 600; margin-bottom: 18px; color: #fff; } - .modal__form { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 20px; } - .modal__form-group { display: flex; flex-direction: column; gap: 4px; } - .modal__form-group--full { grid-column: 1 / -1; } - .modal__label { font-size: 11px; color: rgba(255,255,255,0.5); } - .modal__label .required { color: #ff4d4f; margin-left: 2px; } - .modal__input, .modal__select { - padding: 8px 12px; background: #121832; - border: 1px solid rgba(255,255,255,0.1); border-radius: 6px; - color: #fff; font-size: 13px; outline: none; - transition: border-color 0.2s; + .modal__title { font-size: 15px; font-weight: 600; text-align: center; } + .modal__food { display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 14px; } + .modal__food-icon { font-size: 24px; } + .modal__label { font-size: 12px; color: rgba(255,255,255,0.5); text-align: center; } + .modal__weight-row { + display: flex; align-items: center; justify-content: center; gap: 10px; } - .modal__input:focus, .modal__select:focus { border-color: #4a90d9; } - .modal__input::placeholder { color: rgba(255,255,255,0.2); } - /* 自定义日期选择器(三列下拉) */ - .date-picker { display: flex; gap: 6px; } - .date-picker .modal__select { flex: 1; } - .modal__select option { background: #1a2b4a; color: #fff; } - .modal__actions { display: flex; gap: 10px; margin-top: 20px; justify-content: flex-end; } + .modal__weight-value { + font-size: 28px; font-weight: 700; color: #4a90d9; line-height: 1; + } + .modal__weight-refresh { + width: 28px; height: 28px; border-radius: 6px; border: 1px solid rgba(74,144,217,0.25); + background: rgba(74,144,217,0.1); color: #4a90d9; font-size: 14px; + cursor: pointer; transition: all 0.2s; display: flex; align-items: center; justify-content: center; + } + .modal__weight-refresh:hover { background: rgba(74,144,217,0.2); border-color: #4a90d9; } + .modal__weight-unit { text-align: center; font-size: 12px; color: rgba(255,255,255,0.4); margin-top: -8px; } + .modal__actions { display: flex; gap: 10px; } .modal__btn { - padding: 8px 24px; border-radius: 8px; font-size: 13px; font-weight: 500; - cursor: pointer; border: none; transition: all 0.2s; + flex: 1; padding: 10px 0; border-radius: 8px; font-size: 13px; font-weight: 600; + cursor: pointer; transition: all 0.2s; font-family: inherit; border: none; } .modal__btn--cancel { - background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.6); + background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.6); } - .modal__btn--cancel:hover { background: rgba(255,255,255,0.1); color: #fff; } + .modal__btn--cancel:hover { background: rgba(255,255,255,0.12); color: #fff; } .modal__btn--confirm { background: #4a90d9; color: #fff; } - .modal__btn--confirm:hover { background: #3a7bc8; } + .modal__btn--confirm:hover { background: #5ba0e9; } /* Toast 提示 */ .toast { @@ -330,10 +338,10 @@ ◀ 返回 配比任务 - 餐品净菜包 @@ -408,12 +416,12 @@
--
-
餐品净菜包
-
--
+
打包份数
+
--
-
打包规格
-
--
+
订单状态
+
--
@@ -422,8 +430,10 @@
净菜名称 + 餐品净菜包名称 + 包装规格 每份用量(克) - 打包规格(份) + 打包份数 所需总重(克) 已称(克) 状态 @@ -444,41 +454,20 @@
- +