fix: 修复帮助内容加载、搜索滚动和账户同步的问题

- 完善帮助内容接口的响应校验,增加数据格式和范围验证
- 优化搜索页面的滚动位置管理,避免H5页面激活时的组件重建问题
- 增加账户切换时的定时器清理,防止内存泄漏和重复请求
This commit is contained in:
hujun
2026-10-08 17:43:53 +08:00
parent 71b3c25695
commit 25cb06b71c
9 changed files with 1317 additions and 39 deletions
+9 -4
View File
@@ -12,7 +12,7 @@
<view class="search-tabs">
<view v-for="item in tabs" :key="item.id" :class="activeType == item.id ? 'search-tab selected-tab' : 'search-tab'" @click="selectType(item.id)"><text :class="activeType == item.id ? 'tab-label selected-label' : 'tab-label'">{{ item.label }}</text></view>
</view>
<scroll-view scroll-y :key="listVersion" :style="contentStyle(296, false)">
<scroll-view scroll-y :scroll-top="scrollTop" :style="contentStyle(296, false)">
<view class="search-content" :style="bottomStyle(40)">
<view v-if="!searched" class="search-guide">
<text class="guide-title">想了解什么?</text><text class="guide-copy">查找融资资讯,学习实用知识</text>
@@ -50,12 +50,17 @@
const loading = ref(false)
const errorMessage = ref('')
const results = ref<ContentSearchResult[]>([])
const listVersion = ref(0)
const scrollTop = ref(0)
const total = ref(0); const hasMore = ref(false); const loadingMore = ref(false); const moreError = ref('')
let page = 1
let requestVersion = 0
let visible = false
const resetResults = () => { requestVersion++; results.value = []; total.value = 0; hasMore.value = false; loadingMore.value = false; moreError.value = ''; searched.value = false; loading.value = false; errorMessage.value = ''; listVersion.value++ }
const resetScroll = () => {
// 保留滚动组件,避免H5返回页激活时重建导致框架读取空引用。
scrollTop.value = 1
nextTick(() => { scrollTop.value = 0 })
}
const resetResults = () => { requestVersion++; results.value = []; total.value = 0; hasMore.value = false; loadingMore.value = false; moreError.value = ''; searched.value = false; loading.value = false; errorMessage.value = ''; resetScroll() }
const clearSearch = () => { keyword.value = ''; resetResults() }
async function load(append: boolean) {
if (!visible) return
@@ -65,7 +70,7 @@
uni.hideKeyboard()
const currentRequest = append ? requestVersion : ++requestVersion
if (append) { loadingMore.value = true; moreError.value = '' }
else { searched.value = true; loading.value = true; loadingMore.value = false; errorMessage.value = ''; moreError.value = ''; results.value = []; total.value = 0; hasMore.value = false; page = 1; listVersion.value++ }
else { searched.value = true; loading.value = true; loadingMore.value = false; errorMessage.value = ''; moreError.value = ''; results.value = []; total.value = 0; hasMore.value = false; page = 1; resetScroll() }
try {
const result = await searchContent(keyword.value, activeType.value, append ? page + 1 : 1)
// 输入、切换分类或退出页面后,忽略旧请求,避免结果被覆盖。