feat: 净菜订单/外售功能增强及膳食宝塔样式重构
- prod-clean-order: 新增订单类型列/筛选与食谱快速创建订单弹窗,加工类型重命名 - sup-clean-external: 新增预定配送时间列/表单字段/详情抽屉展示 - eat-nutrition: 膳食宝塔重构(饮水置底+横排样式)+新增食物分类列表 - CHANGELOG: 追加 2026-07-24 后台营养管理变更记录 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
6bbdbabc7b
commit
1e7c5a1f19
@@ -115,6 +115,34 @@
|
||||
.t-result.ok { background: rgba(82,196,26,0.15); color: #389e0d; }
|
||||
.t-result.warn { background: rgba(250,140,22,0.15); color: #d46b08; }
|
||||
.t-result.over { background: rgba(245,34,45,0.15); color: #cf1322; }
|
||||
/* 饮水极矮塔层:单行横排 */
|
||||
.tower-water { padding: 2px 10px !important; flex-direction: row !important; gap: 8px; }
|
||||
.tower-water .t-row1 { margin-bottom: 0 !important; }
|
||||
.tower-water .t-icon { font-size: 11px; }
|
||||
.tower-water .t-name { font-size: 10px; }
|
||||
.tower-water .t-row2 { font-size: 9px; }
|
||||
/* 宝塔下方分类列表 */
|
||||
.tower-list { margin-top: 12px; border-top: 1px solid #e0e0e0; padding-top: 10px; }
|
||||
.tower-list-table { width: 100%; border-collapse: collapse; }
|
||||
.tower-list-table th {
|
||||
font-size: 11px; color: #999; font-weight: 500; text-align: left;
|
||||
padding: 4px 0 6px; border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
.tower-list-table th:last-child, .tower-list-table th:nth-child(2) { text-align: right; }
|
||||
.tower-list-table td {
|
||||
font-size: 12px; color: #333; padding: 7px 0;
|
||||
border-bottom: 0.5px solid #fafafa;
|
||||
}
|
||||
.tower-list-table td:last-child, .tower-list-table td:nth-child(2) { text-align: right; }
|
||||
.tower-list-table .tl-status {
|
||||
display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-right: 4px;
|
||||
}
|
||||
.tl-status.low { background: #1677ff; }
|
||||
.tl-status.ok { background: #52c41a; }
|
||||
.tl-status.warn { background: #fa8c16; }
|
||||
.tl-status.over { background: #f5222d; }
|
||||
.tower-list-table .tl-val { font-weight: 600; }
|
||||
.tower-list-table .tl-rec { color: #999; font-size: 11px; }
|
||||
/* 底部 Tab 栏 */
|
||||
.tab-bar {
|
||||
height: 50px; background: #fff; border-top: 0.5px solid #e8e8e8;
|
||||
@@ -292,31 +320,50 @@
|
||||
<div class="t-row1"><span class="t-icon">🧂</span><span class="t-name" style="color:#ad6800">烹调油盐</span></div>
|
||||
<div class="t-row2"><span class="t-rec">油<25g 盐<5g</span><span class="t-actual" style="color:#d46b08">偏高</span><span class="t-result warn">注意</span></div>
|
||||
</div>
|
||||
<!-- 第2层:饮水 -->
|
||||
<div class="tower-level" style="width:44%;background:#e6f7ff">
|
||||
<div class="t-row1"><span class="t-icon">💧</span><span class="t-name" style="color:#0050b3">饮水</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 1500ml+</span><span class="t-actual" style="color:#d46b08">实际 800ml</span><span class="t-result warn">不足</span></div>
|
||||
</div>
|
||||
<!-- 第3层:奶豆坚果 -->
|
||||
<div class="tower-level" style="width:56%;background:#fff7e6">
|
||||
<!-- 第2层:奶豆坚果 -->
|
||||
<div class="tower-level" style="width:44%;background:#fff7e6">
|
||||
<div class="t-row1"><span class="t-icon">🥛</span><span class="t-name" style="color:#ad6800">奶豆坚果</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 25~35g</span><span class="t-actual" style="color:#d46b08">实际 20g</span><span class="t-result warn">不足</span></div>
|
||||
</div>
|
||||
<!-- 第4层:畜禽鱼蛋 -->
|
||||
<div class="tower-level" style="width:68%;background:#f0fbe4">
|
||||
<!-- 第3层:畜禽鱼蛋 -->
|
||||
<div class="tower-level" style="width:56%;background:#f0fbe4">
|
||||
<div class="t-row1"><span class="t-icon">🥩</span><span class="t-name" style="color:#135200">畜禽鱼蛋</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 120~200g</span><span class="t-actual" style="color:#389e0d">实际 168g</span><span class="t-result ok">适量</span></div>
|
||||
</div>
|
||||
<!-- 第5层:蔬菜水果 -->
|
||||
<div class="tower-level" style="width:82%;background:#e8f5d6">
|
||||
<!-- 第4层:蔬菜水果 -->
|
||||
<div class="tower-level" style="width:68%;background:#e8f5d6">
|
||||
<div class="t-row1"><span class="t-icon">🥦</span><span class="t-name" style="color:#135200">蔬菜水果</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 300~500g</span><span class="t-actual" style="color:#389e0d">实际 280g</span><span class="t-result ok">适量</span></div>
|
||||
</div>
|
||||
<!-- 第6层(塔基):谷薯类 -->
|
||||
<div class="tower-level" style="width:96%;background:#e0f0c8;border-radius:0 0 8px 8px">
|
||||
<!-- 第5层:谷薯类 -->
|
||||
<div class="tower-level" style="width:82%;background:#e0f0c8">
|
||||
<div class="t-row1"><span class="t-icon">🌾</span><span class="t-name" style="color:#135200">谷薯类</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 250~400g</span><span class="t-actual" style="color:#389e0d">实际 186g</span><span class="t-result ok">适量</span></div>
|
||||
</div>
|
||||
<!-- 第6层(塔基):饮水(极矮) -->
|
||||
<div class="tower-level tower-water" style="width:96%;background:#e6f7ff;border-radius:0 0 8px 8px">
|
||||
<div class="t-row1"><span class="t-icon">💧</span><span class="t-name" style="color:#0050b3">饮水</span></div>
|
||||
<div class="t-row2"><span class="t-rec">推荐 1500~1700ml</span><span class="t-actual" style="color:#d46b08">实际 800ml</span><span class="t-result warn">不足</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 宝塔分类列表 -->
|
||||
<div class="tower-list">
|
||||
<table class="tower-list-table">
|
||||
<thead><tr><th>食物名称</th><th>推荐</th><th>实际</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><span class="tl-status warn"></span>烹调油</td><td class="tl-rec"><25g</td><td class="tl-val" style="color:#d46b08">28g</td></tr>
|
||||
<tr><td><span class="tl-status over"></span>盐</td><td class="tl-rec"><5g</td><td class="tl-val" style="color:#cf1322">6g</td></tr>
|
||||
<tr><td><span class="tl-status warn"></span>奶及奶制品</td><td class="tl-rec">300g</td><td class="tl-val" style="color:#d46b08">200g</td></tr>
|
||||
<tr><td><span class="tl-status warn"></span>大豆及坚果</td><td class="tl-rec">25~35g</td><td class="tl-val" style="color:#d46b08">20g</td></tr>
|
||||
<tr><td><span class="tl-status ok"></span>畜禽肉</td><td class="tl-rec">40~75g</td><td class="tl-val" style="color:#389e0d">68g</td></tr>
|
||||
<tr><td><span class="tl-status ok"></span>鱼虾类</td><td class="tl-rec">40~75g</td><td class="tl-val" style="color:#389e0d">55g</td></tr>
|
||||
<tr><td><span class="tl-status ok"></span>蛋类</td><td class="tl-rec">40~50g</td><td class="tl-val" style="color:#389e0d">45g</td></tr>
|
||||
<tr><td><span class="tl-status low"></span>蔬菜类</td><td class="tl-rec">300~500g</td><td class="tl-val" style="color:#1677ff">200g</td></tr>
|
||||
<tr><td><span class="tl-status low"></span>水果类</td><td class="tl-rec">200~350g</td><td class="tl-val" style="color:#1677ff">80g</td></tr>
|
||||
<tr><td><span class="tl-status low"></span>谷薯类</td><td class="tl-rec">250~400g</td><td class="tl-val" style="color:#389e0d">186g</td></tr>
|
||||
<tr><td><span class="tl-status warn"></span>饮水</td><td class="tl-rec">1500~1700ml</td><td class="tl-val" style="color:#d46b08">800ml</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
# 营养用餐管理端 CHANGELOG
|
||||
|
||||
## [2026-07-24]
|
||||
|
||||
### 后台营养管理
|
||||
|
||||
- **`prod-clean-order.html`**(净菜订单):筛选栏新增「订单类型」筛选(内供/外售),表格新增「订单类型」列,外售订单行隐藏删除按钮。新建订单弹窗新增「订单类型」字段(默认「内供」且不可选),原二级「净菜类型」重命名为「加工类型」避免与一级净菜类型混淆。新增「由食谱快速创建订单」按钮与弹窗——选食谱日期后展示当日各餐次(早/午/晚/加餐)菜品列表(数据来源 `din-recipe-mgmt.html`),勾选餐次并输入就餐人数后实时汇总:餐品名称 / 包装规格 / 需求份数 / 需求计量(kg)。详情抽屉、确认收货等 JS 逻辑同步适配新列索引。
|
||||
- **`sup-clean-external.html`**(净菜外售):表格新增「预定配送时间」列,8 条示例数据补充配送时间。新建外售订单弹窗新增「预定配送时间」字段(含必填校验)。详情抽屉新增「预定配送时间」展示,JS 列索引同步适配。
|
||||
|
||||
## [2026-07-23]
|
||||
|
||||
### 后台营养管理
|
||||
|
||||
- **`prod-clean-order.html`**(净菜订单):新增「订单类型」列(内供/外售),筛选栏新增订单类型筛选,外售订单隐藏删除按钮。新建订单弹窗新增「订单类型」字段(默认「内供」且不可选),原二级"净菜类型"重命名为"加工类型"避免歧义。新增「由食谱快速创建订单」按钮与弹窗——选日期后展示当日各餐次菜品列表(数据来源 `din-recipe-mgmt.html`),勾选餐次并输入就餐人数后实时汇总:餐品名称 / 包装规格 / 需求份数 / 需求计量(kg)。详情抽屉及确认收货操作同步适配新增列索引。
|
||||
- **`din-canteen-add.html`**(场所管理 · 新增/编辑场所):页面重构为 5 个卡片区(基本信息 / 地址信息 / 营业时段 / 场所图片 / 资质信息)。新增餐次时段配置(早餐/午餐/晚餐/夜宵,每时段可独立设置营业日及起止时间),新增场所图片上传区(Logo/门头照/环境照)与资质证照管理(营业执照/食品经营许可证/法人身份证),完善全字段必填校验。
|
||||
- **`din-canteen.html`**(场所管理 · 场所列表):列表新增「负责人」「营业时段」列;详情抽屉重构为 4 个分区(基本信息 / 营业时段 / 场所图片 / 资质信息),Mock 数据补齐营业时段及证照信息。
|
||||
- **`din-ingredient.html`**(食物成分):新增「食材分类管理」弹窗,支持两级树形分类的增删改查,含子级删除校验及 11 个一级分类示例数据。
|
||||
@@ -19,6 +27,7 @@
|
||||
- **`me-address.html`**(收货地址 · 新增页面):支持地址卡片列表展示、编辑/删除/设为默认操作,含内联编辑表单。
|
||||
- **`me-order-detail.html`**(订单详情 · 净菜包):按订单状态(待配送/配送中/已完成)差异化渲染——头部徽标文案与配色联动,待配送状态仅展示食材明细+主辅材角色标签,已发货/已完成展示食材来源及溯源按钮;订单进度时间线改为动态渲染,按状态高亮对应节点。
|
||||
- **`me-orders.html`**(我的订单):净菜包订单卡片跳转链接补充 status 参数,支持按状态进入对应详情。
|
||||
- **`eat-nutrition.html`**(膳食宝塔): 重构膳食宝塔样式(将饮水置于最底层),宝塔下方新增各个食材类目的推荐值和实际摄入值。
|
||||
|
||||
## [2026-07-14] feat: 净菜包购买链路补齐与健康档案重构
|
||||
|
||||
|
||||
@@ -102,6 +102,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
.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;}
|
||||
.form-item input[readonly]{background:#f8fafc;cursor:not-allowed;}
|
||||
.form-item select:disabled{background:#f8fafc;color:var(--text-placeholder);cursor:not-allowed;}
|
||||
/* checkbox 组 */
|
||||
.checkbox-group{display:flex;align-items:center;gap:16px;flex-wrap:wrap;min-height:36px;}
|
||||
.checkbox-item{display:flex;align-items:center;gap:4px;font-size:var(--font-sm);color:var(--text-primary);cursor:pointer;user-select:none;}
|
||||
.checkbox-item input[type="checkbox"]{width:16px;height:16px;cursor:pointer;accent-color:var(--primary);}
|
||||
.meal-cb{width:16px;height:16px;cursor:pointer;accent-color:var(--primary);}
|
||||
/* 右侧抽屉 */
|
||||
.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;}
|
||||
@@ -171,25 +176,27 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
<div class="filter-bar">
|
||||
<div class="filter-item"><label>申领单号/食材名称</label><input class="filter-input" type="text" placeholder="请输入申领单号或食材名称"></div>
|
||||
<div class="filter-item"><label>净菜类型</label><select class="filter-select"><option>全部</option><option>净菜包</option><option>餐品净菜包</option></select></div>
|
||||
<div class="filter-item"><label>订单类型</label><select class="filter-select"><option>全部</option><option>内供</option><option>外售</option></select></div>
|
||||
<div class="filter-item"><label>订单状态</label><select class="filter-select"><option>全部</option><option>备货中</option><option>待配送</option><option>配送中</option><option>已完成</option></select></div>
|
||||
<div class="filter-item"><label>预定配送时间</label><input class="filter-input" type="date" style="min-width:150px"> ~ <input class="filter-input" type="date" style="min-width:150px"></div>
|
||||
<button class="btn btn-primary">查询</button><button class="btn btn-default">重置</button>
|
||||
</div>
|
||||
<div class="action-bar">
|
||||
<button class="btn btn-primary" onclick="openModal('modal-order')">➕ 新建订单</button>
|
||||
<button class="btn" style="background:#722ED1;color:#fff;" onclick="openModal('modal-recipe-order')">📋 由食谱快速创建订单</button>
|
||||
</div>
|
||||
<div class="table-card">
|
||||
<div class="table-card__header"><div class="table-card__title">净菜订单</div></div>
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr><th>订单号</th><th>净菜类型</th><th>净菜/餐品</th><th>包装规格</th><th>需求份数</th><th>需求计量(kg)</th><th>订单状态</th><th>申领时间</th><th>预定配送时间</th><th>创建人</th><th>操作</th></tr></thead>
|
||||
<thead><tr><th>订单号</th><th>净菜类型</th><th>订单类型</th><th>净菜/餐品</th><th>包装规格</th><th>需求份数</th><th>需求计量(kg)</th><th>订单状态</th><th>申领时间</th><th>预定配送时间</th><th>创建人</th><th>操作</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>CO-001</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>菠菜-菠菜段</td><td>500g/袋</td><td>50</td><td>25</td><td><span class="tag tag-green">已完成</span></td><td>2026-04-22 07:30</td><td>2026-04-22 10:00</td><td>张厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-002</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>猪排骨-排骨块</td><td>2kg/盘</td><td>20</td><td>40</td><td><span class="tag tag-blue">配送中</span></td><td>2026-04-22 08:00</td><td>2026-04-22 10:30</td><td>李主管</td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="confirmReceive(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-003</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>宫保鸡丁</td><td>标准份(500g)</td><td>30</td><td>15</td><td><span class="tag tag-blue">配送中</span></td><td>2026-04-22 08:00</td><td>2026-04-22 10:30</td><td>李主管</td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="confirmReceive(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-005</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>清蒸鱼</td><td>标准份(500g)</td><td>15</td><td>7.5</td><td><span class="tag tag-orange">待配送</span></td><td>2026-04-22 09:00</td><td>2026-04-22 11:00</td><td>王厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-006</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>土豆-土豆丝</td><td>500g/袋</td><td>40</td><td>20</td><td><span class="tag tag-gray">备货中</span></td><td>2026-04-22 09:15</td><td>2026-04-22 11:00</td><td>张厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-008</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>西兰花-西兰花朵</td><td>500g/袋</td><td>30</td><td>15</td><td><span class="tag tag-green">已完成</span></td><td>2026-04-22 10:00</td><td>2026-04-22 11:30</td><td>王厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-001</td><td><span class="tag tag-green">🥬 净菜包</span></td><td><span class="tag tag-blue">🏢 内供</span></td><td>菠菜-菠菜段</td><td>500g/袋</td><td>50</td><td>25</td><td><span class="tag tag-green">已完成</span></td><td>2026-04-22 07:30</td><td>2026-04-22 10:00</td><td>张厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-002</td><td><span class="tag tag-green">🥬 净菜包</span></td><td><span class="tag tag-blue">🏢 内供</span></td><td>猪排骨-排骨块</td><td>2kg/盘</td><td>20</td><td>40</td><td><span class="tag tag-blue">配送中</span></td><td>2026-04-22 08:00</td><td>2026-04-22 10:30</td><td>李主管</td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="confirmReceive(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-003</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td><span class="tag tag-orange">🛒 外售</span></td><td>宫保鸡丁</td><td>标准份(500g)</td><td>30</td><td>15</td><td><span class="tag tag-blue">配送中</span></td><td>2026-04-22 08:00</td><td>2026-04-22 10:30</td><td>李主管</td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="confirmReceive(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span></td></tr>
|
||||
<tr><td>CO-005</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td><span class="tag tag-orange">🛒 外售</span></td><td>清蒸鱼</td><td>标准份(500g)</td><td>15</td><td>7.5</td><td><span class="tag tag-orange">待配送</span></td><td>2026-04-22 09:00</td><td>2026-04-22 11:00</td><td>王厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span></td></tr>
|
||||
<tr><td>CO-006</td><td><span class="tag tag-green">🥬 净菜包</span></td><td><span class="tag tag-blue">🏢 内供</span></td><td>土豆-土豆丝</td><td>500g/袋</td><td>40</td><td>20</td><td><span class="tag tag-gray">备货中</span></td><td>2026-04-22 09:15</td><td>2026-04-22 11:00</td><td>张厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>CO-008</td><td><span class="tag tag-green">🥬 净菜包</span></td><td><span class="tag tag-blue">🏢 内供</span></td><td>西兰花-西兰花朵</td><td>500g/袋</td><td>30</td><td>15</td><td><span class="tag tag-green">已完成</span></td><td>2026-04-22 10:00</td><td>2026-04-22 11:30</td><td>王厨师</td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -208,6 +215,11 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
</div>
|
||||
<div class="modal__body">
|
||||
<div class="form-grid">
|
||||
<div class="form-item">
|
||||
<div class="form-item__label">订单类型<span class="required">*</span></div>
|
||||
<select disabled><option>内供</option></select>
|
||||
<span style="font-size:11px;color:var(--text-placeholder);">后台新建订单均为内供类型</span>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__label">净菜类型<span class="required">*</span></div>
|
||||
<select id="orderType" onchange="toggleOrderFields()"><option value="">请选择</option><option value="nc">净菜包</option><option value="cp">餐品净菜包</option></select>
|
||||
@@ -225,7 +237,7 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-item" id="orderNcTypeWrap" style="display:none;">
|
||||
<div class="form-item__label">净菜类型<span class="required">*</span></div>
|
||||
<div class="form-item__label">加工类型<span class="required">*</span></div>
|
||||
<select id="orderNcType" disabled onchange="syncOrderMeasure()"><option value="">请先选择食材</option></select>
|
||||
</div>
|
||||
<div class="form-item" id="orderDishWrap" style="display:none;">
|
||||
@@ -285,6 +297,51 @@ tbody tr:hover td.td-actions{background:#F8FBFF;}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 弹窗:由食谱快速创建订单 -->
|
||||
<div class="modal-mask" id="modal-recipe-order">
|
||||
<div class="modal" style="width:780px;">
|
||||
<div class="modal__header">
|
||||
<div class="modal__title">由食谱快速创建订单</div>
|
||||
<button class="modal__close" onclick="closeModal('modal-recipe-order')">✕</button>
|
||||
</div>
|
||||
<div class="modal__body">
|
||||
<div class="form-grid">
|
||||
<div class="form-item">
|
||||
<div class="form-item__label">食谱日期<span class="required">*</span></div>
|
||||
<input type="date" id="recipeDate" onchange="onRecipeDateChange()">
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item__label">就餐人数<span class="required">*</span></div>
|
||||
<input id="recipeDinerCount" inputmode="numeric" placeholder="请输入就餐人数" oninput="sanitizeIntegerInput(this);onRecipeParamChange()">
|
||||
</div>
|
||||
</div>
|
||||
<!-- 当日食谱 -->
|
||||
<div id="dailyMenuSection" style="margin-top:20px;display:none;">
|
||||
<div class="drawer-section__title">当日食谱</div>
|
||||
<div style="overflow-x:auto;">
|
||||
<table style="width:100%;border-collapse:collapse;" id="dailyMenuTable">
|
||||
<thead><tr><th style="width:60px;">餐次</th><th>餐品</th><th style="width:60px;">选择</th></tr></thead>
|
||||
<tbody id="dailyMenuBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 订单汇总表 -->
|
||||
<div id="recipeOrderSummary" style="margin-top:20px;display:none;">
|
||||
<div class="drawer-section__title">订单汇总</div>
|
||||
<div style="overflow-x:auto;">
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
<thead><tr><th>餐品名称</th><th>包装规格</th><th>需求份数</th><th>需求计量(kg)</th></tr></thead>
|
||||
<tbody id="recipeOrderSummaryBody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal__footer">
|
||||
<button class="btn btn-default" onclick="closeModal('modal-recipe-order')">取消</button>
|
||||
<button class="btn btn-primary" onclick="submitRecipeOrder()">确认创建订单</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
// 弹窗开关
|
||||
function openModal(id){
|
||||
@@ -401,14 +458,14 @@ var _confirmReceiveRow=null;
|
||||
function confirmReceive(el){
|
||||
_confirmReceiveRow=el.closest('tr');
|
||||
var orderNo=_confirmReceiveRow.querySelectorAll('td')[0].textContent;
|
||||
var foodName=_confirmReceiveRow.querySelectorAll('td')[2].textContent;
|
||||
var foodName=_confirmReceiveRow.querySelectorAll('td')[3].textContent;
|
||||
document.getElementById('confirmReceiveMsg').innerHTML='确认已收到订单 <b>'+orderNo+'</b>('+foodName+')的净菜配送?';
|
||||
openModal('modal-confirm-receive');
|
||||
}
|
||||
function doConfirmReceive(){
|
||||
if(!_confirmReceiveRow)return;
|
||||
// 更新状态列为"已完成"(去掉溯源码后状态在第6列)
|
||||
var statusTd=_confirmReceiveRow.querySelectorAll('td')[6];
|
||||
// 更新状态列为"已完成"(列序:0订单号 1净菜类型 2订单类型 3净菜/餐品 4包装规格 5需求份数 6需求计量 7订单状态)
|
||||
var statusTd=_confirmReceiveRow.querySelectorAll('td')[7];
|
||||
statusTd.innerHTML='<span class="tag tag-green">已完成</span>';
|
||||
// 移除"确认收货"按钮
|
||||
var actionTd=_confirmReceiveRow.querySelector('.td-actions');
|
||||
@@ -467,18 +524,19 @@ var ncBatch={
|
||||
function showDetail(el){
|
||||
var tr=el.closest('tr');
|
||||
var tds=tr.querySelectorAll('td');
|
||||
/* 列序:0订单号 1净菜类型 2净菜/餐品 3包装规格 4需求份数 5需求计量 6订单状态 7申领时间 8预定配送时间 9创建人 */
|
||||
/* 列序:0订单号 1净菜类型 2订单类型 3净菜/餐品 4包装规格 5需求份数 6需求计量 7订单状态 8申领时间 9预定配送时间 10创建人 */
|
||||
var orderNo=tds[0].textContent;
|
||||
var typeHtml=tds[1].innerHTML;
|
||||
var typeText=tds[1].textContent.trim();
|
||||
var foodName=tds[2].textContent;
|
||||
var spec=tds[3].textContent;
|
||||
var qty=tds[4].textContent;
|
||||
var weight=tds[5].textContent;
|
||||
var statusHtml=tds[6].innerHTML;
|
||||
var claimTime=tds[7].textContent;
|
||||
var deliverTime=tds[8].textContent;
|
||||
var creator=tds[9].textContent;
|
||||
var orderBizTypeHtml=tds[2].innerHTML;
|
||||
var foodName=tds[3].textContent;
|
||||
var spec=tds[4].textContent;
|
||||
var qty=tds[5].textContent;
|
||||
var weight=tds[6].textContent;
|
||||
var statusHtml=tds[7].innerHTML;
|
||||
var claimTime=tds[8].textContent;
|
||||
var deliverTime=tds[9].textContent;
|
||||
var creator=tds[10].textContent;
|
||||
|
||||
var isCp=typeText.indexOf('餐品')>=0;
|
||||
|
||||
@@ -486,6 +544,7 @@ function showDetail(el){
|
||||
var html='<div class="drawer-section"><div class="drawer-section__title">订单信息</div><div class="drawer-fields">';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">订单号</div><div class="drawer-field__value">'+orderNo+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">净菜类型</div><div class="drawer-field__value">'+typeHtml+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">订单类型</div><div class="drawer-field__value">'+orderBizTypeHtml+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">净菜/餐品</div><div class="drawer-field__value">'+foodName+'</div></div>';
|
||||
|
||||
// 根据类型显示不同字段
|
||||
@@ -531,6 +590,189 @@ function showDetail(el){
|
||||
+'</div></div>';
|
||||
document.body.insertAdjacentHTML('beforeend',drawerHtml);
|
||||
}
|
||||
|
||||
/* ========== 由食谱快速创建订单 ========== */
|
||||
/* ---- 食谱数据:每周7天×4餐次(来源:din-recipe-mgmt.html) ---- */
|
||||
var WEEK_MENUS={
|
||||
'2026-05-18':{ // 第21周 周一~周日
|
||||
meals:[
|
||||
[['白米饭','小米粥','馒头'],['皮蛋瘦肉粥','花卷'],['小米粥','煎饺'],['杂粮饭','馒头'],['皮蛋瘦肉粥','煎饺','花卷'],[],[]],
|
||||
[['红烧肉','清炒时蔬','紫菜蛋花汤'],['宫保鸡丁','酸辣土豆丝','白米饭'],['糖醋排骨','麻婆豆腐','冬瓜排骨汤'],['清蒸鲈鱼','西红柿炒蛋','白米饭'],['红烧肉','凉拌黄瓜','紫菜蛋花汤'],[],[]],
|
||||
[['西红柿炒蛋','酸辣土豆丝'],['麻婆豆腐','清炒时蔬'],['宫保鸡丁','凉拌黄瓜'],['清蒸鲈鱼','清炒时蔬'],[],[],[]],
|
||||
[['水果拼盘'],[],['绿豆汤','水果拼盘'],[],[],[],[]]
|
||||
]},
|
||||
'2026-05-25':{ // 第22周
|
||||
meals:[
|
||||
[['小米粥','馒头','煮鸡蛋'],['牛奶','花卷'],['小米粥','煎饺'],['牛奶','馒头'],['小米粥','花卷','煮鸡蛋'],[],[]],
|
||||
[['番茄炖牛腩','清炒时蔬','紫菜蛋花汤'],['宫保鸡丁','西红柿炒蛋','白米饭'],['糖醋排骨','清炒时蔬','冬瓜排骨汤'],['清蒸鲈鱼','西红柿炒蛋','白米饭'],['红烧肉','清炒时蔬','紫菜蛋花汤'],[],[]],
|
||||
[['西红柿炒蛋','清炒时蔬'],['麻婆豆腐','凉拌黄瓜'],['宫保鸡丁','清炒时蔬'],['清蒸鲈鱼','凉拌黄瓜'],[],[],[]],
|
||||
[['水果拼盘','牛奶'],['水果拼盘'],['绿豆汤','水果拼盘'],['水果拼盘'],[],[],[]]
|
||||
]}
|
||||
};
|
||||
|
||||
/* ---- 餐品包装规格映射 (规格g/份) ---- */
|
||||
var DISH_SPEC={
|
||||
'白米饭':{spec:'标准份(500g)',grams:500},
|
||||
'杂粮饭':{spec:'标准份(500g)',grams:500},
|
||||
'小米粥':{spec:'标准份(400g)',grams:400},
|
||||
'皮蛋瘦肉粥':{spec:'标准份(450g)',grams:450},
|
||||
'燕麦粥':{spec:'标准份(400g)',grams:400},
|
||||
'红薯粥':{spec:'标准份(400g)',grams:400},
|
||||
'馒头':{spec:'标准份(200g)',grams:200},
|
||||
'花卷':{spec:'标准份(200g)',grams:200},
|
||||
'全麦馒头':{spec:'标准份(200g)',grams:200},
|
||||
'煎饺':{spec:'标准份(300g)',grams:300},
|
||||
'牛奶':{spec:'标准份(250ml)',grams:250},
|
||||
'煮鸡蛋':{spec:'标准份(60g)',grams:60},
|
||||
'红烧肉':{spec:'标准份(800g)',grams:800},
|
||||
'糖醋排骨':{spec:'标准份(800g)',grams:800},
|
||||
'清蒸鲈鱼':{spec:'标准份(600g)',grams:600},
|
||||
'宫保鸡丁':{spec:'标准份(500g)',grams:500},
|
||||
'清蒸鸡胸':{spec:'标准份(500g)',grams:500},
|
||||
'番茄炖牛腩':{spec:'标准份(800g)',grams:800},
|
||||
'西红柿炒蛋':{spec:'标准份(400g)',grams:400},
|
||||
'麻婆豆腐':{spec:'标准份(400g)',grams:400},
|
||||
'清炒时蔬':{spec:'标准份(300g)',grams:300},
|
||||
'清炒西兰花':{spec:'标准份(300g)',grams:300},
|
||||
'凉拌黄瓜':{spec:'标准份(250g)',grams:250},
|
||||
'酸辣土豆丝':{spec:'标准份(350g)',grams:350},
|
||||
'紫菜蛋花汤':{spec:'标准份(350g)',grams:350},
|
||||
'冬瓜排骨汤':{spec:'标准份(400g)',grams:400},
|
||||
'水果拼盘':{spec:'标准份(300g)',grams:300},
|
||||
'绿豆汤':{spec:'标准份(350g)',grams:350}
|
||||
};
|
||||
|
||||
var MEAL_NAMES=['早餐','午餐','晚餐','加餐'];
|
||||
|
||||
/* 根据日期获取对应的周菜单 + 星期索引 */
|
||||
function getDailyMenu(dateStr){
|
||||
var d=new Date(dateStr);
|
||||
var dayOfWeek=d.getDay()||7; // 周日=7
|
||||
var dayIdx=dayOfWeek-1; // 周一=0
|
||||
// 计算该日期所在周的周一
|
||||
var monday=new Date(d);
|
||||
monday.setDate(monday.getDate()-dayIdx);
|
||||
var mondayStr=monday.getFullYear()+'-'+String(monday.getMonth()+1).padStart(2,'0')+'-'+String(monday.getDate()).padStart(2,'0');
|
||||
var weekData=WEEK_MENUS[mondayStr];
|
||||
if(!weekData) return null;
|
||||
return {meals:weekData.meals,dayIdx:dayIdx};
|
||||
}
|
||||
|
||||
/* 默认日期:食谱数据内的明天(原型用固定值,对应页面上下文 2026-05-19) */
|
||||
function getDefaultDate(){
|
||||
return '2026-05-20';
|
||||
}
|
||||
|
||||
/* 选日期 → 渲染当日食谱表 */
|
||||
function onRecipeDateChange(){
|
||||
var dateVal=document.getElementById('recipeDate').value;
|
||||
var dailySection=document.getElementById('dailyMenuSection');
|
||||
var tbody=document.getElementById('dailyMenuBody');
|
||||
if(!dateVal){
|
||||
dailySection.style.display='none';
|
||||
document.getElementById('recipeOrderSummary').style.display='none';
|
||||
return;
|
||||
}
|
||||
var daily=getDailyMenu(dateVal);
|
||||
if(!daily){
|
||||
tbody.innerHTML='<tr><td colspan="3" style="text-align:center;color:var(--text-placeholder);padding:16px;">该日期暂无食谱数据</td></tr>';
|
||||
dailySection.style.display='block';
|
||||
document.getElementById('recipeOrderSummary').style.display='none';
|
||||
return;
|
||||
}
|
||||
var rows='';
|
||||
for(var mi=0;mi<4;mi++){
|
||||
var dishes=daily.meals[mi]&&daily.meals[mi][daily.dayIdx]||[];
|
||||
var dishHtml=dishes.length?dishes.join('、'):'<span style="color:var(--text-placeholder);">—</span>';
|
||||
rows+='<tr><td style="font-weight:600;">'+MEAL_NAMES[mi]+'</td><td>'+dishHtml+'</td>'
|
||||
+'<td style="text-align:center;"><input type="checkbox" class="meal-cb" value="'+mi+'" onchange="onRecipeParamChange()"></td></tr>';
|
||||
}
|
||||
tbody.innerHTML=rows;
|
||||
dailySection.style.display='block';
|
||||
// 重置汇总
|
||||
document.getElementById('recipeOrderSummary').style.display='none';
|
||||
}
|
||||
|
||||
/* 餐次/人数变化 → 刷新汇总表 */
|
||||
function onRecipeParamChange(){
|
||||
var dateVal=document.getElementById('recipeDate').value;
|
||||
var dinerCount=parseInt(document.getElementById('recipeDinerCount').value||'0',10);
|
||||
var summaryDiv=document.getElementById('recipeOrderSummary');
|
||||
var tbody=document.getElementById('recipeOrderSummaryBody');
|
||||
|
||||
if(!dateVal||dinerCount<=0){
|
||||
summaryDiv.style.display='none';
|
||||
return;
|
||||
}
|
||||
var daily=getDailyMenu(dateVal);
|
||||
if(!daily){summaryDiv.style.display='none';return;}
|
||||
|
||||
// 收集选中餐次
|
||||
var mealIndices=[];
|
||||
document.querySelectorAll('#dailyMenuBody .meal-cb:checked').forEach(function(cb){
|
||||
mealIndices.push(parseInt(cb.value));
|
||||
});
|
||||
if(mealIndices.length===0){summaryDiv.style.display='none';return;}
|
||||
|
||||
// 收集餐品(去重)
|
||||
var dishMap={};
|
||||
mealIndices.forEach(function(mi){
|
||||
var dayDishes=daily.meals[mi]&&daily.meals[mi][daily.dayIdx]||[];
|
||||
dayDishes.forEach(function(dishName){
|
||||
if(!dishMap[dishName]){
|
||||
dishMap[dishName]=DISH_SPEC[dishName]||{spec:'标准份(500g)',grams:500};
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var dishNames=Object.keys(dishMap);
|
||||
if(dishNames.length===0){summaryDiv.style.display='none';return;}
|
||||
|
||||
var rows='';
|
||||
for(var name in dishMap){
|
||||
var sp=dishMap[name];
|
||||
var servings=dinerCount;
|
||||
var weightKg=(sp.grams*servings/1000).toFixed(2);
|
||||
rows+='<tr><td>'+name+'</td><td>'+sp.spec+'</td><td>'+servings+'</td><td>'+weightKg+'</td></tr>';
|
||||
}
|
||||
tbody.innerHTML=rows;
|
||||
summaryDiv.style.display='block';
|
||||
}
|
||||
|
||||
function submitRecipeOrder(){
|
||||
var recipeDate=document.getElementById('recipeDate').value;
|
||||
var dinerCount=document.getElementById('recipeDinerCount').value;
|
||||
var meals=[];
|
||||
document.querySelectorAll('#dailyMenuBody .meal-cb:checked').forEach(function(cb){
|
||||
meals.push(MEAL_NAMES[parseInt(cb.value)]);
|
||||
});
|
||||
if(!recipeDate){alert('请选择食谱日期');return;}
|
||||
if(meals.length===0){alert('请至少选择一个餐次');return;}
|
||||
if(!dinerCount||parseInt(dinerCount)<=0){alert('请输入有效的就餐人数');return;}
|
||||
alert('已根据 '+recipeDate+' 食谱('+meals.join('、')+')生成内供净菜订单,就餐人数:'+dinerCount+' 人');
|
||||
closeModal('modal-recipe-order');
|
||||
// 重置
|
||||
document.getElementById('recipeDate').value=getDefaultDate();
|
||||
document.getElementById('recipeDinerCount').value='';
|
||||
document.getElementById('dailyMenuSection').style.display='none';
|
||||
document.getElementById('recipeOrderSummary').style.display='none';
|
||||
}
|
||||
|
||||
/* 打开弹窗时初始化默认日期 */
|
||||
(function(){
|
||||
var origOpenModal=openModal;
|
||||
openModal=function(id){
|
||||
if(id==='modal-order')resetOrderForm();
|
||||
if(id==='modal-recipe-order'){
|
||||
document.getElementById('recipeDate').value=getDefaultDate();
|
||||
document.getElementById('recipeDinerCount').value='';
|
||||
document.getElementById('dailyMenuSection').style.display='none';
|
||||
document.getElementById('recipeOrderSummary').style.display='none';
|
||||
onRecipeDateChange();
|
||||
}
|
||||
document.getElementById(id).classList.add('show');
|
||||
};
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -211,17 +211,17 @@ textarea.form-control{height:auto;padding:8px 12px;resize:vertical;min-height:60
|
||||
<div class="table-card__content">
|
||||
<table>
|
||||
<thead><tr>
|
||||
<th>订单号</th><th>客户名称</th><th>净菜类型</th><th>净菜/餐品</th><th>包装规格</th><th>售卖份数</th><th>计量(kg)</th><th>单价(元/kg)</th><th>小计金额</th><th>下单时间</th><th>物流单号</th><th>订单状态</th><th>操作</th>
|
||||
<th>订单号</th><th>客户名称</th><th>净菜类型</th><th>净菜/餐品</th><th>包装规格</th><th>售卖份数</th><th>计量(kg)</th><th>单价(元/kg)</th><th>小计金额</th><th>下单时间</th><th>预定配送时间</th><th>物流单号</th><th>订单状态</th><th>操作</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<tr><td>EXT-001</td><td>社区便民超市</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>土豆-土豆丝</td><td>5kg/箱</td><td>10</td><td>50</td><td>¥3.5</td><td>¥175</td><td>2026-04-22 08:00</td><td>SF1234567890</td><td><span class="tag tag-green">已完成</span></td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-001</td><td>社区便民超市</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>土豆-土豆块</td><td>5kg/箱</td><td>6</td><td>30</td><td>¥3.5</td><td>¥105</td><td>2026-04-22 08:00</td><td>SF1234567890</td><td><span class="tag tag-green">已完成</span></td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-002</td><td>周边餐饮企业</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>净猪里脊-里脊条</td><td>1kg/箱</td><td>5</td><td>50</td><td>¥28</td><td>¥1,400</td><td>2026-04-22 09:30</td><td>SF9876543210</td><td><span class="tag tag-blue">配送中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReceiveConfirm(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-003</td><td>周边餐饮企业</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>宫保鸡丁</td><td>标准份(500g)</td><td>40</td><td>20</td><td>¥12</td><td>¥240</td><td>2026-04-22 09:30</td><td>SF9876543210</td><td><span class="tag tag-blue">配送中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReceiveConfirm(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-004</td><td>学校食堂</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>鸡肉-鸡肉块</td><td>1kg/箱</td><td>6</td><td>60</td><td>¥2.0</td><td>¥120</td><td>2026-04-22 10:00</td><td>—</td><td><span class="tag tag-orange">待配送</span></td><td class="td-actions"><span class="link" style="color:var(--primary)" onclick="openShipModal('EXT-004')">立即发货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-004</td><td>学校食堂</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>西兰花-西兰花朵</td><td>5kg/箱</td><td>8</td><td>40</td><td>¥4.5</td><td>¥180</td><td>2026-04-22 10:00</td><td>—</td><td><span class="tag tag-orange">待配送</span></td><td class="td-actions"><span class="link" style="color:var(--primary)" onclick="openShipModal('EXT-004')">立即发货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-005</td><td>职工家属区团购</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>清蒸鱼</td><td>标准份(600g)</td><td>20</td><td>12</td><td>¥15</td><td>¥180</td><td>2026-04-22 10:30</td><td>—</td><td><span class="tag tag-gray">备货中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReadyConfirm(this)">备货完成</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-006</td><td>职工家属区团购</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>蒜蓉菠菜</td><td>标准份(400g)</td><td>30</td><td>12</td><td>¥8</td><td>¥96</td><td>2026-04-22 10:30</td><td>—</td><td><span class="tag tag-gray">备货中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReadyConfirm(this)">备货完成</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-001</td><td>社区便民超市</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>土豆-土豆丝</td><td>5kg/箱</td><td>10</td><td>50</td><td>¥3.5</td><td>¥175</td><td>2026-04-22 08:00</td><td>2026-04-22 16:00</td><td>SF1234567890</td><td><span class="tag tag-green">已完成</span></td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-001</td><td>社区便民超市</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>土豆-土豆块</td><td>5kg/箱</td><td>6</td><td>30</td><td>¥3.5</td><td>¥105</td><td>2026-04-22 08:00</td><td>2026-04-22 16:00</td><td>SF1234567890</td><td><span class="tag tag-green">已完成</span></td><td class="td-actions"><span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-002</td><td>周边餐饮企业</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>净猪里脊-里脊条</td><td>1kg/箱</td><td>5</td><td>50</td><td>¥28</td><td>¥1,400</td><td>2026-04-22 09:30</td><td>2026-04-22 14:00</td><td>SF9876543210</td><td><span class="tag tag-blue">配送中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReceiveConfirm(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-003</td><td>周边餐饮企业</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>宫保鸡丁</td><td>标准份(500g)</td><td>40</td><td>20</td><td>¥12</td><td>¥240</td><td>2026-04-22 09:30</td><td>2026-04-22 14:00</td><td>SF9876543210</td><td><span class="tag tag-blue">配送中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReceiveConfirm(this)">确认收货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-004</td><td>学校食堂</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>鸡肉-鸡肉块</td><td>1kg/箱</td><td>6</td><td>60</td><td>¥2.0</td><td>¥120</td><td>2026-04-22 10:00</td><td>2026-04-23 09:00</td><td>—</td><td><span class="tag tag-orange">待配送</span></td><td class="td-actions"><span class="link" style="color:var(--primary)" onclick="openShipModal('EXT-004')">立即发货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-004</td><td>学校食堂</td><td><span class="tag tag-green">🥬 净菜包</span></td><td>西兰花-西兰花朵</td><td>5kg/箱</td><td>8</td><td>40</td><td>¥4.5</td><td>¥180</td><td>2026-04-22 10:00</td><td>2026-04-23 09:00</td><td>—</td><td><span class="tag tag-orange">待配送</span></td><td class="td-actions"><span class="link" style="color:var(--primary)" onclick="openShipModal('EXT-004')">立即发货</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-005</td><td>职工家属区团购</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>清蒸鱼</td><td>标准份(600g)</td><td>20</td><td>12</td><td>¥15</td><td>¥180</td><td>2026-04-22 10:30</td><td>2026-04-23 16:00</td><td>—</td><td><span class="tag tag-gray">备货中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReadyConfirm(this)">备货完成</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
<tr><td>EXT-006</td><td>职工家属区团购</td><td><span class="tag tag-orange">🍱 餐品净菜包</span></td><td>蒜蓉菠菜</td><td>标准份(400g)</td><td>30</td><td>12</td><td>¥8</td><td>¥96</td><td>2026-04-22 10:30</td><td>2026-04-23 16:00</td><td>—</td><td><span class="tag tag-gray">备货中</span></td><td class="td-actions"><span class="link" style="color:var(--success)" onclick="openReadyConfirm(this)">备货完成</span> <span class="link" onclick="showDetail(this)">详情</span> <span class="link" style="color:var(--danger)">删除</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -342,6 +342,10 @@ textarea.form-control{height:auto;padding:8px 12px;resize:vertical;min-height:60
|
||||
<label class="form-label">收货地址</label>
|
||||
<input class="form-control" placeholder="请输入收货地址">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">预定配送时间<span class="required">*</span></label>
|
||||
<input class="form-control" type="datetime-local" id="orderDeliveryTime">
|
||||
</div>
|
||||
|
||||
<hr class="form-divider">
|
||||
|
||||
@@ -540,6 +544,7 @@ function resetCreateOrderForm(){
|
||||
document.getElementById('orderWeight').value='';
|
||||
document.getElementById('orderPrice').value='';
|
||||
document.getElementById('orderSubtotal').value='';
|
||||
document.getElementById('orderDeliveryTime').value='';
|
||||
toggleCreateOrderFields();
|
||||
}
|
||||
function toggleCreateOrderFields(){
|
||||
@@ -616,6 +621,7 @@ function submitOrder(){
|
||||
if(!document.getElementById('orderPrice').value){alert('请输入单价');return;}
|
||||
var customer=document.getElementById('orderCustomer').value.trim();
|
||||
if(!customer){alert('请输入客户名称');return;}
|
||||
if(!document.getElementById('orderDeliveryTime').value){alert('请选择预定配送时间');return;}
|
||||
alert('订单提交成功!');
|
||||
closeCreateOrder();
|
||||
}
|
||||
@@ -721,8 +727,9 @@ function showDetail(el){
|
||||
var price=tds[7].textContent.trim();
|
||||
var subtotal=tds[8].textContent.trim();
|
||||
var orderTime=tds[9].textContent.trim();
|
||||
var logistics=tds[10].textContent.trim();
|
||||
var status=tds[11].innerHTML;
|
||||
var deliveryTime=tds[10].textContent.trim();
|
||||
var logistics=tds[11].textContent.trim();
|
||||
var status=tds[12].innerHTML;
|
||||
|
||||
var html='<div class="drawer-section"><div class="drawer-section__title">订单信息</div><div class="drawer-fields">';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">订单号</div><div class="drawer-field__value">'+orderNo+'</div></div>';
|
||||
@@ -746,6 +753,7 @@ function showDetail(el){
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">单价(元/kg)</div><div class="drawer-field__value">'+price+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">小计金额</div><div class="drawer-field__value">'+subtotal+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">下单时间</div><div class="drawer-field__value">'+orderTime+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">预定配送时间</div><div class="drawer-field__value">'+deliveryTime+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">物流单号</div><div class="drawer-field__value">'+logistics+'</div></div>';
|
||||
html+='<div class="drawer-field"><div class="drawer-field__label">订单状态</div><div class="drawer-field__value">'+status+'</div></div>';
|
||||
html+='</div></div>';
|
||||
|
||||
Reference in New Issue
Block a user