feat: 重构全局搜索框为复合条件选择,支持按名称、俗名、规格进行精准查杂
This commit is contained in:
@ -240,26 +240,41 @@ class BuyInboundService:
|
||||
# 5. 获取列表 (支持排序和高级筛选)
|
||||
# ============================================================
|
||||
@staticmethod
|
||||
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
|
||||
def get_list(page, limit, keyword=None, sku=None, search_field='all', 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.barcode.ilike(k_str),
|
||||
StockBuy.batch_number.ilike(k_str),
|
||||
StockBuy.serial_number.ilike(k_str),
|
||||
StockBuy.supplier_name.ilike(k_str),
|
||||
StockBuy.buyer_name.ilike(k_str),
|
||||
MaterialBase.name.ilike(k_str),
|
||||
MaterialBase.spec_model.ilike(k_str),
|
||||
MaterialBase.company_name.ilike(k_str), # 关键词也支持搜公司
|
||||
]
|
||||
query = query.filter(or_(*conditions))
|
||||
if search_field == 'name':
|
||||
query = query.filter(MaterialBase.name.ilike(k_str))
|
||||
elif search_field == 'spec':
|
||||
query = query.filter(MaterialBase.spec_model.ilike(k_str))
|
||||
elif search_field == 'common_name':
|
||||
query = query.filter(MaterialBase.common_name.ilike(k_str))
|
||||
elif search_field == 'barcode':
|
||||
query = query.filter(StockBuy.barcode.ilike(k_str))
|
||||
elif search_field == 'batch_number':
|
||||
query = query.filter(StockBuy.batch_number.ilike(k_str))
|
||||
elif search_field == 'supplier_name':
|
||||
query = query.filter(StockBuy.supplier_name.ilike(k_str))
|
||||
elif search_field == 'buyer_name':
|
||||
query = query.filter(StockBuy.buyer_name.ilike(k_str))
|
||||
else: # 'all' 默认全局模糊匹配
|
||||
conditions = [
|
||||
StockBuy.barcode.ilike(k_str),
|
||||
StockBuy.batch_number.ilike(k_str),
|
||||
StockBuy.serial_number.ilike(k_str),
|
||||
StockBuy.supplier_name.ilike(k_str),
|
||||
StockBuy.buyer_name.ilike(k_str),
|
||||
MaterialBase.name.ilike(k_str),
|
||||
MaterialBase.spec_model.ilike(k_str),
|
||||
MaterialBase.company_name.ilike(k_str),
|
||||
]
|
||||
query = query.filter(or_(*conditions))
|
||||
|
||||
# 1.1 SKU 独立搜索
|
||||
if sku and sku.strip():
|
||||
|
||||
Reference in New Issue
Block a user