From f2876b5a02cc242b9283448b57d5b2c4b83f1bf1 Mon Sep 17 00:00:00 2001
From: star <395723461@qq.com>
Date: Tue, 22 Sep 2026 13:05:20 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BA=93=E5=AD=98=E7=9C=8B=E6=9D=BF=20?=
=?UTF-8?q?BOM=20=E6=A0=87=E7=AD=BE=E9=A1=B5=E6=94=B9=E4=B8=BA=E5=8F=AF?=
=?UTF-8?q?=E4=B8=8B=E6=8B=89=E9=80=89=E6=8B=A9=E6=8C=87=E5=AE=9A=20BOM?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 看板 BOM 物料齐套标签页顶部新增「选择 BOM」下拉框: 默认"全部 BOM(总览)"列出所有 BOM,
选中某棵则只看该 BOM 的组成物料与齐套状态
- 卡片加 data-bid, 切换下拉时纯前端过滤显示; 右侧显示"共 N 棵 / 已选 1/N 棵"计数
- 新增 .bom-filter 样式(下拉框与标签同行, 不撑满整行)
- 教程同步更新 BOM 看板章节
---
static/style.css | 5 +++++
templates/dashboard.html | 29 +++++++++++++++++++++++++++--
物料入库出库系统_使用教程.md | 2 +-
3 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/static/style.css b/static/style.css
index 6935248..1bc67d5 100644
--- a/static/style.css
+++ b/static/style.css
@@ -73,6 +73,11 @@ button:hover, .btn:hover { filter: brightness(.96); }
.card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; font-size: 15px; }
.card-head strong { font-size: 16px; }
+/* BOM 看板: 下拉选择器 */
+.bom-filter { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
+.bom-filter label { margin: 0; white-space: nowrap; }
+.bom-filter select { width: auto; min-width: 260px; }
+
/* 批量导入窗口(模态) */
.modal-mask {
position: fixed; inset: 0; background: rgba(15,23,35,.5);
diff --git a/templates/dashboard.html b/templates/dashboard.html
index 749865b..aed06c9 100644
--- a/templates/dashboard.html
+++ b/templates/dashboard.html
@@ -42,8 +42,19 @@
{% if can_bom %}
+ {% if bom_board %}
+
+
+
+
+
{% for bb in bom_board %}
-
+
{{ bb.b.code }}
{{ bb.b.name or '' }}
@@ -75,9 +86,10 @@
+ {% endfor %}
{% else %}
暂无 BOM,请先到 BOM 页面导入或新建。
- {% endfor %}
+ {% endif %}
{% endif %}
@@ -87,6 +99,19 @@ function showTab(id, btn){
document.getElementById('tab-bom').style.display = id==='bom' ? 'block' : 'none';
document.querySelectorAll('.tabs .tab').forEach(b=>b.classList.remove('active'));
btn.classList.add('active');
+ if(id==='bom') filterBom();
}
+function filterBom(){
+ var sel = document.getElementById('bomSelect');
+ if(!sel) return;
+ var v = sel.value;
+ var cards = document.querySelectorAll('#tab-bom [data-bid]');
+ cards.forEach(function(c){
+ c.style.display = (v==='all' || c.getAttribute('data-bid')===v) ? 'block' : 'none';
+ });
+ var cnt = document.getElementById('bomCount');
+ if(cnt) cnt.textContent = (v==='all') ? ('共 ' + cards.length + ' 棵 BOM') : ('已选 1 / ' + cards.length + ' 棵');
+}
+filterBom();
{% endblock %}
diff --git a/物料入库出库系统_使用教程.md b/物料入库出库系统_使用教程.md
index ee35c4e..09a472c 100644
--- a/物料入库出库系统_使用教程.md
+++ b/物料入库出库系统_使用教程.md
@@ -77,7 +77,7 @@
顶部会汇总「负库存数量」「低于安全库存数量」两个计数,方便快速排查。
-> **BOM 物料齐套标签页**:看板顶部有「📦 库存预警 / 🔧 BOM 物料齐套」两个标签(仅管理员、主管可见)。切到 **BOM 物料齐套** 后,会逐棵 BOM 列出其组成物料的「单套用量 / 当前在库 / 状态」,并在 BOM 标题处给出整体齐套结论(齐套 / 部分偏低 / 缺料)。点物料编号可跳到该料明细。这样不用进 BOM 列表就能在看板上直接看清每棵 BOM 里每颗料的库存情况。
+> **BOM 物料齐套标签页**:看板顶部有「📦 库存预警 / 🔧 BOM 物料齐套」两个标签(仅管理员、主管可见)。切到 **BOM 物料齐套** 后,顶部有一个「选择 BOM」下拉框:默认「全部 BOM(总览)」会逐棵列出其组成物料的「单套用量 / 当前在库 / 状态」;选中某棵 BOM 则只看那棵。右侧显示「共 N 棵 / 已选 1/N 棵」计数。每棵 BOM 标题处给出整体齐套结论(齐套 / 部分偏低 / 缺料),点物料编号可跳到该料明细。这样不用进 BOM 列表就能在看板上直接看清每棵 BOM 里每颗料的库存情况。
---