优化
This commit is contained in:
@@ -344,7 +344,7 @@
|
||||
import { navigateBackOr } from '@/utils/navigation.js'
|
||||
import { startScanBroadcast } from '@/utils/scan-broadcast.js'
|
||||
import { playErrorSound, playSuccessSound } from '@/utils/audio-feedback.js'
|
||||
import { claimContainerPickingTask, completeLoading, completePicking, EVIDENCE_SLOTS, getContainerPickingTask, getEvidence, getPickingInventorySnapshot, getPickingTask, isRemoteReady, normalizePickingTask, submitContainerPickingBatch, uploadEvidenceFile, upsertEvidence, voidEvidence } from '@/api/pda-loading.js'
|
||||
import { claimContainerPickingTask, completeLoading, completePicking, downloadEvidencePreview, EVIDENCE_SLOTS, getContainerPickingTask, getEvidence, getEvidencePreviewUrl, getPickingInventorySnapshot, getPickingTask, isRemoteReady, normalizePickingTask, submitContainerPickingBatch, uploadEvidenceFile, upsertEvidence, voidEvidence } from '@/api/pda-loading.js'
|
||||
import { createEvidenceUploadQueue } from '@/utils/evidence-upload-queue.js'
|
||||
import { isOnline } from '@/utils/network.js'
|
||||
import { stableOperationId } from '@/utils/idempotency.js'
|
||||
@@ -795,7 +795,7 @@
|
||||
this.pickScannedBox(result.item, value)
|
||||
},
|
||||
evidenceEntries(type) { return Array.isArray(this.evidenceFiles[type]) ? this.evidenceFiles[type].filter((item) => item.status !== 'VOID' && item.status !== 'VOIDED') : (this.evidenceFiles[type] ? [this.evidenceFiles[type]] : []) },
|
||||
evidencePreviewSource(photo) { return photo?.localPath || photo?.previewUrl || photo?.fileUrl || photo?.downloadUrl || photo?.url || '' },
|
||||
evidencePreviewSource(photo) { return photo?.localPath || photo?.fileUrl || photo?.downloadUrl || photo?.url || '' },
|
||||
evidencePreviewCacheKey(fileId, identity = this.evidenceIdentity) { return `${this.evidenceDraftKey(identity)}|${String(fileId || '')}` },
|
||||
cacheEvidencePreview(fileId, localPath, identity = this.evidenceIdentity) {
|
||||
if (!fileId || !localPath) return
|
||||
@@ -927,16 +927,44 @@
|
||||
try {
|
||||
const evidence = await getEvidence(identity.inboundId, this.currentBox.tenantId)
|
||||
if (!this.isEvidenceContextActive(contextId, identity)) return
|
||||
const remoteItems = this.evidenceItems(evidence).map((item) => ({
|
||||
...item,
|
||||
previewUrl: item.previewUrl || getEvidencePreviewUrl(identity.inboundId, item.id, this.currentBox.tenantId)
|
||||
}))
|
||||
this.debugEvidence('list.loaded', { evidenceIdentity: identity, count: remoteItems.length, previewCount: remoteItems.filter((item) => item.previewUrl).length })
|
||||
const localFiles = Object.fromEntries(Object.entries(this.evidenceFiles).map(([type, entries]) => [type, (Array.isArray(entries) ? entries : [entries]).filter((entry) => entry && !entry.id && entry.localPath)]))
|
||||
this.evidenceFiles = this.evidenceItems(evidence).map((item) => this.withCachedEvidencePreview(item, identity)).reduce((all, item) => { (all[item.evidenceType] ||= []).push(item); return all }, localFiles)
|
||||
this.evidenceFiles = remoteItems.map((item) => this.withCachedEvidencePreview(item, identity)).reduce((all, item) => { (all[item.evidenceType] ||= []).push(item); return all }, localFiles)
|
||||
const seal = this.evidenceEntry('SEAL')
|
||||
if (seal?.sealNo) this.sealNo = seal.sealNo
|
||||
await this.loadEvidencePreviews(contextId, identity)
|
||||
if (!this.isEvidenceContextActive(contextId, identity)) return
|
||||
await this.flushPendingEvidence()
|
||||
} catch (error) {
|
||||
if (!this.isEvidenceContextActive(contextId, identity)) return
|
||||
this.remoteError = error.network ? '网络失败,装柜证据未加载,请刷新重试' : (error.message || '装柜证据加载失败')
|
||||
}
|
||||
},
|
||||
async loadEvidencePreviews(contextId, identity) {
|
||||
const pending = this.evidenceSlots.flatMap((slot) => this.evidenceEntries(slot.type)
|
||||
.filter((item) => !this.evidencePreviewSource(item) && item.previewUrl)
|
||||
.map((item) => ({ type: slot.type, id: item.id, fileId: item.fileId, previewUrl: item.previewUrl })))
|
||||
const loaded = await Promise.all(pending.map(async (item) => {
|
||||
try {
|
||||
const localPath = await downloadEvidencePreview(item.previewUrl)
|
||||
this.debugEvidence('preview.downloaded', { evidenceType: item.type, fileId: item.fileId, hasLocalPath: Boolean(localPath) })
|
||||
return { ...item, localPath }
|
||||
} catch (error) {
|
||||
this.debugEvidence('preview.download-error', { evidenceType: item.type, fileId: item.fileId, message: error?.message || '', statusCode: error?.statusCode || '', contentType: error?.contentType || '', requestId: error?.requestId || '', traceId: error?.traceId || '' })
|
||||
return null
|
||||
}
|
||||
}))
|
||||
if (!this.isEvidenceContextActive(contextId, identity)) return
|
||||
loaded.filter(Boolean).forEach((item) => this.cacheEvidencePreview(item.fileId, item.localPath, identity))
|
||||
this.evidenceFiles = Object.fromEntries(Object.entries(this.evidenceFiles).map(([type, entries]) => [type, entries.map((entry) => {
|
||||
const preview = loaded.find((item) => item && item.type === type && item.id === entry.id && item.fileId === entry.fileId)
|
||||
return preview ? { ...entry, localPath: preview.localPath } : entry
|
||||
})]))
|
||||
},
|
||||
async refreshTask() {
|
||||
if (!this.currentBox.boxNo) return
|
||||
this.persistSession()
|
||||
|
||||
Reference in New Issue
Block a user