feat: fix stocktake deletion bug, and add pagination, search, sorting to stocktake lists

This commit is contained in:
DXC
2026-03-19 16:21:09 +08:00
parent 5510bae3b2
commit 53c198f363
4 changed files with 255 additions and 50 deletions

View File

@ -154,6 +154,23 @@
<!-- 盘点差异审核弹窗 -->
<el-dialog v-model="showReviewDialog" title="盘点差异审核" width="1200px" :close-on-click-modal="false">
<div v-loading="reviewLoading">
<!-- 搜索栏 -->
<div style="margin-bottom: 16px; display: flex; gap: 12px;">
<el-input
v-model="reviewKeyword"
placeholder="搜索 SKU..."
clearable
style="width: 240px"
@keyup.enter="handleReviewSearch"
@clear="handleReviewSearch"
>
<template #prefix>
<el-icon><Search /></el-icon>
</template>
</el-input>
<el-button type="primary" @click="handleReviewSearch">搜索</el-button>
</div>
<el-table :data="reviewList" border stripe ref="reviewTableRef" @selection-change="handleReviewSelectionChange">
<el-table-column type="selection" width="50" />
<el-table-column prop="sku" label="SKU" width="140" />
@ -182,6 +199,20 @@
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<div style="margin-top: 16px; display: flex; justify-content: flex-end;">
<el-pagination
v-model:current-page="reviewPage"
v-model:page-size="reviewLimit"
:page-sizes="[20, 50, 100, 200]"
:total="reviewTotal"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleReviewLimitChange"
@current-change="handleReviewPageChange"
/>
</div>
<div v-if="reviewList.length === 0" style="text-align: center; padding: 40px; color: #909399">
暂无盘点差异记录
</div>
@ -223,6 +254,7 @@
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Search } from '@element-plus/icons-vue'
import { useUserStore } from '@/stores/user'
import request from '@/utils/request'
@ -273,6 +305,10 @@ const selectedStock = ref<any>(null)
const showReviewDialog = ref(false)
const reviewLoading = ref(false)
const reviewList = ref<any[]>([])
const reviewTotal = ref(0)
const reviewPage = ref(1)
const reviewLimit = ref(20)
const reviewKeyword = ref('')
const selectedReviewRows = ref<any[]>([])
const reviewTableRef = ref()
const importLoading = ref(false)
@ -345,7 +381,12 @@ async function fetchReviewList() {
try {
const res = await request({
url: '/v1/stock/adjustment/stocktake-discrepancies',
method: 'get'
method: 'get',
params: {
page: reviewPage.value,
limit: reviewLimit.value,
keyword: reviewKeyword.value
}
})
if (res.code === 200) {
// 为每条记录设置默认原因
@ -353,6 +394,7 @@ async function fetchReviewList() {
...item,
reason: item.remark || '盘点差异导入'
}))
reviewTotal.value = res.data.total || 0
}
} catch (e) {
ElMessage.error('获取盘点差异失败')
@ -361,10 +403,30 @@ async function fetchReviewList() {
}
}
// 搜索 SKU
function handleReviewSearch() {
reviewPage.value = 1
fetchReviewList()
}
// 分页变化
function handleReviewPageChange(page: number) {
reviewPage.value = page
fetchReviewList()
}
function handleReviewLimitChange(limit: number) {
reviewLimit.value = limit
reviewPage.value = 1
fetchReviewList()
}
// 打开审核弹窗
async function openReviewDialog() {
showReviewDialog.value = true
selectedReviewRows.value = []
reviewPage.value = 1
reviewKeyword.value = ''
await fetchReviewList()
}