From 9ac342cdebca34f39243d4d724709f55dc02baac Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 29 七月 2025 12:01:41 +0800
Subject: [PATCH] 活动列表问题,视频主页图片显示问题
---
pages/mine/activity/detail.vue | 102 +++---
pages/mine/myCollect/myCollect.vue | 799 ++++++++++++++++++++++---------------------------
pages/video/home-page.vue | 27 +
3 files changed, 435 insertions(+), 493 deletions(-)
diff --git a/pages/mine/activity/detail.vue b/pages/mine/activity/detail.vue
index df6e476..a467972 100644
--- a/pages/mine/activity/detail.vue
+++ b/pages/mine/activity/detail.vue
@@ -1,5 +1,5 @@
<template>
- <view class="container" @touchstart="touchStart" @touchend="touchEnd">
+ <view class="container" @touchstart="touchStart" @touchend="touchEnd">
<!-- 椤堕儴娴锋姤鍥� -->
<!-- 鍔ㄦ�佸皝闈㈠尯鍩� -->
<view class="cover-container">
@@ -68,8 +68,13 @@
<script>
import '@/components/uview-components/uview-ui';
- import {changeCollect} from '@/api/collect.js'
- import {getActivityDetail, activityReport} from '@/api/activity.js';
+ import {
+ changeCollect
+ } from '@/api/collect.js'
+ import {
+ getActivityDetail,
+ activityReport
+ } from '@/api/activity.js';
export default {
data() {
return {
@@ -182,7 +187,9 @@
this.activityInfo.startTime = res.data.data.startTime;
this.activityInfo.endTime = res.data.data.endTime;
this.activityInfo.activityLocation = res.data.data.activityLocation;
- this.activityInfo.activityContent = '<h2>娲诲姩浠嬬粛</h2>' + res.data.data.activityContent;
+ this.activityInfo.activityContent = '<h2>娲诲姩浠嬬粛</h2>' + this.processRichText(res.data.data.activityContent);
+
+
this.activityInfo.activityType = res.data.data.activityType;
this.activityInfo.limitUserNum = res.data.data.limitUserNum;
this.reportBtn = res.data.data.isReport;
@@ -190,6 +197,26 @@
this.activityInfo.url = res.data.data.url;
}
})
+ },
+ // 鍦ㄨ幏鍙栧瘜鏂囨湰鏁版嵁鍚庡鐞�
+ processRichText(content) {
+ // 澶勭悊鍥剧墖
+ content = content.replace(/<img[^>]*>/gi, (match) => {
+ if (!/style=['"]/.test(match)) {
+ return match.replace(/<img/, '<img style="max-width:100% !important;height:auto !important;display:block;margin:10px auto;border-radius:8rpx;"');
+ }
+ return match;
+ });
+
+ // 澶勭悊瑙嗛
+ content = content.replace(/<video[^>]*>/gi, (match) => {
+ if (!/style=['"]/.test(match)) {
+ return match.replace(/<video/, '<video style="max-width:100% !important;height:auto !important;display:block;margin:10px auto;"');
+ }
+ return match;
+ });
+
+ return content;
},
loadDetailData() {
//鑾峰緱璇︽儏鎺ュ彛
@@ -281,14 +308,25 @@
margin-bottom: 15rpx;
}
+ /* 淇敼鍚庣殑鏍峰紡 */
.status-bar {
- position: absolute;
- bottom: 40rpx;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
width: 100%;
display: flex;
align-items: center;
- padding: 10px 15px;
+ padding: 20rpx 30rpx;
justify-content: space-between;
+ background-color: #fff;
+ box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.1);
+ z-index: 100;
+ }
+
+ /* 璋冩暣瀹瑰櫒搴曢儴鍐呰竟璺� */
+ .container {
+ padding-bottom: 120rpx;
}
.signup-btn {
@@ -344,53 +382,19 @@
.rich-text-container {
padding: 15px;
+ overflow: hidden;
+ /* 闃叉鍐呭婧㈠嚭 */
}
.rich-text-content {
+ width: 100%;
+ max-width: 100%; /* 闄愬埗鏈�澶у搴� */
line-height: 1.6;
color: #333;
font-size: 28rpx;
- }
-
- .rich-text-content img {
- max-width: 100%;
- height: auto;
- display: block;
- margin: 10px auto;
- }
-
- .rich-text-content video {
- max-width: 100%;
- height: auto;
- display: block;
- margin: 10px auto;
- }
-
- .rich-text-content p {
- margin-bottom: 10px;
- }
-
- .rich-text-content h1,
- .rich-text-content h2,
- .rich-text-content h3,
- .rich-text-content h4 {
- margin: 20px 0 10px;
- color: #222;
- }
-
- .rich-text-content h1 {
- font-size: 24px;
- }
-
- .rich-text-content h2 {
- font-size: 22px;
- }
-
- .rich-text-content h3 {
- font-size: 20px;
- }
-
- .rich-text-content h4 {
- font-size: 18px;
+ word-wrap: break-word;
+ /* 闀垮崟璇嶆崲琛� */
+ overflow: hidden;
+ /* 闅愯棌婧㈠嚭鍐呭 */
}
</style>
\ No newline at end of file
diff --git a/pages/mine/myCollect/myCollect.vue b/pages/mine/myCollect/myCollect.vue
index f6217f8..d198b7a 100644
--- a/pages/mine/myCollect/myCollect.vue
+++ b/pages/mine/myCollect/myCollect.vue
@@ -1,6 +1,5 @@
<template>
-
- <view class="activity-container">
+ <view class="page-container">
<!-- 椤堕儴 Tab 瀵艰埅 -->
<view class="tab-nav">
<view v-for="(tab, index) in tabs" :key="index" class="tab-item" :class="{active: currentTab === index}"
@@ -9,355 +8,389 @@
</view>
</view>
- <!-- 瑙嗛鍒楄〃 -->
- <view class="activity-list">
- <view v-if="currentTab === 0">
- <scroll-view scroll-y class="activity-list" style="height: 100vh;" @scrolltolower="loadMore"
- :lower-threshold="100">
- <view v-if="videoCollects.length > 0">
- <view v-for="(item, idx) in videoCollects" :key="item.id" class="video-item">
- <!-- 瑙嗛灏侀潰+鎾斁鎸夐挳 -->
- <view class="video-cover-container" @click="jumpToPlay(idx)">
- <image :src="item.coverUrl" mode="aspectFill" class="video-cover" />
- <view class="play-icon">
- <u-icon name="play-circle-fill" size="60" color="#fff"></u-icon>
- </view>
- <view class="video-duration" v-if="item.duration">{{ item.duration }}</view>
- </view>
-
- <!-- 瑙嗛淇℃伅 -->
- <view class="video-info" @click="jumpToPlay(idx)">
- <view class="video-title">{{ item.authorName || '鏈煡浣滆��' }}</view>
- <view class="video-meta">
- <text class="video-weight" v-if="item.weight > 0">
- <u-icon name="thumb-up-fill" size="24" color="#999"></u-icon>
- {{ item.weight }}
- </text>
- </view>
- </view>
-
- <!-- 鎿嶄綔鎸夐挳 -->
- <view class="video-actions">
- <button class="cancel-btn" @click.stop="handleCancelCollection(item,'video',idx)">
- 鍙栨秷鏀惰棌
- </button>
- </view>
- </view>
- </view>
- <view v-else class="empty-tip">
- <text>鏆傛棤鏀惰棌瑙嗛</text>
- </view>
- <view class="load-more">
- <u-loadmore v-if="videoCollects.length > 0"
- :status="loading ? 'loading' : noMore ? 'nomore' : 'loadmore'" :load-text="{
- loadmore: '涓婃媺鍔犺浇鏇村',
- loading: '姝e湪鍔犺浇',
- nomore: '娌℃湁鏇村浜�'
- }" />
- </view>
- </scroll-view>
-
-
-
- </view>
-
- <view v-if="currentTab === 1">
- <scroll-view scroll-y class="activity-list" style="height: 100vh;" @scrolltolower="loadMore"
- :lower-threshold="100">
- <view v-if="goodsCollects.length > 0">
- <view v-for="(item, idx) in goodsCollects" :key="item.id" class="activity-item">
- <!-- 灏侀潰鍖哄煙 -->
- <block>
- <image :src="item.original" mode="aspectFill" class="activity-cover" />
- </block>
-
- <!-- 娲诲姩淇℃伅 -->
- <view class="activity-info">
- <view class="activity-title">{{ item.goodsName }}</view>
- <view class="activity-meta">
- <text class="activity-time">浠锋牸:{{ item.price }}鍏�</text>
- <text class="activity-location">{{ item.storeName || '鏆傛棤' }}</text>
- </view>
- </view>
-
- <!-- 鎿嶄綔鍖哄煙 -->
- <view class="action-container">
- <button class="cancel-btn" @click="handleCancelCollection(item,'goods',idx)"
- hover-class="cancel-btn-hover">
- 鍙栨秷鏀惰棌
- </button>
- </view>
-
- </view>
- </view>
- <view v-else class="empty-tip">
-
- <text>鏆傛棤鏀惰棌鍟嗗搧</text>
- </view>
- <view class="load-more">
- <u-loadmore v-if="goodsCollects.length > 0"
- :status="loading ? 'loading' : noMore ? 'nomore' : 'loadmore'" :load-text="{
- loadmore: '涓婃媺鍔犺浇鏇村',
- loading: '姝e湪鍔犺浇',
- nomore: '娌℃湁鏇村浜�'
- }" />
- </view>
- </scroll-view>
- </view>
-
- <view v-if="currentTab === 2">
- <scroll-view scroll-y class="activity-list" style="height: 80vh;" @scrolltolower="loadMore"
- :lower-threshold="100">
- <view v-if="activityCollects.length > 0">
- <view v-for="(item, idx) in activityCollects" :key="item.id" class="activity-item">
- <!-- 灏侀潰鍖哄煙 -->
- <block v-if="item.coverType === '鍥剧墖' || item.coverType === '瑙嗛'">
- <image :src="item.cover" mode="aspectFill" class="activity-cover" />
- </block>
- <block v-if="item.coverType === '鏂囧瓧'">
- <view class="activity-cover text-cover">{{ item.cover }}</view>
- </block>
- <!-- 娲诲姩淇℃伅 -->
- <view class="activity-info">
- <view class="activity-title">{{ item.activityName }}</view>
- <view class="activity-meta">
- <text class="activity-time">{{ item.startTime }}</text>
- <text class="activity-time"> {{ item.endTime }}</text>
- <text class="activity-location">{{ item.activityLocation || '鏆傛棤' }}</text>
- </view>
- </view>
- <!-- 鎿嶄綔鍖哄煙 -->
- <view class="action-container">
- <button class="cancel-btn" @click="handleCancelCollection(item,'activity', idx)"
- hover-class="cancel-btn-hover">
- 鍙栨秷鏀惰棌
- </button>
- </view>
-
+ <!-- 瑙嗛鏀惰棌鍒楄〃 -->
+ <view v-if="currentTab === 0" class="list-container">
+ <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100">
+ <view v-if="videoCollects.length > 0">
+ <view v-for="(item, idx) in videoCollects" :key="item.id" class="collect-item">
+ <!-- 瑙嗛灏侀潰 -->
+ <image v-if="tem.videoContentType === 'img'" class="cover-image" :src="item.imgs[0]" mode="aspectFill"></image>
+
+ <view v-else class="cover-container">
+ <video class="cover-image"
+ :src="item.videoUrl"
+ initial-time='0.01'
+ muted
+ :controls="false"
+ :show-center-play-btn="false"
+ object-fit="cover"></video>
+ <!-- <image :src="getVideoCover()" mode="aspectFill" class="cover-image" /> -->
+ <!-- <view v-if="item.duration" class="duration">
+ {{ formatDuration(item.duration) }}
+ </view> -->
</view>
+ <!-- 瑙嗛淇℃伅 -->
+ <view class="info-container">
+ <view class="title">{{ item.title || '鏃犳爣棰樿棰�' }}</view>
+ <view class="meta">
+ <view class="meta-item">
+ <u-icon name="account-fill" size="24" color="#999"></u-icon>
+ {{ item.authorName || '鏈煡浣滆��' }}
+ </view>
+ <view class="meta-item" v-if="item.weight > 0">
+ <u-icon name="thumb-up-fill" size="24" color="#999"></u-icon>
+ {{ item.weight }}
+ </view>
+ </view>
+ </view>
+ <!-- 鍙栨秷鏀惰棌鎸夐挳 -->
+ <view class="action-container">
+ <button class="cancel-btn" @click.stop="handleCancelCollection(item, 'video', idx)"
+ hover-class="cancel-btn-hover">
+ 鍙栨秷鏀惰棌
+ </button>
+ </view>
</view>
- <view v-else class="empty-tip">
- <text>鏆傛棤鏀惰棌娲诲姩</text>
- </view>
- <view class="load-more">
- <u-loadmore v-if="activityCollects.length > 0"
- :status="loading ? 'loading' : noMore ? 'nomore' : 'loadmore'" :load-text="{
- loadmore: '涓婃媺鍔犺浇鏇村',
- loading: '姝e湪鍔犺浇',
- nomore: '娌℃湁鏇村浜�'
- }" />
- </view>
- <view style="height: 150rpx"></view>
- </scroll-view>
-
- </view>
-
-
-
+ </view>
+ <view v-else class="empty-tip">
+ <image src="/static/empty.png" mode="aspectFit" />
+ <text>鏆傛棤鏀惰棌瑙嗛</text>
+ </view>
+ <view class="load-more">
+ <u-loadmore v-if="videoCollects.length > 0" :status="loadStatus" :load-text="{
+ loadmore: '涓婃媺鍔犺浇鏇村',
+ loading: '姝e湪鍔犺浇',
+ nomore: '娌℃湁鏇村浜�'
+ }" />
+ </view>
+ </scroll-view>
</view>
+ <!-- 鍟嗗搧鏀惰棌鍒楄〃 -->
+ <view v-if="currentTab === 1" class="list-container">
+ <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100">
+ <view v-if="goodsCollects.length > 0">
+ <view v-for="(item, idx) in goodsCollects" :key="item.id" class="collect-item">
+ <!-- 鍟嗗搧灏侀潰 -->
+ <view class="cover-container">
+ <image :src="item.original" mode="aspectFill" class="cover-image" />
+ </view>
+ <!-- 鍟嗗搧淇℃伅 -->
+ <view class="info-container">
+ <view class="title">{{ item.goodsName }}</view>
+ <view class="meta">
+ <view class="meta-item">
+ <u-icon name="rmb-circle-fill" size="24" color="#FF5500"></u-icon>
+ {{ item.price }}鍏�
+ </view>
+ <view class="meta-item">
+ <u-icon name="home-fill" size="24" color="#999"></u-icon>
+ {{ item.storeName || '鏆傛棤' }}
+ </view>
+ </view>
+ </view>
+
+ <!-- 鍙栨秷鏀惰棌鎸夐挳 -->
+ <view class="action-container">
+ <button class="cancel-btn" @click.stop="handleCancelCollection(item, 'goods', idx)"
+ hover-class="cancel-btn-hover">
+ 鍙栨秷鏀惰棌
+ </button>
+ </view>
+ </view>
+ </view>
+ <view v-else class="empty-tip">
+ <image src="/static/empty.png" mode="aspectFit" />
+ <text>鏆傛棤鏀惰棌鍟嗗搧</text>
+ </view>
+ <view class="load-more">
+ <u-loadmore v-if="goodsCollects.length > 0" :status="loadStatus" :load-text="{
+ loadmore: '涓婃媺鍔犺浇鏇村',
+ loading: '姝e湪鍔犺浇',
+ nomore: '娌℃湁鏇村浜�'
+ }" />
+ </view>
+ </scroll-view>
+ </view>
+
+ <!-- 娲诲姩鏀惰棌鍒楄〃 -->
+ <view v-if="currentTab === 2" class="list-container">
+ <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100">
+ <view v-if="activityCollects.length > 0">
+ <view v-for="(item, idx) in activityCollects" :key="item.id" class="collect-item">
+ <!-- 娲诲姩灏侀潰 -->
+ <view class="cover-container">
+ <image v-if="item.coverType === '鍥剧墖' || item.coverType === '瑙嗛'" :src="item.cover"
+ mode="aspectFill" class="cover-image" />
+ <view v-else-if="item.coverType === '鏂囧瓧'" class="text-cover">
+ {{ item.cover }}
+ </view>
+ </view>
+
+ <!-- 娲诲姩淇℃伅 -->
+ <view class="info-container">
+ <view class="title">{{ item.activityName }}</view>
+ <view class="meta">
+ <view class="meta-item">
+ <u-icon name="calendar-fill" size="24" color="#999"></u-icon>
+ {{ item.startTime }} ~ {{ item.endTime }}
+ </view>
+ <view class="meta-item">
+ <u-icon name="map-pin-fill" size="24" color="#999"></u-icon>
+ {{ item.activityLocation || '鏆傛棤' }}
+ </view>
+ </view>
+ </view>
+
+ <!-- 鍙栨秷鏀惰棌鎸夐挳 -->
+ <view class="action-container">
+ <button class="cancel-btn" @click.stop="handleCancelCollection(item, 'activity', idx)"
+ hover-class="cancel-btn-hover">
+ 鍙栨秷鏀惰棌
+ </button>
+ </view>
+ </view>
+ </view>
+ <view v-else class="empty-tip">
+ <image src="/static/empty.png" mode="aspectFit" />
+ <text>鏆傛棤鏀惰棌娲诲姩</text>
+ </view>
+ <view class="load-more">
+ <u-loadmore v-if="activityCollects.length > 0" :status="loadStatus" :load-text="{
+ loadmore: '涓婃媺鍔犺浇鏇村',
+ loading: '姝e湪鍔犺浇',
+ nomore: '娌℃湁鏇村浜�'
+ }" />
+ </view>
+ </scroll-view>
+ </view>
</view>
-
</template>
<script>
- import '@/components/uview-components/uview-ui';
- import storage from '@/utils/storage';
- import {getAuthorCollectVideoPage} from '@/api/user.js'
import {
- getFilePreviewUrl
- } from '@/api/common.js'
- import {
- changeCollect,
- getMyCollectList
+ getMyCollectList,
+ changeCollect
} from '@/api/collect.js'
- import {
- ifError
- } from 'assert'
- export default {
+ import storage from '@/utils/storage'
+ export default {
data() {
return {
- total: 0,
- loading: false,
- noMore: false,
- currentTab: 0, // 褰撳墠閫変腑鐨則ab绱㈠紩
+ currentTab: 0,
tabs: ['瑙嗛', '鍟嗗搧', '娲诲姩'],
- //
- videoCollects: [], // 鏀惰棌瑙嗛鍒楄〃
- goodsCollects: [], // 鏀惰棌鍟嗗搧鍒楄〃
- activityCollects: [], // 鏀惰棌娲诲姩鍒楄〃
- collectForm: {
- collectType: '',
- refId: '',
- },
+ videoCollects: [],
+ goodsCollects: [],
+ activityCollects: [],
query: {
authorId: '',
type: 'video',
pageNumber: 1,
- pageSize: 5,
- }
+ pageSize: 5
+ },
+ loading: false,
+ noMore: false,
+ total: 0
+ }
+ },
+ computed: {
+ loadStatus() {
+ return this.loading ? 'loading' : this.noMore ? 'nomore' : 'loadmore'
}
},
onLoad() {
- this.currentTab = 0;
this.query.authorId = storage.getUserInfo().id
- this.getintit()
+ this.loadData()
+ },
+ onPullDownRefresh() {
+ this.query.pageNumber = 1
+ this.noMore = false
+ this.videoCollects = []
+ this.goodsCollects = []
+ this.activityCollects = []
+ this.loadData().finally(() => {
+ uni.stopPullDownRefresh()
+ })
},
methods: {
- jumpToPlay(index) {
- const playInfo = {
- videoList: this.videoCollects,
- nomore: this.noMore,
- pageNumber: this.query.pageNumber,
- playIndex: index
- }
- uni.setStorageSync("playInfo", playInfo)
- uni.navigateTo({
- url: `/pages/video/video-play?authorId=${this.query.authorId}&videoFrom=collect`
- });
+ async getVideoCover(videoPath) {
+ return null;
},
- /**
- * 涓嬫媺鍒锋柊鏃�
- */
- onPullDownRefresh() {
- this.currentTab = 0;
- this.query.pageNumber = 1; // 閲嶇疆椤电爜
- this.noMore = false;
- this.videoCollects = [];
- this.goodsCollects = []; // 鏀惰棌鍟嗗搧鍒楄〃
- this.activityCollects = []; // 鏀惰棌娲诲姩鍒楄〃// 娓呯┖鏁版嵁
- this.getintit();
- },
- loadMore() {
- this.loading = true;
- // 寤惰繜鎵ц璁︰I鏈夊弽搴旀椂闂�
- setTimeout(() => {
- this.query.pageNumber += 1;
- this.getintit();
- }, 300);
- },
+
+
+ // 璺宠浆鍒拌棰戞挱鏀鹃〉
+ // jumpToPlay(index) {
+ // const playInfo = {
+ // videoList: this.videoCollects,
+ // nomore: this.noMore,
+ // pageNumber: this.query.pageNumber,
+ // playIndex: index
+ // }
+ // uni.setStorageSync("playInfo", playInfo)
+ // uni.navigateTo({
+ // url: `/pages/video/video-play?authorId=${this.query.authorId}&videoFrom=collect`
+ // })
+ // },
+
+ // 鍙栨秷鏀惰棌
handleCancelCollection(item, type, index) {
- console.log(item)
- this.collectForm.collectType = type;
- this.collectForm.refId = item.id;
- changeCollect(this.collectForm).then(res => {
- if (res.data.code === 200) {
- uni.showToast({
- title: res.data.msg, // 鎻愮ず鏂囧瓧
- icon: 'none', // 鍥炬爣绫诲瀷锛坰uccess/loading/none锛�
- mask: true // 鏄惁鏄剧ず閫忔槑钂欏眰锛堥槻姝㈣Е鎽哥┛閫忥級
- });
- this.query.pageNumber = 1
- // 鍥犱负瑙嗛璧扮殑mq鏈夊欢杩燂紝鍓嶇鐩存帴鍒犻櫎璇ュ厓绱犺揪鍒版晥鏋�
- if (type === 'video') {
- this.videoCollects.splice(index, 1)
- } else {
- this.noMore = false
- this.getintit()
+ uni.showModal({
+ title: '鎻愮ず',
+ content: '纭畾瑕佸彇娑堟敹钘忓悧锛�',
+ success: (res) => {
+ if (res.confirm) {
+ changeCollect({
+ collectType: type,
+ refId: item.id
+ }).then(res => {
+ if (res.data.code === 200) {
+ uni.showToast({
+ title: res.data.msg,
+ icon: 'none'
+ })
+ if (type === 'video') {
+ this.videoCollects.splice(index, 1)
+ } else {
+ this.query.pageNumber = 1
+ this.noMore = false
+ this.loadData()
+ }
+ }
+ })
}
}
+ })
+ },
- })
- },
- getUrl(params) {
- getFilePreviewUrl(params).then(res => {
- return res.data.data
- })
- },
- // 鍒囨崲tab
+ // 鍒囨崲鏍囩椤�
switchTab(index) {
if (this.currentTab !== index) {
this.currentTab = index
- //鍒囨崲鏃堕〉鐮佸綊0
- this.query.pageNumber = 0;
- // 娓呯┖鏁版嵁
- this.videoCollects = [];
- this.goodsCollects = [];
- this.activityCollects = [];
- // 瀹為檯椤圭洰涓彲浠ュ湪杩欓噷娣诲姞鍔犺浇鏁版嵁鐨勯�昏緫
- this.getintit()
+ this.query.pageNumber = 1
+ this.query.type = ['video', 'goods', 'activity'][index]
+ this.videoCollects = []
+ this.goodsCollects = []
+ this.activityCollects = []
+ this.loadData()
}
},
- async getintit() {
+
+ // 鍔犺浇鏇村
+ loadMore() {
+ if (!this.loading && !this.noMore) {
+ this.query.pageNumber += 1
+ this.loadData()
+ }
+ },
+
+ // 鍔犺浇鏁版嵁
+ async loadData() {
+ if (this.loading) return
+
+ this.loading = true
uni.showLoading({
title: '鍔犺浇涓�'
- });
- if (this.currentTab === 0) {
- this.query.type = 'video';
- getAuthorCollectVideoPage(this.query).then(res => {
- uni.hideLoading();
- this.loading = false;
+ })
- if (res.data.code === 200) {
- const newData = res.data.data
- this.total = res.data.total || 0;
- // 杩藉姞鎴栨浛鎹㈡暟鎹�
- this.videoCollects = this.query.pageNumber === 1 ?
- newData :
- [...this.videoCollects, ...newData];
- // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
- this.noMore = newData.length < this.query.pageSize ||
- this.videoCollects.length >= this.total;
- }
- })
- } else if (this.currentTab === 1) {
- this.query.type = 'goods';
+ try {
getMyCollectList(this.query).then(res => {
- uni.hideLoading();
- this.loading = false;
if (res.data.code === 200) {
const newData = res.data.data
- this.total = res.data.total || 0;
+ this.total = res.data.total || 0
- this.goodsCollects = this.query.pageNumber === 1 ?
- newData :
- [...this.goodsCollects, ...newData];
- // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
- this.noMore = newData.length < this.query.pageSize ||
- this.goodsCollects.length >= this.total;
- }
- })
- } else if (this.currentTab === 2) {
- this.query.type = 'activity';
- getMyCollectList(this.query).then(res => {
- uni.hideLoading();
- this.loading = false;
- if (res.data.code === 200) {
- const newData = res.data.data
- this.total = res.data.total || 0;
+ // 鏍规嵁褰撳墠鏍囩椤垫洿鏂板搴旀暟鎹�
+ if (this.currentTab === 0) {
+ this.videoCollects = this.query.pageNumber === 1 ?
+ newData :
+ [...this.videoCollects, ...newData]
+ } else if (this.currentTab === 1) {
+ this.goodsCollects = this.query.pageNumber === 1 ?
+ newData :
+ [...this.goodsCollects, ...newData]
+ } else if (this.currentTab === 2) {
+ this.activityCollects = this.query.pageNumber === 1 ?
+ newData :
+ [...this.activityCollects, ...newData]
+ }
- this.activityCollects = this.query.pageNumber === 1 ?
- newData :
- [...this.activityCollects, ...newData];
this.noMore = newData.length < this.query.pageSize ||
- this.activityCollects.length >= this.total;
+ (this.currentTab === 0 ? this.videoCollects :
+ this.currentTab === 1 ? this.goodsCollects : this.activityCollects)
+ .length >= this.total
}
+ });
+
+ } catch (error) {
+ console.error(error)
+ uni.showToast({
+ title: '鍔犺浇澶辫触',
+ icon: 'none'
})
+ } finally {
+ this.loading = false
+ uni.hideLoading()
}
-
}
}
}
</script>
<style lang="scss">
- .text-cover {
- display: flex;
- align-items: center;
- justify-content: center;
- background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
- color: #fff;
- font-size: 28rpx;
- padding: 16rpx;
- line-height: 1.4;
+ .page-container {
+ padding: 20rpx;
+ background-color: #f5f5f5;
+ min-height: 100vh;
}
- /* 瑙嗛鍒楄〃涓撶敤鏍峰紡 */
- .video-item {
+ .tab-nav {
+ display: flex;
+ background-color: #fff;
+ border-radius: 12rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
+
+ .tab-item {
+ flex: 1;
+ text-align: center;
+ padding: 24rpx 0;
+ font-size: 28rpx;
+ color: #666;
+ position: relative;
+
+ &.active {
+ color: #007AFF;
+ font-weight: bold;
+
+ &::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 80rpx;
+ height: 6rpx;
+ background-color: #007AFF;
+ border-radius: 3rpx;
+ }
+ }
+ }
+ }
+
+ .list-container {
+ background-color: #fff;
+ border-radius: 12rpx;
+ padding: 20rpx;
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
+
+ .scroll-view {
+ height: calc(100vh - 200rpx);
+ }
+ }
+
+ .collect-item {
display: flex;
padding: 24rpx 0;
border-bottom: 1rpx solid #f5f5f5;
@@ -368,18 +401,31 @@
}
}
- .video-cover-container {
+ .cover-container {
position: relative;
- width: 240rpx;
- height: 160rpx;
+ width: 250rpx;
+ height: 180rpx;
border-radius: 12rpx;
overflow: hidden;
margin-right: 24rpx;
flex-shrink: 0;
- .video-cover {
+ .cover-image {
width: 100%;
height: 100%;
+ }
+
+ .text-cover {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
+ color: #fff;
+ font-size: 28rpx;
+ padding: 16rpx;
+ line-height: 1.4;
}
.play-icon {
@@ -390,7 +436,7 @@
opacity: 0.9;
}
- .video-duration {
+ .duration {
position: absolute;
right: 8rpx;
bottom: 8rpx;
@@ -402,14 +448,14 @@
}
}
- .video-info {
+ .info-container {
flex: 1;
+ height: 160rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
- height: 160rpx;
- .video-title {
+ .title {
font-size: 30rpx;
color: #333;
font-weight: bold;
@@ -419,22 +465,21 @@
overflow: hidden;
}
- .video-meta {
+ .meta {
display: flex;
- justify-content: space-between;
- font-size: 24rpx;
- color: #999;
+ flex-wrap: wrap;
-
-
- .video-weight {
+ .meta-item {
display: flex;
align-items: center;
+ margin-right: 20rpx;
+ font-size: 24rpx;
+ color: #999;
}
}
}
- .video-actions {
+ .action-container {
margin-left: 20rpx;
flex-shrink: 0;
@@ -458,6 +503,7 @@
image {
width: 300rpx;
+ height: 300rpx;
margin-bottom: 30rpx;
opacity: 0.6;
}
@@ -469,138 +515,7 @@
}
}
- .activity-container {
- padding: 20rpx;
- background-color: #f5f5f5;
- min-height: 100vh;
- }
-
- /* Tab 瀵艰埅鏍峰紡 */
- .tab-nav {
- display: flex;
- background-color: #fff;
- border-radius: 12rpx;
- margin-bottom: 20rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
- }
-
- .tab-item {
- flex: 1;
- text-align: center;
- padding: 24rpx 0;
- font-size: 28rpx;
- color: #666;
- position: relative;
-
- &.active {
- color: #007AFF;
- font-weight: bold;
-
- &::after {
- content: '';
- position: absolute;
- bottom: 0;
- left: 50%;
- transform: translateX(-50%);
- width: 80rpx;
- height: 6rpx;
- background-color: #007AFF;
- border-radius: 3rpx;
- }
- }
- }
-
- /* 娲诲姩鍒楄〃鏍峰紡 */
- .activity-list {
- background-color: #fff;
- border-radius: 12rpx;
- padding: 20rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
- }
-
- .activity-item {
- display: flex;
+ .load-more {
padding: 20rpx 0;
- border-bottom: 1rpx solid #eee;
-
- &:last-child {
- border-bottom: none;
- }
- }
-
- .activity-cover {
- width: 200rpx;
- height: 140rpx;
- border-radius: 8rpx;
- margin-right: 20rpx;
- }
-
- .activity-info {
- flex: 1;
- position: relative;
- }
-
- .activity-title {
- font-size: 32rpx;
- color: #333;
- font-weight: bold;
- margin-bottom: 12rpx;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
- overflow: hidden;
- }
-
- .activity-meta {
- font-size: 24rpx;
- color: #999;
- margin-bottom: 16rpx;
-
- text {
- display: block;
- margin-bottom: 8rpx;
- }
- }
-
- .activity-status {
- position: absolute;
- right: 0;
- top: 0;
- font-size: 24rpx;
- padding: 4rpx 12rpx;
- border-radius: 20rpx;
-
- &.signed {
- color: #007AFF;
- background-color: rgba(0, 122, 255, 0.1);
- }
-
- &.ended {
- color: #999;
- background-color: rgba(153, 153, 153, 0.1);
- }
-
- &.canceled {
- color: #ff3b30;
- background-color: rgba(255, 59, 48, 0.1);
- }
- }
-
- /* 绌虹姸鎬佹彁绀� */
- .empty-tip {
- text-align: center;
- padding: 100rpx 0;
-
- image {
- width: 300rpx;
- margin-bottom: 30rpx;
- opacity: 0.6;
- }
-
- text {
- display: block;
- font-size: 28rpx;
- color: #999;
- }
}
</style>
\ No newline at end of file
diff --git a/pages/video/home-page.vue b/pages/video/home-page.vue
index 340c171..c00838f 100644
--- a/pages/video/home-page.vue
+++ b/pages/video/home-page.vue
@@ -74,6 +74,7 @@
v-for="(item, index) in videoList"
:key="item.id"
>
+
<image class="video-cover" @click="playAuthorVideo(index)" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image>
<view class="video-info">
<view class="video-stats">
@@ -103,7 +104,16 @@
:key="item.id"
@click="playCollectVideo(index)"
>
- <image class="video-cover" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image>
+ <image v-if="tem.videoContentType === 'img'" class="video-cover" :src="item.imgs[0]" mode="aspectFill"></image>
+ <video v-else class="video-cover"
+ :src="item.videoUrl"
+ initial-time='0.01'
+ muted
+ :controls="false"
+ :show-center-play-btn="false"
+ object-fit="cover"></video>
+
+ <!-- <image class="video-cover" :src="getCoverUrl(item)"></image> -->
<view class="video-info">
<view class="video-stats">
<view class="stat">
@@ -123,7 +133,13 @@
:key="item.id"
@click="playLikeVideo(index)"
>
- <image class="video-cover" :src="item.videoContentType === 'video' ? item.coverUrl : item.imgs[0]" mode="aspectFill"></image>
+ <video class="video-cover"
+ :src="item.videoContentType === 'video' ? item.videoUrl : item.imgs[0]" mode="aspectFill"
+ initial-time='0.01'
+ muted
+ :controls="false"
+ :show-center-play-btn="false"
+ object-fit="cover"></video>
<view class="video-info">
<view class="video-stats">
<view class="stat">
@@ -246,6 +262,13 @@
this.getAuthorVideoPage();
},
methods: {
+ getCoverUrl(item) {
+ if (item.videoContentType === 'video') {
+ // OSS瑙嗛灏侀潰鍙傛暟锛堝畬鏁存牸寮忥級
+ return `${item.videoUrl}?x-oss-process=video/snapshot,t_1000,f_jpg,m_fast`
+ }
+ return item.imgs?.[0]
+ },
dialogClose() {
this.opVideo = {
id: '',
--
Gitblit v1.8.0