fix: 修复帮助内容加载、搜索滚动和账户同步的问题
- 完善帮助内容接口的响应校验,增加数据格式和范围验证 - 优化搜索页面的滚动位置管理,避免H5页面激活时的组件重建问题 - 增加账户切换时的定时器清理,防止内存泄漏和重复请求
This commit is contained in:
@@ -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)
|
||||
// 输入、切换分类或退出页面后,忽略旧请求,避免结果被覆盖。
|
||||
|
||||
Reference in New Issue
Block a user