fix: add missing imports for openpyxl and patch draft resolution in stock adjustment

This commit is contained in:
DXC
2026-03-18 13:24:16 +08:00
parent 49a66f9be3
commit e08012d9dd
2 changed files with 34 additions and 10 deletions

View File

@ -14,6 +14,17 @@ from app.models.inbound.stocktake import StocktakeDraft
from app.models.transaction import TransBorrow from app.models.transaction import TransBorrow
from app.models.base import MaterialBase from app.models.base import MaterialBase
# 尝试导入半成品和成品
try:
from app.models.inbound.semi import StockSemi
except ImportError:
StockSemi = None
try:
from app.models.inbound.product import StockProduct
except ImportError:
StockProduct = None
def _normalize_user_id(user_id): def _normalize_user_id(user_id):
"""规范化 user_id确保是有效字符串""" """规范化 user_id确保是有效字符串"""
@ -356,17 +367,22 @@ def adjust_stock():
""" """
data = request.json data = request.json
draft_id = data.get('draft_id') draft_id = data.get('draft_id')
stock_id = data.get('stock_id') # 备用参数:通过 stock_id 查找草稿
operator_name = data.get('operator_name', 'System') operator_name = data.get('operator_name', 'System')
remark = data.get('remark', '') remark = data.get('remark', '')
if not draft_id: if not draft_id and not stock_id:
return jsonify({"message": "draft_id 不能为空"}), 400 return jsonify({"message": "draft_id 或 stock_id 不能同时为空"}), 400
try: try:
# 1. 获取草稿记录 # 1. 获取草稿记录(优先用 draft_id否则用 stock_id
draft = StocktakeDraft.query.get(draft_id) draft = StocktakeDraft.query.get(draft_id) if draft_id else None
if not draft and stock_id:
# 尝试通过 stock_id 查找未处理的草稿
draft = StocktakeDraft.query.filter_by(stock_id=stock_id).first()
if not draft: if not draft:
return jsonify({"message": "草稿记录不存在"}), 404 return jsonify({"message": f"平账失败找不到对应的盘点草稿记录draft_id={draft_id}, stock_id={stock_id}"}), 404
# 2. 获取库存记录 # 2. 获取库存记录
if not draft.stock_id or not draft.source_table: if not draft.stock_id or not draft.source_table:

View File

@ -448,10 +448,15 @@ const api = {
params: {} params: {}
}), }),
// ★ 新增: 单条库存调整 // ★ 新增: 单条库存调整
adjustStock: (draftId: number, remark: string) => request({ adjustStock: (draftId: number, stockId: number, remark: string) => request({
url: '/v1/inbound/stock/adjust', url: '/v1/inbound/stock/adjust',
method: 'post', method: 'post',
data: { draft_id: draftId, operator_name: currentUser, remark: remark } data: {
draft_id: draftId,
stock_id: stockId, // 备用参数
operator_name: currentUser,
remark: remark
}
}), }),
// ★ 保留清除功能(用于兼容性) // ★ 保留清除功能(用于兼容性)
clearDraft: () => request({ clearDraft: () => request({
@ -755,7 +760,10 @@ const exportToExcel = async () => {
const res: any = await request({ const res: any = await request({
url: '/v1/inbound/stock/export-stocktake', url: '/v1/inbound/stock/export-stocktake',
method: 'get', method: 'get',
responseType: 'blob' as any // 核心:接收二进制文件流 responseType: 'blob' as any, // 核心:接收二进制文件流
headers: {
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
}); });
// 触发静默下载 // 触发静默下载
@ -886,7 +894,7 @@ const handleAdjust = async (row: any) => {
const remark = `盘点差异调整 - ${row.diff_qty > 0 ? '盘盈入库' : '盘亏出库'}` const remark = `盘点差异调整 - ${row.diff_qty > 0 ? '盘盈入库' : '盘亏出库'}`
const res: any = await api.adjustStock(row.id, remark) const res: any = await api.adjustStock(row.id, row.stock_id, remark)
ElMessage.success(res.message || '调整成功') ElMessage.success(res.message || '调整成功')