fix: 批量操作只使用当前页勾选 (#30)

This commit is contained in:
QiuSW
2026-10-05 18:03:11 +08:00
parent d72490eab3
commit 622473021a
+23 -8
View File
@@ -228,6 +228,10 @@ const rows = ref([])
const total = ref(0)
const loading = ref(false)
const checkedIds = ref([])
const visibleSelectedIDs = computed(() => {
const visible = new Set(rows.value.map((row) => row.id))
return checkedIds.value.filter((id) => visible.has(id))
})
const uploadPreviewNotice = ref(null)
watch(checkedIds, () => { uploadPreviewNotice.value = null })
const searchingProductID = ref('')
@@ -469,12 +473,16 @@ function renderStatus(value, dict) {
}
async function search(resetPage = true) {
if (resetPage) query.value.page = 1
if (resetPage) {
query.value.page = 1
checkedIds.value = []
}
loading.value = true
try {
const page = await ListProducts(query.value)
rows.value = page.items || []
total.value = page.total || 0
checkedIds.value = visibleSelectedIDs.value
await loadVideoSummaries(rows.value)
} catch (err) {
message.error(String(err))
@@ -494,6 +502,12 @@ function changePageSize(size) {
search()
}
function changePage(page) {
query.value.page = page
checkedIds.value = []
search(false)
}
// ---- 操作按钮 ----
async function run(action, fn) {
running.value = action
@@ -541,7 +555,7 @@ const productSyncSummary = computed(() => {
return `${state}:成功 ${result.succeededShops}/${result.totalShops} 个店铺,失败 ${result.failedShops},未处理 ${result.skippedShops},实际保存 ${result.productCount} 条商品`
})
const selectedCount = computed(() => checkedIds.value.length)
const selectedCount = computed(() => visibleSelectedIDs.value.length)
// ---- 批量取视频任务 ----
const emptyTaskProgress = () => ({
@@ -652,13 +666,13 @@ function uploadPreviewErrorCode(err) {
}
async function uploadSelectedVideo() {
if (checkedIds.value.length === 0) {
const selectedIDs = [...visibleSelectedIDs.value]
if (selectedIDs.length === 0) {
message.warning('请先勾选要上传的商品')
return
}
try {
uploadPreviewNotice.value = null
const selectedIDs = [...checkedIds.value]
// 使用 Wails 生成绑定的命名空间访问新方法;审核者生成绑定后即可直接使用。
const preview = await AppBindings.GetUploadPreview(selectedIDs)
dialog.warning({
@@ -670,7 +684,7 @@ async function uploadSelectedVideo() {
` 可上传 ${preview.uploadableCount} 个,共 ${formatFileSize(preview.uploadableSize)}\n`,
` 缺少视频 ${preview.missingCount} 个\n`,
` 视频不合规 ${preview.invalidCount} 个(时长或像素不符合货憨憨要求)\n`,
checkedIds.value.length > 1
selectedIDs.length > 1
? ' 已有视频:执行时逐个检查,已有视频的会跳过\n'
: '',
'视频将通过 erpgo 提交。提交后会查询原操作状态;结果未确认时保持待处理,不会自动重复上传。',
@@ -723,12 +737,13 @@ function stopTaskPolling() {
}
async function startVideoTask() {
if (checkedIds.value.length === 0) {
const selectedIDs = [...visibleSelectedIDs.value]
if (selectedIDs.length === 0) {
message.warning('请先勾选要处理的商品')
return
}
try {
await StartVideoTask([...checkedIds.value])
await StartVideoTask(selectedIDs)
await refreshTaskProgress()
startTaskPolling()
message.info('批量取视频已启动')
@@ -989,7 +1004,7 @@ onUnmounted(() => {
:page-size="query.pageSize"
:page-sizes="[20, 50, 100, 200, 500]"
show-size-picker
@update:page="search(false)"
@update:page="changePage"
@update:page-size="changePageSize"
/>
</div>