diff --git a/inventory-backend/app/api/v1/bom.py b/inventory-backend/app/api/v1/bom.py
index 068224a..ee84db5 100644
--- a/inventory-backend/app/api/v1/bom.py
+++ b/inventory-backend/app/api/v1/bom.py
@@ -1,5 +1,6 @@
from flask import Blueprint, request, jsonify, current_app
from app.services.bom_service import BomService
+from app.models.base import MaterialBase
from flask_jwt_extended import jwt_required
bom_bp = Blueprint('bom', __name__)
@@ -35,3 +36,19 @@ def save_bom():
except Exception as e:
current_app.logger.error(f'保存BOM失败: {str(e)}')
return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
+
+@bom_bp.route('/base/list', methods=['GET'])
+@jwt_required()
+def get_material_base_list():
+ """获取所有基础物料列表,用于前端下拉框"""
+ try:
+ materials = MaterialBase.query.filter_by(is_enabled=True).order_by(MaterialBase.id.desc()).all()
+ data = [item.to_dict() for item in materials]
+ return jsonify({
+ 'code': 200,
+ 'msg': 'success',
+ 'data': data
+ })
+ except Exception as e:
+ current_app.logger.error(f'获取基础物料列表失败: {str(e)}')
+ return jsonify({'code': 500, 'msg': '内部服务器错误'}), 500
diff --git a/inventory-backend/app/services/bom_service.py b/inventory-backend/app/services/bom_service.py
index f1e762f..13798a3 100644
--- a/inventory-backend/app/services/bom_service.py
+++ b/inventory-backend/app/services/bom_service.py
@@ -9,7 +9,7 @@ class BomService:
def create_or_update_bom(parent_id, child_list):
"""
保存/更新父件的BOM子件关系
- child_list: [{"child_id": int, "dosage": float, "remark": str}, ...]
+ child_list: [{"child_id": int, "dosage": float, "loss_rate": float, "remark": str}, ...]
"""
# 删除该父件原有的BOM记录
BomTable.query.filter_by(parent_id=parent_id).delete()
@@ -19,6 +19,7 @@ class BomService:
parent_id=parent_id,
child_id=item['child_id'],
dosage=item.get('dosage', 0),
+ loss_rate=item.get('loss_rate', 0),
remark=item.get('remark', '')
)
db.session.add(bom)
diff --git a/inventory-web/src/api/inbound/stock.ts b/inventory-web/src/api/inbound/stock.ts
index f44ee35..9bd18a5 100644
--- a/inventory-web/src/api/inbound/stock.ts
+++ b/inventory-web/src/api/inbound/stock.ts
@@ -28,4 +28,22 @@ export function printStocktakeReport(data: any) {
method: 'post',
data
})
-}
\ No newline at end of file
+}
+
+// 保存 BOM 结构
+export function saveBom(data: { parent_id: number; children: any[] }) {
+ return request({
+ url: '/v1/bom',
+ method: 'post',
+ data
+ })
+}
+
+// 获取基础物料列表
+export function getMaterialBaseList(params?: any) {
+ return request({
+ url: '/v1/bom/base/list',
+ method: 'get',
+ params
+ })
+}
diff --git a/inventory-web/src/views/outbound/Selection.vue b/inventory-web/src/views/outbound/Selection.vue
index d1ddcf6..b006df3 100644
--- a/inventory-web/src/views/outbound/Selection.vue
+++ b/inventory-web/src/views/outbound/Selection.vue
@@ -113,13 +113,68 @@
+
+
+
+
+
+
+
+
+ 子件列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 添加子件
+
+
+
+
+
+
+