feat(api): support pagination and keyword search for material base list

This commit is contained in:
DXC
2026-03-24 15:46:14 +08:00
parent b12a91a763
commit 321ef8c7bd

View File

@ -1,4 +1,5 @@
from flask import Blueprint, request, jsonify, current_app
from sqlalchemy import or_
from app.services.bom_service import BomService
from app.models.base import MaterialBase
from app.models.bom import BomTable
@ -312,12 +313,36 @@ def save_bom_legacy():
@jwt_required()
@permission_required('bom_manage')
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]
# 字段级脱敏 (如果需要,但此接口通常用于下拉选择,可能不需要脱敏)
# 保持原样
# 获取分页和搜索参数
page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 20))
keyword = request.args.get('keyword', '').strip()
# 构建查询条件
query = MaterialBase.query.filter_by(is_enabled=True)
# 添加关键字模糊搜索
if keyword:
query = query.filter(
or_(
MaterialBase.name.ilike(f"%{keyword}%"),
MaterialBase.spec.ilike(f"%{keyword}%")
)
)
# 执行分页查询
pagination = query.order_by(MaterialBase.id.desc()).paginate(
page=page, per_page=limit, error_out=False
)
# 构建返回数据
data = {
'list': [item.to_dict() for item in pagination.items],
'total': pagination.total
}
return jsonify({
'code': 200,
'msg': 'success',