From 0fa280c6d02dbf694e36b1f352aea51132ec6dde Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 04 七月 2025 18:16:09 +0800
Subject: [PATCH] 我的浏览记录增加视频播放记录,TODO样式优化、播放历史视频

---
 pages/mine/myTracks.vue |  242 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 222 insertions(+), 20 deletions(-)

diff --git a/pages/mine/myTracks.vue b/pages/mine/myTracks.vue
index bd72c63..bd4c2f3 100644
--- a/pages/mine/myTracks.vue
+++ b/pages/mine/myTracks.vue
@@ -2,12 +2,58 @@
 	<view class="myTracks">
 		<u-navbar title="鎴戠殑瓒宠抗">
 			<div slot="right">
-        <div class="light-color edit" @click="isEdit = !isEdit">{{ !isEdit ? '缂栬緫' : '瀹屾垚'}}</div>
-      </div>
+				<div class="light-color edit" @click="isEdit = !isEdit">{{ !isEdit ? '缂栬緫' : '瀹屾垚'}}</div>
+			</div>
 		</u-navbar>
 		<u-notice-bar mode="vertical" :list="['鍙冲垝鍒犻櫎娴忚璁板綍']"></u-notice-bar>
-		<u-empty text="鏆傛棤鍘嗗彶璁板綍" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
-		<div v-else>
+		<!-- 椤堕儴閫夐」鍗� -->
+		<view class="tabs">
+		  <view 
+			class="tab-item" 
+			:class="{active: activeTab === 'video'}" 
+			@click="switchTab('video')"
+		  >
+			瑙嗛
+		  </view>
+		  <view 
+			class="tab-item" 
+			:class="{active: activeTab === 'goods'}"
+			@click="switchTab('goods')"
+		  >
+			鍟嗗搧
+		  </view>
+		</view>
+		
+		<!-- 瑙嗛娴忚璁板綍鍒楄〃 -->
+		<view v-if="activeTab === 'video'" class="video-list">
+		  <view 
+			v-for="(item, index) in videoHistory" 
+			:key="index" 
+			class="video-item"
+			@click="goToVideoDetail(item)"
+		  >
+			  <u-swipe-action style="width: 100%;" :show="item.show" :index="index" :key="item.id"
+				@click="delTracks" @open="open" :options="options">
+				<image class="video-cover" :src="item.coverUrl" mode="aspectFill"></image>
+				<view class="video-info">
+				  <view class="video-title">{{item.title}}</view>
+				  <view class="video-author">{{item.authorName}}</view>
+				  <view class="video-meta">
+					<text>鎾斁鑷�: {{formatPlayTime(item.playAt)}}</text>
+					<text class="separator">|</text>
+					<text>{{formatDate(item.playTime)}}</text>
+				  </view>
+				</view>
+			  </u-swipe-action>
+		  </view>
+		  <div @click="handleClickDeleteSelected" v-if="isEdit" class="submit">
+		  	鍒犻櫎鎵�閫�
+		  </div>
+		  <view v-if="videoHistory.length === 0" class="empty-tip">
+			鏆傛棤瑙嗛娴忚璁板綍
+		  </view>
+		</view>
+		<view v-else-if="activeTab === 'goods'">
 			<view v-for="(item, index) in trackList" :key="index">
 				<view class="myTracks-title" @click="navigateToStore(item)">{{item.storeName}}</view>
 				<view class="myTracks-items">
@@ -42,7 +88,10 @@
 			<div @click="handleClickDeleteSelected" v-if="isEdit" class="submit">
 				鍒犻櫎鎵�閫�
 			</div>
-		</div>
+			<view v-if="trackList.length === 0" class="empty-tip">
+						鏆傛棤鍟嗗搧娴忚璁板綍
+			</view>
+		</view>
 
 	</view>
 </template>
@@ -52,12 +101,15 @@
 	
 	import {
 		myTrackList,
-		deleteHistoryListId
+		deleteHistoryListId,
+		myVideoHistory
 	} from "@/api/members.js";
 
 	export default {
 		data() {
 			return {
+				activeTab: 'video', // 褰撳墠婵�娲荤殑tab
+				videoHistory: [], // 瑙嗛娴忚鍒楄〃
 				isEdit:false,
 				whetherEmpty: false, //鏄惁鏁版嵁涓虹┖
 				params: {
@@ -73,7 +125,7 @@
 						backgroundColor: '#dd524d'
 					}
 				}],
-				trackList: [], //瓒宠抗鍒楄〃
+				trackList: [], //鍟嗗搧娴忚鍒楄〃
 			};
 		},
 
@@ -94,6 +146,49 @@
 			this.getList();
 		},
 		methods: {
+			// 鍒囨崲tab
+			switchTab(tab) {
+			  this.activeTab = tab
+			},
+			
+			// 璺宠浆鍒拌棰戣鎯呴〉
+			goToVideoDetail(item) {
+			  uni.navigateTo({
+				url: `/pages/video-detail/video-detail?id=${item.id}`
+			  })
+			},
+			
+			// 鏍煎紡鍖栨挱鏀炬椂闂� (绉� -> 鍒�:绉�)
+			formatPlayTime(seconds) {
+			  const mins = Math.floor(seconds / 60)
+			  const secs = seconds % 60
+			  return `${mins}:${secs < 10 ? '0' + secs : secs}`
+			},
+			
+			// 鏍煎紡鍖栨棩鏈�
+			formatDate(timestamp) {
+			  const now = new Date()
+			  const date = new Date(timestamp)
+			  
+			  // 濡傛灉鏄粖澶�
+			  if (date.toDateString() === now.toDateString()) {
+				const hours = date.getHours().toString().padStart(2, '0')
+				const minutes = date.getMinutes().toString().padStart(2, '0')
+				return `${hours}:${minutes}`
+			  }
+			  
+			  // 濡傛灉鏄槰澶�
+			  const yesterday = new Date(now)
+			  yesterday.setDate(now.getDate() - 1)
+			  if (date.toDateString() === yesterday.toDateString()) {
+				return '鏄ㄥぉ'
+			  }
+			  
+			  // 鍏朵粬鎯呭喌鏄剧ず鏃ユ湡
+			  const month = date.getMonth() + 1
+			  const day = date.getDate()
+			  return `${month}鏈�${day}鏃
+			},
 			checkboxChangeDP(val){
 				console.log(val)
 			},
@@ -141,27 +236,43 @@
 				uni.showLoading({
 					title: "鍔犺浇涓�",
 				});
-				myTrackList(this.params).then((res) => {
-					uni.stopPullDownRefresh();
-					uni.hideLoading();
-					if (res.statusCode == 200) {
-						res.data.result.records.length &&
-							res.data.result.records.forEach((item) => {
+				if (this.activeTab === 'goods') {
+					myTrackList(this.params).then((res) => {
+						uni.stopPullDownRefresh();
+						uni.hideLoading();
+						if (res.statusCode == 200) {
+							res.data.result.records.length &&
+								res.data.result.records.forEach((item) => {
+									item.show = false;
+									item.checked = false
+								});
+					
+							let data = res.data.result.records;
+							if (data.total == 0) {
+								this.whetherEmpty = true;
+							} else {
+								this.trackList.push(...data);
+							}
+						}
+					});
+				} else if (this.activeTab === 'video') {
+					myVideoHistory(this.params).then(res => {
+						res.data.data.length &&
+							res.data.data.forEach((item) => {
 								item.show = false;
 								item.checked = false
 							});
-
-						let data = res.data.result.records;
+											
+						let data = res.data.data;
 						if (data.total == 0) {
 							this.whetherEmpty = true;
 						} else {
-							this.trackList.push(...data);
+							this.videoHistory.push(...data);
 						}
-					}
-				});
+					})
+				}
+				
 			},
-
-
 			/**
 			 * 鍒犻櫎瓒宠抗
 			 */
@@ -303,4 +414,95 @@
 	.edit{
   	padding-right: 32rpx;
 	}
+	.container {
+	  padding: 20rpx;
+	}
+	
+	/* 閫夐」鍗℃牱寮� */
+	.tabs {
+	  display: flex;
+	  margin-bottom: 20rpx;
+	  border-bottom: 1rpx solid #eee;
+	}
+	
+	.tab-item {
+	  flex: 1;
+	  text-align: center;
+	  padding: 20rpx 0;
+	  font-size: 32rpx;
+	  color: #666;
+	}
+	
+	.tab-item.active {
+	  color: #007AFF;
+	  position: relative;
+	}
+	
+	.tab-item.active::after {
+	  content: '';
+	  position: absolute;
+	  bottom: 0;
+	  left: 50%;
+	  transform: translateX(-50%);
+	  width: 80rpx;
+	  height: 4rpx;
+	  background-color: #007AFF;
+	}
+	
+	/* 瑙嗛鍒楄〃鏍峰紡 */
+	.video-list {
+	  padding: 10rpx 0;
+	}
+	
+	.video-item {
+	  display: flex;
+	  margin-bottom: 30rpx;
+	  padding-bottom: 30rpx;
+	  border-bottom: 1rpx solid #f5f5f5;
+	}
+	
+	.video-cover {
+	  width: 220rpx;
+	  height: 160rpx;
+	  border-radius: 8rpx;
+	  margin-right: 20rpx;
+	}
+	
+	.video-info {
+	  flex: 1;
+	  display: flex;
+	  flex-direction: column;
+	  justify-content: space-between;
+	}
+	
+	.video-title {
+	  font-size: 30rpx;
+	  color: #333;
+	  display: -webkit-box;
+	  -webkit-box-orient: vertical;
+	  -webkit-line-clamp: 2;
+	  overflow: hidden;
+	  line-height: 1.4;
+	}
+	
+	.video-author {
+	  font-size: 26rpx;
+	  color: #999;
+	}
+	
+	.video-meta {
+	  font-size: 24rpx;
+	  color: #999;
+	}
+	
+	.separator {
+	  margin: 0 10rpx;
+	}
+	
+	.empty-tip {
+	  text-align: center;
+	  padding: 100rpx 0;
+	  color: #999;
+	  font-size: 28rpx;
+	}
 </style>

--
Gitblit v1.8.0