|
8 | 8 | :activeKey="activeKey" |
9 | 9 | :filters="props.classList?.filters || {}" |
10 | 10 | :selectedFilters="selectedFilters" |
| 11 | + :specialCategoryState="props.specialCategoryState" |
11 | 12 | @tab-change="handleTabChange" |
12 | 13 | @open-category-modal="openCategoryModal" |
13 | 14 | @toggle-filter="handleToggleFilter" |
14 | 15 | @reset-filters="handleResetFilters" |
| 16 | + @close-special-category="() => emit('close-special-category')" |
15 | 17 | /> |
16 | 18 |
|
17 | 19 | <!-- 内容区域 --> |
18 | 20 | <div class="content-area"> |
| 21 | + <!-- 特殊分类内容 --> |
| 22 | + <div v-if="specialCategoryState.isActive" class="tab-content"> |
| 23 | + <VideoGrid |
| 24 | + :videos="listData[specialCategoryState.categoryData?.type_id] || []" |
| 25 | + :loading="loadingMore[specialCategoryState.categoryData?.type_id] || false" |
| 26 | + :hasMore="pageData[specialCategoryState.categoryData?.type_id]?.hasNext || false" |
| 27 | + :statsText="`${specialCategoryState.categoryData?.type_name || '特殊分类'}:共 ${listData[specialCategoryState.categoryData?.type_id]?.length || 0} 条`" |
| 28 | + :sourceRoute="props.sourceRoute" |
| 29 | + :module="props.module" |
| 30 | + :extend="props.extend" |
| 31 | + :api-url="props.apiUrl" |
| 32 | + @load-more="loadMoreData(specialCategoryState.categoryData?.type_id)" |
| 33 | + @scroll-bottom="loadMoreData(specialCategoryState.categoryData?.type_id)" |
| 34 | + @refresh-list="handleRefreshList" |
| 35 | + @special-action="(actionType, actionData) => emit('special-action', actionType, actionData)" |
| 36 | + /> |
| 37 | + </div> |
| 38 | + |
19 | 39 | <!-- 推荐分类内容 --> |
20 | | - <div v-if="activeKey === 'recommendTuijian404'" class="tab-content"> |
| 40 | + <div v-else-if="activeKey === 'recommendTuijian404'" class="tab-content"> |
21 | 41 | <VideoGrid |
22 | 42 | :videos="listData[activeKey] || []" |
23 | 43 | :loading="loadingMore[activeKey] || false" |
|
28 | 48 | :extend="props.extend" |
29 | 49 | :api-url="props.apiUrl" |
30 | 50 | @refresh-list="handleRefreshList" |
| 51 | + @special-action="(actionType, actionData) => emit('special-action', actionType, actionData)" |
31 | 52 | /> |
32 | 53 | </div> |
33 | 54 |
|
|
46 | 67 | @load-more="loadMoreData(activeKey)" |
47 | 68 | @scroll-bottom="loadMoreData(activeKey)" |
48 | 69 | @refresh-list="handleRefreshList" |
| 70 | + @special-action="(actionType, actionData) => emit('special-action', actionType, actionData)" |
49 | 71 | /> |
50 | 72 | </div> |
51 | 73 | </div> |
@@ -103,10 +125,20 @@ const props = defineProps({ |
103 | 125 | apiUrl: { |
104 | 126 | type: String, |
105 | 127 | default: '' |
| 128 | + }, |
| 129 | + // 特殊分类状态 |
| 130 | + specialCategoryState: { |
| 131 | + type: Object, |
| 132 | + default: () => ({ |
| 133 | + isActive: false, |
| 134 | + categoryData: null, |
| 135 | + originalClassList: null, |
| 136 | + originalRecommendVideos: null |
| 137 | + }) |
106 | 138 | } |
107 | 139 | }); |
108 | 140 |
|
109 | | -const emit = defineEmits(['activeKeyChange']); |
| 141 | +const emit = defineEmits(['activeKeyChange', 'special-action', 'close-special-category']); |
110 | 142 |
|
111 | 143 | // 使用翻页统计store |
112 | 144 | const paginationStore = usePaginationStore(); |
@@ -471,6 +503,29 @@ defineExpose({ |
471 | 503 | // 重新加载数据 |
472 | 504 | getListData(activeKey.value); |
473 | 505 | } |
| 506 | + }, |
| 507 | + setSpecialCategoryData: (categoryId, videos, pagination) => { |
| 508 | + console.log('设置特殊分类数据:', { categoryId, videosCount: videos?.length, pagination }); |
| 509 | + |
| 510 | + // 直接设置特殊分类的数据 |
| 511 | + listData[categoryId] = videos || []; |
| 512 | + pageData[categoryId] = { |
| 513 | + page: pagination?.page || 1, |
| 514 | + hasNext: pagination?.hasNext || false, |
| 515 | + total: pagination?.total || 0 |
| 516 | + }; |
| 517 | + loadingMore[categoryId] = false; |
| 518 | + |
| 519 | + // 更新全局翻页统计信息 |
| 520 | + setTimeout(() => { |
| 521 | + paginationStore.updateStats(getStatsText(categoryId)); |
| 522 | + }, 100); |
| 523 | + |
| 524 | + console.log('特殊分类数据设置完成:', { |
| 525 | + categoryId, |
| 526 | + videosCount: listData[categoryId]?.length || 0, |
| 527 | + pageInfo: pageData[categoryId] |
| 528 | + }); |
474 | 529 | } |
475 | 530 | }); |
476 | 531 |
|
|
0 commit comments