fix: 批量操作只使用当前页勾选 (#30)
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user