fix(pda): discard failed ordinary photo drafts

This commit is contained in:
2026-10-23 02:39:14 +08:00
parent 51109ac852
commit 81f63e5d26
2 changed files with 34 additions and 0 deletions
+4
View File
@@ -1350,6 +1350,10 @@
this.showToast(type === 'SEAL' ? '带锁码照上传成功,封签号已保存' : '照片已上传并保存', 'success')
} catch (error) {
if (!this.isEvidenceContextActive(contextId, identity)) return
if (type !== 'SEAL') {
this.evidenceFiles = { ...this.evidenceFiles, [type]: (this.evidenceFiles[type] || []).filter(photo => photo.id || photo.localPath !== path) }
this.removeDraftPhoto(type, path)
}
entry.status = 'FAILED'; entry.error = this.remoteFailureMessage(error, '照片上传失败,请重新操作')
this.remoteError = entry.error
} finally { if (this.isEvidenceContextActive(contextId, identity)) { this.evidenceUploading = false; this.evidenceQueueItems = this.evidenceQueueItems.map(item => ({ ...item })) } }
+30
View File
@@ -90,3 +90,33 @@ test('photo failure releases the page and another click uploads the current phot
assert.equal(state.evidenceUploading, false); assert.equal(requests[1][3], 'new.jpg'); assert.equal(requests[1][2].sealNo, 'NEW')
assert.notEqual(requests[1][2].operationId, requests[0][2].operationId)
})
test('failed ordinary photo is removed from the visible and restored draft without deleting saved evidence', async () => {
const uploadMethod = page.slice(page.indexOf('async queueEvidenceUpload('), page.indexOf('async saveSealNo('))
const draftMethods = page.slice(page.indexOf('evidenceDraftKey(identity)'), page.indexOf('requireEvidenceCapture() {'))
const behavior = new Function('isRemoteReady', 'uploadEvidenceFile', 'return ({' + draftMethods + uploadMethod + '})')(
() => true, async () => { throw new Error('upload failed') }
)
const saved = { id: 'saved-photo', fileId: 'saved-file', localPath: 'saved.jpg' }
const failed = { localPath: 'failed.jpg', uploadStatus: 'PENDING' }
const seal = { localPath: 'seal.jpg', uploadStatus: 'PENDING' }
const state = {
...behavior, evidenceUploading: false, evidenceReadOnly: false,
evidenceIdentity: { taskId: 'task', warehouseId: 'warehouse' }, evidenceContextId: 1,
evidenceQueueItems: [], evidenceDrafts: {}, sealNo: 'SEAL-A',
evidenceFiles: { PHOTO_STEP_1: [saved, failed], SEAL: [seal] },
validEvidenceEntries: () => [saved], isEvidenceContextActive: () => true,
remoteFailureMessage: error => error.message, showToast() {}
}
state.rememberEvidenceDraft()
await state.queueEvidenceUpload('PHOTO_STEP_1', 'failed.jpg')
assert.deepEqual(state.evidenceFiles.PHOTO_STEP_1, [saved])
assert.equal(state.evidenceUploading, false)
assert.equal(state.remoteError, 'upload failed')
state.restoreEvidenceDraft()
assert.equal(state.evidenceFiles.PHOTO_STEP_1, undefined)
assert.deepEqual(state.evidenceFiles.SEAL, [seal])
await state.queueEvidenceUpload('SEAL', 'seal.jpg', 'SEAL-A')
assert.deepEqual(state.evidenceFiles.SEAL, [seal])
assert.equal(state.evidenceUploading, false)
})