diff --git a/inventory-backend/app/services/trans_service.py b/inventory-backend/app/services/trans_service.py
index af4096a..4fe7144 100644
--- a/inventory-backend/app/services/trans_service.py
+++ b/inventory-backend/app/services/trans_service.py
@@ -5,7 +5,8 @@ from app.models.transaction import TransBorrow
from app.models.inbound.buy import StockBuy
from app.models.inbound.semi import StockSemi
from app.models.inbound.product import StockProduct
-from sqlalchemy import desc, func, nullslast, asc
+from app.models.base import MaterialBase
+from sqlalchemy import desc, func, nullslast, asc, or_
class TransService:
@@ -189,15 +190,36 @@ class TransService:
@staticmethod
def get_records(page=1, limit=10, status='all', keyword=None):
q = TransBorrow.query
+
+ # 如果有关键词,需要联表搜索物料名称和规格型号
+ if keyword:
+ # 子查询:关联 material_base 表获取物料名称和规格型号
+ material_join = db.session.query(
+ TransBorrow.id
+ ).join(
+ MaterialBase,
+ TransBorrow.sku == MaterialBase.sku
+ ).filter(or_(
+ MaterialBase.name.ilike(f'%{keyword}%'),
+ MaterialBase.spec_model.ilike(f'%{keyword}%')
+ )).subquery()
+
+ # 主搜索条件:借用人、SKU、单号 + 物料名称、规格型号
+ keyword_conditions = or_(
+ TransBorrow.borrower_name.ilike(f'%{keyword}%'),
+ TransBorrow.sku.ilike(f'%{keyword}%'),
+ TransBorrow.borrow_no.ilike(f'%{keyword}%'),
+ TransBorrow.id.in_(material_join) # 匹配物料名称/规格型号的记录
+ )
+ q = q.filter(keyword_conditions)
+
if status == 'borrowed':
q = q.filter(TransBorrow.is_returned == False)
elif status == 'returned':
q = q.filter(TransBorrow.is_returned == True)
- if keyword:
- q = q.filter(TransBorrow.borrower_name.ilike(f'%{keyword}%') |
- TransBorrow.sku.ilike(f'%{keyword}%') |
- TransBorrow.borrow_no.ilike(f'%{keyword}%'))
+ # 使用 distinct 防止跨表查询产生重复记录
+ q = q.distinct()
q = q.order_by(nullslast(asc(TransBorrow.expected_return_time)))
pagination = q.paginate(page=page, per_page=limit, error_out=False)
diff --git a/inventory-web/src/views/outbound/index.vue b/inventory-web/src/views/outbound/index.vue
index 3e3db28..3144366 100644
--- a/inventory-web/src/views/outbound/index.vue
+++ b/inventory-web/src/views/outbound/index.vue
@@ -4,10 +4,11 @@