fix: preserve confirmed followup snapshots and expand flow checks
This commit is contained in:
@@ -204,6 +204,8 @@ function stop() {
|
||||
loading.value = false; uploading.value = false; mutation.value = ''; pollRunning = false
|
||||
}
|
||||
function installDetail(fresh: FollowupTaskDetail, preserve: boolean, preserveRoles = preserve) {
|
||||
// Completed tasks use the server's confirmed snapshot, never an unsaved local draft.
|
||||
preserve = preserve && fresh.status === 'review'
|
||||
const keepRoles = preserveRoles && roleDirty.value && fresh.status === 'review'
|
||||
if (!fresh.audio_available) releaseAudio()
|
||||
if (retainedTranscriptNotice(fresh) && (!detail.value || detail.value.status !== fresh.status || !detail.value.transcript_available)) {
|
||||
@@ -227,7 +229,8 @@ async function readDetail(id: number, preserve = false) {
|
||||
const newlyApplied = detail.value?.status === 'review' && fresh.status === 'applied'
|
||||
installDetail(fresh, preserve)
|
||||
if (newlyApplied && !previewOnly.value) emit('applied', props.diagnosisId)
|
||||
if (preserve) errorMessage.value = '服务端记录或版本已变化;已保留你的字段与日期修改,并取消所有选择。请重新核对当前值后选择采纳。'
|
||||
if (preserve && fresh.status === 'review') errorMessage.value = '服务端记录或版本已变化;已保留你的字段与日期修改,并取消所有选择。请重新核对当前值后选择采纳。'
|
||||
else if (preserve && newlyApplied) errorMessage.value = '任务已由其他人确认,已显示实际写入结果;本页未保存的修改未写入。'
|
||||
}
|
||||
async function refresh() {
|
||||
if (!effectiveActive.value || !props.diagnosisId || pollRunning || busy.value) return
|
||||
|
||||
@@ -1423,3 +1423,22 @@ test('preview upload stops before create when readiness, upload permission or al
|
||||
f.dispose()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
test('dirty draft is replaced by the authoritative applied result from another operator', async () => {
|
||||
let stored = task()
|
||||
const copy = value => JSON.parse(JSON.stringify(value))
|
||||
const f = setupPanel({ followupAudioLists: async () => ({ items: [copy(stored)] }), followupAudioDetail: async () => copy(stored) })
|
||||
await settle(); await f.panel.openTask(1)
|
||||
f.panel.reviewItems.value[0].values.fasting_blood_sugar = 9.9
|
||||
stored = task(1, { status: 'applied', version: 2, items: [item({ values: { fasting_blood_sugar: 6.5 }, selected: true, needs_review: false })] })
|
||||
await f.panel.refresh(); await settle()
|
||||
assert.equal(f.panel.detail.value.status, 'applied')
|
||||
assert.equal(f.panel.reviewItems.value[0].values.fasting_blood_sugar, 6.5)
|
||||
assert.equal(f.panel.reviewItems.value[0].selected, true)
|
||||
assert.equal(f.panel.reviewItems.value[0].needs_review, false)
|
||||
assert.equal(f.panel.dirty.value, false)
|
||||
assert.match(f.panel.errorMessage.value, /未保存.*未写入/)
|
||||
assert.deepEqual(f.events, [['applied', 10]])
|
||||
f.dispose()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user