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 @@ + + + + + + + + +
子件列表
+ + + + + + + + + + + + + + +
+ 添加子件 +
+
+ +
+