From 1ea0a9f92a01fa727a47e44b4fd58e5d1a03e0a0 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 28 八月 2025 01:04:15 +0800
Subject: [PATCH] 领取记录,跳转

---
 pages/tabbar/user/utils/tool.vue          |   26 ++++
 static/mine/prize-record.png              |    0 
 pages.json                                |   28 ++++
 pages/prizeRecord/prizeRecord.vue         |  254 ++++++++++++++++++++++++++++++++++++++++++
 api/prize-activity.js                     |   17 ++
 static/mine/prize-activity.png            |    0 
 pages/mine/activity/applyActivityList.vue |    7 -
 api/prize-record.js                       |   15 ++
 store/index.js                            |    1 
 9 files changed, 341 insertions(+), 7 deletions(-)

diff --git a/api/prize-activity.js b/api/prize-activity.js
new file mode 100644
index 0000000..7423751
--- /dev/null
+++ b/api/prize-activity.js
@@ -0,0 +1,17 @@
+import { http, Method } from "@/utils/request.js";
+
+import api from "@/config/api.js";
+
+
+/**
+ * 鑾峰緱鎶藉娲诲姩
+ * 
+ * @param params
+ */
+ export function getONPrizeActivity() {
+  return http.request({
+    url: "/lmk/activity-prize/getONPrizeActivity",
+    method: Method.GET,
+    needToken: true,
+  });
+}
\ No newline at end of file
diff --git a/api/prize-record.js b/api/prize-record.js
new file mode 100644
index 0000000..3d35f83
--- /dev/null
+++ b/api/prize-record.js
@@ -0,0 +1,15 @@
+import {
+	http,
+	Method
+} from "@/utils/request.js";
+
+import api from "@/config/api.js";
+
+export function getPage(param){
+	return http.request({
+	  url: "/lmk/prizeRecord",
+	  method: Method.GET,
+	  needToken: true,
+	  params:param
+	});
+}
\ No newline at end of file
diff --git a/pages.json b/pages.json
index f985091..de4ac34 100644
--- a/pages.json
+++ b/pages.json
@@ -35,6 +35,7 @@
           "navigationBarTitleText" : ""
         }
       }
+     
 		// {
 		// 	"path": "pages/tabbar/home/index",
 		// 	"style": {
@@ -402,6 +403,33 @@
 		// 	]
 		// },
 		{
+			"root" : "pages/prizeRecord",
+			"pages": [
+				{
+					"path":"prizeRecord",
+					"style" :
+					{
+						"navigationBarTitleText" : "",
+						"componentPlaceholder": {
+							"u-form": "view",
+							"u-form-item": "view",
+							"u-input": "view",
+							"u-icon": "view",
+							"u-action-sheet": "view",
+							"u-checkbox-group": "view",
+							"u-checkbox": "view",
+							"u-navbar": "view",
+							"u-button": "view",
+							"u-image": "view",
+							"u-empty": "view",
+							"u-loadmore":"view"
+						}
+					}
+				}
+			]
+			
+		},
+		{
 			"root": "pages/mine",
 			"pages": [
 				// {
diff --git a/pages/mine/activity/applyActivityList.vue b/pages/mine/activity/applyActivityList.vue
index cd59efe..48cbb10 100644
--- a/pages/mine/activity/applyActivityList.vue
+++ b/pages/mine/activity/applyActivityList.vue
@@ -65,8 +65,6 @@
 
 		data() {
 			return {
-				scrollViewTop: uni.upx2px(50 + 80 + 40), // 50rpx绌虹櫧 + 80rpx鎸夐挳 + 40rpx杈硅窛
-				scrollViewBottom: uni.upx2px(120), // 搴曢儴棰勭暀
 				query: {
 					pageNumber: 1,
 					pageSize: 5,
@@ -223,11 +221,6 @@
 		height: auto;
 	}
 
-
-	/* 娲诲姩鍒楄〃鏍峰紡 */
-	.activity-list {
-		padding: 20rpx 24rpx;
-	}
 
 	.card {
 		background: #fff;
diff --git a/pages/prizeRecord/prizeRecord.vue b/pages/prizeRecord/prizeRecord.vue
new file mode 100644
index 0000000..fc172cf
--- /dev/null
+++ b/pages/prizeRecord/prizeRecord.vue
@@ -0,0 +1,254 @@
+<template>
+	<view class="container">
+		<view style="height:50rpx"></view>
+
+		<u-empty v-if="mockData.length === 0 && !loading" mode="data"
+			icon="http://cdn.uviewui.com/uview/empty/data.png">
+		</u-empty>
+
+		<!-- 鍏抽敭淇锛氱‘淇漵croll-view楂樺害姝g‘涓斾簨浠剁粦瀹氭湁鏁� -->
+		<scroll-view 
+			scroll-y class="scroll-view-container" style="height: 40vh" @scrolltolower="loadMore" :lower-threshold="50"
+		>
+			<view v-for="(item, idx) in mockData" :key="idx" class="prize-record-item card">
+				<view class="prize-record-info">
+					<view class="info-header">
+						<view class="prize-activity-name">{{ item.prizeActivityName }}</view>
+						<view class="prize-status-tag"
+							:class="item.prizeStatus === 'WIN' ? 'tag-winning' : 'tag-not-win'">
+							{{ item.prizeStatus === 'WIN' ? '宸蹭腑濂�' : '鏈腑濂�' }}
+						</view>
+					</view>
+
+					<view class="info-content">
+						<view class="content-label">濂栧搧鍐呭锛�</view>
+						<view class="prize-content">{{ item.prizeContent || '鏆傛棤濂栧搧鎻忚堪' }}</view>
+					</view>
+
+					<view class="prize-record-meta">
+						<view class="meta-item">
+							<u-icon name="clock-o" size="16" color="#999"></u-icon>
+							<text class="meta-text">{{ formatTime(item.createTime) }}</text>
+						</view>
+						<view class="meta-item" v-if="item.activitySource">
+							<u-icon name="map" size="16" color="#999"></u-icon>
+							<text class="meta-text">{{ item.activitySource }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<view class="load-more">
+				<u-loadmore v-if="mockData.length > 0" :status="loading ? 'loading' : noMore ? 'nomore' : 'loadmore'"
+					:load-text="{
+			            loadmore: '涓婃媺鍔犺浇鏇村',
+			            loading: '姝e湪鍔犺浇',
+			            nomore: '娌℃湁鏇村浜�'
+			          }" />
+			</view>
+			<view style="height:150rpx"></view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { getPage } from '@/api/prize-record.js'
+	export default {
+		data() {
+			return {
+				query: {
+					pageNumber: 1,
+					pageSize: 5,
+				},
+				loading: false,
+				total: 0,
+				mockData: [],
+				noMore: false,
+			}
+		},
+		onLoad() {
+			this.getPage();
+		},
+		methods: {
+			onPullDownRefresh() {
+				this.mockData = [];
+				this.query.pageNumber = 1;
+				this.getPage()
+				setTimeout(() => {
+					uni.stopPullDownRefresh();
+				}, 1000);
+			},
+
+			formatTime(timeStr) {
+				if (!timeStr || typeof timeStr !== 'string') return '鏈煡鏃堕棿';
+
+				try {
+					// 鎵嬪姩瑙f瀽鏍煎紡锛岃В鍐冲吋瀹规�ч棶棰�
+					const [datePart, timePart] = timeStr.split('T');
+					if (!datePart || !timePart) return '鏃犳晥鏃堕棿';
+					
+					const [year, month, day] = datePart.split('-');
+					const hourMinute = timePart.split('.')[0].slice(0, 5);
+					const [hour, minute] = hourMinute.split(':');
+					
+					return `${year}-${month}-${day} ${hour}:${minute}`;
+				} catch (error) {
+					console.warn('鏃ユ湡瑙f瀽澶辫触:', error);
+					return '鏈煡鏃堕棿';
+				}
+			},
+
+			async getPage() {
+				try {
+					const res = await getPage(this.query);
+					if (res.statusCode === 200) {
+						const newData = res.data.data || [];
+						this.total = res.data.total || 0;
+						this.mockData = this.query.pageNumber === 1 ? newData : [...this.mockData, ...newData];
+						this.noMore = newData.length < this.query.pageSize || this.mockData.length >= this.total;
+					}
+				} catch (error) {
+					console.error('鍔犺浇澶辫触:', error);
+					if (this.query.pageNumber > 1) {
+						this.query.pageNumber -= 1;
+					}
+				} finally {
+					this.loading = false;
+					uni.hideLoading();
+					uni.stopPullDownRefresh();
+				}
+			},
+
+			loadMore() {
+				// 澧炲姞鏃ュ織渚夸簬璋冭瘯
+				console.log('瑙﹀彂涓婃媺鍔犺浇', 'loading:', this.loading, 'noMore:', this.noMore);
+				
+				if (this.loading || this.noMore) return;
+				
+				this.loading = true;
+				// 绉婚櫎涓嶅繀瑕佺殑寤惰繜锛岄伩鍏嶅奖鍝嶄綋楠�
+				this.query.pageNumber += 1;
+				this.getPage();
+			},
+		}
+	}
+</script>
+
+<style>
+	.container {
+		height: 100vh;
+		display: flex;
+		flex-direction: column;
+		background-color: #f7f8fa;
+	}
+
+	/* 鍏抽敭淇锛氫娇鐢╢lex纭繚楂樺害姝g‘璁$畻 */
+	.scroll-view-container {
+		flex: 1;
+		overflow-y: auto; /* 鏄庣‘璁剧疆鍨傜洿婊氬姩 */
+		padding: 0 20rpx;
+		box-sizing: border-box;
+		-webkit-overflow-scrolling: touch; /* 浼樺寲绉诲姩绔粴鍔ㄤ綋楠� */
+	}
+
+	.load-more {
+		padding: 20rpx 0;
+		text-align: center;
+		color: #999;
+		font-size: 26rpx;
+		background-color: #f8f9fa;
+	}
+
+	.card {
+		background: #fff;
+		border-radius: 20rpx;
+		margin: 0 0 24rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03),
+			0 6rpx 16rpx rgba(0, 0, 0, 0.04);
+		transition: all 0.25s ease;
+	}
+
+	.prize-record-item {
+		padding: 30rpx 28rpx;
+	}
+
+	.info-header {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-bottom: 22rpx;
+	}
+
+	.prize-activity-name {
+		font-size: 34rpx;
+		font-weight: 600;
+		color: #222;
+		line-height: 1.4;
+		max-width: 70%;
+		white-space: nowrap;
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+
+	.prize-status-tag {
+		padding: 6rpx 18rpx;
+		border-radius: 20rpx;
+		font-size: 24rpx;
+		font-weight: 500;
+		text-align: center;
+	}
+
+	.tag-winning {
+		background-color: #fff1f0;
+		color: #ff4d4f;
+		border: 1px solid #ffccc7;
+	}
+
+	.tag-not-win {
+		background-color: #f5f5f5;
+		color: #888;
+		border: 1px solid #e5e5e5;
+	}
+
+	.info-content {
+		margin-bottom: 24rpx;
+		padding-left: 4rpx;
+	}
+
+	.content-label {
+		font-size: 24rpx;
+		color: #999;
+		margin-bottom: 8rpx;
+	}
+
+	.prize-content {
+		font-size: 28rpx;
+		color: #555;
+		line-height: 1.6;
+		display: -webkit-box;
+		-webkit-box-orient: vertical;
+		-webkit-line-clamp: 2;
+		overflow: hidden;
+	}
+
+	.prize-record-meta {
+		display: flex;
+		justify-content: flex-start;
+		gap: 24rpx;
+		padding-top: 20rpx;
+		border-top: 1px solid #f8f8f8;
+	}
+
+	.meta-item {
+		display: flex;
+		align-items: center;
+		gap: 8rpx;
+	}
+
+	.meta-text {
+		font-size: 22rpx;
+		color: #888;
+		white-space: nowrap;
+		letter-spacing: 0.5rpx;
+	}
+</style>
diff --git a/pages/tabbar/user/utils/tool.vue b/pages/tabbar/user/utils/tool.vue
index 009080a..f7280c8 100644
--- a/pages/tabbar/user/utils/tool.vue
+++ b/pages/tabbar/user/utils/tool.vue
@@ -136,6 +136,15 @@
 						<image src="/static/mine/order.png" mode=""></image>
 						<view>鍟嗘埛璁㈠崟绠$悊</view>
 					</view>
+					
+					<view class="interact-item" v-if="prizeActivityId !== null && prizeActivityId !==''" @click="gotoPrizeActivity()">
+						<image  src="/static/mine/prize-activity.png"></image>
+						<view>鎶藉娲诲姩</view>
+					</view>
+					<view class="interact-item" @click="navigateTo('/pages/prizeRecord/prizeRecord')">
+						<image  src="/static/mine/prize-record.png"></image>
+						<view>鎶藉璁板綍</view>
+					</view>
 
 				</view>
 			</view>
@@ -145,6 +154,7 @@
 
 <script>
 	import { getUserInfo } from "@/api/members";
+	import {getONPrizeActivity} from '@/api/prize-activity.js'
 import {
 		distribution
 	} from "@/api/goods";
@@ -154,6 +164,7 @@
 	export default {
 		data() {
 			return {
+				prizeActivityId:'',
 				isStoreManger:false,
 				configs,
 				storage
@@ -169,8 +180,23 @@
 					}
 				}
 			})
+			this.getONPrizeActivity();
 		},
+		
 		methods: {
+			getONPrizeActivity(){
+				getONPrizeActivity().then(res =>{
+					if(res.statusCode=== 200){
+						//鍚庣娌℃煡鍒板紑鍚殑鎶藉娲诲姩 res.data.data.id鍊间负null
+						this.prizeActivityId = res.data.data.id;
+					}
+				})
+			},
+			gotoPrizeActivity(){
+				uni.navigateTo({
+					url:'/pages/prize/PrizeDetail/PrizeDetail?id=' + this.prizeActivityId,
+				});
+			},
 			
 			handleNavigate(url) {
 				uni.navigateTo({
diff --git a/static/mine/prize-activity.png b/static/mine/prize-activity.png
new file mode 100644
index 0000000..40a2320
--- /dev/null
+++ b/static/mine/prize-activity.png
Binary files differ
diff --git a/static/mine/prize-record.png b/static/mine/prize-record.png
new file mode 100644
index 0000000..1d1b384
--- /dev/null
+++ b/static/mine/prize-record.png
Binary files differ
diff --git a/store/index.js b/store/index.js
index f05a8df..47a92e4 100644
--- a/store/index.js
+++ b/store/index.js
@@ -17,6 +17,7 @@
     token: "",
 	 // 娲诲姩寮圭獥鐘舵��
 	 activityPopup: {
+		 prizeActivityId:'',
 	      show: false,
 	      title: '',
 	      desc: '',

--
Gitblit v1.8.0