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 () => { onMounted(async () => {
await checkServerDraft() await checkServerDraft()
}) })
@ -656,8 +637,6 @@ const doStartNewSession = async () => {
// 调用新 API 开始新会话 // 调用新 API 开始新会话
const res: any = await api.startNewSession() const res: any = await api.startNewSession()
currentSessionId.value = res.session_id || '' currentSessionId.value = res.session_id || ''
scannedMap.value.clear()
tableData.value = [] // 清空已扫码列表
isSessionActive.value = true isSessionActive.value = true
// ★ 标记当前阶段为 scanning扫码中 // ★ 标记当前阶段为 scanning扫码中
localStorage.setItem('stocktake_phase', 'scanning') localStorage.setItem('stocktake_phase', 'scanning')
@ -702,21 +681,13 @@ const resumeSession = async () => {
return return
} }
// 恢复已扫描的数据 - 简化为直接激活会话
// 从草稿中获取 session_id // 从草稿中获取 session_id
const sessionIds = [...new Set(drafts.map((d: any) => d.session_id))] const sessionIds = [...new Set(drafts.map((d: any) => d.session_id))]
currentSessionId.value = sessionIds[0] currentSessionId.value = sessionIds[0]
// 恢复已扫描的数据 // 直接恢复会话状态
const map = new Map<string, number>() isSessionActive.value = true
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 = []
// ★ 智能路由:根据本地记忆的阶段决定下一步 // ★ 智能路由:根据本地记忆的阶段决定下一步
const phase = localStorage.getItem('stocktake_phase') const phase = localStorage.getItem('stocktake_phase')
@ -726,7 +697,6 @@ const resumeSession = async () => {
ElMessage.info('已恢复差异审核') ElMessage.info('已恢复差异审核')
} else { } else {
// 默认打开扫码镜头 // 默认打开扫码镜头
isSessionActive.value = true
ElMessage.success('已恢复扫码,继续盘点') ElMessage.success('已恢复扫码,继续盘点')
} }
} catch (e) { } catch (e) {
@ -806,7 +776,7 @@ const onScanSuccess = async (code: string) => {
uuid: foundItem.uuid || foundItem.sku || '', uuid: foundItem.uuid || foundItem.sku || '',
bar_code: foundItem.bar_code || foundItem.barcode || '', bar_code: foundItem.bar_code || foundItem.barcode || '',
qty_stock: stock, qty_stock: stock,
qty_actual: scannedMap.value.get(foundItem.uuid || foundItem.sku) || 0, qty_actual: 1,
scanned: true, scanned: true,
uniqueKey: `${type}_${foundItem.id}`, uniqueKey: `${type}_${foundItem.id}`,
source_table: typeToSourceTable(type), source_table: typeToSourceTable(type),
@ -880,7 +850,7 @@ const handleManualInput = async () => {
uuid: foundItem.uuid || foundItem.sku || '', uuid: foundItem.uuid || foundItem.sku || '',
bar_code: foundItem.bar_code || foundItem.barcode || '', bar_code: foundItem.bar_code || foundItem.barcode || '',
qty_stock: stock, qty_stock: stock,
qty_actual: scannedMap.value.get(foundItem.uuid || foundItem.sku) || 0, qty_actual: 1,
scanned: true, scanned: true,
uniqueKey: `${type}_${foundItem.id}`, uniqueKey: `${type}_${foundItem.id}`,
source_table: typeToSourceTable(type), source_table: typeToSourceTable(type),
@ -912,19 +882,7 @@ const handleManualConfirm = () => {
const val = inputQty.value === undefined ? 0 : inputQty.value const val = inputQty.value === undefined ? 0 : inputQty.value
const remark = inputRemark.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 showQtyDialog.value = false
inputRemark.value = '' inputRemark.value = ''
ElMessage.success(`已记录实盘: ${val}`) ElMessage.success(`已记录实盘: ${val}`)
@ -946,17 +904,9 @@ const syncToBackend = (uuid: string, quantity: number, remark: string) => {
} }
const updateAndSync = async (item: StockItem, quantity: number, remark: string = '') => { const updateAndSync = async (item: StockItem, quantity: number, remark: string = '') => {
// 直接保存到后端,不使用本地缓存
item.scanned = true item.scanned = true
item.qty_actual = quantity 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 = () => { const closeOverlays = () => {
@ -1001,17 +951,17 @@ const exportToExcel = async () => {
} }
const varianceList = computed(() => { const varianceList = computed(() => {
return tableData.value return listData.value
.filter(i => !i.scanned || (i.scanned && i.qty_actual !== parseFloat(i.qty_stock as any))) .filter(i => !i.quantity || i.quantity !== i.stock_quantity)
.map(i => ({ .map(i => ({
...i, ...i,
// 映射字段名以匹配模板 // 映射字段名以匹配模板
stock_name: i.name, stock_name: i.name,
stock_spec: i.standard, stock_spec: i.standard,
stock_location: i.location || i.warehouse_loc || '', stock_location: i.location || i.warehouse_loc || '',
stock_qty: i.qty_stock, stock_qty: i.stock_quantity,
quantity: i.qty_actual, quantity: i.quantity,
diff_qty: i.qty_actual - parseFloat(i.qty_stock as any) diff_qty: i.quantity - i.stock_quantity
})) }))
}) })