From d9a780fa538cb7a83aefa04e75cb53185d690d7d Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期五, 30 五月 2025 16:39:07 +0800
Subject: [PATCH] 微封装

---
 sub-pages/community/index.vue |  130 ++++++++++++++++++++++++++----------------
 1 files changed, 80 insertions(+), 50 deletions(-)

diff --git a/sub-pages/community/index.vue b/sub-pages/community/index.vue
index 51f7dbb..4e4684a 100644
--- a/sub-pages/community/index.vue
+++ b/sub-pages/community/index.vue
@@ -5,7 +5,7 @@
         <up-icon name="list" size="40rpx" color="#333333" @click="onSettingClick" />
         <view>
           <!-- <up-tabs :list="list1"> -->
-          <up-tabs :list="userTabList">
+          <up-tabs v-model:current="parentTabIndex" :list="userTabList" @click="onChangeTab">
             <!-- <template #left>
             <up-icon name="list" size="40rpx" color="#333333" />
           </template> -->
@@ -26,7 +26,7 @@
       </up-tabs>
     </view>
     <view class="content-area">
-      <up-waterfall v-model="flowList">
+      <up-waterfall v-model="films">
         <template #left="{ leftList }">
           <FlowCard v-for="(item, index) in leftList" :key="index" :item="item" @click="handleDetailClick" />
         </template>
@@ -35,8 +35,9 @@
           <FlowCard v-for="(item, index) in rightList" :key="index" :item="item" @click="handleDetailClick" />
         </template>
       </up-waterfall>
+      <up-loadmore :status="filmStatus" :line="true" />
     </view>
-    <!-- <view v-for="(item, index) in 100">safsafda</view> -->
+    <view style="height: 50px; width: 100%;"></view>
     <common-footer flg="0"></common-footer>
     <setting-popup v-model="settingShow" />
   </view>
@@ -49,7 +50,12 @@
 import { FilmTabCategory, FilmWorksCategory } from '@/enums/dict'
 import { useGlobal } from '@/composables/useGlobal'
 const { $http, $message, $store } = useGlobal()
-import { getTabList } from '@/sub-pages/utils/api'
+import { getParentTabList, getTabList, getFilmWorksBase } from '@/sub-pages/utils/api'
+import { FilmWorksQueryDTO } from '@/types/index'
+
+import { useNavigator } from '@/composables/useNavigator'
+const { navigateTo } = useNavigator()
+
 // 控制设置弹窗显示
 const settingShow = ref(false);
 // 方法定义
@@ -63,56 +69,23 @@
 //   { name: '发现' },
 //   { name: '苏州' },
 // ]);
+const parentTabIndex = ref<number>(0)
 const userTabList = ref<FilmCategoryTree[]>([])
 const tabList = ref<FilmCategoryTree[]>([])
 
-const flowList = ref([
-  {
-    id: 1,
-    title: 'iPhone 高清全屏壁纸,划走就后悔',
-    imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
-    username: '草莓喵喵',
-    avatar: '/static/avatar1.jpg',
-    likes: 1397
-  },
-  {
-    id: 2,
-    title: '高清 4K 全屏手机壁纸 #高质量壁纸',
-    imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    username: '4K wallpaper',
-    avatar: '/static/avatar2.jpg',
-    likes: 167
-  },
-  {
-    id: 3,
-    title: 'iPhone 实况动态壁纸 #动态壁纸',
-    imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    username: '图墙精选',
-    avatar: '/static/avatar3.jpg',
-    likes: 980
-  },
-  {
-    id: 4,
-    title: '高清小清新壁纸 浪漫的人都有自己的海',
-    imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
-    username: 'wallpaper',
-    avatar: '/static/avatar4.jpg',
-    likes: 456
-  }
-])
-
-const handleDetailClick = (item: Item) => {
-  const url =
-    item.id === 1
-      ? `/sub-pages/film-list/film-official-detail?id=${item.id}`
-      : `/sub-pages/film-list/film-detail?id=${item.id}`
-  uni.navigateTo({ url })
+const handleDetailClick = (item: FilmCategoryTree) => {
+  const urlOfficicl = `/sub-pages/film-list/film-official-detail?id=${item.id}`;
+  const url = `/sub-pages/film-list/film-detail?id=${item.id}`
+  navigateTo(url)
 }
 
 const toSearchPage = () => {
-  uni.navigateTo({
-    url: '/sub-pages/community/search-page'
-  })
+  const url = `/sub-pages/community/search-page`
+  navigateTo(url)
+}
+
+const onChangeTab = (item: FilmCategoryTree) => {
+  getTabList(item.id, tabList)
 }
 
 const theme = ref('light')
@@ -123,9 +96,65 @@
 
 
 onShow(() => {
-  getTabList(FilmTabCategory.USER_TYPE,userTabList,false)
-  getTabList(FilmTabCategory.FILM_TYPE, tabList)
+  getDefaultTabList()
+  // 获取电影
+  getfilms()
 });
+
+onPullDownRefresh(async () => {
+  console.log('用户下拉刷新了')
+  filmPage.value = 1
+  getfilms()
+  uni.stopPullDownRefresh() // 停止下拉刷新动画
+})
+
+onReachBottom(() => {
+  console.log('用户触底了')
+  getfilms()
+})
+
+const getDefaultTabList = async () => {
+  await getParentTabList(userTabList, false)
+  const curItem = userTabList.value[parentTabIndex.value]
+  getTabList(curItem.id, tabList)
+}
+
+const films = ref<FilmWorks[]>([])
+const filmPage = ref(1)
+const filmSize = 10
+const filmStatus = ref('loading')
+
+const getfilms = async () => {
+  if (filmStatus.value === 'nomore') return
+
+  filmStatus.value = 'loading'
+
+  // TODO 暂时使用光影社区的类别
+  const query: FilmWorksQueryDTO = {
+    classify: '',
+    type: '',
+    current: filmPage.value,
+    size: filmSize,
+  };
+  const records = await getFilmWorksBase(query)
+
+  if (records && records.length > 0) {
+    // 使用 Set 进行去重
+    const existingIds = new Set(films.value.map(item => item.id))
+    const uniqueRecords = records.filter(item => !existingIds.has(item.id))
+
+    films.value = [...films.value, ...uniqueRecords]
+
+    // 如果返回的记录数少于请求的 size,说明没有更多数据
+    if (records.length < filmSize) {
+      filmStatus.value = 'noMore'
+    }
+
+    filmPage.value++
+  } else {
+    filmStatus.value = 'noMore'
+  }
+}
 
 </script>
 <style lang="scss" scoped>
@@ -136,5 +165,6 @@
 
 .content-area {
   // padding: 20rpx;
+  margin-bottom: 100px;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3