feat(api): support pagination and keyword search for material base list
This commit is contained in:
@ -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',
|
||||
|
||||
Reference in New Issue
Block a user