From 05d1310a6ec27656712c0c5e5e57b3365d3faf56 Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期四, 29 五月 2025 16:54:34 +0800
Subject: [PATCH] api

---
 sub-pages/film-list/film-list.vue |  162 +++++++++++++++++++++++++++++------------------------
 1 files changed, 89 insertions(+), 73 deletions(-)

diff --git a/sub-pages/film-list/film-list.vue b/sub-pages/film-list/film-list.vue
index 957e691..f069e46 100644
--- a/sub-pages/film-list/film-list.vue
+++ b/sub-pages/film-list/film-list.vue
@@ -14,7 +14,7 @@
     </up-tabs>
 
     <view class="list-view">
-      <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>
@@ -22,79 +22,26 @@
           <FlowCard v-for="(item, index) in rightList" :key="index" :item="item" @click="handleDetailClick" />
         </template>
       </up-waterfall>
+      <up-loadmore :status="filmStatus" :line="true" />
     </view>
   </view>
 </template>
 
 <script setup lang="ts">
 import { ref, onMounted } from 'vue'
-import { onLoad } from '@dcloudio/uni-app'
+import { onLoad, onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
+import { FilmCategoryTree,FilmWorks } from '@/types/index'
+import { useGlobal } from '@/composables/useGlobal'
+const { $http, $message, $store } = useGlobal()
+import { FilmTabCategory,FilmWorksCategory } from '@/enums/dict'
+import { useNavigator } from '@/composables/useNavigator'
+const { navigateTo } = useNavigator()
 
-interface Item {
-  id: number
-  title: string
-  imgurl: string
-  username: string
-  avatar: string
-  date: string
-  likes: number
-}
+import { getTabList } from '@/sub-pages/utils/api'
 
 const theme = ref('light')
 const search = ref('')
-const flowList = ref<Item[]>([])
-
-const tabList = ref([
-  { name: '关注' },
-  { name: '推荐' },
-  { name: '电影' },
-  { name: '科技' },
-  { name: '音乐' },
-  { name: '美食' },
-  { name: '文化' },
-  { name: '财经' },
-  { name: '手工' }
-])
-
-const items: Item[] = [
-  {
-    id: 1,
-    title: 'iPhone 高清全屏壁纸,划走就后悔',
-    imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
-    username: '草莓喵喵',
-    avatar: '/static/avatar1.jpg',
-    date: '2024-12-01',
-    likes: 1397
-  },
-  {
-    id: 2,
-    title: '高清 4K 全屏手机壁纸 #高质量壁纸高清 4K 全屏手机壁纸 #高质量壁纸',
-    imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    username: '4K wallpaper',
-    avatar: '/static/avatar2.jpg',
-    date: '02-24',
-    likes: 167
-  },
-  {
-    id: 3,
-    title: 'iPhone 实况动态壁纸 #动态壁纸',
-    imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    username: '图墙精选',
-    avatar: '/static/avatar3.jpg',
-    date: '03-01',
-    likes: 980
-  },
-  {
-    id: 4,
-    title: '高清小清新壁纸 浪漫的人都有自己的海',
-    imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
-    username: 'wallpaper',
-    avatar: '/static/avatar4.jpg',
-    date: '04-10',
-    likes: 456
-  }
-]
-
+const tabList = ref<FilmCategoryTree[]>([])
 const onSearch = (value: string) => {
   uni.showToast({
     title: `搜索:${value}`,
@@ -102,12 +49,10 @@
   })
 }
 
-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 showToast = (msg: string) => {
@@ -119,11 +64,82 @@
   theme.value = storedTheme
 })
 
+
 onMounted(() => {
   flowList.value = items
 })
+
+onShow(() => {
+  // 获取分类
+  getTabList(FilmTabCategory.FILM_TYPE,tabList)
+
+  // 获取电影
+  getfilms()
+
+});
+
+onPullDownRefresh(async () => {
+  console.log('用户下拉刷新了')
+  filmPage.value = 1
+  getfilms()
+  uni.stopPullDownRefresh() // 停止下拉刷新动画
+})
+
+onReachBottom(() => {
+  console.log('用户触底了')
+  getfilms()
+})
+
+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 records = await getFilmWorksBase('', filmSize, filmPage.value)
+
+  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'
+  }
+}
+
+const getFilmWorksBase = async (type: String, pageSize: Number, currentPage: Number) => {
+  const {
+    code, data
+  } = await $http.request('get', '/api/filmWorks/list', {
+    params: {
+      classify: type,
+      size: pageSize,
+      current: currentPage
+    }
+  })
+  if (code == 0) {
+    return data.records
+  } else {
+    $message.showToast('系统异常,无法获取数据')
+    return null;
+  }
+}
+
+
+
 </script>
 
-<style lang="scss" scoped>
-
-</style>
\ No newline at end of file
+<style lang="scss" scoped></style>
\ No newline at end of file

--
Gitblit v1.9.3