diff --git a/frontend/src/views/Editer/Draft.js b/frontend/src/views/Editer/Draft.js index 1e4b165c..9899f6bb 100644 --- a/frontend/src/views/Editer/Draft.js +++ b/frontend/src/views/Editer/Draft.js @@ -47,10 +47,30 @@ export function useDraft({router, groupStore, ruleForm, valueHtml, fileList, edi }) const isDirty = () => !sent.value && savedSnapshot !== '' && snapshot() !== savedSnapshot + const resetMessage = () => { + draftID.value = 0 + draftVersion.value = '' + replyTo.value = [] + replyEmailID.value = 0 + envelopeSender = null + originalFrom = '' + recipientNames = new Map() + ruleForm.receivers = [] + ruleForm.cc = [] + ruleForm.bcc = [] + ruleForm.subject = '' + valueHtml.value = '


' + fileList.splice(0) + showCcBcc.value = false + sent.value = false + savedSnapshot = '' + } + const loadDraft = async () => { const sequence = ++loadSequence isLoading.value = true loadFailed.value = false + resetMessage() const rawID = route.query.draft const rawReplyID = route.query.reply try { @@ -59,21 +79,6 @@ export function useDraft({router, groupStore, ruleForm, valueHtml, fileList, edi if (disposed || sequence !== loadSequence) return Object.assign(ruleForm, identity) if (rawID === undefined) { - draftID.value = 0 - draftVersion.value = '' - replyTo.value = [] - replyEmailID.value = 0 - envelopeSender = null - originalFrom = '' - recipientNames = new Map() - ruleForm.receivers = [] - ruleForm.cc = [] - ruleForm.bcc = [] - ruleForm.subject = '' - valueHtml.value = '


' - fileList.splice(0) - showCcBcc.value = false - sent.value = false if (rawReplyID !== undefined) { if (typeof rawReplyID !== 'string' || !/^[1-9]\d*$/.test(rawReplyID)) throw new Error(lang.fail) const id = Number(rawReplyID) @@ -126,6 +131,7 @@ export function useDraft({router, groupStore, ruleForm, valueHtml, fileList, edi sent.value = false } catch (error) { if (disposed || sequence !== loadSequence) return + resetMessage() loadFailed.value = true ElMessage.error(error.message || lang.draft_load_failed) } finally { @@ -177,9 +183,9 @@ export function useDraft({router, groupStore, ruleForm, valueHtml, fileList, edi onBeforeRouteUpdate((to, from) => to.query.draft === from.query.draft && to.query.reply === from.query.reply ? true : confirmLeave() ) - watch(() => [route.query.draft, route.query.reply], ([draft, reply], [, previousReply]) => { - if (reply === undefined && String(draft || '') === String(draftID.value || '') && - (draftID.value > 0 || previousReply === undefined)) return + watch(() => [route.query.draft, route.query.reply], ([draft, reply]) => { + if (!loadFailed.value && !isLoading.value && reply === undefined && + draftID.value > 0 && draft === String(draftID.value)) return loadDraft() }) watch([editorRef, isBusy], ([editor, busy]) => {