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 flask import Blueprint, request, jsonify, current_app
|
||||||
|
from sqlalchemy import or_
|
||||||
from app.services.bom_service import BomService
|
from app.services.bom_service import BomService
|
||||||
from app.models.base import MaterialBase
|
from app.models.base import MaterialBase
|
||||||
from app.models.bom import BomTable
|
from app.models.bom import BomTable
|
||||||
@ -312,12 +313,36 @@ def save_bom_legacy():
|
|||||||
@jwt_required()
|
@jwt_required()
|
||||||
@permission_required('bom_manage')
|
@permission_required('bom_manage')
|
||||||
def get_material_base_list():
|
def get_material_base_list():
|
||||||
"""获取所有基础物料列表,用于前端下拉框"""
|
"""获取基础物料列表,支持分页和关键字搜索,用于前端下拉框"""
|
||||||
try:
|
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({
|
return jsonify({
|
||||||
'code': 200,
|
'code': 200,
|
||||||
'msg': 'success',
|
'msg': 'success',
|
||||||
|
|||||||
Reference in New Issue
Block a user