From 6a20878b9b1e3460531b055d72d5d671f761abc3 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期四, 16 十月 2025 15:36:20 +0800
Subject: [PATCH] 定制商品
---
pages/mine/activity/reportActivity.vue | 326 +++++++++++++++++++++++++++++-------------------------
1 files changed, 174 insertions(+), 152 deletions(-)
diff --git a/pages/mine/activity/reportActivity.vue b/pages/mine/activity/reportActivity.vue
index 6d57079..671497f 100644
--- a/pages/mine/activity/reportActivity.vue
+++ b/pages/mine/activity/reportActivity.vue
@@ -1,24 +1,28 @@
<template>
<view class="wrapper">
+ <top-bar selectedTitleIndex="activity" textColor="black" @changeTab="topBarChange" class="topBar"></top-bar>
+
+ <view style="height: 50rpx;margin-top: 150rpx"></view>
+ <u-empty v-if="mockData.length === 0 && !loading" style="margin-top: 130rpx;"
+ mode="data"
+ icon="http://cdn.uviewui.com/uview/empty/data.png">
+ </u-empty>
<!-- 鍐呭鍖哄煙 -->
- <scroll-view scroll-y class="content" style="height: 100vh;" @scrolltolower="loadMore"
- :lower-threshold="100"
- >
+ <scroll-view scroll-y class="scroll-view-container" style="height: 40vh;" @scrolltolower="loadMore" :lower-threshold="100">
<view class="waterfall">
<view class="column" v-for="(column, index) in columns" :key="index">
<!-- 閬嶅巻姣忓垪鍐呭 -->
<view class="item" v-for="(item, idx) in column" :key="item.id" @click="handleItemClick(item)">
<!-- 鍥剧墖绫诲瀷 -->
- <image v-if="item.type === '鍥剧墖'" :src="getUrl(item.cover)" mode="widthFix" class="media"
- @load="imageLoad" :data-item="item" :style="{ height: item.height + 'px' }" />
+ <image v-if="item.type === 'image'" :src="item.url" mode="widthFix" class="media" @load="imageLoad" :data-item="item"
+ :style="{ height: item.height + 'px' }" />
<!-- 瑙嗛绫诲瀷 -->
- <video v-if="item.type === '瑙嗛'" :src="getUrl(item.cover)" class="media" controls
- :poster="item.poster" @play="handleVideoPlay"
- :style="{ height: item.height + 'px' }"></video>
+ <video v-if="item.type === 'video'" :src="item.url" class="media" controls :poster="item.poster" :data-item="item"
+ @play="handleVideoPlay" :style="{ height: item.height + 'px' }"></video>
<!-- 鏂囧瓧绫诲瀷 -->
- <view v-if="item.type === '鏂囧瓧'" class="text-content">
+ <view v-if="item.type === 'text'" class="text-content">
<text class="title">{{ item.cover }}</text>
</view>
<text class="title">{{ item.title }}</text>
@@ -26,41 +30,34 @@
</view>
</view>
</view>
- <!-- <view style="height: 150rpx;"></view> -->
- <!-- 鏀硅繘鐨勫姞杞芥洿澶氭彁绀� -->
- <view class="load-more">
- <u-loadmore
- v-if="mockData.length > 0"
- :status="loading ? 'loading' : noMore ? 'nomore' : 'loadmore'"
- :load-text="{
+
+
+ <!-- 鏀硅繘鐨勫姞杞芥洿澶氭彁绀� -->
+ <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>
+ }" />
+ </view>
+ <view style="height:150rpx">
+
+ </view>
</scroll-view>
-
-
+
+
</view>
</template>
<script>
- import {
- changeCollect
- } from '@/api/collect.js'
- import {
- getFilePreviewUrl
- } from '@/api/common.js'
+ import TopBar from "@/components/TopBar.vue";
import '@/components/uview-components/uview-ui';
- import {
- getActivityReportList,
- } from '@/api/activity.js';
+ import {getActivityReportList} from '@/api/activity.js';
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
+ components: {TopBar},
data() {
return {
columns: [
@@ -74,23 +71,63 @@
baseTextHeight: 120, // 鏂囧瓧鍩虹楂樺害
query: {
pageNumber: 1,
- pageSize: 8,
+ pageSize: 10,
+ publish:1,
},
loading: false, // 鏄惁姝e湪鍔犺浇
noMore: false, // 鏄惁娌℃湁鏇村鏁版嵁
- total: 0 // 鎬绘暟鎹噺
+ total: 0 ,// 鎬绘暟鎹噺
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"ACTIVITY_LIST",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
- onLoad() {
+ onUnload() {
+ let param = Object.assign({}, this.actionParam);
+ if (this.sendOnShow)return
+ param.pageStatus = "LEAVE"
+ userAction(param)
+ },
+ onHide() {
+ this.startHidenTime = Date.now()
+ let param = Object.assign({}, this.actionParam);
+ this.sendOnShow = true;
+ param.pageStatus = "LEAVE"
+ userAction(param)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
+ onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.getActivityList();
},
methods: {
- getUrl(params) {
- getFilePreviewUrl(params).then(res => {
- return res.data.data
- })
+ topBarChange(titleObj) {
+ if (titleObj.index === 'home') {
+ uni.switchTab({
+ url: titleObj.pagePath
+ });
+ } else {
+ uni.redirectTo({
+ url: titleObj.pagePath
+ });
+ }
},
-
/**
* 涓嬫媺鍒锋柊鏃�
*/
@@ -101,62 +138,65 @@
this.getActivityList();
},
loadMore() {
-
- // 鏄剧ず鍔犺浇鐘舵��
- this.loading = true;
-
- // 寤惰繜鎵ц璁︰I鏈夊弽搴旀椂闂�
- setTimeout(() => {
- this.query.pageNumber += 1;
- this.getActivityList();
- }, 300);
+ // 鏄剧ず鍔犺浇鐘舵��
+ this.loading = true;
+
+ // 寤惰繜鎵ц璁︰I鏈夊弽搴旀椂闂�
+ setTimeout(() => {
+ this.query.pageNumber += 1;
+ this.getActivityList();
+ }, 300);
},
async getActivityList() {
-
- try {
-
- const res = await getActivityReportList(this.query);
- this.loading = false;
- if (res.statusCode === 200) {
- const newData = res.data.data.map(value => ({
- id: value.id,
- type: value.coverType,
- cover: value.cover,
- height: value.coverType === '鍥剧墖' ? this.baseImageHeight :
- value.coverType === '瑙嗛' ? this.baseVideoHeight : this.baseTextHeight,
- title: value.activityName,
- content: value.activityContent,
- poster: '',
- }));
-
- // 鏇存柊鎬绘暟鎹噺
- 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;
-
- // 甯冨眬鏇存柊
- this.$nextTick(() => {
- this.layoutItems();
- });
- }
- } catch (error) {
- console.error('鍔犺浇澶辫触:', error);
- // 澶辫触鏃跺洖閫�椤电爜
- if (this.query.pageNumber > 1) {
- this.query.pageNumber -= 1;
- }
- } finally {
- this.loading = false;
- uni.hideLoading();
- uni.stopPullDownRefresh();
- }
+ if (this.noMore) {
+ this.loading = false;
+ return
+ }
+ try {
+
+ const res = await getActivityReportList(this.query);
+ this.loading = false;
+ if (res.statusCode === 200) {
+ const newData = res.data.data.map(value => ({
+ id: value.id,
+ type: value.coverType,
+ cover: value.cover,
+ height: value.coverType === 'image' ? this.baseImageHeight : value.coverType ===
+ 'video' ? this.baseVideoHeight : this.baseTextHeight,
+ title: value.activityName,
+ content: value.activityContent,
+ poster: '',
+ url: value.url
+ }));
+
+ // 鏇存柊鎬绘暟鎹噺
+ 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;
+
+ // 甯冨眬鏇存柊
+ this.$nextTick(() => {
+ this.layoutItems();
+ });
+ }
+ } catch (error) {
+ console.error('鍔犺浇澶辫触:', error);
+ // 澶辫触鏃跺洖閫�椤电爜
+ if (this.query.pageNumber > 1) {
+ this.query.pageNumber -= 1;
+ }
+ } finally {
+ this.loading = false;
+ uni.hideLoading();
+ uni.stopPullDownRefresh();
+ }
},
// 鍥剧墖鍔犺浇瀹屾垚鍥炶皟
layoutItems() {
@@ -165,7 +205,7 @@
[]
];
this.colHeight = [0, 0];
-
+
this.mockData.forEach(item => {
const minIndex = this.colHeight.indexOf(Math.min(...this.colHeight));
this.columns[minIndex].push(item); //鑾峰緱楂樺害鏇村皬鐨� 鏀惧叆鍏冪礌
@@ -181,6 +221,10 @@
const ratio = height / width;
const item = e.currentTarget.dataset.item;
+ if (!item) {
+ console.error('鏃犳硶鑾峰彇鍥剧墖椤规暟鎹�', e);
+ return;
+ }
// 閲嶆柊璁$畻瀹為檯鏄剧ず楂樺害
const viewWidth = uni.upx2px(345); // 灏唕px杞崲涓簆x
const viewHeight = viewWidth * ratio;
@@ -211,43 +255,32 @@
</script>
<style lang="scss">
- /* 鏂板鍔犺浇鏇村鏍峰紡 */
- .load-more {
- padding: 20rpx 0;
- text-align: center;
- color: #999;
- font-size: 26rpx;
- background-color: #f7f8fa;
- }
- .btn-container {
- display: flex;
- justify-content: center;
- align-items: center;
- margin-top: 8px;
- /* 涓庝笂鏂规爣棰樹繚鎸侀棿璺� */
- }
+ /*鏂板鍔犺浇鏇村鏍峰紡 */
+ .load-more {
+ padding: 20rpx 0;
+ text-align: center;
+ color: #999;
+ font-size: 26rpx;
+ background-color: #f8f9fa;
+ }
/* 鍏ㄥ眬鏍峰紡浼樺寲 */
.wrapper {
height: 100vh;
display: flex;
flex-direction: column;
- background-color: #f7f8fa;
+ background-color: #f8f9fa;
}
- /* 瀵艰埅鏍忎紭鍖� */
- .u-navbar {
- box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
- }
/* 鍐呭鍖哄煙浼樺寲 */
- .content {
- flex: 1;
- overflow: hidden;
- padding: 0 20rpx;
- box-sizing: border-box;
- /* 纭繚鍙互婊氬姩 */
- -webkit-overflow-scrolling: touch;
+ .scroll-view-container {
+ flex: 1;
+ overflow: hidden;
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ /* 纭繚鍙互婊氬姩 */
+ -webkit-overflow-scrolling: touch;
}
/* 鐎戝竷娴佸竷灞�浼樺寲 */
@@ -264,17 +297,19 @@
gap: 20rpx;
}
- /* 鍗$墖椤逛紭鍖� */
+ /* 鍗$墖椤逛紭鍖� - 浣跨敤缁胯壊涓婚 */
.item {
- background: #fff;
+ background: #ffffff;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
+ border: 1px solid #e0f2e9;
&:active {
transform: scale(0.98);
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.12);
+ background-color: #f0faf5;
}
}
@@ -283,7 +318,7 @@
width: 100%;
display: block;
border-radius: 16rpx 16rpx 0 0;
- background-color: #f5f5f5;
+ background-color: #f0faf5;
&[mode="widthFix"] {
height: auto;
@@ -295,17 +330,16 @@
object-fit: cover;
}
- /* 鏂囧瓧鍐呭鏍峰紡 */
+ /* 鏂囧瓧鍐呭鏍峰紡 - 浣跨敤缁胯壊娓愬彉 */
.text-content {
padding: 24rpx;
- background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
+ // background: linear-gradient(135deg, #38a169 0%, #48bb78 100%);
min-height: 160rpx;
display: flex;
align-items: center;
justify-content: center;
.title {
- color: #fff;
font-size: 32rpx;
font-weight: 500;
line-height: 1.4;
@@ -317,11 +351,11 @@
}
}
- /* 鏍囬鏍峰紡浼樺寲 */
+ /* 鏍囬鏍峰紡浼樺寲 - 浣跨敤娣辩豢鑹� */
.title {
padding: 20rpx 24rpx;
font-size: 28rpx;
- color: #333;
+ color: #2c7a7b;
line-height: 1.5;
display: -webkit-box;
-webkit-box-orient: vertical;
@@ -330,7 +364,7 @@
font-weight: 500;
&:not(.text-content .title) {
- border-top: 1rpx solid #f0f0f0;
+ border-top: 1rpx solid #e0f2e9;
}
}
@@ -358,24 +392,12 @@
}
}
- /* 绌虹姸鎬佹牱寮� */
- .empty-state {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- height: 60vh;
- text-align: center;
-
- image {
- width: 240rpx;
- opacity: 0.6;
- margin-bottom: 30rpx;
- }
-
- text {
- color: #c0c4cc;
- font-size: 28rpx;
- }
+
+ .topBar {
+ position: fixed;
+ top: 20rpx;
+ left: 20rpx;
+ z-index: 1000;
+ background-color: #ffffff;
}
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.8.0