feat: 采购/半成品/成品列表拆分SKU独立搜索框

This commit is contained in:
DXC
2026-03-09 17:29:24 +08:00
parent 646baa08fe
commit 5d813c24bc
9 changed files with 74 additions and 19 deletions

View File

@ -240,17 +240,16 @@ class BuyInboundService:
# 5. 获取列表 (支持排序和高级筛选)
# ============================================================
@staticmethod
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
order_by='', is_asc='', advanced_filters=None):
try:
from sqlalchemy import and_, or_
query = db.session.query(StockBuy).outerjoin(MaterialBase, StockBuy.base_id == MaterialBase.id)
# 1. 通用关键词搜索
# 1. 通用关键词搜索(名称、规格、公司)
if keyword:
k_str = f'%{keyword.strip()}%'
conditions = [
StockBuy.sku.ilike(k_str),
StockBuy.barcode.ilike(k_str),
StockBuy.batch_number.ilike(k_str),
StockBuy.serial_number.ilike(k_str),
@ -262,6 +261,11 @@ class BuyInboundService:
]
query = query.filter(or_(*conditions))
# 1.1 SKU 独立搜索
if sku and sku.strip():
sku_str = f'%{sku.strip()}%'
query = query.filter(StockBuy.sku.ilike(sku_str))
# 2. 类别独立搜索
if category and category.strip():
query = query.filter(MaterialBase.category == category.strip())

View File

@ -270,11 +270,12 @@ class ProductInboundService:
return []
@staticmethod
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
order_by_column=None, is_asc=None, advanced_filters=None):
from app.models.inbound.product import StockProduct
try:
query = db.session.query(StockProduct).outerjoin(MaterialBase, StockProduct.base_id == MaterialBase.id)
# 1. 通用关键词搜索(名称、规格、公司)
if keyword:
kw = f'%{keyword}%'
query = query.filter(or_(
@ -283,9 +284,12 @@ class ProductInboundService:
MaterialBase.company_name.ilike(kw),
StockProduct.serial_number.ilike(kw),
StockProduct.work_order_code.ilike(kw),
StockProduct.order_id.ilike(kw),
StockProduct.sku.ilike(kw)
StockProduct.order_id.ilike(kw)
))
# 1.1 SKU 独立搜索
if sku and sku.strip():
sku_str = f'%{sku.strip()}%'
query = query.filter(StockProduct.sku.ilike(sku_str))
if category and category.strip():
query = query.filter(MaterialBase.category == category.strip())
if material_type and material_type.strip():

View File

@ -359,11 +359,12 @@ class SemiInboundService:
return []
@staticmethod
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
order_by_column=None, is_asc=None, advanced_filters=None):
from app.models.inbound.semi import StockSemi
try:
query = db.session.query(StockSemi).outerjoin(MaterialBase, StockSemi.base_id == MaterialBase.id)
# 1. 通用关键词搜索(名称、规格、公司)
if keyword:
kw = f'%{keyword}%'
query = query.filter(
@ -373,11 +374,14 @@ class SemiInboundService:
MaterialBase.company_name.ilike(kw),
StockSemi.batch_number.ilike(kw),
StockSemi.serial_number.ilike(kw),
StockSemi.sku.ilike(kw),
StockSemi.work_order_code.ilike(kw),
StockSemi.bom_code.ilike(kw)
)
)
# 1.1 SKU 独立搜索
if sku and sku.strip():
sku_str = f'%{sku.strip()}%'
query = query.filter(StockSemi.sku.ilike(sku_str))
if category and category.strip():
query = query.filter(MaterialBase.category == category.strip())
if material_type and material_type.strip():