| | |
| | | } |
| | | }, |
| | | // { |
| | | // "path": "myCollect", |
| | | // "style": { |
| | | // "navigationBarTitleText": "收藏", |
| | | // "enablePullDownRefresh": true, |
| | | // //下拉刷新 |
| | | // "navigationStyle": "custom", |
| | | // "app-plus": { |
| | | // "scrollIndicator": "none" |
| | | // }, |
| | | // "componentPlaceholder": { |
| | | // "u-navbar": "view", |
| | | // "u-tabs": "view", |
| | | // "u-empty": "view", |
| | | // "u-swipe-action": "view", |
| | | // "u-image": "view", |
| | | // "u-loading": "view", |
| | | // "u-tag": "view" |
| | | // } |
| | | // } |
| | | // }, |
| | | // { |
| | | // "path": "distribution/list", |
| | | // "style": { |
| | | // "navigationBarTitleText": "推广分佣", |
| | |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | "path": "myCollect/myCollect", |
| | | "style": { |
| | | "navigationBarTitleText": "我的收藏", |
| | | "enablePullDownRefresh": true, |
| | | //下拉刷新 |
| | | "componentPlaceholder": { |
| | | "u-icon": "view", |
| | | "u-button": "view", |
| | | "u-form": "view", |
| | | "u-form-item": "view", |
| | | "u-input": "view", |
| | | "u-popup": "view", |
| | | "u-search": "view", |
| | | "u-loading": "view", |
| | | "u-navbar": "view", |
| | | "u-image": "view", |
| | | "u-loadmore": "view" |
| | | } |
| | | } |
| | | }, |
| | | // { |
| | | // "path": "myCollect/myCollect", |
| | | // "style": { |
| | | // "navigationBarTitleText": "我的收藏", |
| | | // "enablePullDownRefresh": true, |
| | | // //下拉刷新 |
| | | // "componentPlaceholder": { |
| | | // "u-icon": "view", |
| | | // "u-button": "view", |
| | | // "u-form": "view", |
| | | // "u-form-item": "view", |
| | | // "u-input": "view", |
| | | // "u-popup": "view", |
| | | // "u-search": "view", |
| | | // "u-loading": "view", |
| | | // "u-navbar": "view", |
| | | // "u-image": "view", |
| | | // "u-loadmore": "view" |
| | | // } |
| | | // } |
| | | // }, |
| | | { |
| | | "path": "myAttention", |
| | | "style": { |
| | |
| | | </view> |
| | | <u-icon style="display: flex;align-items: flex-start;" name="arrow-right"></u-icon> |
| | | </view> |
| | | |
| | | <view class="member-gradient-bg"> |
| | | <view class="member-content"> |
| | | <view class="vip-icon"> |
| | | <image src="/static/tabbar/vip.png" mode="widthFix"></image> |
| | | </view> |
| | | <view class="vip-info"> |
| | | <p class="vip-level">绿满筐会员</p> |
| | | <p class="vip-validity">长期有效</p> |
| | | </view> |
| | | |
| | | <!-- 会员标识装饰 --> |
| | | <view class="vip-badge"> |
| | | <text class="badge-text">尊享特权</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | <!-- 积分,优惠券,关注, --> |
| | | <div class="pointBox box"> |
| | | <u-row text-align="center" gutter="16" class="point"> |
| | |
| | | </view> |
| | | <view>关注列表</view> |
| | | </view> |
| | | <view class="order-item" @click="navigateTo('/pages/mine/myCollect/myCollect')"> |
| | | <!-- <view class="order-item" @click="navigateTo('/pages/mine/myCollect/myCollect')"> |
| | | <view> |
| | | <text class="iconfont"></text> |
| | | </view> |
| | | <view>收藏列表</view> |
| | | </view> |
| | | </view --> |
| | | <view class="order-item" @click="navigateTo('/pages/mine/activity/myActivity')"> |
| | | <view> |
| | | <text class="iconfont"></text> |
| | |
| | | <view class="pointBox box" style="margin-top: 20rpx;"> |
| | | <tool /> |
| | | </view> |
| | | |
| | | |
| | | <!-- 撑起下方 --> |
| | | <view style="height:64px;"> |
| | | </view> |
| | | <custom-tabbar bgColor="#ffffff" selected="my"></custom-tabbar> |
| | | </view> |
| | | </template> |
| | |
| | | body { |
| | | overflow: auto; |
| | | } |
| | | |
| | | .member-gradient-bg { |
| | | width: 98%; |
| | | height: 250rpx; |
| | | margin: 1% 1%; |
| | | background: linear-gradient(135deg, #FF7A45 0%, #FF5252 100%); |
| | | border-radius: 24rpx; |
| | | box-shadow: 0 8rpx 30rpx rgba(255, 82, 82, 0.3); |
| | | transition: all 0.3s ease; |
| | | |
| | | &:active { |
| | | transform: scale(0.98); |
| | | } |
| | | } |
| | | /* 内容区域 */ |
| | | .member-content { |
| | | width: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 40rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | /* 会员信息 */ |
| | | .vip-info { |
| | | flex: 1; |
| | | .vip-level { |
| | | font-size: 40rpx; |
| | | font-weight: bold; |
| | | color: #FFFFFF; |
| | | margin: 0; |
| | | line-height: 1; |
| | | text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .vip-validity { |
| | | font-size: 26rpx; |
| | | color: rgba(255, 255, 255, 0.9); |
| | | margin: 10rpx 0 0 0; |
| | | } |
| | | } |
| | | |
| | | /* 会员图标 */ |
| | | .vip-icon { |
| | | width: 100rpx; |
| | | height: 100rpx; |
| | | margin-right: 30rpx; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | background-color: rgba(255, 255, 255, 0.2); |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .vip-icon image { |
| | | width: 60rpx; |
| | | height: 60rpx; |
| | | } |
| | | /* 特权标识 */ |
| | | .vip-badge { |
| | | padding: 8rpx 20rpx; |
| | | background-color: rgba(255, 215, 0, 0.9); |
| | | border-radius: 30rpx; |
| | | box-shadow: 0 3rpx 6rpx rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .badge-text { |
| | | font-size: 24rpx; |
| | | color: #E63946; |
| | | font-weight: 600; |
| | | } |
| | | |
| | | .money { |
| | | overflow: hidden; |
| | | |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .user { |
| | | background: #e7e7e7; |
| | | .header { |
| | | max-width: 100%; |
| | | padding: calc(50rpx + var(--status-bar-height)) 30rpx 0 6%; |
| | |
| | | } |
| | | } |
| | | |
| | | .pointBox { |
| | | width: 94%; |
| | | margin: 0 3%; |
| | | background: #fff; |
| | | border-radius: 20rpx; |
| | | box-shadow: 0 4rpx 24rpx 0 rgba($color: #f6f6f6, $alpha: 1); |
| | | } |
| | | |
| | | .point { |
| | | text-align: center; |
| | | height: 160rpx; |
| | |
| | | justify-content: space-around; |
| | | align-items: center; |
| | | padding: 0 3%; |
| | | color: #999; |
| | | |
| | | color: #666; |
| | | background: #fff; |
| | | border-radius: 20rpx; |
| | | box-shadow: 0 4rpx 24rpx 0 #f6f6f6; |
| | | margin: 0 20rpx; |
| | | |
| | | .order-item { |
| | | position: relative; |
| | | line-height: 2em; |
| | |
| | | |
| | | :first-child { |
| | | font-size: 48rpx; |
| | | margin-bottom: 10rpx; |
| | | margin-bottom: 12rpx; |
| | | color: #333; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .box { |
| | | transform: translateY(-30rpx); |
| | | width: 95%; |
| | | margin: auto; |
| | | background: #fff; |
| | | border-radius: 20rpx; |
| | | box-shadow: 0 4rpx 24rpx 0 #f6f6f6; |
| | | transform: translateY(-30rpx); |
| | | } |
| | | |
| | | .user-name { |
| | |
| | | > |
| | | 作品{{`(${videoTotal})`}} |
| | | </view> |
| | | <view |
| | | <view |
| | | class="tab-item" |
| | | :class="{active: currentTab === 'collect'}" |
| | | @click="switchTab('collect')" |
| | |
| | | 喜欢 |
| | | </view> |
| | | </view> |
| | | |
| | | |
| | | |
| | | |
| | | <!-- 视频列表 --> |
| | | <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'works' && videoList.length > 0"> |
| | | <view class="video-container"> |
| | |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | <scroll-view class="video-list" scroll-y :show-scrollbar="false" @scrolltolower="getPage" v-show="currentTab === 'collect' && collectVideoList.length > 0"> |
| | | <view> |
| | | <mycollect v-show ="currentTab ==='collect'"></mycollect> |
| | | </view> |
| | | <!-- <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" |
| | |
| | | :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"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </scroll-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 |
| | |
| | | |
| | | import {getAuthorInfo, getAuthorVideoPage, getAuthorCollectVideoPage, getAuthorLikeVideoPage} from '@/api/user.js' |
| | | import {subscribe, unSubscribe, delVideo, updateVideo, userDownVideo} from '@/api/video.js' |
| | | import mycollect from '@/pages/video/myCollect.vue' |
| | | export default { |
| | | components: {DropdownMenu}, |
| | | components: {DropdownMenu, |
| | | mycollect}, |
| | | data() { |
| | | return { |
| | | options: [ |
File was renamed from pages/mine/myCollect/myCollect.vue |
| | |
| | | |
| | | <!-- 视频收藏列表 --> |
| | | <view v-if="currentTab === 0" class="list-container"> |
| | | <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100"> |
| | | <scroll-view scroll-y :lower-threshold="100" class="scroll-view-container" @scrolltolower="loadMore" > |
| | | <view v-if="videoCollects.length > 0"> |
| | | <view v-for="(item, idx) in videoCollects" :key="item.id" class="collect-item"> |
| | | <!-- 视频封面 --> |
| | |
| | | :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> |
| | | </view> |
| | | <view v-else class="empty-tip"> |
| | | <image src="/static/empty.png" mode="aspectFit" /> |
| | | |
| | | <text>暂无收藏视频</text> |
| | | </view> |
| | | <view class="load-more"> |
| | |
| | | |
| | | <!-- 商品收藏列表 --> |
| | | <view v-if="currentTab === 1" class="list-container"> |
| | | <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100"> |
| | | <scroll-view scroll-y class="scroll-view-container" @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> |
| | | </view> |
| | | <view v-else class="empty-tip"> |
| | | <image src="/static/empty.png" mode="aspectFit" /> |
| | | <text>暂无收藏商品</text> |
| | | </view> |
| | | <view class="load-more"> |
| | |
| | | |
| | | <!-- 活动收藏列表 --> |
| | | <view v-if="currentTab === 2" class="list-container"> |
| | | <scroll-view scroll-y class="scroll-view" @scrolltolower="loadMore" :lower-threshold="100"> |
| | | <scroll-view scroll-y class="scroll-view-container" @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> |
| | | </view> |
| | | <view v-else class="empty-tip"> |
| | | <image src="/static/empty.png" mode="aspectFit" /> |
| | | <text>暂无收藏活动</text> |
| | | </view> |
| | | <view class="load-more"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | import { onMounted } from "vue" |
| | | import { |
| | | getMyCollectList, |
| | | changeCollect |
| | | } from '@/api/collect.js' |
| | | import storage from '@/utils/storage' |
| | | |
| | | export default { |
| | | name:'myCollect', |
| | | data() { |
| | | return { |
| | | currentTab: 0, |
| | |
| | | return this.loading ? 'loading' : this.noMore ? 'nomore' : 'loadmore' |
| | | } |
| | | }, |
| | | onLoad() { |
| | | this.query.authorId = storage.getUserInfo().id |
| | | this.loadData() |
| | | mounted() { |
| | | this.query.authorId = storage.getUserInfo().id; |
| | | this.loadData(); |
| | | }, |
| | | onPullDownRefresh() { |
| | | this.query.pageNumber = 1 |
| | |
| | | .page-container { |
| | | padding: 20rpx; |
| | | background-color: #f5f5f5; |
| | | min-height: 100vh; |
| | | } |
| | | |
| | | .tab-nav { |
| | |
| | | border-radius: 12rpx; |
| | | padding: 20rpx; |
| | | box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); |
| | | |
| | | .scroll-view { |
| | | height: calc(100vh - 200rpx); |
| | | } |
| | | height: 70vh; |
| | | |
| | | } |
| | | |
| | | /* 内容区域优化 */ |
| | | .scroll-view-container { |
| | | width: 100%; |
| | | padding: 0 10rpx; |
| | | height: calc(100vh - 554rpx); |
| | | background-color: #fff; |
| | | overflow: hidden; |
| | | padding: 0 10rpx; |
| | | } |
| | | .collect-item { |
| | | display: flex; |
| | | padding: 24rpx 0; |