Compare commits
5 Commits
332f928c78
...
6dc1d69d7d
| Author | SHA1 | Date | |
|---|---|---|---|
| 6dc1d69d7d | |||
| a8f89517e7 | |||
| 7b709db6af | |||
| 5212b98fc1 | |||
| 72d5a594cf |
@ -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="returnToScan">
|
||||||
|
🔄 返回继续扫码
|
||||||
|
</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>
|
||||||
@ -503,11 +496,11 @@ onMounted(async () => {
|
|||||||
|
|
||||||
const checkServerDraft = async () => {
|
const checkServerDraft = async () => {
|
||||||
try {
|
try {
|
||||||
// 只获取未完成的草稿数量
|
// 获取草稿数量(后端已移除 is_finished 字段,直接返回所有记录)
|
||||||
const res: any = await request({
|
const res: any = await request({
|
||||||
url: '/v1/inbound/stock/draft/list',
|
url: '/v1/inbound/stock/draft/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { is_finished: 'false' }
|
params: {}
|
||||||
})
|
})
|
||||||
serverDraftCount.value = (res && res.length) || 0
|
serverDraftCount.value = (res && res.length) || 0
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
@ -534,15 +527,15 @@ 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 {
|
||||||
// 获取最新的未完成会话
|
// 获取最新的会话(后端已移除 is_finished 字段)
|
||||||
const drafts: any = await request({
|
const drafts: any = await request({
|
||||||
url: '/v1/inbound/stock/draft/list',
|
url: '/v1/inbound/stock/draft/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { is_finished: 'false' }
|
params: {}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (!drafts || drafts.length === 0) {
|
if (!drafts || drafts.length === 0) {
|
||||||
@ -554,6 +547,7 @@ 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>()
|
const map = new Map<string, number>()
|
||||||
drafts.forEach((d: any) => {
|
drafts.forEach((d: any) => {
|
||||||
if (d.session_id === currentSessionId.value) {
|
if (d.session_id === currentSessionId.value) {
|
||||||
@ -561,8 +555,13 @@ const resumeSession = async () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
scannedMap.value = map
|
scannedMap.value = map
|
||||||
|
|
||||||
|
// 加载完整库存数据
|
||||||
await loadData()
|
await loadData()
|
||||||
|
|
||||||
|
// ★ 恢复扫码作业
|
||||||
isSessionActive.value = true
|
isSessionActive.value = true
|
||||||
|
ElMessage.success('已恢复扫码,继续盘点')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ElMessage.error('恢复失败')
|
ElMessage.error('恢复失败')
|
||||||
} finally { btnLoading.value = false }
|
} finally { btnLoading.value = false }
|
||||||
@ -574,6 +573,13 @@ const pauseSession = () => {
|
|||||||
ElMessage.success('进度已保存')
|
ElMessage.success('进度已保存')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ★ 后悔药:从差异面板返回继续扫码
|
||||||
|
const returnToScan = () => {
|
||||||
|
showVarianceDialog.value = false
|
||||||
|
isSessionActive.value = true
|
||||||
|
ElMessage.info('继续扫码,发现漏扫的物料')
|
||||||
|
}
|
||||||
|
|
||||||
// ★★★ 核心修改:数据加载映射修复 ★★★
|
// ★★★ 核心修改:数据加载映射修复 ★★★
|
||||||
const loadData = async () => {
|
const loadData = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
@ -843,36 +849,50 @@ const varianceList = computed(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const openInventoryList = () => { showList.value = true }
|
const openInventoryList = () => { showList.value = true }
|
||||||
|
|
||||||
|
// ★ 修改:结束盘点按钮直接调用 finishStocktake,跳过二次确认弹窗
|
||||||
const openFinishDialog = () => {
|
const openFinishDialog = () => {
|
||||||
if (stats.value.total === 0) return
|
if (stats.value.total === 0) {
|
||||||
showFinishDialog.value = true
|
ElMessage.warning('暂无盘点数据')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 直接执行结束盘点流程
|
||||||
|
finishStocktake()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ★ 重写: 结束盘点 - 纯前端状态流转,不再调用后端
|
||||||
const finishStocktake = async () => {
|
const finishStocktake = async () => {
|
||||||
try {
|
try {
|
||||||
await ElMessageBox.confirm('确定要结束本次盘点吗?结束后将进入差异审核流程。', '结束确认', {
|
// ★ 二次确认:防止误触
|
||||||
type: 'warning', confirmButtonText: '确定结束', cancelButtonText: '取消'
|
await ElMessageBox.confirm(
|
||||||
})
|
'确认仓库已全部盘点完毕,结束当前扫码并开始核对差异吗?',
|
||||||
|
'结束盘点确认',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定结束',
|
||||||
|
cancelButtonText: '继续扫码',
|
||||||
|
type: 'warning'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
printing.value = true
|
// 用户确认后,执行 UI 状态流转
|
||||||
|
btnLoading.value = true
|
||||||
|
await checkServerDraft() // 确保最新数据
|
||||||
|
|
||||||
// ★ 修改: 调用结束盘点 API,不再删除草稿
|
isSessionActive.value = false // 收起扫码面板
|
||||||
const res: any = await api.finishStocktake()
|
|
||||||
|
|
||||||
// 结束会话
|
|
||||||
scannedMap.value.clear()
|
|
||||||
isSessionActive.value = false
|
|
||||||
showFinishDialog.value = false
|
showFinishDialog.value = false
|
||||||
checkServerDraft()
|
|
||||||
|
|
||||||
ElMessage.success('盘点已结束,请查看差异报告进行审核')
|
ElMessage.success('盘点扫描结束,请核对差异')
|
||||||
|
await openVarianceDialog() // 自动弹出差异审核列表
|
||||||
// ★ 新增: 自动打开差异审核对话框
|
|
||||||
await openVarianceDialog()
|
|
||||||
|
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
if (e !== 'cancel') ElMessage.error(e?.message || '操作失败')
|
if (e === 'cancel' || e === 'close' || String(e).includes('cancel')) {
|
||||||
} finally { printing.value = false }
|
// 用户取消,停留在扫码界面继续盘点
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ElMessage.error(e?.message || '操作失败')
|
||||||
|
} finally {
|
||||||
|
btnLoading.value = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ★ 新增: 打开差异审核对话框
|
// ★ 新增: 打开差异审核对话框
|
||||||
|
|||||||
Reference in New Issue
Block a user