diff --git a/inventory-backend/app/api/v1/inbound/product.py b/inventory-backend/app/api/v1/inbound/product.py index 86f59d4..4a99dea 100644 --- a/inventory-backend/app/api/v1/inbound/product.py +++ b/inventory-backend/app/api/v1/inbound/product.py @@ -60,7 +60,8 @@ def search_base(): def search_bom(): try: keyword = request.args.get('keyword', '') - data = ProductInboundService.search_bom_options(keyword) + parent_spec = request.args.get('parent_spec', None) + data = ProductInboundService.search_bom_options(keyword, parent_spec=parent_spec) return jsonify({"code": 200, "msg": "success", "data": data}) except Exception as e: traceback.print_exc() diff --git a/inventory-backend/app/api/v1/inbound/semi.py b/inventory-backend/app/api/v1/inbound/semi.py index 6d1b42b..f310d38 100644 --- a/inventory-backend/app/api/v1/inbound/semi.py +++ b/inventory-backend/app/api/v1/inbound/semi.py @@ -60,7 +60,8 @@ def search_base(): def search_bom(): try: keyword = request.args.get('keyword', '') - data = SemiInboundService.search_bom_options(keyword) + parent_spec = request.args.get('parent_spec', None) + data = SemiInboundService.search_bom_options(keyword, parent_spec=parent_spec) return jsonify({"code": 200, "msg": "success", "data": data}) except Exception as e: traceback.print_exc() diff --git a/inventory-backend/app/services/inbound/product_service.py b/inventory-backend/app/services/inbound/product_service.py index fe5dddf..ac47faf 100644 --- a/inventory-backend/app/services/inbound/product_service.py +++ b/inventory-backend/app/services/inbound/product_service.py @@ -66,7 +66,7 @@ class ProductInboundService: return {"items": [], "total": 0, "page": 1, "has_next": False} @staticmethod - def search_bom_options(keyword): + def search_bom_options(keyword, parent_spec=None): from app.models.bom import BomTable try: query = db.session.query( @@ -79,6 +79,9 @@ class ProductInboundService: if hasattr(BomTable, 'is_enabled'): query = query.filter(BomTable.is_enabled == True) + if parent_spec: + query = query.filter(MaterialBase.spec_model == parent_spec) + if keyword: kw = f'%{keyword}%' query = query.filter( diff --git a/inventory-backend/app/services/inbound/semi_service.py b/inventory-backend/app/services/inbound/semi_service.py index 03b6ec5..1a6dc6b 100644 --- a/inventory-backend/app/services/inbound/semi_service.py +++ b/inventory-backend/app/services/inbound/semi_service.py @@ -71,7 +71,7 @@ class SemiInboundService: return {"items": [], "total": 0, "page": 1, "has_next": False} @staticmethod - def search_bom_options(keyword): + def search_bom_options(keyword, parent_spec=None): from app.models.bom import BomTable try: query = db.session.query( @@ -84,6 +84,9 @@ class SemiInboundService: if hasattr(BomTable, 'is_enabled'): query = query.filter(BomTable.is_enabled == True) + if parent_spec: + query = query.filter(MaterialBase.spec_model == parent_spec) + if keyword: kw = f'%{keyword}%' query = query.filter( diff --git a/inventory-web/src/api/inbound/product.ts b/inventory-web/src/api/inbound/product.ts index c65f671..73b602a 100644 --- a/inventory-web/src/api/inbound/product.ts +++ b/inventory-web/src/api/inbound/product.ts @@ -43,11 +43,11 @@ export function searchMaterialBase(keyword: string, page: number = 1) { } // 搜索BOM -export function searchBom(keyword: string) { +export function searchBom(keyword: string, parent_spec?: string) { return request({ url: '/inbound/product/search-bom', method: 'get', - params: { keyword } + params: { keyword, parent_spec } }) } diff --git a/inventory-web/src/api/inbound/semi.ts b/inventory-web/src/api/inbound/semi.ts index b3964d3..061130f 100644 --- a/inventory-web/src/api/inbound/semi.ts +++ b/inventory-web/src/api/inbound/semi.ts @@ -45,11 +45,11 @@ export function searchMaterialBase(keyword: string, page: number = 1) { } // 5.5 搜索BOM (新增) -export function searchBom(keyword: string) { +export function searchBom(keyword: string, parent_spec?: string) { return request({ url: '/inbound/semi/search-bom', method: 'get', - params: { keyword } + params: { keyword, parent_spec } }) } diff --git a/inventory-web/src/views/stock/inbound/product.vue b/inventory-web/src/views/stock/inbound/product.vue index eee85d4..fa6e193 100644 --- a/inventory-web/src/views/stock/inbound/product.vue +++ b/inventory-web/src/views/stock/inbound/product.vue @@ -461,7 +461,8 @@ filterable remote clearable - placeholder="搜规格/编号" + :disabled="!form.spec_model" + :placeholder="!form.spec_model ? '请先在上方选择入库物料' : '搜规格/编号'" :remote-method="handleSearchBom" :loading="bomSearchLoading" @change="handleBomSelect" @@ -544,10 +545,10 @@ - + Preview Image - + - +
Label Preview @@ -957,7 +958,7 @@ const form = reactive({ const handleSearchBom = async (query: string) => { bomSearchLoading.value = true try { - const res: any = await searchBom(query) + const res: any = await searchBom(query, form.spec_model) bomOptions.value = res.data || [] } finally { bomSearchLoading.value = false } } @@ -1108,6 +1109,10 @@ const onMaterialSelected = async (val: number) => { form.material_type = item.type form.category = item.category form.unit = item.unit + // 切换物料时清空已选 BOM,防止脏数据 + form.bom_code = '' + form.bom_version = '' + bomOptions.value = [] // 获取该物料历史入库库位(新增独立接口) try { diff --git a/inventory-web/src/views/stock/inbound/semi.vue b/inventory-web/src/views/stock/inbound/semi.vue index 1d6948d..51a6942 100644 --- a/inventory-web/src/views/stock/inbound/semi.vue +++ b/inventory-web/src/views/stock/inbound/semi.vue @@ -526,7 +526,8 @@ filterable remote clearable - placeholder="搜规格/编号" + :disabled="!form.spec_model" + :placeholder="!form.spec_model ? '请先在上方选择入库物料' : '搜规格/编号'" :remote-method="handleSearchBom" :loading="bomSearchLoading" @change="handleBomSelect" @@ -603,15 +604,15 @@ - Preview Image - + Preview Image + - +
Label Preview @@ -1004,7 +1005,7 @@ watch( const handleSearchBom = async (query: string) => { bomSearchLoading.value = true try { - const res: any = await searchBom(query) + const res: any = await searchBom(query, form.spec_model) bomOptions.value = res.data || [] } finally { bomSearchLoading.value = false } } @@ -1102,6 +1103,10 @@ const onMaterialSelected = async (val: number) => { form.category = item.category form.unit = item.unit form.material_type = item.type + // 切换物料时清空已选 BOM,防止脏数据 + form.bom_code = '' + form.bom_version = '' + bomOptions.value = [] checkHistoryAndSetMode(item.id) // 获取该物料历史入库库位(新增独立接口)