fix(stocktake): remove undeclared scannedMap and legacy cache references causing ReferenceError

This commit is contained in:
DXC
2026-03-26 17:58:18 +08:00
parent 8135a222f0
commit f6b055d9c4

View File

@ -593,25 +593,6 @@ const typeToSourceTable = (type: string): string => {
}
}
async function fetchBorrowedQuantities(items: StockItem[]): Promise<void> {
const payload = items.filter(i => i.source_table && i.stock_id).map(i => ({
source_table: i.source_table,
stock_id: i.stock_id
}))
if (payload.length === 0) return
try {
const res = await request({
url: '/v1/inbound/stock/borrowed-quantities',
method: 'post',
data: { items: payload }
})
// res is map of key->qty
borrowedQuantities.value = { ...borrowedQuantities.value, ...res }
} catch (e) {
console.error('获取借出数量失败', e)
}
}
onMounted(async () => {
await checkServerDraft()
})
@ -656,8 +637,6 @@ const doStartNewSession = async () => {
// 调用新 API 开始新会话
const res: any = await api.startNewSession()
currentSessionId.value = res.session_id || ''
scannedMap.value.clear()
tableData.value = [] // 清空已扫码列表
isSessionActive.value = true
// ★ 标记当前阶段为 scanning扫码中
localStorage.setItem('stocktake_phase', 'scanning')
@ -702,21 +681,13 @@ const resumeSession = async () => {
return
}
// 恢复已扫描的数据 - 简化为直接激活会话
// 从草稿中获取 session_id
const sessionIds = [...new Set(drafts.map((d: any) => d.session_id))]
currentSessionId.value = sessionIds[0]
// 恢复已扫描的数据
const map = new Map<string, number>()
drafts.forEach((d: any) => {
if (d.session_id === currentSessionId.value) {
map.set(d.uuid, d.quantity !== undefined ? parseFloat(d.quantity) : 1)
}
})
scannedMap.value = map
// 清空本地列表,用户扫码时会实时添加
tableData.value = []
// 直接恢复会话状态
isSessionActive.value = true
// ★ 智能路由:根据本地记忆的阶段决定下一步
const phase = localStorage.getItem('stocktake_phase')
@ -726,7 +697,6 @@ const resumeSession = async () => {
ElMessage.info('已恢复差异审核')
} else {
// 默认打开扫码镜头
isSessionActive.value = true
ElMessage.success('已恢复扫码,继续盘点')
}
} catch (e) {
@ -806,7 +776,7 @@ const onScanSuccess = async (code: string) => {
uuid: foundItem.uuid || foundItem.sku || '',
bar_code: foundItem.bar_code || foundItem.barcode || '',
qty_stock: stock,
qty_actual: scannedMap.value.get(foundItem.uuid || foundItem.sku) || 0,
qty_actual: 1,
scanned: true,
uniqueKey: `${type}_${foundItem.id}`,
source_table: typeToSourceTable(type),
@ -880,7 +850,7 @@ const handleManualInput = async () => {
uuid: foundItem.uuid || foundItem.sku || '',
bar_code: foundItem.bar_code || foundItem.barcode || '',
qty_stock: stock,
qty_actual: scannedMap.value.get(foundItem.uuid || foundItem.sku) || 0,
qty_actual: 1,
scanned: true,
uniqueKey: `${type}_${foundItem.id}`,
source_table: typeToSourceTable(type),
@ -912,19 +882,7 @@ const handleManualConfirm = () => {
const val = inputQty.value === undefined ? 0 : inputQty.value
const remark = inputRemark.value
// ★★★ 更新已扫码物料列表 ★★★
currentItem.value.scanned = true
currentItem.value.qty_actual = val
scannedMap.value.set(currentItem.value.uuid, val)
// 检查是否已存在于 tableData如果存在则更新否则添加
const existingIndex = tableData.value.findIndex(i => i.uuid === currentItem.value!.uuid)
if (existingIndex >= 0) {
tableData.value[existingIndex] = { ...currentItem.value }
} else {
tableData.value.push({ ...currentItem.value })
}
// ★★★ 直接保存到后端,不使用本地缓存 ★★★
showQtyDialog.value = false
inputRemark.value = ''
ElMessage.success(`已记录实盘: ${val}`)
@ -946,17 +904,9 @@ const syncToBackend = (uuid: string, quantity: number, remark: string) => {
}
const updateAndSync = async (item: StockItem, quantity: number, remark: string = '') => {
// 直接保存到后端,不使用本地缓存
item.scanned = true
item.qty_actual = quantity
scannedMap.value.set(item.uuid, quantity)
// 更新 tableData
const existingIndex = tableData.value.findIndex(i => i.uuid === item.uuid)
if (existingIndex >= 0) {
tableData.value[existingIndex] = { ...item }
} else {
tableData.value.push({ ...item })
}
}
const closeOverlays = () => {
@ -1001,17 +951,17 @@ const exportToExcel = async () => {
}
const varianceList = computed(() => {
return tableData.value
.filter(i => !i.scanned || (i.scanned && i.qty_actual !== parseFloat(i.qty_stock as any)))
return listData.value
.filter(i => !i.quantity || i.quantity !== i.stock_quantity)
.map(i => ({
...i,
// 映射字段名以匹配模板
stock_name: i.name,
stock_spec: i.standard,
stock_location: i.location || i.warehouse_loc || '',
stock_qty: i.qty_stock,
quantity: i.qty_actual,
diff_qty: i.qty_actual - parseFloat(i.qty_stock as any)
stock_qty: i.stock_quantity,
quantity: i.quantity,
diff_qty: i.quantity - i.stock_quantity
}))
})