Files

277 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 库存总览 -->
<style>
.ivo-page { display:flex; flex-direction:column; gap:16px; }
/* 工具栏 */
.ivo-toolbar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.ivo-toolbar-right { margin-left:auto; display:flex; gap:8px; }
.ivo-search { width:220px; }
/* 统计卡片 */
.ivo-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:14px; }
.ivo-stat { background:#fff; border-radius:var(--g-radius); border:1px solid var(--g-border); padding:18px 20px; display:flex; align-items:center; gap:14px; transition:var(--g-transition); cursor:default; }
.ivo-stat:hover { box-shadow:var(--g-shadow-md); transform:translateY(-1px); }
.ivo-stat-icon { width:42px; height:42px; border-radius:var(--g-radius); display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.ivo-stat-icon.blue { background:hsl(212,100%,95%); color:hsl(212,100%,45%); }
.ivo-stat-icon.orange { background:#fff7e6; color:var(--g-warning); }
.ivo-stat-icon.red { background:#fff1f0; color:var(--g-danger); }
.ivo-stat-icon.green { background:#f0fdf4; color:var(--g-success); }
.ivo-stat-info { display:flex; flex-direction:column; gap:4px; }
.ivo-stat-label { font-size:13px; color:var(--g-text-secondary); }
.ivo-stat-value { font-size:24px; font-weight:700; color:var(--g-text); letter-spacing:-0.5px; }
.ivo-stat-value.orange { color:var(--g-warning); }
.ivo-stat-value.red { color:var(--g-danger); }
/* 表格容器 */
.ivo-table-wrap { background:#fff; border-radius:var(--g-radius); border:1px solid var(--g-border); overflow:hidden; }
.ivo-table-inner { overflow-x:auto; }
/* 行状态背景 */
.ivo-row-warn td { background:#fffbe6 !important; }
.ivo-row-danger td { background:#fff1f0 !important; }
/* 分页栏 */
.ivo-pager-bar { display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-top:1px solid var(--g-border); font-size:13px; color:var(--g-text-secondary); }
.ivo-pager-bar .g-select { width:auto; height:28px; font-size:12px; }
</style>
<div class="ivo-page">
<!-- 工具栏 -->
<div class="ivo-toolbar">
<input class="g-input ivo-search" placeholder="搜索原料名称…" />
<select class="g-select" style="width:140px;">
<option>全部分类</option>
<option>肉类</option>
<option>蔬菜</option>
<option>调料</option>
<option>饮品原料</option>
<option>包装耗材</option>
</select>
<select class="g-select" style="width:120px;">
<option>全部状态</option>
<option>正常</option>
<option>低库存</option>
<option>缺货</option>
</select>
<div class="ivo-toolbar-right">
<button class="g-btn" id="ivoBtnPurchase" onclick="ivoGenPurchase()">
<i data-lucide="clipboard-list" style="width:14px;height:14px;"></i> 一键生成采购单
</button>
<button class="g-btn g-btn-primary" onclick="openIvoDrawer()">
<i data-lucide="plus" style="width:14px;height:14px;"></i> 新增原料
</button>
</div>
</div>
<!-- 统计卡片 -->
<div class="ivo-stats">
<div class="ivo-stat">
<div class="ivo-stat-icon blue"><i data-lucide="package" style="width:20px;height:20px;"></i></div>
<div class="ivo-stat-info">
<span class="ivo-stat-label">原料 SKU 数</span>
<span class="ivo-stat-value">42</span>
</div>
</div>
<div class="ivo-stat">
<div class="ivo-stat-icon orange"><i data-lucide="alert-triangle" style="width:20px;height:20px;"></i></div>
<div class="ivo-stat-info">
<span class="ivo-stat-label">低库存预警</span>
<span class="ivo-stat-value orange">8</span>
</div>
</div>
<div class="ivo-stat">
<div class="ivo-stat-icon red"><i data-lucide="x-circle" style="width:20px;height:20px;"></i></div>
<div class="ivo-stat-info">
<span class="ivo-stat-label">缺货原料</span>
<span class="ivo-stat-value red">2</span>
</div>
</div>
<div class="ivo-stat">
<div class="ivo-stat-icon green"><i data-lucide="wallet" style="width:20px;height:20px;"></i></div>
<div class="ivo-stat-info">
<span class="ivo-stat-label">库存总值</span>
<span class="ivo-stat-value">¥28,600</span>
</div>
</div>
</div>
<!-- 原料列表 -->
<div class="ivo-table-wrap">
<div class="ivo-table-inner">
<table class="g-table">
<thead>
<tr>
<th>原料名称</th><th>分类</th><th>单位</th><th style="text-align:right;">当前库存</th><th style="text-align:right;">安全库存</th><th style="text-align:right;">单价(元)</th><th style="text-align:right;">库存价值</th><th>状态</th><th style="width:140px;">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td style="font-weight:500;">猪肉</td><td>肉类</td><td>kg</td><td style="text-align:right;">45</td><td style="text-align:right;">20</td><td style="text-align:right;">32.00</td><td style="text-align:right;">¥1,440</td><td><span class="g-tag g-tag-green">正常</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">鸡胸肉</td><td>肉类</td><td>kg</td><td style="text-align:right;">8</td><td style="text-align:right;">15</td><td style="text-align:right;">28.00</td><td style="text-align:right;">¥224</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-danger">
<td style="font-weight:500;">牛腩</td><td>肉类</td><td>kg</td><td style="text-align:right;">0</td><td style="text-align:right;">10</td><td style="text-align:right;">65.00</td><td style="text-align:right;">¥0</td><td><span class="g-tag g-tag-red">缺货</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr>
<td style="font-weight:500;">大白菜</td><td>蔬菜</td><td>kg</td><td style="text-align:right;">30</td><td style="text-align:right;">10</td><td style="text-align:right;">4.00</td><td style="text-align:right;">¥120</td><td><span class="g-tag g-tag-green">正常</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr>
<td style="font-weight:500;">西红柿</td><td>蔬菜</td><td>kg</td><td style="text-align:right;">12</td><td style="text-align:right;">8</td><td style="text-align:right;">6.00</td><td style="text-align:right;">¥72</td><td><span class="g-tag g-tag-green">正常</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">生菜</td><td>蔬菜</td><td>kg</td><td style="text-align:right;">3</td><td style="text-align:right;">5</td><td style="text-align:right;">8.00</td><td style="text-align:right;">¥24</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr>
<td style="font-weight:500;">酱油</td><td>调料</td><td></td><td style="text-align:right;">25</td><td style="text-align:right;">10</td><td style="text-align:right;">12.00</td><td style="text-align:right;">¥300</td><td><span class="g-tag g-tag-green">正常</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">食用油</td><td>调料</td><td></td><td style="text-align:right;">4</td><td style="text-align:right;">5</td><td style="text-align:right;">58.00</td><td style="text-align:right;">¥232</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">咖啡豆</td><td>饮品原料</td><td>kg</td><td style="text-align:right;">2</td><td style="text-align:right;">5</td><td style="text-align:right;">120.00</td><td style="text-align:right;">¥240</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">牛奶</td><td>饮品原料</td><td>L</td><td style="text-align:right;">15</td><td style="text-align:right;">20</td><td style="text-align:right;">8.00</td><td style="text-align:right;">¥120</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr>
<td style="font-weight:500;">外卖盒</td><td>包装耗材</td><td></td><td style="text-align:right;">500</td><td style="text-align:right;">200</td><td style="text-align:right;">0.80</td><td style="text-align:right;">¥400</td><td><span class="g-tag g-tag-green">正常</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
<tr class="ivo-row-warn">
<td style="font-weight:500;">一次性筷子</td><td>包装耗材</td><td></td><td style="text-align:right;">80</td><td style="text-align:right;">100</td><td style="text-align:right;">0.30</td><td style="text-align:right;">¥24</td><td><span class="g-tag g-tag-orange">低库存</span></td>
<td><a class="g-action">编辑</a> <a class="g-action" style="margin-left:8px;">入库</a> <a class="g-action g-action-danger" style="margin-left:8px;">删除</a></td>
</tr>
</tbody>
</table>
</div>
<!-- 分页 -->
<div class="ivo-pager-bar">
<span>共 42 条</span>
<div style="display:flex;align-items:center;gap:8px;">
<select class="g-select" style="width:90px;height:28px;font-size:12px;">
<option>20 条/页</option>
<option>50 条/页</option>
<option>100 条/页</option>
</select>
<div class="g-pagination" style="margin-top:0;">
<button class="g-page-btn" disabled>&lt;</button>
<button class="g-page-btn active">1</button>
<button class="g-page-btn">2</button>
<button class="g-page-btn">3</button>
<button class="g-page-btn">&gt;</button>
</div>
</div>
</div>
</div>
</div>
<!-- 新增原料抽屉 -->
<div class="g-drawer-mask" id="ivoDrawerMask" onclick="closeIvoDrawer()"></div>
<div class="g-drawer" id="ivoDrawer" style="width:480px;">
<div class="g-drawer-hd">
<span class="g-drawer-title">新增原料</span>
<button class="g-drawer-close" onclick="closeIvoDrawer()"><i data-lucide="x" style="width:18px;height:18px;"></i></button>
</div>
<div class="g-drawer-bd">
<div class="g-form-group">
<label class="g-form-label required">原料名称</label>
<input class="g-input" placeholder="请输入原料名称" />
</div>
<div class="g-form-group">
<label class="g-form-label required">分类</label>
<select class="g-select">
<option value="">请选择分类</option>
<option>肉类</option>
<option>蔬菜</option>
<option>调料</option>
<option>饮品原料</option>
<option>包装耗材</option>
</select>
</div>
<div class="g-form-group">
<label class="g-form-label required">单位</label>
<select class="g-select">
<option value="">请选择单位</option>
<option>kg</option>
<option>g</option>
<option>L</option>
<option>ml</option>
<option></option>
<option></option>
<option></option>
<option></option>
<option></option>
</select>
</div>
<div class="g-form-group">
<label class="g-form-label required">安全库存</label>
<input class="g-input" type="number" placeholder="低于此数量将触发预警" />
</div>
<div class="g-form-group">
<label class="g-form-label required">单价</label>
<input class="g-input" type="number" placeholder="如29.90" />
</div>
<div class="g-form-group">
<label class="g-form-label">供应商</label>
<select class="g-select">
<option value="">请选择供应商</option>
<option>鲜达供应链</option>
<option>万家食材</option>
<option>优品冷链</option>
</select>
</div>
<div class="g-form-group">
<label class="g-form-label">备注</label>
<textarea class="g-textarea" rows="3" placeholder="补充说明,如存储要求、保质期等"></textarea>
</div>
</div>
<div class="g-drawer-ft">
<button class="g-btn" onclick="closeIvoDrawer()">取消</button>
<button class="g-btn g-btn-primary" onclick="closeIvoDrawer()">确认添加</button>
</div>
</div>
<script>
/* 抽屉开关 */
function openIvoDrawer() {
document.getElementById('ivoDrawerMask').classList.add('open');
document.getElementById('ivoDrawer').classList.add('open');
}
function closeIvoDrawer() {
document.getElementById('ivoDrawerMask').classList.remove('open');
document.getElementById('ivoDrawer').classList.remove('open');
}
/* 一键生成采购单 */
function ivoGenPurchase() {
var btn = document.getElementById('ivoBtnPurchase');
var orig = btn.innerHTML;
btn.innerHTML = '<i data-lucide="check" style="width:14px;height:14px;"></i> 已生成 3 条采购建议';
btn.style.borderColor = 'var(--g-success)';
btn.style.color = 'var(--g-success)';
if (typeof lucide !== 'undefined') { lucide.createIcons(); }
setTimeout(function() {
btn.innerHTML = orig;
btn.style.borderColor = '';
btn.style.color = '';
if (typeof lucide !== 'undefined') { lucide.createIcons(); }
}, 2000);
}
/* 初始化图标 */
if (typeof lucide !== 'undefined') { lucide.createIcons(); }
</script>