feat: fix stocktake deletion bug, and add pagination, search, sorting to stocktake lists
This commit is contained in:
@ -50,6 +50,17 @@ try:
|
||||
except ImportError:
|
||||
StockProduct = None
|
||||
|
||||
|
||||
def get_stock_model(source_table):
|
||||
"""根据source_table获取对应的库存模型"""
|
||||
if source_table == 'stock_buy':
|
||||
return StockBuy
|
||||
elif source_table == 'stock_semi':
|
||||
return StockSemi
|
||||
elif source_table == 'stock_product':
|
||||
return StockProduct
|
||||
return None
|
||||
|
||||
from app.services.print.network_print_service import NetworkPrintService
|
||||
|
||||
bp = Blueprint('stock_ops', __name__)
|
||||
@ -145,9 +156,13 @@ def get_all_stock():
|
||||
@permission_required('inventory_stocktake')
|
||||
def get_drafts():
|
||||
"""
|
||||
获取当前用户的盘点进度
|
||||
支持过滤: session_id
|
||||
获取盘点草稿列表
|
||||
支持分页、搜索(SKU)和排序
|
||||
"""
|
||||
# 获取分页参数
|
||||
page = request.args.get('page', 1, type=int)
|
||||
limit = request.args.get('limit', 20, type=int)
|
||||
keyword = request.args.get('keyword', '', type=str)
|
||||
session_id = request.args.get('session_id')
|
||||
|
||||
query = StocktakeDraft.query
|
||||
@ -155,8 +170,58 @@ def get_drafts():
|
||||
if session_id:
|
||||
query = query.filter_by(session_id=session_id)
|
||||
|
||||
drafts = query.order_by(StocktakeDraft.scan_time.desc()).all()
|
||||
return jsonify([d.to_dict() for d in drafts]), 200
|
||||
# 先执行查询获取所有记录
|
||||
drafts = query.all()
|
||||
|
||||
items = []
|
||||
|
||||
for draft in drafts:
|
||||
# 获取 SKU 信息
|
||||
sku = ''
|
||||
material_name = ''
|
||||
spec_model = ''
|
||||
|
||||
# 根据source_table获取对应的库存记录
|
||||
stock_model = get_stock_model(draft.source_table)
|
||||
if stock_model and draft.stock_id:
|
||||
stock = stock_model.query.get(draft.stock_id)
|
||||
if stock:
|
||||
sku = getattr(stock, 'sku', None) or getattr(stock, 'SKU', '')
|
||||
|
||||
# 如果有关键词,进行 SKU 模糊匹配
|
||||
if keyword and sku:
|
||||
if keyword.lower() not in sku.lower():
|
||||
continue
|
||||
|
||||
# 获取物料基础信息
|
||||
base_id = getattr(stock, 'base_id', None)
|
||||
if base_id:
|
||||
material = MaterialBase.query.get(base_id)
|
||||
if material:
|
||||
material_name = material.name
|
||||
spec_model = material.spec_model
|
||||
|
||||
item = draft.to_dict()
|
||||
item['sku'] = sku
|
||||
item['material_name'] = material_name
|
||||
item['spec_model'] = spec_model
|
||||
items.append(item)
|
||||
|
||||
# 按 SKU 升序排序
|
||||
items.sort(key=lambda x: (x['sku'] or '').lower())
|
||||
|
||||
# 手动分页
|
||||
total = len(items)
|
||||
start = (page - 1) * limit
|
||||
end = start + limit
|
||||
paginated_items = items[start:end]
|
||||
|
||||
return jsonify({
|
||||
'items': paginated_items,
|
||||
'total': total,
|
||||
'page': page,
|
||||
'limit': limit
|
||||
}), 200
|
||||
|
||||
|
||||
@bp.route('/draft/add', methods=['POST'])
|
||||
|
||||
Reference in New Issue
Block a user