Bladeren bron

fix: 稳定问题答复列表加载并优化详情页取数

切换到问题答复 tab 时主动初始化第一页并增加分页并发保护,避免首屏不加载和重复数据;同时统一详情页加载入口并在跳转参数中增加时间戳以减少旧数据残留。

Made-with: Cursor
haifeng.zhang 6 dagen geleden
bovenliggende
commit
102dfc6d4d
2 gewijzigde bestanden met toevoegingen van 50 en 19 verwijderingen
  1. 9 3
      src/subPages/pages/reportProblems/detail.vue
  2. 41 16
      src/subPages/pages/reportProblems/index.vue

+ 9 - 3
src/subPages/pages/reportProblems/detail.vue

@@ -36,11 +36,17 @@ const detailRawJson = computed(() => {
   if (!questDetail.value) return '{}'
   return JSON.stringify(questDetail.value, null, 2)
 })
+
+const loadDetail = async (id: string) => {
+  questDetail.value = undefined
+  showRawJsonPopup.value = false
+  const { data } = await getQuestionReportDetail(id)
+  questDetail.value = data
+}
+
 onLoad(async (option) => {
   if (option && option.id) {
-    const { id } = option;
-    const { data } = await getQuestionReportDetail(id);
-    questDetail.value = data;
+    await loadDetail(String(option.id))
   }
 })
 </script>

+ 41 - 16
src/subPages/pages/reportProblems/index.vue

@@ -2,7 +2,7 @@
 import { addQuestionReportData,REPORTDATA, getQuestionTypeList, pageQuestionReportData,getPerson } from '@/api/questionReqort'
 import { AddQuestionReportDataReq, QuestionListRes, QuestionType, QuestionTypeListRes } from '@/api/questionReqort/types'
 import { getCachedWecomVisitorProfile, getWecomInternalUser } from '@/api/wecom'
-import { onMounted, ref } from 'vue'
+import { onMounted, ref, watch } from 'vue'
 import GridAddress from '@/components/address/gridAddress/index.vue'
 import { showNotify } from 'vant'
 import dayjs from 'dayjs';
@@ -216,27 +216,48 @@ const pageInfo = ref({
   pageNumber: 1,
   pageSize: 10,
 })
-const questList = async () => {
-  const { data } = await pageQuestionReportData({
-    pageNumber: pageInfo.value.pageNumber,
-    pageSize: pageInfo.value.pageSize,
-    token: userState.getUserTokenInfo || '',
-  })
-  list.value = list.value.concat(data.records)
-  pageInfo.value.pageNumber++
-  finished.value = data.records.length < pageInfo.value.pageSize
+const loading = ref(false)
+const finished = ref(false)
+const listInitialized = ref(false)
+
+const resetQuestionList = () => {
+  list.value = []
+  pageInfo.value.pageNumber = 1
+  finished.value = false
   loading.value = false
-  if (data.records.length === 0 || !data.records) {
-    finished.value = true
+}
+
+const questList = async () => {
+  if (loading.value || finished.value) return
+
+  loading.value = true
+  try {
+    const currentPage = pageInfo.value.pageNumber
+    const { data } = await pageQuestionReportData({
+      pageNumber: currentPage,
+      pageSize: pageInfo.value.pageSize,
+      token: userState.getUserTokenInfo || '',
+    })
+    const records = data.records || []
+
+    list.value = currentPage === 1 ? records : list.value.concat(records)
+    pageInfo.value.pageNumber = currentPage + 1
+    finished.value = records.length < pageInfo.value.pageSize
+  } finally {
+    loading.value = false
   }
 }
-const loading = ref(false)
-const finished = ref(false)
+
+const initQuestionList = async () => {
+  resetQuestionList()
+  await questList()
+  listInitialized.value = true
+}
 
 /** 跳转问题详情 */
 const handleGoDetail = (item: QuestionListRes) => {
   uni.navigateTo({
-    url: `/subPages/pages/reportProblems/detail?id=${item.uuid}`,
+    url: `/subPages/pages/reportProblems/detail?id=${item.uuid}&t=${Date.now()}`,
   })
 }
 
@@ -277,8 +298,12 @@ onMounted(async () => {
   } else {
     range.value = []
   }
+})
 
-
+watch(active, async (value) => {
+  if (value === 1 && !listInitialized.value) {
+    await initQuestionList()
+  }
 })
 </script>