From d3d0b4dbb4f1f8c4784c834e0a39feba8aa5afa5 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期三, 02 七月 2025 10:41:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- pages/video/home-page.vue | 126 ++++++++++++++++++++++++++++++++++++++--- 1 files changed, 116 insertions(+), 10 deletions(-) diff --git a/pages/video/home-page.vue b/pages/video/home-page.vue index 4aebb07..b9a7b49 100644 --- a/pages/video/home-page.vue +++ b/pages/video/home-page.vue @@ -52,11 +52,18 @@ </view> <view class="tab-item" - :class="{active: currentTab === 'likes'}" - @click="switchTab('likes')" + :class="{active: currentTab === 'collect'}" + @click="switchTab('collect')" > - 鍠滄 + 鏀惰棌 </view> + <view + class="tab-item" + :class="{active: currentTab === 'likes'}" + @click="switchTab('likes')" + > + 鍠滄 + </view> </view> <!-- 瑙嗛鍒楄〃 --> @@ -88,13 +95,33 @@ </view> </view> </scroll-view> - <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'likes' && collectVideoList.length > 0"> + <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'collect' && collectVideoList.length > 0"> <view class="video-container"> <view class="video-item" v-for="(item, index) in collectVideoList" :key="item.id" @click="playCollectVideo(index)" + > + <image class="video-cover" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image> + <view class="video-info"> + <view class="video-stats"> + <view class="stat"> + <uni-icons type="heart" size="16" color="#fff"></uni-icons> + <text>{{item.collectNum}}</text> + </view> + </view> + </view> + </view> + </view> + </scroll-view> + <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'likes' && likeVideoList.length > 0"> + <view class="video-container"> + <view + class="video-item" + v-for="(item, index) in likeVideoList" + :key="item.id" + @click="playLikeVideo(index)" > <image class="video-cover" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image> <view class="video-info"> @@ -115,7 +142,12 @@ <text class="empty-text">杩樻湭鍙戝竷浣滃搧鍝</text> </view> <!-- 绌虹姸鎬� --> - <view class="empty-state" v-if="collectVideoList.length === 0 && currentTab === 'likes'"> + <view class="empty-state" v-if="collectVideoList.length === 0 && currentTab === 'collect'"> + <!-- <image src="/static/images/empty.png" mode="aspectFit" class="empty-image"></image> --> + <text class="empty-text">杩樻病鏈夋敹钘忎綔鍝佸摝~</text> + </view> + <!-- 绌虹姸鎬� --> + <view class="empty-state" v-if="likeVideoList.length === 0 && currentTab === 'likes'"> <!-- <image src="/static/images/empty.png" mode="aspectFit" class="empty-image"></image> --> <text class="empty-text">杩樻病鏈夌偣璧炰綔鍝佸摝~</text> </view> @@ -137,7 +169,7 @@ <script> import DropdownMenu from '@/components/dropdown-menu.vue' -import {getAuthorInfo, getAuthorVideoPage, getAuthorCollectVideoPage} from '@/api/user.js' +import {getAuthorInfo, getAuthorVideoPage, getAuthorCollectVideoPage, getAuthorLikeVideoPage} from '@/api/user.js' import {subscribe, unSubscribe, delVideo, updateVideo, userDownVideo} from '@/api/video.js' export default { components: {DropdownMenu}, @@ -175,15 +207,35 @@ pageNumber: 1, pageSize: 10 }, + likeVideoQuery: { + authorId: '', + pageNumber: 1, + pageSize: 10 + }, videoTotal: 0, videoList: [], // 浣滃搧 collectVideoList: [], // 鏀惰棌 + likeVideoList: [], // 鐐硅禐 nomoreVideo: false, - nomoreCollectVideo: false + nomoreCollectVideo: false, + nomoreLikeVideo: false, } }, onShow() { this.getAuthorInfo(); + if (this.currentTab === 'works') { + this.videoQuery.pageNumber = 1 + this.nomoreVideo = false + this.getAuthorVideoPage(); + } else if (this.currentTab === 'collect') { + this.collectVideoQuery.pageNumber = 1 + this.nomoreCollectVideo = false + this.getAuthorCollectVideoPage() + } else if (this.currentTab === 'likes') { + this.likeVideoQuery.pageNumber = 1 + this.nomoreLikeVideo = false + this.getAuthorLikeVideoPage() + } }, onLoad(option) { this.authorId = option.authorId; @@ -261,7 +313,7 @@ this.videoQuery.pageNumber += 1; } }) - } else if(this.currentTab === 'likes') { + } else if(this.currentTab === 'collect') { if(this.nomoreCollectVideo) { return; } @@ -280,6 +332,27 @@ this.nomoreCollectVideo = true; } else { this.collectVideoQuery.pageNumber += 1; + } + }) + } else if(this.currentTab === 'likes') { + if(this.nomoreLikeVideo) { + return; + } + getAuthorLikeVideoPage(this.likeVideoQuery).then(res => { + if(this.likeVideoQuery.pageNumber === 1) { + this.likeVideoList = res.data.data + } else { + this.likeVideoList = [ + ...this.likeVideoList, + ...res.data.data.filter( + (newItem) => !this.likeVideoList.some((oldItem) => oldItem.id === newItem.id) + ), + ]; + } + if(res.data.data.length < this.likeVideoQuery.pageSize) { + this.nomoreLikeVideo = true; + } else { + this.likeVideoQuery.pageNumber += 1; } }) } @@ -333,14 +406,34 @@ this.currentTab = tab; if(tab === 'works') { this.collectVideoList = [] + this.likeVideoList = [] this.videoQuery.pageNumber = 1 + this.nomoreVideo = false this.getAuthorVideoPage() + } else if(tab === 'collect') { + this.videoList = [] + this.likeVideoList = [] + this.collectVideoQuery.pageNumber = 1 + this.nomoreCollectVideo = false + this.getAuthorCollectVideoPage() } else if(tab === 'likes') { this.videoList = [] - this.collectVideoQuery.pageNumber = 1 - this.getAuthorCollectVideoPage() + this.collectVideoList = [] + this.likeVideoQuery.pageNumber = 1 + this.nomoreLikeVideo = false + this.getAuthorLikeVideoPage() } }, + // 鑾峰彇浣滆�呭枩娆㈢殑瑙嗛 + async getAuthorLikeVideoPage() { + this.likeVideoQuery.authorId = this.authorId + getAuthorLikeVideoPage(this.likeVideoQuery).then(res => { + this.likeVideoList = res.data.data + if(res.data.data.length < this.likeVideoQuery.pageSize) { + this.nomoreLikeVideo = true; + } + }) + }, // 鑾峰彇浣滆�呯殑鏀惰棌瑙嗛 async getAuthorCollectVideoPage() { this.collectVideoQuery.authorId = this.authorId @@ -377,6 +470,19 @@ url: `/pages/video/video-play?authorId=${this.authorId}&videoFrom=collect` }); }, + // 鎾斁鐐硅禐瑙嗛 + playLikeVideo(index) { + const playInfo = { + videoList: this.likeVideoList, + nomore: this.nomoreLikeVideo, + pageNumber: this.likeVideoQuery.pageNumber, + playIndex: index + } + uni.setStorageSync("playInfo", playInfo) + uni.navigateTo({ + url: `/pages/video/video-play?authorId=${this.authorId}&videoFrom=like` + }); + }, // 缂栬緫涓汉璧勬枡 editInfo() { uni.navigateTo({ -- Gitblit v1.8.0