- 库存看板新增「BOM 物料齐套」标签页(仅 admin/manager), 逐棵 BOM 列出组成物料的 单套用量/当前在库/状态, 并给出整体齐套结论 - BOM 详情页组成物料表新增「当前在库」「状态」两列 - 抽出统一 _status_of() 判定函数, 红/黄/绿逻辑与看板一致 - 新增 tools/verify_bom_board.py 端到端验证脚本(已通过) - 新增使用教程 物料入库出库系统_使用教程.md - .gitignore 忽略 _backup/(旧 EXE 备份)
49 lines
3.5 KiB
HTML
49 lines
3.5 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}BOM 明细 {{ b.code }}{% endblock %}
|
|
{% block content %}
|
|
<div class="toolbar" data-page-node-id="kijLoAphCatqmeteC0fLS8">
|
|
<h3 style="margin:0" data-page-node-id="ECJxkuTNaoeZCptb3hYWET">BOM 明细 · {{ b.code }}
|
|
{% set bstatus = 'danger' if rows|selectattr('status','equalto','danger')|list else ('warn' if rows|selectattr('status','equalto','warn')|list else 'ok') %}
|
|
{% if bstatus=='danger' %}<span class="badge danger">缺料</span>
|
|
{% elif bstatus=='warn' %}<span class="badge warn">部分偏低</span>
|
|
{% else %}<span class="badge ok">齐套</span>{% endif %}
|
|
</h3>
|
|
<div data-page-node-id="W3YF2xKkzcqbLyQSQHmDv9">
|
|
<a class="btn" href="{{ url_for('boms') }}" data-page-node-id="mkt8bYpaiDpnsyNak2CwEx">← 返回 BOM 列表</a>
|
|
<a class="btn" href="{{ url_for('bom_edit', bid=b.id) }}" data-page-node-id="b8G1I4yNJvCie28XRFo93k">编辑</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card" style="margin-bottom:16px" data-page-node-id="BMc2NONnJUN8plt66uKp3k">
|
|
<table class="tbl" style="box-shadow:none" data-page-node-id="HuBqdlqwPqeqvRGoctqyFK">
|
|
<tbody data-page-node-id="xq9k2F2CKZNS1J5oXVzrxN">
|
|
<tr data-page-node-id="CSgYyr7zDavFkvrYRL7J2l"><th style="width:120px" data-page-node-id="YaqRj0xvW6swCf9HolEsdZ">BOM 型号</th><td data-page-node-id="W3h0NKaeFcWnSk6bqpmnfd">{{ b.code }}</td>
|
|
<th style="width:120px" data-page-node-id="GrBiPbEdCAMAtba0DGidm8">名称</th><td data-page-node-id="t0dNbwOJnGYpyrvlMpJzHS">{{ b.name or '-' }}</td></tr>
|
|
<tr data-page-node-id="xnlzfzKyPIY29LTkzF5Exj"><th data-page-node-id="loONdVka6TX9pWPbpWr85x">备注</th><td colspan="3" data-page-node-id="vOtWTckSv3MzklsdnlC0FE">{{ b.note or '-' }}</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<h3 data-page-node-id="t3eVJx5yZD6C7dR2AhvvI1">组成物料(物料编号 / 规格型号 / 单套用量 / 当前在库 / 状态)</h3>
|
|
<table class="tbl" data-page-node-id="df7zG7vdcHnmIIpkdv6sIX">
|
|
<thead data-page-node-id="U5mUzLwlJBjGq8lEuFm0Yp"><tr data-page-node-id="B10e5ndG2Fo8DbA4uD8s5e"><th data-page-node-id="clptv2dGFiVnRCTmGNcxGx">#</th><th data-page-node-id="FrYt8QMtBKNICWDU3FNTwu">物料编号</th><th data-page-node-id="WHXRD4OE5syF9gB7S9xUtN">型号 / 规格</th><th data-page-node-id="SF4qN0XEJENLIO6zMz4Rqj">单位</th><th data-page-node-id="5IfMfV4HQupPKakWftwag4">单套用量</th><th>当前在库</th><th>状态</th></tr></thead>
|
|
<tbody data-page-node-id="JBr6qsb25DZ6OzSa4g7USe">
|
|
{% for r in rows %}
|
|
<tr class="row-{{ r.status }}" data-page-node-id="IM9jYB1JuNEMAWNi8ehaaZ">
|
|
<td class="num" data-page-node-id="8ad0FCRnUybzeEWz8FbALx">{{ loop.index }}</td>
|
|
<td data-page-node-id="gbLKKUuIavKSsnyYDv5tXm"><a href="{{ url_for('material_detail', mid=r.m.id) }}" data-page-node-id="m53G2ARWr2Udxdxlffdd1l">{{ r.m.part_number }}</a></td>
|
|
<td data-page-node-id="vIrrECfeuKSVoBo8MG4qw8">{{ r.m.manufacturer or '-' }}</td>
|
|
<td data-page-node-id="LdQUt8z687YhTj9wNbXNLp">{{ r.m.unit }}</td>
|
|
<td class="num" data-page-node-id="m2vUEqKxHfCxdgKNKdrMZS">{{ '%.4g'|format(r.qty) }}</td>
|
|
<td class="num">{{ '%.2f'|format(r.stock) }}</td>
|
|
<td>{% if r.status=='danger' %}<span class="badge danger">缺料</span>
|
|
{% elif r.status=='warn' %}<span class="badge warn">偏低</span>
|
|
{% else %}<span class="badge ok">正常</span>{% endif %}</td>
|
|
</tr>
|
|
{% else %}
|
|
<tr data-page-node-id="HRMX6kXmTYyKrAC01CI6EK"><td colspan="7" class="muted" data-page-node-id="G4RCcAkiwklmllhidB6cEW">该 BOM 还没有组成物料</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% endblock %}
|