fix: 修复帮助内容加载、搜索滚动和账户同步的问题
- 完善帮助内容接口的响应校验,增加数据格式和范围验证 - 优化搜索页面的滚动位置管理,避免H5页面激活时的组件重建问题 - 增加账户切换时的定时器清理,防止内存泄漏和重复请求
This commit is contained in:
@@ -82,7 +82,8 @@
|
||||
const targetId = ref(''); const targetItem = ref<FeedbackItem | null>(null); const targetLoading = ref(false); const targetError = ref('')
|
||||
let detailRequest = 0
|
||||
let visible = false; let generation = 0; let faqRequest = 0; let listRequest = 0; let page = 0
|
||||
let owner = ''
|
||||
let owner = ''; let accountTimer = 0
|
||||
function stopAccountTimer() { if (accountTimer != 0) { clearInterval(accountTimer); accountTimer = 0 } }
|
||||
const groups = computed((): HelpGroup[] => {
|
||||
const results: HelpGroup[] = []
|
||||
helpCategories.forEach((category: string) => {
|
||||
@@ -122,8 +123,10 @@
|
||||
if (!visible || ticket != generation) return false
|
||||
const sessionToken = getSession()?.getString('token') ?? ''
|
||||
if (sessionToken == token) return true
|
||||
generation++; clearFeedback(); targetId.value = ''; owner = sessionToken; loggedIn.value = owner.length > 0
|
||||
if (loggedIn.value) { restorePending(); reloadAfterAccountChange() }
|
||||
generation++; faqRequest++; loading.value = false; errorMessage.value = ''; expanded.value = ''
|
||||
clearFeedback(); targetId.value = ''; owner = sessionToken; loggedIn.value = owner.length > 0
|
||||
if (loggedIn.value) restorePending()
|
||||
reloadAfterAccountChange()
|
||||
return false
|
||||
}
|
||||
reconcileAccount = () => { current(generation, owner) }
|
||||
@@ -143,10 +146,12 @@
|
||||
}
|
||||
const load = async () => {
|
||||
if (!visible || loading.value) return
|
||||
const account = generation; const token = owner
|
||||
if (!current(account, token)) return
|
||||
const ticket = ++faqRequest
|
||||
loading.value = true; errorMessage.value = ''
|
||||
try { const items = await fetchHelpQuestions(); if (visible && ticket == faqRequest) questions.value = items }
|
||||
catch (_error) { if (visible && ticket == faqRequest) errorMessage.value = '暂时无法加载帮助内容,请稍后重试' }
|
||||
loading.value = true; errorMessage.value = ''; questions.value = []; expanded.value = ''
|
||||
try { const items = await fetchHelpQuestions(); if (current(account, token) && ticket == faqRequest) questions.value = items }
|
||||
catch (_error) { if (current(account, token) && ticket == faqRequest) errorMessage.value = '暂时无法加载帮助内容,请稍后重试' }
|
||||
finally { if (ticket == faqRequest) loading.value = false }
|
||||
}
|
||||
async function loadFeedback(append: boolean) {
|
||||
@@ -170,9 +175,11 @@
|
||||
} finally { if (ticket == generation && request == listRequest) { feedbackLoading.value = false; loadingMore.value = false } }
|
||||
}
|
||||
function reloadFeedback() { loadFeedback(false) }
|
||||
reloadAfterAccountChange = () => { reloadTarget(); reloadFeedback() }
|
||||
reloadAfterAccountChange = () => { load(); if (tab.value == 'feedback') { reloadTarget(); reloadFeedback() } }
|
||||
const loadMore = () => { loadFeedback(true) }
|
||||
const changeTab = (value: string) => {
|
||||
if (!visible) return
|
||||
reconcileAccount()
|
||||
tab.value = value
|
||||
if (value == 'feedback') { reloadTarget(); reloadFeedback() } else if (questions.value.length == 0) load()
|
||||
}
|
||||
@@ -226,9 +233,10 @@
|
||||
visible = true; generation++; const token = getSession()?.getString('token') ?? ''
|
||||
if (token != owner) { if (owner.length > 0) targetId.value = ''; clearFeedback() }
|
||||
owner = token; loggedIn.value = token.length > 0; restorePending(); load(); if (tab.value == 'feedback') { reloadTarget(); reloadFeedback() }
|
||||
stopAccountTimer(); accountTimer = setInterval(() => { reconcileAccount() }, 1000)
|
||||
})
|
||||
onHide(() => { visible = false; generation++; faqRequest++; listRequest++; detailRequest++; targetItem.value = null; targetLoading.value = false; targetError.value = ''; loading.value = false; feedbackLoading.value = false; loadingMore.value = false; sending.value = false; records.value = [] })
|
||||
onUnload(() => { visible = false; generation++; faqRequest++; clearFeedback() })
|
||||
onHide(() => { visible = false; stopAccountTimer(); generation++; faqRequest++; listRequest++; detailRequest++; targetItem.value = null; targetLoading.value = false; targetError.value = ''; loading.value = false; feedbackLoading.value = false; loadingMore.value = false; sending.value = false; records.value = [] })
|
||||
onUnload(() => { visible = false; stopAccountTimer(); generation++; faqRequest++; clearFeedback() })
|
||||
</script>
|
||||
<style>
|
||||
.help-body { overflow: hidden; }
|
||||
|
||||
Reference in New Issue
Block a user