refactor: optimize stocktake UI state machine and add confirmation dialogs

This commit is contained in:
DXC
2026-03-13 11:53:11 +08:00
parent 7b709db6af
commit a8f89517e7

View File

@ -25,17 +25,6 @@
> >
继续上次盘点 <span class="sub-text">({{ serverDraftCount }})</span> 继续上次盘点 <span class="sub-text">({{ serverDraftCount }})</span>
</el-button> </el-button>
<!-- 新增: 查看差异报告按钮 -->
<el-button
type="info"
plain
size="large"
class="action-btn-full"
@click="goToVarianceReview"
>
📋 差异审核 <span class="sub-text">(查看历史差异)</span>
</el-button>
</div> </div>
<div class="safe-tip"> <div class="safe-tip">
@ -346,6 +335,10 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<!-- 新增: 补扫入口 -->
<el-button type="primary" plain @click="continueScanning">
📷 发现漏扫继续扫码
</el-button>
<el-button @click="showVarianceDialog = false">关闭</el-button> <el-button @click="showVarianceDialog = false">关闭</el-button>
<el-button type="success" @click="exportToExcel" :icon="Download">导出差异报告</el-button> <el-button type="success" @click="exportToExcel" :icon="Download">导出差异报告</el-button>
</div> </div>
@ -534,7 +527,7 @@ const startNewSession = async () => {
} finally { btnLoading.value = false } } finally { btnLoading.value = false }
} }
// ★ 重写: 继续上次盘点 // ★ 重写: 继续上次盘点 - 直接打开差异列表查看
const resumeSession = async () => { const resumeSession = async () => {
btnLoading.value = true btnLoading.value = true
try { try {
@ -554,17 +547,12 @@ const resumeSession = async () => {
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>() // ★ 修改:直接打开差异列表,而不是继续扫码
drafts.forEach((d: any) => { ElMessage.info('正在加载差异审核...')
if (d.session_id === currentSessionId.value) { showVarianceDialog.value = true
map.set(d.uuid, d.quantity !== undefined ? parseFloat(d.quantity) : 1) await checkServerDraft()
}
})
scannedMap.value = map
await loadData()
isSessionActive.value = true
} catch (e) { } catch (e) {
ElMessage.error('恢复失败') ElMessage.error('加载失败')
} finally { btnLoading.value = false } } finally { btnLoading.value = false }
} }
@ -574,6 +562,13 @@ const pauseSession = () => {
ElMessage.success('进度已保存') ElMessage.success('进度已保存')
} }
// ★ 新增: 补扫功能 - 从差异面板继续扫码
const continueScanning = () => {
showVarianceDialog.value = false
isSessionActive.value = true
ElMessage.info('继续扫码,发现漏扫的物料')
}
// ★★★ 核心修改:数据加载映射修复 ★★★ // ★★★ 核心修改:数据加载映射修复 ★★★
const loadData = async () => { const loadData = async () => {
loading.value = true loading.value = true
@ -866,8 +861,13 @@ const finishStocktake = async () => {
btnLoading.value = false btnLoading.value = false
try { try {
// ★ 简化流程:用户已在按钮点击时确认过,直接执行结束 // ★ 二次确认:防止误触
console.log('--- [结束盘点] 2. 开始执行结束盘点 ---') await ElMessageBox.confirm('确认结束当前扫码作业,开始进行差异审核吗?', '结束盘点确认', {
confirmButtonText: '确定结束',
cancelButtonText: '继续扫码',
type: 'warning'
})
console.log('--- [结束盘点] 2. 用户确认结束盘点 ---')
printing.value = true printing.value = true
console.log('--- [结束盘点] 3. 开始调用 API, session_id:', currentSessionId.value) console.log('--- [结束盘点] 3. 开始调用 API, session_id:', currentSessionId.value)