Bladeren bron

模糊搜索页面优化

jiayubo 3 maanden geleden
bovenliggende
commit
110ab59184
1 gewijzigde bestanden met toevoegingen van 77 en 48 verwijderingen
  1. 77 48
      pages_home/pages/search/index.vue

+ 77 - 48
pages_home/pages/search/index.vue

@@ -24,7 +24,10 @@
 
     <!-- tab -->
     <view>
-      <up-tabs :list="list2" @change="handleTabChange"></up-tabs>
+      <up-tabs 
+        :list="list2" 
+        @change="handleTabChange">
+      </up-tabs>
     </view>
     <!-- 瀑布流展示区域 -->
     <view class="home-ranking">
@@ -173,32 +176,36 @@ async function handleLoadmore(e) {
  * @param {Object} e - 事件对象,包含选中tab的索引
  */
 const handleTabChange = (e) => {
-  console.log('切换到Tab:', e, '索引:', e.index)
+  // 安全地获取索引
+  const index = typeof e === 'object' && e !== null ? (e.index !== undefined ? e.index : 0) : (typeof e === 'number' ? e : 0);
+  
+  console.log('切换到Tab:', e, '索引:', index)
+  
   // 重置页码
   pages.value.current = 1
   
   // 设置businessManagementId
-  if (e.index === 0) {
+  if (index === 0) {
     // 如果是"全部"选项,设置为0
     pages.value.businessManagementId = 0
-  } else if (e.index > 0 && e.index < list2.length) {
-    const selectedTab = list2[e.index]
+  } else if (index > 0 && index < list2.length) {
+    const selectedTab = list2[index]
     console.log('选中的Tab数据:', selectedTab)
     
     // 从businessManagementId字段获取,其次id字段获取
-    if (selectedTab.businessManagementId !== undefined) {
+    if (selectedTab && selectedTab.businessManagementId !== undefined) {
       pages.value.businessManagementId = selectedTab.businessManagementId
-    } else if (selectedTab.id !== undefined) {
+    } else if (selectedTab && selectedTab.id !== undefined) {
       pages.value.businessManagementId = selectedTab.id
     } else {
       pages.value.businessManagementId = 0
     }
     
     // 如果有children中的id,设置到请求参数中
-    if (selectedTab.children && selectedTab.children.length > 0) {
+    if (selectedTab && selectedTab.children && Array.isArray(selectedTab.children) && selectedTab.children.length > 0) {
       // 查找第一个有id的child
-      const firstChildWithId = selectedTab.children.find(child => child.id !== undefined);
-      if (firstChildWithId && firstChildWithId.id) {
+      const firstChildWithId = selectedTab.children.find(child => child && child.id !== undefined);
+      if (firstChildWithId && firstChildWithId.id !== undefined) {
         console.log('使用children中的ID:', firstChildWithId.id);
         pages.value.businessManagementId = firstChildWithId.id;
       }
@@ -260,51 +267,73 @@ const getList = async () => {
 
     // 调用API获取数据
     const res = await volTierName(params)
-    const res1 = await volBusinessTypeList(paramstyle)
-    
-    // 搜索成功后更新历史记录
-    if (value.value) {
-      getHistoryList() // 刷新历史记录
-    }
     
-    if (res1 && res1.data) {
-      // 打印原始数据以检查id字段
-      console.log('原始API返回的Tabs数据:', JSON.stringify(res1.data))
+    // 如果用户输入了搜索关键词,始终更新标签列表以显示相关标签
+    // 如果没有关键词,且标签列表为空,则获取所有标签
+    if (value.value || list2.length === 0) {
+      const res1 = await volBusinessTypeList(paramstyle)
       
-      // 清空原有数据
-      list2.splice(0, list2.length)
-
-      // 添加全部选项
-      list2.push({
-        name: '全部',
-        value: '0',
-        businessManagementId: 0,
-        id: 0
-      })
-
-      // 转换API返回的数据为up-tabs需要的格式
-      res1.data.forEach(item => {
-        // 检查是否有children数组
-        let childrenIds = [];
-        if (item.children && Array.isArray(item.children)) {
-          // 收集所有children的ID
-          childrenIds = item.children.map(child => child.id).filter(id => id !== undefined);
-          console.log('项目children IDs:', childrenIds);
+      // 搜索成功后更新历史记录
+      if (value.value) {
+        getHistoryList() // 刷新历史记录
+      }
+      
+      if (res1 && res1.data) {
+        // 打印原始数据以检查id字段
+        console.log('原始API返回的Tabs数据:', JSON.stringify(res1.data))
+        
+        // 记住当前选中的标签名称,以便在重新生成列表后恢复选择
+        let selectedTabName = '';
+        if (list2.length > 0 && pages.value && pages.value.businessManagementId !== undefined) {
+          const currentIndex = Math.min(Math.max(0, pages.value.businessManagementId === 0 ? 0 : 1), list2.length - 1);
+          selectedTabName = list2[currentIndex]?.name || '';
         }
         
+        // 清空原有数据
+        list2.splice(0, list2.length)
+
+        // 添加全部选项
         list2.push({
-          name: item.businessTierName,
-          // 尝试获取正确的ID字段 - 优先使用businessManagementId,其次使用id
-          businessManagementId: item.businessManagementId || item.id || 0,
-          id: item.id || item.businessManagementId || 0,
-          // 保存children的id数组
-          childrenIds: childrenIds,
-          // 保存完整的children数据
-          children: item.children || []
+          name: '全部',
+          value: '0',
+          businessManagementId: 0,
+          id: 0
+        })
+
+        // 转换API返回的数据为up-tabs需要的格式
+        res1.data.forEach(item => {
+          // 检查是否有children数组
+          let childrenIds = [];
+          if (item.children && Array.isArray(item.children)) {
+            // 收集所有children的ID
+            childrenIds = item.children.map(child => child.id).filter(id => id !== undefined);
+            console.log('项目children IDs:', childrenIds);
+          }
+          
+          list2.push({
+            name: item.businessTierName,
+            // 尝试获取正确的ID字段 - 优先使用businessManagementId,其次使用id
+            businessManagementId: item.businessManagementId || item.id || 0,
+            id: item.id || item.businessManagementId || 0,
+            // 保存children的id数组
+            childrenIds: childrenIds,
+            // 保存完整的children数据
+            children: item.children || []
+          })
         })
-      })
+        
+        // 尝试恢复选中的标签
+        if (selectedTabName) {
+          // 查找具有相同名称的标签
+          const matchingIndex = list2.findIndex(item => item.name === selectedTabName);
+          if (matchingIndex !== -1 && pages.value) {
+            // 设置businessManagementId为找到的匹配项的ID
+            pages.value.businessManagementId = list2[matchingIndex].businessManagementId || list2[matchingIndex].id || 0;
+          }
+        }
 
-      console.log('转换后的Tabs数据:', JSON.stringify(list2))
+        console.log('转换后的Tabs数据:', JSON.stringify(list2))
+      }
     }
 
     if (!res || !res.rows) {