From 9e0d2563ee3adc08b27f365e315855d776fd08f0 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 11 七月 2025 10:00:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
pages/kitchen/KitchenVideo.vue | 2771 ++++++++++++++++++++++++++++++++--------------------------
1 files changed, 1,525 insertions(+), 1,246 deletions(-)
diff --git a/pages/kitchen/KitchenVideo.vue b/pages/kitchen/KitchenVideo.vue
index b982f72..84bc77d 100644
--- a/pages/kitchen/KitchenVideo.vue
+++ b/pages/kitchen/KitchenVideo.vue
@@ -1,1336 +1,1615 @@
<template>
- <view class="video-container">
- <!-- 瑙嗛鍒楄〃 -->
- <swiper class="video-swiper" vertical circular :current="currentIndex" @change="onSwiperChange">
- <view class="showLeft" @click="showDrawer('showLeft')" v-if="!showLeft">
- <uni-icons type="right" size="30"></uni-icons>
+ <view class="video-container">
+ <view class="choosePlatType" :style="{top: menueButton + 'px'}">
+ <view class="platTypeItem" v-for="item in choosePlat" :key="item.type" @click="chooseType=item.type">
+ <view class="platTypeItenName">
+ {{item.name}}
</view>
- <swiper-item v-for="(item, index) in videoList" :key="item.id">
- <view style="width: 100%;height: 100%;" v-if="item.videoContentType === 'video'">
- <!-- 鎾斁鎸夐挳锛堜粎褰撹棰戞殏鍋滄椂鏄剧ず锛� -->
- <view class="play-icon" @click="togglePlay(index)" v-if="!currentVideoIsPlaying">
- <image src="/static/video/play.png" style="width: 45px;height: 45px" mode="aspectFit"></image>
- </view>
- <video :id="'video'+index" :ref="'video'+index" :src="item.videoUrl"
- :autoplay="currentIndex === index" :controls="false" :loop="true" :object-fit="item.objectFit"
- :enable-progress-gesture="false" class="video-item" @play="onPlay(item.id, index)"
- @pause="onPause(index)" @ended="onEnded(index)" @click="togglePlay(index)"
- @timeupdate="onTimeUpdate($event)" @loadedmetadata="onLoadedMetadata($event)"></video>
- <!-- 鑷畾涔夋帶鍒舵潯 -->
- <view @touchstart="handleTouchStart" @touchmove="handleTouchMove" @touchend="handleTouchEnd"
- class="container">
- <!-- 杩涘害鏉� - 鏁翠釜鍖哄煙鍙嫋鍔� -->
- <view class="process-warp" :style="{ opacity: showProcess ? 1 : 0 }">
- <!-- 鏄剧ず褰撳墠杩涘害 -->
- <view class="progress-text">{{ hasPlayTime }}/{{formartDuration[index]}}</view>
- <view class="progress-bar" id="progressBar">
-
- <!-- 宸插~鍏呴儴鍒� -->
- <view class="progress-fill" :style="{ width: progress + '%' }"></view>
- </view>
- </view>
- </view>
- </view>
- <view style="width: 100%; height: 100%;" v-else-if="item.videoContentType === 'img'">
- <uni-swiper-dot :info="item.imgs" :current="currentImgIndex" mode="round"
- style="width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;"
- :dots-styles="{width: 24, bottom: 24,selectedBackgroundColor: 'green', backgroundColor: 'gray'}">
- <swiper class="swiper-box" @change="imgChange" :autoplay="true" :interval="3000">
- <swiper-item v-for="img in item.imgs" :key="img">
- <view class="swiper-item">
- <!-- 璋冩暣 image 鏍峰紡锛屼娇鍏跺眳涓笖鎸夋瘮渚嬬缉鏀� -->
- <image :src="img" mode="aspectFit"
- style="width: 100%; height: 100%; display: block; margin: 0 auto;"></image>
- </view>
- </swiper-item>
- </swiper>
- </uni-swiper-dot>
- </view>
-
-
- <!-- 鎮寕鍟嗗搧閾炬帴灞� -->
- <view class="goods-link-warp" v-if="false">
- <view class="goods-link">
- <view class="goods-container">
- <!-- 鍟嗗搧鍥剧墖 -->
- <image class="goods-image" :src="item.goods.imageUrl" mode="aspectFill"></image>
-
- <!-- 鍟嗗搧淇℃伅 -->
- <view class="goods-info">
- <text class="goods-name">{{item.goods.name}}</text>
- <view class="price-section">
- <text class="current-price">楼{{item.goods.price}}</text>
- <text class="original-price"
- v-if="item.goods.originalPrice">楼{{item.goods.originalPrice}}</text>
- </view>
- <text class="sales-count">{{item.goods.saleNum}}浜哄凡璐�</text>
- </view>
-
- <!-- 璐拱鎸夐挳 -->
- <view class="buy-button">
- <text>璐拱</text>
- </view>
- </view>
- </view>
- </view>
-
-
- <!-- 瑙嗛淇℃伅灞� -->
- <view class="video-info">
- <view>
- <text class="video-author">@{{item.authorName}}</text>
- </view>
- <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;">
- <text class="video-title">{{item.title}}</text>
- <text class="video-tag" v-for="(tag, index) in item.tagList"
- :key="tag.id">#{{tag.tagName}}</text>
- </view>
- </view>
-
- <!-- 鍙充晶浜掑姩鎸夐挳 -->
- <view class="action-buttons" v-if="false">
- <view class="avatar-container">
- <image class="avatar" @click="jumpToHomePage(item.authorId)" :src="item.authorAvatar"
- mode="aspectFill"></image>
- <!-- 鍏虫敞鍥炬爣 - 浣跨敤缁濆瀹氫綅 -->
- <view v-if="!item.subscribeThisAuthor" class="follow-icon"
- @click="subscribeAuth(index, item.authorId)">
- <text class="iconfont"></text>
- </view>
- </view>
- <view class="action-item" @click="toggleCollect(item, index)">
- <text class="iconfont" v-if="item.collected"></text>
- <text class="iconfont" v-else></text>
- <text style="font-size: 10px;font-weight: lighter;">{{item.collectNum}}</text>
- </view>
- <view class="action-item" @click="showComments(item)">
- <text class="iconfont"></text>
- <text style="font-size: 10px;font-weight: lighter;">{{item.commentNum}}</text>
- </view>
- </view>
-
- </swiper-item>
- </swiper>
-
- <!-- 璇勮寮圭獥 -->
- <uni-popup ref="commentPopup" type="bottom" :is-mask-click="true" @maskClick="closeCommentPopup">
- <view class="comment-popup">
- <view class="popup-header">
- <text class="popup-title" v-if="!commentForm.replyId">璇勮({{commentsTotal}})</text>
- <view class="reply-title" v-else>
- <text>鍥炲 @{{commentForm.replyUserNickname}}</text>
- <text class="cancel-reply" @click="cancelReply">鍙栨秷</text>
- </view>
- <text class="iconfont close-icon" @click="closeCommentPopup"></text>
- </view>
-
- <scroll-view class="comment-list" scroll-y :show-scrollbar="false" @scrolltolower="getCommentPage">
- <view v-if="commentLoading" class="loading">
- <uni-load-more status="loading"></uni-load-more>
- </view>
-
- <view v-else-if="comments.length === 0" class="empty">
- 鏆傛棤璇勮锛屽揩鏉ュ彂琛ㄧ涓�鏉¤瘎璁哄惂~
- </view>
-
- <view v-else class="comment-item" v-for="(comment, index) in comments" :key="comment.id">
- <view style="display: flex;">
- <image class="comment-avatar" :src="comment.userAvatar || '/static/default-avatar.png'">
- </image>
- <view class="comment-content">
- <text class="nickname">{{comment.userNickname}}</text>
- <text class="content">{{comment.commentContent}}</text>
- <view style="position: relative;">
- <text class="time">{{formatTime(comment.createTime)}}</text>
- <text @click="openReply(comment)" class="reply-btu time">鍥炲</text>
- <text v-if="!comment.hasThumbsUp" class="thumbs-up time iconfont"
- @click="thubmsUp(comment.id, index, null)"><text
- v-show="comment.thumbsUpNum > 0"
- class="thumbs-num">{{comment.thumbsUpNum}}</text></text>
- <text v-else class="thumbs-up time iconfont"
- @click="cancelThumbsUp(comment.id, index, null)"><text
- v-show="comment.thumbsUpNum > 0"
- class="thumbs-num">{{comment.thumbsUpNum}}</text></text>
- </view>
- </view>
- </view>
- <!-- 鍥炲鍒楄〃 -->
- <view class="reply-list" v-if="comment.replies && comment.replies.length > 0">
- <view class="reply-item" v-for="(reply, replyIndex) in comment.replies" :key="reply.id">
- <view class="reply-content">
- <view style="display: flex;">
- <image class="comment-reply-avatar"
- :src="reply.replyUserAvatar || '/static/default-avatar.png'"></image>
- <text class="nickname">{{reply.userNickname}}</text>
- <text v-if="reply.replyUserId && reply.masterCommentId !== reply.replyId"
- class="reply-to"><text style="margin-right: 10rpx;font-size: 28rpx;"
- class="iconfont"></text>{{reply.replyUserNickname}}</text>
- </view>
- <text class="content">{{reply.commentContent}}</text>
- <view class="reply-footer">
- <text class="time">{{formatTime(reply.createTime)}}</text>
- <text @click="openReply(comment, reply)" class="reply-btu time">鍥炲</text>
- <text v-if="!reply.hasThumbsUp" class="thumbs-up time iconfont"
- @click="thubmsUp(reply.id, index, replyIndex)"><text
- v-show="reply.thumbsUpNum > 0"
- class="thumbs-num">{{reply.thumbsUpNum}}</text></text>
- <text v-else class="thumbs-up time iconfont"
- @click="cancelThumbsUp(reply.id, index, replyIndex)"><text
- v-show="reply.thumbsUpNum > 0"
- class="thumbs-num">{{reply.thumbsUpNum}}</text></text>
- </view>
- </view>
- </view>
- </view>
- <view class="view-more-replies" v-if="comment.replyTotalCount > 0 && !comment.expandReply"
- @click="loadRepliesPage(comment, index)">
- <text class="line">鈥斺��</text>灞曞紑{{comment.replyTotalCount}}鏉″洖澶� 鈫�
- </view>
- <view class="reply-op"
- v-if="comment.replyTotalCount > replyCommentQuery.pageNumber * replyCommentQuery.pageSize && comment.expandReply">
- <view @click="loadNextPageReply(index)" class="reply-op-item"><text
- class="line">鈥斺��</text>灞曞紑鏇村<text class="iconfont textSideIcon"></text></view>
- <view @click="retractReplyComment(index)" class="reply-op-item" style="margin-left: 50rpx;">
- 鏀惰捣<text class="iconfont textSideIcon"></text></view>
- </view>
- <view class="reply-op"
- v-else-if="comment.replyTotalCount <= replyCommentQuery.pageNumber * replyCommentQuery.pageSize && comment.expandReply">
- <view @click="retractReplyComment(index)" class="reply-op-item"><text
- class="line">鈥斺��</text>鏀惰捣<text class="iconfont textSideIcon"></text></view>
- </view>
- </view>
- </scroll-view>
- <view class="comment-input-area">
- <input ref="commentInput" class="comment-input" v-model="commentForm.commentContent"
- :placeholder="commentForm.replyId ? `鍥炲 @${commentForm.replyUserNickname}` : '鍐欎笅浣犵殑璇勮...'"
- placeholder-class="placeholder" />
- <button class="submit-btn" @click="submitComment"
- :disabled="!commentForm.commentContent.trim()">鍙戦��</button>
- </view>
+ <view class="platTypeItemChoose" v-if="chooseType===item.type" >
</view>
- </uni-popup>
- <uni-drawer ref="showLeft" mode="left" width="120" :cus-style="true" height="93vh"
- @change="change($event,'showLeft')" class="navigationLeft">
- <scroll-view class="typeNavigation" :scroll-y="true" :show-scrollbar="false">
- <view class="typeNavigationItem" :class="{typeNavigationItemCheck:currentCategort ==item.id}"
- @click="chooseCategory(item.id)" v-for="item in categoryList" :key="item.id">
- {{item.typeName}}
- </view>
- </scroll-view>
- </uni-drawer>
+ </view>
- </view>
+ </view>
+ <!-- 瑙嗛鍔犺浇 -->
+ <zero-loading v-show="videoLoading" type="circle" color="#0ebd57" text=""></zero-loading>
+ <view class="showLeft" @click="showDrawer('showLeft')" v-if="!showLeft" :style="{top: buttonHeight+'px'}">
+ <uni-icons type="right" size="30"></uni-icons>
+ </view>
+ <!-- 瑙嗛鍒楄〃 -->
+ <swiper v-if="videoList.length > 0"
+ class="video-swiper"
+ vertical
+ :current="currentIndex"
+ @change="onSwiperChange"
+ :duration="250"
+ easing-function="linear"
+ >
+
+ <swiper-item
+ v-for="(item, index) in videoList"
+ :key="item.id"
+ @touchstart="handleSwiperStart"
+ @touchmove="handleSwiperMove"
+ @touchend="handleSwiperEnd(item)"
+ >
+ <view style="width: 100%;height: 100%;" v-if="item.videoContentType === 'video'">
+ <!-- 鎾斁鎸夐挳锛堜粎褰撹棰戞殏鍋滄椂鏄剧ず锛� -->
+ <view
+ class="play-icon"
+ @click="togglePlay(index)"
+ v-show="!currentVideoIsPlaying"
+ >
+ <image src="/static/video/play.png" style="width: 45px;height: 45px" mode="aspectFit"></image>
+ </view>
+ <video
+ v-if="index >= currentIndex - videoLiveOffset && index <= currentIndex + videoLiveOffset"
+ :id="'video'+index"
+ :ref="'video'+index"
+ :src="item.videoUrl"
+ :autoplay="index === currentIndex"
+ :controls="false"
+ :loop="true"
+ :object-fit="item.videoFit"
+ :enable-progress-gesture="false"
+ :show-center-play-btn="false"
+ class="video-item"
+ @play="onPlay(item.id, index)"
+ @pause="onPause(index)"
+ @ended="onEnded(index)"
+ @click="togglePlay(index)"
+ @timeupdate="onTimeUpdate($event)"
+ @loadedmetadata="onLoadedMetadata($event)"
+ @waiting="videoWaiting(index)"
+ ></video>
+ <!-- 鑷畾涔夋帶鍒舵潯 -->
+ <view
+ @touchstart.stop="handleTouchStart"
+ @touchmove.stop="handleTouchMove"
+ @touchend.stop="handleTouchEnd"
+ :style="{bottom: marginBottom + 'px'}"
+ class="container">
+ <!-- 杩涘害鏉� - 鏁翠釜鍖哄煙鍙嫋鍔� -->
+ <view class="process-warp" :style="{ opacity: showProcess ? 1 : 0 }">
+ <!-- 鏄剧ず褰撳墠杩涘害 -->
+ <view class="progress-text">{{ hasPlayTime }}/{{formartDuration}}</view>
+ <view
+ class="progress-bar"
+ id="progressBar"
+ >
+
+ <!-- 宸插~鍏呴儴鍒� -->
+ <view class="progress-fill" :style="{ width: progress + '%' }"></view>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view style="width: 100%; height: 100%;" v-else-if="item.videoContentType === 'img'">
+ <uni-swiper-dot
+ :info="item.imgs"
+ :current="currentImgIndex"
+ mode="round"
+ style="width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;"
+ :dots-styles="{width: 24, bottom: 24,selectedBackgroundColor: 'green', backgroundColor: 'gray'}"
+ >
+ <swiper class="swiper-box" @change="imgChange" :autoplay="true" :interval="3000">
+ <swiper-item v-for="img in item.imgs" :key="img">
+ <view class="swiper-item">
+ <!-- 璋冩暣 image 鏍峰紡锛屼娇鍏跺眳涓笖鎸夋瘮渚嬬缉鏀� -->
+ <image
+ :src="img"
+ mode="aspectFit"
+ style="width: 100%; height: 100%; display: block; margin: 0 auto;"
+ ></image>
+ </view>
+ </swiper-item>
+ </swiper>
+ </uni-swiper-dot>
+ </view>
+
+
+ <!-- 鎮寕鍟嗗搧閾炬帴灞� -->
+ <view class="goods-link-warp" v-if="item.goodsList.length > 0">
+ <view class="goods-link">
+ <swiper @change="goodsChange" :autoplay="true" :interval="4000" style="height: 120rpx;">
+ <swiper-item v-for="goods in item.goodsList" :key="goods.goodsId">
+ <view class="goods-container" @click="jumpToPay(item.id)">
+ <!-- 鍟嗗搧鍥剧墖 -->
+ <image class="goods-image" :src="goods.thumbnail" mode="aspectFill"></image>
+
+ <!-- 鍟嗗搧淇℃伅 -->
+ <view class="goods-info">
+ <text class="goods-name">{{goods.goodsName}}</text>
+ <view class="price-section">
+ <text class="current-price">楼{{goods.price}}</text>
+ <text class="original-price" v-if="goods.originalPrice">楼{{goods.originalPrice}}</text>
+ </view>
+ </view>
+ </view>
+ </swiper-item>
+ </swiper>
+ </view>
+ </view>
+
+
+ <!-- 瑙嗛淇℃伅灞� -->
+ <view class="video-info" :style="{bottom: marginBottom + 20 + 'px'}">
+ <view>
+ <text class="video-author">@{{item.authorName}}</text>
+ </view>
+ <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;">
+ <text class="video-title">{{item.title}}</text>
+ <text class="video-tag" v-for="(tag, index) in item.tagList" :key="tag.id">#{{tag.tagName}}</text>
+ </view>
+ </view>
+
+ <!-- 鍙充晶浜掑姩鎸夐挳 -->
+ <view class="action-buttons" v-if="false">
+ <view class="avatar-container">
+ <image class="avatar" @click="jumpToHomePage(item.authorId)" @touchend.stop :src="item.authorAvatar" mode="aspectFill"></image>
+ <!-- 鍏虫敞鍥炬爣 - 浣跨敤缁濆瀹氫綅 -->
+ <view v-if="!item.subscribeThisAuthor" class="follow-icon" @touchend.stop @click="subscribeAuth(index, item.authorId)">
+ <text class="iconfont"></text>
+ </view>
+ </view>
+ <view class="action-item" @click="toggleThumbsUp(item, index)">
+ <text class="iconfont" v-if="item.thumbsUp"></text>
+ <text class="iconfont" v-else></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.thumbsUpNum}}</text>
+ </view>
+ <view class="action-item" @click="showComments(item)">
+ <text class="iconfont"></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.commentNum}}</text>
+ </view>
+ <view class="action-item" @click="toggleCollect(item, index)">
+ <text class="iconfont" v-if="item.collected"></text>
+ <text class="iconfont" v-else></text>
+ <text style="font-size: 10px;font-weight: lighter;">{{item.collectNum}}</text>
+ </view>
+ <view class="action-item">
+ <button open-type="share" class="custom-share-btn" :data-obj="item">
+ <text class="iconfont"></text>
+ </button>
+ </view>
+ </view>
+
+ </swiper-item>
+ </swiper>
+ <!-- 璇勮寮圭獥 -->
+ <uni-popup ref="commentPopup" type="bottom" :is-mask-click="true" @maskClick="closeCommentPopup">
+ <view class="comment-popup">
+ <view class="popup-header">
+ <text class="popup-title" v-if="!commentForm.replyId">璇勮({{commentsTotal}})</text>
+ <view class="reply-title" v-else>
+ <text>鍥炲 @{{commentForm.replyUserNickname}}</text>
+ <text class="cancel-reply" @click="cancelReply">鍙栨秷</text>
+ </view>
+ <text class="iconfont close-icon" @click="closeCommentPopup"></text>
+ </view>
+
+ <scroll-view class="comment-list" scroll-y :show-scrollbar="false" @scrolltolower="getCommentPage">
+ <view v-if="commentLoading" class="loading">
+ <uni-load-more status="loading"></uni-load-more>
+ </view>
+
+ <view v-else-if="comments.length === 0" class="empty">
+ 鏆傛棤璇勮锛屽揩鏉ュ彂琛ㄧ涓�鏉¤瘎璁哄惂~
+ </view>
+
+ <view v-else class="comment-item" v-for="(comment, index) in comments" :key="comment.id">
+ <view style="display: flex;">
+ <image class="comment-avatar" :src="comment.userAvatar || '/static/default-avatar.png'"></image>
+ <view class="comment-content">
+ <text class="nickname">{{comment.userNickname}}</text>
+ <text class="content">{{comment.commentContent}}</text>
+ <view style="position: relative;">
+ <text class="time">{{formatTime(comment.createTime)}}</text>
+ <text @click="openReply(comment)" class="reply-btu time">鍥炲</text>
+ <text v-if="!comment.hasThumbsUp" class="thumbs-up time iconfont" @click="thubmsUp(comment.id, index, null)"><text v-show="comment.thumbsUpNum > 0" class="thumbs-num">{{comment.thumbsUpNum}}</text></text>
+ <text v-else class="thumbs-up time iconfont" @click="cancelThumbsUp(comment.id, index, null)"><text v-show="comment.thumbsUpNum > 0" class="thumbs-num">{{comment.thumbsUpNum}}</text></text>
+ </view>
+ </view>
+ </view>
+ <!-- 鍥炲鍒楄〃 -->
+ <view class="reply-list" v-if="comment.replies && comment.replies.length > 0">
+ <view class="reply-item" v-for="(reply, replyIndex) in comment.replies" :key="reply.id">
+ <view class="reply-content">
+ <view style="display: flex;">
+ <image class="comment-reply-avatar" :src="reply.replyUserAvatar || '/static/default-avatar.png'"></image>
+ <text class="nickname">{{reply.userNickname}}</text>
+ <text v-if="reply.replyUserId && reply.masterCommentId !== reply.replyId" class="reply-to"><text style="margin-right: 10rpx;font-size: 28rpx;" class="iconfont"></text>{{reply.replyUserNickname}}</text>
+ </view>
+ <text class="content">{{reply.commentContent}}</text>
+ <view class="reply-footer">
+ <text class="time">{{formatTime(reply.createTime)}}</text>
+ <text @click="openReply(comment, reply)" class="reply-btu time">鍥炲</text>
+ <text v-if="!reply.hasThumbsUp" class="thumbs-up time iconfont" @click="thubmsUp(reply.id, index, replyIndex)"><text v-show="reply.thumbsUpNum > 0" class="thumbs-num">{{reply.thumbsUpNum}}</text></text>
+ <text v-else class="thumbs-up time iconfont" @click="cancelThumbsUp(reply.id, index, replyIndex)"><text v-show="reply.thumbsUpNum > 0" class="thumbs-num">{{reply.thumbsUpNum}}</text></text>
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="view-more-replies" v-if="comment.replyTotalCount > 0 && !comment.expandReply" @click="loadRepliesPage(comment, index)">
+ <text class="line">鈥斺��</text>灞曞紑{{comment.replyTotalCount}}鏉″洖澶� 鈫�
+ </view>
+ <view class="reply-op" v-if="comment.replyTotalCount > replyCommentQuery.pageNumber * replyCommentQuery.pageSize && comment.expandReply">
+ <view @click="loadNextPageReply(index)" class="reply-op-item"><text class="line">鈥斺��</text>灞曞紑鏇村<text class="iconfont textSideIcon"></text></view>
+ <view @click="retractReplyComment(index)" class="reply-op-item" style="margin-left: 50rpx;">鏀惰捣<text class="iconfont textSideIcon"></text></view>
+ </view>
+ <view class="reply-op" v-else-if="comment.replyTotalCount <= replyCommentQuery.pageNumber * replyCommentQuery.pageSize && comment.expandReply">
+ <view @click="retractReplyComment(index)" class="reply-op-item"><text class="line">鈥斺��</text>鏀惰捣<text class="iconfont textSideIcon"></text></view>
+ </view>
+ </view>
+ </scroll-view>
+ <view class="comment-input-area">
+ <input
+ ref="commentInput"
+ class="comment-input"
+ v-model="commentForm.commentContent"
+ :placeholder="commentForm.replyId ? `鍥炲 @${commentForm.replyUserNickname}` : '鍐欎笅浣犵殑璇勮...'"
+ placeholder-class="placeholder"
+ />
+ <button class="submit-btn" @click="submitComment" :disabled="!commentForm.commentContent.trim()">鍙戦��</button>
+ </view>
+ </view>
+ </uni-popup>
+ <uni-drawer v-if="leftHeight" ref="showLeft" mode="left" width="120" :cus-style="true" :height="`${leftHeight}px`"
+ @change="change($event,'showLeft')" class="navigationLeft" :drawerTop="buttonHeight">
+ <scroll-view class="typeNavigation" :scroll-y="true" :show-scrollbar="false">
+ <view class="typeNavigationItem" :class="{typeNavigationItemCheck:currentCategort ==item.id}"
+ @click="chooseCategory(item.id)" v-for="item in categoryList" :key="item.id">
+ {{item.typeName}}
+ </view>
+ </scroll-view>
+ </uni-drawer>
+ <view v-if="videoList.length===0" style="display: flex;align-items: center;justify-content: center;background-color: #fff;height: 100%">褰撳墠娌℃湁鍙互鏌ョ湅鐨勮棰�</view>
+
+ <custom-tabbar bgColor="#ffffff" selected="kitchen"></custom-tabbar>
+ </view>
</template>
<script>
- import {
- getkitchenTypeList,
- getkitchenVideoList,
- savePlayRecord,
- subscribe,
- getVideoComments,
- addVideoComment,
- thubmsUpComment,
- cancelThubmsUpComment
- } from "@/api/video.js";
- import {
- changeCollect
- } from "@/api/collect.js";
- export default {
- computed: {
- hasPlayTime() {
- return this.sliderFormatTime(this.progress > 0 ? this.duration * this.progress / 100 : 0);
- }
- },
- data() {
- return {
- currentCategort: '',
- categoryList: [],
- currentImgIndex: 0, // 鎾斁鍒扮鍑犲紶鍥�--绱㈠紩
- currentTime: 0,
- formartDuration: [],
- duration: 0,
- startX: 0,
- progress: 0, // 瑙嗛杩涘害
- startProgress: 0, // 寮�濮嬫粦鍔ㄦ椂鐨勮繘搴�
- barLeft: 0, // 杩涘害鏉″乏杈圭晫浣嶇疆
- barWidth: 0, // 杩涘害鏉″搴�
- isDragging: false, // 鏄惁姝e湪鎷栧姩
- processHidenTimer: null, // 杩涘害鏉¢殣钘忓畾鏃跺櫒
- showProcess: false, // 鏄惁鏄剧ず杩涘害鏉�
- videoNoMore: false, // 鏄惁杩樻湁鏇村瑙嗛
- commentNoMore: false, // 鏄惁杩樻湁鏇村璇勮
- commentQuery: {
- pageNumber: 1,
- pageSize: 5,
- videoId: '',
- masterCommentId: ''
- },
- replyCommentQuery: {
- pageNumber: 1,
- pageSize: 5,
- videoId: '',
- masterCommentId: ''
- },
- commentForm: { // 璇勮琛ㄥ崟鏁版嵁
- id: '',
- videoId: '',
- commentContent: '',
- replyId: '',
- replyUserId: '',
- replyUserNickname: '',
- replyUserAvatar: '',
- masterCommentId: null
- },
- comments: [], // 璇勮鍒楄〃
- commentsTotal: 0, // 璇勮鎬绘潯鏁�
- commentLoading: false, // 璇勮鍔犺浇鐘舵��
- startHidenTime: 0, // 璁板綍鍒囨崲鑷冲叾瀹冮〉闈㈢殑鏃堕棿锛岀敤浜庤绠楄棰戣鐪嬫椂闂村噺鍘荤殑閮ㄥ垎
- totalHidenTime: 0, // 鎬诲叡闅愯棌椤甸潰鐨勬椂闂�
- startPauseTime: 0, // 寮�濮嬫殏鍋滅殑鏃堕棿
- totalPauseTime: 0, // 鎬诲叡鏆傚仠鐨勬椂闂�
- playRecord: {
- videoId: null,
- viewDuration: 0, // 杩欎釜瑙嗛鎬诲叡瑙傜湅浜嗗涔�
- playAt: 0, // 杩欎釜瑙嗛鎾斁鍒板摢浜�
- startPlayTime: 0 // 杩欎釜瑙嗛浠庝粈涔堟椂鍊欏紑濮嬫挱鏀剧殑
- },
- currentVideoIsPlaying: true, // 褰撳墠瑙嗛鏄惁姝e湪鎾斁
- isFullScreen: false,
- windowHeight: 0,
- currentIndex: 0, // 褰撳墠鎾斁鐨勮棰戠储寮�
- videoList: [
+import {
+ getkitchenTypeList,
+ getkitchenVideoList,
+ savePlayRecord,
+ subscribe,
+ getVideoComments,
+ addVideoComment,
+ thubmsUpComment,
+ cancelThubmsUpComment,
+ changeThumbsUp,
+ getGoodsSimilarlyVideos
+} from "@/api/video.js";
+import {
+ changeCollect
+} from "@/api/collect.js";
+export default {
+ computed: {
+ hasPlayTime() {
+ return this.sliderFormatTime(this.progress > 0 ? this.duration * this.progress / 100 : 0);
+ }
+ },
+ data() {
+ return {
+ choosePlat:[
+ {type:'platForm',name:'骞冲彴'},
+ {type:'custom',name:'鐢ㄦ埛'}
+ ],
+ chooseType:'platForm',
+ leftHeight:null,
+ menueButton:0,
+ buttonHeight:0,
+ showLeft:false,
+ currentCategort: '',
+ categoryList: [],
+ currentImgIndex: 0, // 鎾斁鍒扮鍑犲紶鍥�--绱㈠紩
+ currentTime: 0,
+ formartDuration: [],
+ duration: 0,
+ startX: 0,
+ progress: 0, // 瑙嗛杩涘害
+ startProgress: 0, // 寮�濮嬫粦鍔ㄦ椂鐨勮繘搴�
+ barLeft: 0, // 杩涘害鏉″乏杈圭晫浣嶇疆
+ barWidth: 0, // 杩涘害鏉″搴�
+ isDragging: false, // 鏄惁姝e湪鎷栧姩
+ processHidenTimer: null, // 杩涘害鏉¢殣钘忓畾鏃跺櫒
+ showProcess: false, // 鏄惁鏄剧ず杩涘害鏉�
+ videoNoMore: false, // 鏄惁杩樻湁鏇村瑙嗛
+ commentNoMore: false, // 鏄惁杩樻湁鏇村璇勮
+ commentQuery: {
+ pageNumber: 1,
+ pageSize: 5,
+ videoId: '',
+ masterCommentId: ''
+ },
+ replyCommentQuery: {
+ pageNumber: 1,
+ pageSize: 5,
+ videoId: '',
+ masterCommentId: ''
+ },
+ commentForm: { // 璇勮琛ㄥ崟鏁版嵁
+ id: '',
+ videoId: '',
+ commentContent: '',
+ replyId: '',
+ replyUserId: '',
+ replyUserNickname: '',
+ replyUserAvatar: '',
+ masterCommentId: null
+ },
+ comments: [], // 璇勮鍒楄〃
+ commentsTotal: 0, // 璇勮鎬绘潯鏁�
+ commentLoading: false, // 璇勮鍔犺浇鐘舵��
+ startHidenTime: 0, // 璁板綍鍒囨崲鑷冲叾瀹冮〉闈㈢殑鏃堕棿锛岀敤浜庤绠楄棰戣鐪嬫椂闂村噺鍘荤殑閮ㄥ垎
+ totalHidenTime: 0, // 鎬诲叡闅愯棌椤甸潰鐨勬椂闂�
+ startPauseTime: 0, // 寮�濮嬫殏鍋滅殑鏃堕棿
+ totalPauseTime: 0, // 鎬诲叡鏆傚仠鐨勬椂闂�
+ playRecord: {
+ videoId: null,
+ viewDuration: 0, // 杩欎釜瑙嗛鎬诲叡瑙傜湅浜嗗涔�
+ playAt: 0, // 杩欎釜瑙嗛鎾斁鍒板摢浜�
+ startPlayTime: 0 // 杩欎釜瑙嗛浠庝粈涔堟椂鍊欏紑濮嬫挱鏀剧殑
+ },
+ currentVideoIsPlaying: true,
+ isFullScreen: false,
+ windowHeight: 0,
+ currentIndex: 0, // 褰撳墠鎾斁鐨勮棰戠储寮�
+ videoLoading: false, // 瑙嗛缂撳啿涓�// 褰撳墠瑙嗛鏄惁姝e湪鎾斁
+ videoList: [], // 瑙嗛鍒楄〃鏁版嵁
+ videoBufferOffset: 0.1 ,// 瑙嗛棰勫姞杞藉弬鏁�
+ videoLiveOffset: 2, // 淇濈暀褰撳墠瑙嗛鍓嶅悗鍚勫灏戜釜瑙嗛涓婁笅鏂�
+ touchXY: { // 鐩戝惉宸︽粦鍙虫粦
+ startX: 0,
+ endX: 0,
+ startY: 0,
+ endY: 0
+ },
+ loading: false, // 鏄惁姝e湪鍔犺浇
+ videoQuery: {
+ pageNumber: 1,
+ pageSize: 6,
+ videoFrom: 'recommend',
+ videoType: 'cook'
+ },
+ goodsSimilarlyQuery: { // 鐩镐技瑙嗛鏌ヨ
+ pageNumber: 1,
+ pageSize: 10,
+ videoFrom: 'goodsSimilarly',
+ goodsIds: [],
+ currentVideoId: ''
+ },
+ similarlyVideoList: [], // 鐩镐技瑙嗛
+ similarlyNomore: false, // 鏄惁杩樻湁鏇村鐩镐技瑙嗛
+ similaryVideoIndex: 0, // 鐩镐技瑙嗛鐨勬挱鏀句綅缃�
+ similarlyLoading: false, // 鐩镐技瑙嗛鍔犺浇
+ marginBottom: 0 // 搴曢儴瀹夊叏鍖哄煙
+ }
+ },
+ onShow() {
+ // this.showDrawer('showLeft')
+ this.loadVideos()
+ // 濡傛灉瑙嗛鎸変笅鏆傚仠鍚庡垏鎹㈤〉闈㈠啀鍥炲埌椤甸潰鏃讹紝鍙畻鏆傚仠鏃堕棿锛堝洜涓烘殏鍋滄椂闂村拰绂诲紑椤甸潰鏃堕棿鏄噸澶嶇殑锛屽彧绠椾竴涓級
+ if (this.startHidenTime !== 0 && this.currentVideoIsPlaying) {
+ const duration = Date.now() - this.startHidenTime
+ this.totalHidenTime += duration
+ }
+ },
+ onHide() {
+ this.startHidenTime = Date.now()
+ },
+ onLoad() {
+ this.marginBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
+ // 鑾峰彇鐘舵�佹爮楂樺害
+ const systemInfo = uni.getSystemInfoSync();
+ console.log('systemInfo------------------------>',systemInfo.windowHeight)
+ const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+ console.log('menuButtonInfo--------------------------->',menuButtonInfo)
+ const {top,height} = menuButtonInfo
+ this.buttonHeight = systemInfo.statusBarHeight+height;
+ this.menueButton = top;
+ console.log('systemInfo.safeAreaInsets.bottom>',systemInfo.safeAreaInsets.bottom)
+ this.leftHeight = systemInfo.windowHeight - top -50 - systemInfo.safeAreaInsets.bottom -22;
+ console.log('-------------leftHeight------------------------>',this.leftHeight)
+ this.getKitchenTypeList();
+ this.loadVideos();
+ },
+ methods: {
+ // 鏌ヨ褰撳墠瑙嗛鐨勫叧鑱旇棰戯紙鎸備簡鍚屼竴鍟嗗搧鐨勶級
+ async getGoodsSimilarly() {
+ if (this.similarlyLoading || this.similarlyNomore) return Promise.resolve();;
+ const video = this.videoList[this.currentIndex];
+ if (video.goodsList && video.goodsList.length > 0) {
+ this.goodsSimilarlyQuery.goodsIds = video.goodsList.map(goods => goods.goodsId);
+ this.goodsSimilarlyQuery.currentVideoId = video.id;
+ if (this.similarlyVideoList.length < 1) {
+ this.similarlyVideoList.push(video); // 纭繚鍘熻棰戞槸妯悜瑙嗛鐨勭涓�涓厓绱�
+ }
+ this.similarlyLoading = true;
+ return getGoodsSimilarlyVideos(this.goodsSimilarlyQuery).then(res => {
+
+ this.similarlyVideoList = [
+ ...this.similarlyVideoList,
+ ...res.data.data.filter(
+ (newItem) => !this.similarlyVideoList.some((oldItem) => oldItem.id === newItem.id)
+ ),
+ ];
+
+ this.similarlyLoading = false;
+ if(res.data.data.length < this.goodsSimilarlyQuery.pageSize) {
+ this.similarlyNomore = true;
+ return;
+ }
+ this.goodsSimilarlyQuery.pageNumber++;
+ })
+ }
+ },
+ async chooseCategory(id) {
+ if (this.currentCategort === id) return
+ this.currentCategort = id
+ this.videoQuery.pageNumber = 1
+ this.videoQuery.kitchenTypeId = id;
+ this.videoLoading = false;
+ this.currentIndex = 0;
- ], // 瑙嗛鍒楄〃鏁版嵁
- videoContexts: [], // 瑙嗛涓婁笅鏂囧璞¢泦鍚�
- loading: false, // 鏄惁姝e湪鍔犺浇
- videoQuery: {
- pageNumber: 1,
- pageSize: 6,
- videoFrom: 'recommend',
- videoType: 'cook'
- }
- }
- },
- onShow() {
- this.showDrawer('showLeft')
- this.loadVideos()
- // 濡傛灉瑙嗛鎸変笅鏆傚仠鍚庡垏鎹㈤〉闈㈠啀鍥炲埌椤甸潰鏃讹紝鍙畻鏆傚仠鏃堕棿锛堝洜涓烘殏鍋滄椂闂村拰绂诲紑椤甸潰鏃堕棿鏄噸澶嶇殑锛屽彧绠椾竴涓級
- if (this.startHidenTime !== 0 && this.currentVideoIsPlaying) {
- const duration = Date.now() - this.startHidenTime
- this.totalHidenTime += duration
- }
- },
- onHide() {
- this.startHidenTime = Date.now()
- },
- onLoad() {
- this.getKitchenTypeList();
- this.loadVideos();
- },
- onReady() {
- // 鍒濆鍖栬棰戜笂涓嬫枃
- this.initVideoContexts();
- },
- methods: {
- async chooseCategory(id) {
- if (this.currentCategort === id) return
- this.currentCategort = id
- this.videoQuery.pageNumber = 1,
- this.videoQuery.kitchenTypeId = id;
- await this.loadVideos()
- },
- getKitchenTypeList() {
- getkitchenTypeList().then(res => {
- this.categoryList = res.data.data
- })
- },
- showDrawer(e) {
- this.$refs[e].open()
- },
- // 鍏抽棴绐楀彛
- closeDrawer(e) {
- this.$refs[e].close()
- },
- // 鎶藉眽鐘舵�佸彂鐢熷彉鍖栬Е鍙�
- change(e, type) {
- this[type] = e
- },
- // 杞挱鍥惧彉鍖�
- imgChange(e) {
- this.currentImgIndex = e.detail.current;
- },
- // 鑾峰彇杩涘害鏉$殑浣嶇疆鍜屽昂瀵�
- getBarRect() {
- const query = uni.createSelectorQuery().in(this);
- query.select('#progressBar').boundingClientRect(rect => {
- if (rect) {
- this.barLeft = rect.left;
- this.barWidth = rect.width;
- }
- }).exec();
- },
- // 璺宠浆涓汉涓婚〉
- jumpToHomePage(authorId) {
- uni.navigateTo({
- url: "/pages/video/home-page?authorId=" + authorId
- })
- },
- // 鍙栨秷鐐硅禐
- async cancelThumbsUp(id, commentIndex, replyIndex) {
- const data = {
- refId: id,
- thumbsUpType: 'video_comment'
- }
- cancelThubmsUpComment(data).then(res => {
- if (replyIndex != null) {
- this.comments[commentIndex].replies[replyIndex].hasThumbsUp = false;
- this.comments[commentIndex].replies[replyIndex].thumbsUpNum -= 1;
- } else {
- this.comments[commentIndex].hasThumbsUp = false;
- this.comments[commentIndex].thumbsUpNum -= 1;
- }
- })
- },
- // 璇勮鐐硅禐
- async thubmsUp(id, commentIndex, replyIndex) {
- const data = {
- refId: id,
- thumbsUpType: 'video_comment'
- }
- thubmsUpComment(data).then(res => {
- if (replyIndex != null) {
- this.comments[commentIndex].replies[replyIndex].hasThumbsUp = true;
- this.comments[commentIndex].replies[replyIndex].thumbsUpNum += 1;
- } else {
- this.comments[commentIndex].hasThumbsUp = true;
- this.comments[commentIndex].thumbsUpNum += 1;
- }
- })
- },
- // 鍔犺浇涓嬩竴椤靛洖澶�
- loadNextPageReply(index) {
- this.replyCommentQuery.pageNumber++;
- getVideoComments(this.replyCommentQuery).then(res => {
- this.comments[index].replies = [
- ...this.comments[index].replies,
- ...res.data.data.filter(
- (newItem) => !this.comments[index].replies.some((oldItem) => oldItem.id === newItem
- .id)
- ),
- ];
- })
- },
- // 鏀惰捣鍥炲
- retractReplyComment(index) {
- this.comments[index].expandReply = false;
- this.comments[index].replies = [];
- },
- // 鍔犺浇鍥炲
- loadRepliesPage(comment, index) {
- this.replyCommentQuery.pageNumber = 1;
- this.replyCommentQuery.masterCommentId = comment.id
- getVideoComments(this.replyCommentQuery).then(res => {
- this.comments[index].replies = res.data.data;
- this.comments[index].expandReply = true;
- })
- },
- resetCommentForm() {
- const videoId = this.commentForm.videoId;
- this.commentForm = { // 璇勮琛ㄥ崟鏁版嵁
- id: '',
- videoId: videoId,
- commentContent: '',
- replyId: '',
- replyUserId: '',
- replyUserNickname: '',
- replyUserAvatar: '',
- masterCommentId: null
- }
- },
- // 鍙栨秷鍥炲
- cancelReply() {
- this.resetCommentForm()
- },
- // 鎵撳紑鍥炲妗�
- openReply(comment, reply = null) {
- if (reply) {
- comment = reply
- }
- this.commentForm.masterCommentId = comment.masterCommentId ? comment.masterCommentId : comment.id;
- this.commentForm.replyId = comment.id;
- this.commentForm.replyUserId = comment.userId;
- this.commentForm.replyUserNickname = comment.userNickname;
- this.commentForm.replyUserAvatar = comment.userAvatar;
- // 鑷姩鑱氱劍杈撳叆妗�
- this.$nextTick(() => {
- const input = this.$refs.commentInput;
- if (input) input.focus();
- });
- },
- // 杩涘害鏉℃椂闂存牸寮忓寲 (00:00)
- sliderFormatTime(seconds) {
- const mins = Math.floor(seconds / 60);
- const secs = Math.floor(seconds % 60);
- return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
- },
- // 鏍煎紡鍖栨椂闂�
- formatTime(time) {
- const date = new Date(time);
- const now = new Date();
- const diff = Math.floor((now - date) / 1000); // 绉�
+ await this.loadVideos()
+ },
+ getKitchenTypeList() {
+ getkitchenTypeList().then(res => {
+ this.categoryList = res.data.data
+ })
+ },
+ showDrawer(e) {
+ this.$refs[e].open()
+ },
+ // 鍏抽棴绐楀彛
+ closeDrawer(e) {
+ this.$refs[e].close()
+ },
+ // 鎶藉眽鐘舵�佸彂鐢熷彉鍖栬Е鍙�
+ change(e, type) {
+ this[type] = e
+ },
+ // 杞挱鍥惧彉鍖�
+ imgChange(e) {
+ this.currentImgIndex = e.detail.current;
+ },
+ // 鑾峰彇杩涘害鏉$殑浣嶇疆鍜屽昂瀵�
+ getBarRect() {
+ const query = uni.createSelectorQuery().in(this);
+ query.select('#progressBar').boundingClientRect(rect => {
+ if (rect) {
+ this.barLeft = rect.left;
+ this.barWidth = rect.width;
+ }
+ }).exec();
+ },
+ // 璺宠浆涓汉涓婚〉
+ jumpToHomePage(authorId) {
+ uni.navigateTo({
+ url: "/pages/video/home-page?authorId=" + authorId
+ })
+ },
+ // 鍙栨秷鐐硅禐
+ async cancelThumbsUp(id, commentIndex, replyIndex) {
+ const data = {
+ refId: id,
+ thumbsUpType: 'video_comment'
+ }
+ cancelThubmsUpComment(data).then(res => {
+ if (replyIndex != null) {
+ this.comments[commentIndex].replies[replyIndex].hasThumbsUp = false;
+ this.comments[commentIndex].replies[replyIndex].thumbsUpNum -= 1;
+ } else {
+ this.comments[commentIndex].hasThumbsUp = false;
+ this.comments[commentIndex].thumbsUpNum -= 1;
+ }
+ })
+ },
+ // 璇勮鐐硅禐
+ async thubmsUp(id, commentIndex, replyIndex) {
+ const data = {
+ refId: id,
+ thumbsUpType: 'video_comment'
+ }
+ thubmsUpComment(data).then(res => {
+ if (replyIndex != null) {
+ this.comments[commentIndex].replies[replyIndex].hasThumbsUp = true;
+ this.comments[commentIndex].replies[replyIndex].thumbsUpNum += 1;
+ } else {
+ this.comments[commentIndex].hasThumbsUp = true;
+ this.comments[commentIndex].thumbsUpNum += 1;
+ }
+ })
+ },
+ // 鍔犺浇涓嬩竴椤靛洖澶�
+ loadNextPageReply(index) {
+ this.replyCommentQuery.pageNumber++;
+ getVideoComments(this.replyCommentQuery).then(res => {
+ this.comments[index].replies = [
+ ...this.comments[index].replies,
+ ...res.data.data.filter(
+ (newItem) => !this.comments[index].replies.some((oldItem) => oldItem.id === newItem
+ .id)
+ ),
+ ];
+ })
+ },
+ // 鏀惰捣鍥炲
+ retractReplyComment(index) {
+ this.comments[index].expandReply = false;
+ this.comments[index].replies = [];
+ },
+ // 鍔犺浇鍥炲
+ loadRepliesPage(comment, index) {
+ this.replyCommentQuery.pageNumber = 1;
+ this.replyCommentQuery.masterCommentId = comment.id
+ getVideoComments(this.replyCommentQuery).then(res => {
+ this.comments[index].replies = res.data.data;
+ this.comments[index].expandReply = true;
+ })
+ },
+ resetCommentForm() {
+ const videoId = this.commentForm.videoId;
+ this.commentForm = { // 璇勮琛ㄥ崟鏁版嵁
+ id: '',
+ videoId: videoId,
+ commentContent: '',
+ replyId: '',
+ replyUserId: '',
+ replyUserNickname: '',
+ replyUserAvatar: '',
+ masterCommentId: null
+ }
+ },
+ // 鍙栨秷鍥炲
+ cancelReply() {
+ this.resetCommentForm()
+ },
+ // 鎵撳紑鍥炲妗�
+ openReply(comment, reply = null) {
+ if (reply) {
+ comment = reply
+ }
+ this.commentForm.masterCommentId = comment.masterCommentId ? comment.masterCommentId : comment.id;
+ this.commentForm.replyId = comment.id;
+ this.commentForm.replyUserId = comment.userId;
+ this.commentForm.replyUserNickname = comment.userNickname;
+ this.commentForm.replyUserAvatar = comment.userAvatar;
+ // 鑷姩鑱氱劍杈撳叆妗�
+ this.$nextTick(() => {
+ const input = this.$refs.commentInput;
+ if (input) input.focus();
+ });
+ },
+ // 杩涘害鏉℃椂闂存牸寮忓寲 (00:00)
+ sliderFormatTime(seconds) {
+ const mins = Math.floor(seconds / 60);
+ const secs = Math.floor(seconds % 60);
+ return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
+ },
+ // 鏍煎紡鍖栨椂闂�
+ formatTime(time) {
+ const date = new Date(time);
+ const now = new Date();
+ const diff = Math.floor((now - date) / 1000); // 绉�
- if (diff < 60) return '鍒氬垰';
- if (diff < 3600) return `${Math.floor(diff / 60)}鍒嗛挓鍓峘;
- if (diff < 86400) return `${Math.floor(diff / 3600)}灏忔椂鍓峘;
+ if (diff < 60) return '鍒氬垰';
+ if (diff < 3600) return `${Math.floor(diff / 60)}鍒嗛挓鍓峘;
+ if (diff < 86400) return `${Math.floor(diff / 3600)}灏忔椂鍓峘;
- return `${date.getMonth() + 1}鏈�${date.getDate()}鏃;
- },
- // 鎻愪氦璇勮
- async submitComment() {
- if (!this.commentForm.commentContent.trim()) {
- uni.showToast({
- title: '璇勮鍐呭涓嶈兘涓虹┖',
- icon: 'none'
- });
- return;
- }
- // 鍙戣〃璇勮
- addVideoComment(this.commentForm).then(res => {
- if (res.data.code === 200) {
- this.resetCommentForm()
+ return `${date.getMonth() + 1}鏈�${date.getDate()}鏃;
+ },
+ // 鎻愪氦璇勮
+ async submitComment() {
+ if (!this.commentForm.commentContent.trim()) {
+ uni.showToast({
+ title: '璇勮鍐呭涓嶈兘涓虹┖',
+ icon: 'none'
+ });
+ return;
+ }
+ // 鍙戣〃璇勮
+ addVideoComment(this.commentForm).then(res => {
+ if (res.data.code === 200) {
+ this.resetCommentForm()
- // 濡傛灉鏄瘎璁哄埆浜虹殑鍥炲锛岄偅涔堝氨灏嗚繖涓彂甯冨埌replies閲岄潰
- if (res.data.data.replyId) {
- for (const [index, item] of this.comments.entries()) {
- if (item.id === res.data.data.replyId) {
- item.replies.unshift(res.data.data);
- // this.loadRepliesPage(item, index)
- break; // 璺冲嚭寰幆
- }
- }
- } else {
- this.comments.unshift(res.data.data);
- }
- console.log("鏂板鍚�", this.comments);
- uni.showToast({
- title: '璇勮鎴愬姛'
- });
- // 褰撳墠瑙嗛璇勮鏁板姞涓�
- this.commentsTotal += 1;
- this.videoList[this.currentIndex].commentNum += 1;
- } else {
- uni.showToast({
- title: res.data.msg,
- icon: 'none'
- });
- }
- }).catch(() => {
- uni.showToast({
- title: '璇勮澶辫触',
- icon: 'none'
- });
- })
- },
- // 鍏抽棴璇勮寮圭獥
- closeCommentPopup() {
- this.$refs.commentPopup.close()
- this.showCommentPopup = false;
- this.comments = [];
- this.resetCommentForm()
- this.commentQuery.pageNumber = 1;
- this.commentNoMore = false;
- },
- // 涓嬫粦璇勮鍖哄姞杞借瘎璁�
- async getCommentPage() {
- if (this.commentNoMore) {
- return;
- }
- getVideoComments(this.commentQuery).then(res => {
- if (this.commentQuery.pageNumber === 1) {
- this.comments = res.data.data
- } else {
- this.comments = [
- ...this.comments,
- ...res.data.data.filter(
- (newItem) => !this.comments.some((oldItem) => oldItem.id === newItem.id)
- ),
- ];
- }
- if (res.data.data.length < this.commentQuery.pageSize) {
- this.commentNoMore = true;
- return;
- }
- this.commentQuery.pageNumber++;
- })
- },
- // 鏄剧ず璇勮寮圭獥
- async showComments(item) {
- this.commentForm.videoId = item.id;
- this.$refs.commentPopup.open();
- this.commentLoading = true;
- this.commentQuery.videoId = item.id
- this.replyCommentQuery.videoId = item.id
- // 棣栨鍔犺浇璇勮鍒嗛〉澶у皬澧炲姞涓�鍊嶏紝浠ヤ骇鐢熸粴鍔ㄦ潯锛屽悗缁彲瑙﹀彂
- this.commentQuery.pageSize *= 2;
- getVideoComments(this.commentQuery).then(res => {
- this.commentsTotal = res.data.total;
- this.comments = res.data.data;
- this.commentQuery.pageNumber += 2;
- this.commentQuery.pageSize /= 2;
- }).catch(() => {
- uni.showToast({
- title: '鑾峰彇璇勮澶辫触',
- icon: 'none'
- });
- }).finally(() => {
- this.commentLoading = false;
- })
- },
- // 鍏虫敞浣滆��
- subscribeAuth(index, authorId) {
- this.videoList.forEach(video => {
- if (video.authorId === authorId) {
- video.subscribeThisAuthor = true
- }
- })
- subscribe(authorId).then(res => {
- if (res.data.code === 200) {
- uni.showToast({
- title: '鍏虫敞鎴愬姛~',
- icon: 'none'
- });
- } else {
- this.videoList.forEach(video => {
- if (video.authorId === authorId) {
- video.subscribeThisAuthor = false
- }
- })
- }
- })
- },
- // 鍒濆鍖栬棰戜笂涓嬫枃
- initVideoContexts() {
- this.videoContexts = this.videoList.map((_, index) => {
- let videoContent = uni.createVideoContext(`video${index}`, this);
- return videoContent;
- });
- },
+ // 濡傛灉鏄瘎璁哄埆浜虹殑鍥炲锛岄偅涔堝氨灏嗚繖涓彂甯冨埌replies閲岄潰
+ if (res.data.data.replyId) {
+ for (const [index, item] of this.comments.entries()) {
+ if (item.id === res.data.data.replyId) {
+ item.replies.unshift(res.data.data);
+ // this.loadRepliesPage(item, index)
+ break; // 璺冲嚭寰幆
+ }
+ }
+ } else {
+ this.comments.unshift(res.data.data);
+ }
+ console.log("鏂板鍚�", this.comments);
+ uni.showToast({
+ title: '璇勮鎴愬姛'
+ });
+ // 褰撳墠瑙嗛璇勮鏁板姞涓�
+ this.commentsTotal += 1;
+ this.videoList[this.currentIndex].commentNum += 1;
+ } else {
+ uni.showToast({
+ title: res.data.msg,
+ icon: 'none'
+ });
+ }
+ }).catch(() => {
+ uni.showToast({
+ title: '璇勮澶辫触',
+ icon: 'none'
+ });
+ })
+ },
+ // 鍏抽棴璇勮寮圭獥
+ closeCommentPopup() {
+ this.$refs.commentPopup.close()
+ this.showCommentPopup = false;
+ this.comments = [];
+ this.resetCommentForm()
+ this.commentQuery.pageNumber = 1;
+ this.commentNoMore = false;
+ },
+ // 涓嬫粦璇勮鍖哄姞杞借瘎璁�
+ async getCommentPage() {
+ if (this.commentNoMore) {
+ return;
+ }
+ getVideoComments(this.commentQuery).then(res => {
+ if (this.commentQuery.pageNumber === 1) {
+ this.comments = res.data.data
+ } else {
+ this.comments = [
+ ...this.comments,
+ ...res.data.data.filter(
+ (newItem) => !this.comments.some((oldItem) => oldItem.id === newItem.id)
+ ),
+ ];
+ }
+ if (res.data.data.length < this.commentQuery.pageSize) {
+ this.commentNoMore = true;
+ return;
+ }
+ this.commentQuery.pageNumber++;
+ })
+ },
+ // 鏄剧ず璇勮寮圭獥
+ async showComments(item) {
+ this.commentForm.videoId = item.id;
+ this.$refs.commentPopup.open();
+ this.commentLoading = true;
+ this.commentQuery.videoId = item.id
+ this.replyCommentQuery.videoId = item.id
+ // 棣栨鍔犺浇璇勮鍒嗛〉澶у皬澧炲姞涓�鍊嶏紝浠ヤ骇鐢熸粴鍔ㄦ潯锛屽悗缁彲瑙﹀彂
+ this.commentQuery.pageSize *= 2;
+ getVideoComments(this.commentQuery).then(res => {
+ this.commentsTotal = res.data.total;
+ this.comments = res.data.data;
+ this.commentQuery.pageNumber += 2;
+ this.commentQuery.pageSize /= 2;
+ }).catch(() => {
+ uni.showToast({
+ title: '鑾峰彇璇勮澶辫触',
+ icon: 'none'
+ });
+ }).finally(() => {
+ this.commentLoading = false;
+ })
+ },
+ // 鍏虫敞浣滆��
+ subscribeAuth(index, authorId) {
+ this.videoList.forEach(video => {
+ if (video.authorId === authorId) {
+ video.subscribeThisAuthor = true
+ }
+ })
+ subscribe(authorId).then(res => {
+ if (res.data.code === 200) {
+ uni.showToast({
+ title: '鍏虫敞鎴愬姛~',
+ icon: 'none'
+ });
+ } else {
+ this.videoList.forEach(video => {
+ if (video.authorId === authorId) {
+ video.subscribeThisAuthor = false
+ }
+ })
+ }
+ })
+ },
+ // 鍔犺浇瑙嗛鏁版嵁
+ async loadVideos() {
+ console.log(this.loading, this.videoNoMore,this.videoQuery)
+ if (this.videoQuery.pageNumber == 1) {
- // 鍔犺浇瑙嗛鏁版嵁
- async loadVideos() {
- console.log(this.loading, this.videoNoMore,this.videoQuery)
- if (this.videoQuery.pageNumber == 1) {
+ } else if (this.loading || this.videoNoMore) return;
+ this.loading = true;
- } else if (this.loading || this.videoNoMore) return;
- this.loading = true;
+ getkitchenVideoList(this.videoQuery).then(res => {
+ // 鏂板涓�涓瓧娈电敤浜庡惊鐜椂鐨刱ey
+ const data = res.data.data.map(item => {
+ return {
+ ...item,
+ updateKey: item.id
+ }
+ })
+ if (this.videoQuery.pageNumber === 1) {
+ this.videoList = data;
+ } else {
+ this.videoList = [
+ ...this.videoList,
+ ...data.filter(
+ (newItem) => !this.videoList.some((oldItem) => oldItem.id === newItem.id)
+ ),
+ ];
+ }
+ this.loading = false;
+ if (data.length < this.videoQuery.pageSize) {
+ this.videoNoMore = true;
+ return;
+ }
+ this.videoQuery.pageNumber++;
- getkitchenVideoList(this.videoQuery).then(res => {
- console.log(res, "瑙嗛鏁版嵁");
- if (this.videoQuery.pageNumber === 1) {
- this.videoList = res.data.data;
- } else {
- this.videoList = [
- ...this.videoList,
- ...res.data.data.filter(
- (newItem) => !this.videoList.some((oldItem) => oldItem.id === newItem.id)
- ),
- ];
- }
- this.$nextTick(() => {
- this.initVideoContexts();
- });
- this.loading = false;
- if (res.data.data.length < this.videoQuery.pageSize) {
- this.videoNoMore = true;
- return;
- }
- this.videoQuery.pageNumber++;
+ })
+ },
- })
- },
+ // 婊戝姩鍒囨崲瑙嗛
+ onSwiperChange(e) {
+ this.videoLoading = false
+ // 濡傛灉瑙嗛澶勪簬鏆傚仠鐘舵�佸線涓嬪埛瑙嗛锛岄偅涔堥渶瑕佸啀璁$畻涓�娆℃殏鍋滄椂闂�
+ if(!this.currentVideoIsPlaying) {
+ if(this.startPauseTime !== 0) {
+ const duration = Date.now() - this.startPauseTime
+ this.totalPauseTime += duration
+ }
+ }
+ // 淇濆瓨涓婁竴涓棰戠殑鎾斁璁板綍
+ this.savePlayRecord()
+ const oldIndex = this.currentIndex;
+ this.currentIndex = e.detail.current;
+ const videoContext = uni.createVideoContext(`video${oldIndex}`, this);
+ // 鏆傚仠涓婁竴涓棰�
+ videoContext.pause();
+ this.startPauseTime = 0;
+
+ // 璁剧疆褰撳墠鎾斁瑙嗛鐨勬�绘椂闀�
+ this.duration = this.videoList[this.currentIndex].videoDuration;
+ this.formartDuration = this.sliderFormatTime(this.duration);
+
+ // 鎾斁褰撳墠瑙嗛
+ const videoContext1 = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext1.play()
+
+ // 涓嬫粦鏃讹紝闇�瑕佸皢涓婁竴涓棰戦噸缃负鍘熷瑙嗛(濡傛灉妯悜婊戝姩浜嗙浉鍏宠棰�)
+ if (this.similaryVideoIndex !== 0) {
+ this.videoList[oldIndex] = this.similarlyVideoList[0]
+ }
+ this.similarlyVideoList = [];
+ this.similaryVideoIndex = 0;
+ this.similarlyNomore = false;
+ this.similarlyLoading = false;
+ this.goodsSimilarlyQuery = {
+ pageNumber: 1,
+ pageSize: 6,
+ videoFrom: 'goodsSimilarly',
+ goodsIds: [],
+ currentVideoId: ''
+ }
+
+ // 濡傛灉鍓╀綑瑙嗛涓嶈冻锛岃Е鍙戣姹傝幏鍙栨洿澶氳棰�
+ if (this.videoList.length - 1 < this.currentIndex + this.videoLiveOffset) {
+ this.loadVideos()
+ }
+ },
- // 婊戝姩鍒囨崲瑙嗛
- onSwiperChange(e) {
- // 濡傛灉瑙嗛澶勪簬鏆傚仠鐘舵�佸線涓嬪埛瑙嗛锛岄偅涔堥渶瑕佸啀璁$畻涓�娆℃殏鍋滄椂闂�
- if (!this.currentVideoIsPlaying) {
- if (this.startPauseTime !== 0) {
- const duration = Date.now() - this.startPauseTime
- this.totalPauseTime += duration
- }
- }
- // 淇濆瓨涓婁竴涓棰戠殑鎾斁璁板綍
- this.savePlayRecord()
- const oldIndex = this.currentIndex;
- this.currentIndex = e.detail.current;
-
- // 鏆傚仠涓婁竴涓棰�
- if (this.videoContexts[oldIndex]) {
- this.videoContexts[oldIndex].pause();
- }
-
- this.startPauseTime = 0;
- // 鎾斁褰撳墠瑙嗛
- if (this.videoContexts[this.currentIndex]) {
- this.videoContexts[this.currentIndex].play();
- }
- },
-
- // 鏀惰棌/鍙栨秷鏀惰棌
- toggleCollect(item, index) {
- let data = {
- refId: item.id,
- collectType: 'video'
- }
- const beforeCollected = item.collected
- const beforeCollectNum = item.collectNum
- if (item.collected) {
- this.videoList[index].collected = false
- this.videoList[index].collectNum -= 1
- } else {
- this.videoList[index].collected = true
- this.videoList[index].collectNum += 1
- }
- changeCollect(data).then(res => {
- if (res.data.code !== 200) {
- this.videoList[index].collected = beforeCollected
- this.videoList[index].collectNum = beforeCollectNum
- }
- })
- },
- // 鍗曞嚮灞忓箷锛氭殏鍋滄垨缁х画鎾斁
- togglePlay(index) {
- console.log("鍗曞嚮瑙嗛", index, this.videoContexts);
- if (this.currentVideoIsPlaying) {
- this.videoContexts[index].pause();
- } else {
- this.videoContexts[index].play();
- }
- },
- // 瑙嗛鎾斁浜嬩欢
- onPlay(id, index) {
- this.getBarRect()
- this.progress = 0
- console.log(id, index, "瑙﹀彂鎾斁");
- if (index === this.currentIndex) {
- this.currentVideoIsPlaying = true;
- } else {
- this.currentVideoIsPlaying = false;
- return
- }
- this.playRecord.videoId = id;
- // 娌″垵濮嬪寲鎵嶈祴鍊硷紝鍥犱负涓�涓棰戦噸澶嶆挱鏀緊nPlay浼氶噸澶嶈Е鍙�
- if (this.playRecord.startPlayTime === 0) {
- this.playRecord.startPlayTime = Date.now();
- }
- if (this.startPauseTime !== 0) {
- const duration = Date.now() - this.startPauseTime
- this.totalPauseTime += duration
- }
- },
-
- // 瑙嗛鏆傚仠浜嬩欢
- onPause(index) {
- console.log(index, "瑙﹀彂鏆傚仠");
- if (index === this.currentIndex) {
- this.currentVideoIsPlaying = false;
- } else {
- this.currentVideoIsPlaying = true;
- return
- }
- this.startPauseTime = Date.now()
- },
- // 瑙嗛缁撴潫浜嬩欢
- onEnded(index) {
- // this.currentVideoIsPlaying = false;
- },
-
- // 璁板綍鎾斁鏃堕暱
- onTimeUpdate(e) {
- this.playRecord.playAt = e.detail.currentTime;
-
- this.currentTime = e.detail.currentTime;
- this.progress = (e.detail.currentTime / this.duration) * 100
- },
- // 瑙︽懜寮�濮�
- handleTouchStart(e) {
- this.isDragging = true;
- this.showProcess = true;
- this.startProgress = this.progress; // 璁板綍寮�濮嬫椂鐨勮繘搴�
- this.startX = e.touches[0].pageX;
- console.log("璁板綍寮�濮嬫椂鐨勮繘搴�", this.startProgress);
- this.videoContexts[this.currentIndex].pause()
- // this.updateProgress(e);
- },
-
- // 瑙︽懜绉诲姩
- handleTouchMove(e) {
- if (!this.isDragging || !this.barWidth) return;
- clearTimeout(this.processHidenTimer)
- this.videoContexts[this.currentIndex].pause()
- this.updateProgress(e);
- },
-
- // 瑙︽懜缁撴潫
- handleTouchEnd() {
- this.isDragging = false;
- console.log("婊戝姩缁撴潫", this.duration * this.progress);
- this.videoContexts[this.currentIndex].seek(this.duration * this.progress / 100)
- this.videoContexts[this.currentIndex].play()
- this.processHidenTimer = setTimeout(() => {
- this.showProcess = false;
- }, 1000);
- },
-
- // 鏇存柊杩涘害
- updateProgress(e) {
- // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣
- const currentX = e.touches[0].pageX;
-
- // 璁$畻婊戝姩璺濈(鍍忕礌)
- const deltaX = currentX - this.startX;
-
- // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺
- const deltaProgress = (deltaX / this.barWidth) * 100;
- console.log("杩涘害澧為噺", deltaProgress);
- // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺
- let newProgress = this.startProgress + deltaProgress;
-
- // 闄愬埗鑼冨洿鍦�0-100涔嬮棿
- newProgress = Math.max(0, Math.min(100, newProgress));
-
- this.progress = newProgress;
- },
- // 鑾峰彇瑙嗛鎬绘椂闀�
- onLoadedMetadata(e) {
- this.duration = e.detail.duration;
- this.formartDuration.push(this.sliderFormatTime(this.duration));
- console.log("瑙嗛鎬绘椂闀�", this.duration);
- },
- // 淇濆瓨鎾斁璁板綍
- async savePlayRecord() {
- console.log(Date.now(), this.playRecord.startPlayTime, this.totalHidenTime);
-
- const data = {
- videoId: this.playRecord.videoId,
- viewDuration: Date.now() - this.playRecord.startPlayTime - this.totalHidenTime - this
- .totalPauseTime,
- playAt: this.playRecord.playAt
- }
- this.playRecord = {
- videoId: null,
- viewDuration: 0, // 杩欎釜瑙嗛鎬诲叡瑙傜湅浜嗗涔�
- playAt: 0, // 杩欎釜瑙嗛鎾斁鍒板摢浜�
- startPlayTime: 0 // 杩欎釜瑙嗛浠庝粈涔堟椂鍊欏紑濮嬫挱鏀剧殑
- }
- this.totalHidenTime = 0
- this.totalPauseTime = 0
- savePlayRecord(data)
- }
+ // 寮�濮嬭Е鎽�
+ handleSwiperStart(e) {
+ console.log("寮�濮嬭Е鎽�", e);
+ this.touchXY.startX = e.touches[0].pageX
+ this.touchXY.startY = e.touches[0].pageY
+ },
+ // 瑙︽懜涓�
+ handleSwiperMove(e) {
+ this.touchXY.endX = e.touches[0].pageX
+ this.touchXY.endY = e.touches[0].pageY
+ },
+ // 缁撴潫瑙︽懜
+ async handleSwiperEnd(item) {
+ // 闃叉婊戝姩婊氬姩鏉′篃瑙﹀彂璺宠浆
+ if (this.showProcess) {
+ return
}
- }
+ const diffX = this.touchXY.endX - this.touchXY.startX
+ const diffY = this.touchXY.endY - this.touchXY.startY
+
+ // 鍒ゆ柇鏄惁鏄í鍚戞粦鍔紙X杞村彉鍖栧ぇ浜嶻杞村彉鍖栵級
+ if (Math.abs(diffX) > Math.abs(diffY)) {
+ if (diffX > 0) {
+ console.log('鍙虫粦')
+ if (this.similaryVideoIndex !== 0) {
+ // 濡傛灉婊戝姩浜嗘í鍚戣棰戯紝閭d箞鍙虫粦灏卞仛瑙嗛鍒囨崲鑰屼笉鏄烦杞晢鍝侀〉
+ // 鍒囨崲涓嬩竴涓棰�
+ const oldIndex = this.similaryVideoIndex;
+ this.similaryVideoIndex = Math.max(this.similaryVideoIndex - 1, 0);
+ if (this.similaryVideoIndex < oldIndex) {
+ // 鎶婄珫鍚戣棰戠殑褰撳墠鎾斁浣嶇疆鏇挎崲涓烘í鍚戣棰戠殑褰撳墠绱㈠紩鍏冪礌
+ const video = this.similarlyVideoList[this.similaryVideoIndex];
+ video["updateKey"] = video.id + this.similaryVideoIndex
+ this.videoList.splice(this.currentIndex, 1, video);
+ // this.videoList[this.currentIndex] = video
+ }
+ }
+ else if (item.goodsList && item.goodsList.length > 0) {
+ this.jumpToPay(item.id)
+ }
+ } else {
+ console.log('宸︽粦')
+ if (this.similarlyVideoList.length < 1 || this.similarlyVideoList.length - this.similaryVideoIndex - 1 <= 3) {
+ // 鐩稿叧瑙嗛涓虹┖鎴栬�呭墿浣欒棰戜笉瓒筹紝瑙﹀彂鍔犺浇鐩稿叧瑙嗛
+ await this.getGoodsSimilarly()
+ }
+ // 鍒囨崲涓嬩竴涓棰�
+ const oldIndex = this.similaryVideoIndex;
+ this.similaryVideoIndex = Math.min(this.similaryVideoIndex + 1, this.similarlyVideoList.length - 1);
+ if (this.similaryVideoIndex > oldIndex) {
+ // 鎶婄珫鍚戣棰戠殑褰撳墠鎾斁浣嶇疆鏇挎崲涓烘í鍚戣棰戠殑褰撳墠绱㈠紩鍏冪礌
+ const video = this.similarlyVideoList[this.similaryVideoIndex];
+ video["updateKey"] = video.id + this.similaryVideoIndex
+ this.videoList.splice(this.currentIndex, 1, video);
+ }
+ }
+ }
+ // 閲嶇疆鍧愭爣
+ this.touchXY = {
+ startX: 0,
+ endX: 0,
+ startY: 0,
+ endY: 0
+ }
+ },
+
+ // 鏀惰棌/鍙栨秷鏀惰棌
+ toggleCollect(item, index) {
+ let data = {
+ refId: item.id,
+ collectType: 'video'
+ }
+ const beforeCollected = item.collected
+ const beforeCollectNum = item.collectNum
+ if (item.collected) {
+ this.videoList[index].collected = false
+ this.videoList[index].collectNum -= 1
+ } else {
+ this.videoList[index].collected = true
+ this.videoList[index].collectNum += 1
+ }
+ changeCollect(data).then(res => {
+ if (res.data.code !== 200) {
+ this.videoList[index].collected = beforeCollected
+ this.videoList[index].collectNum = beforeCollectNum
+ }
+ })
+ },
+ // 鐐硅禐/鍙栨秷鐐硅禐
+ toggleThumbsUp(item, index) {
+ let data = {
+ refId: item.id,
+ thumbsUpType: 'video'
+ }
+ const beforeThumbsUp = item.thumbsUp
+ const beforeThumbsUpNum = item.thumbsUpNum
+ if(item.thumbsUp) {
+ this.videoList[index].thumbsUp = false
+ this.videoList[index].thumbsUpNum -= 1
+ } else {
+ this.videoList[index].thumbsUp = true
+ this.videoList[index].thumbsUpNum += 1
+ }
+ changeThumbsUp(data).then(res => {
+ if(res.data.code !== 200) {
+ this.videoList[index].thumbsUp = beforeThumbsUp
+ this.videoList[index].thumbsUpNum = beforeThumbsUpNum
+ }
+ })
+ },
+ // 鍗曞嚮灞忓箷锛氭殏鍋滄垨缁х画鎾斁
+ togglePlay(index) {
+ console.log("鍗曞嚮瑙嗛", index);
+ const videoContext = uni.createVideoContext(`video${index}`, this);
+ if(this.currentVideoIsPlaying) {
+ videoContext.pause();
+ } else {
+ videoContext.play();
+ }
+ },
+ // 瑙嗛鎾斁浜嬩欢
+ onPlay(id, index) {
+ if(index === this.currentIndex) {
+ this.currentVideoIsPlaying = true;
+ if(! this.duration) {
+ // 璁剧疆褰撳墠鎾斁瑙嗛鐨勬�绘椂闀�
+ this.duration = this.videoList[this.currentIndex].videoDuration;
+ this.formartDuration = this.sliderFormatTime(this.duration);
+ }
+ } else {
+ return
+ }
+ this.getBarRect()
+ this.progress = 0
+ console.log(id, index, "瑙﹀彂鎾斁");
+ this.playRecord.videoId = id;
+ // 娌″垵濮嬪寲鎵嶈祴鍊硷紝鍥犱负涓�涓棰戦噸澶嶆挱鏀緊nPlay浼氶噸澶嶈Е鍙�
+ if(this.playRecord.startPlayTime === 0) {
+ this.playRecord.startPlayTime = Date.now();
+ }
+ if(this.startPauseTime !== 0) {
+ const duration = Date.now() - this.startPauseTime
+ this.totalPauseTime += duration
+ }
+ this.videoLoading = false
+ },
+
+ // 瑙嗛鏆傚仠浜嬩欢
+ onPause(index) {
+ console.log(index, "瑙﹀彂鏆傚仠");
+ if (index === this.currentIndex) {
+ this.currentVideoIsPlaying = false;
+ } else {
+ this.currentVideoIsPlaying = true;
+ return
+ }
+ this.startPauseTime = Date.now()
+ },
+ // 瑙嗛缁撴潫浜嬩欢
+ onEnded(index) {
+ // this.currentVideoIsPlaying = false;
+ },
+
+ // 璁板綍鎾斁鏃堕暱
+ onTimeUpdate(e) {
+ this.videoLoading = false
+ this.playRecord.playAt = e.detail.currentTime;
+
+ this.currentTime = e.detail.currentTime;
+ this.progress = (e.detail.currentTime / this.duration) * 100
+ },
+ // 瑙︽懜寮�濮�
+ handleTouchStart(e) {
+ this.isDragging = true;
+ this.showProcess = true;
+ this.startProgress = this.progress; // 璁板綍寮�濮嬫椂鐨勮繘搴�
+ this.startX = e.touches[0].pageX;
+ console.log("璁板綍寮�濮嬫椂鐨勮繘搴�", this.startProgress);
+ const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext.pause()
+ // this.updateProgress(e);
+ },
+
+ // 瑙︽懜绉诲姩
+ handleTouchMove(e) {
+ if (!this.isDragging || !this.barWidth) return;
+ clearTimeout(this.processHidenTimer)
+ this.updateProgress(e);
+ },
+
+ // 瑙︽懜缁撴潫
+ handleTouchEnd() {
+ this.isDragging = false;
+ console.log("婊戝姩缁撴潫", this.duration * this.progress);
+ const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
+ videoContext.seek(this.duration * this.progress / 100)
+ videoContext.play()
+ this.processHidenTimer = setTimeout(() => {
+ this.showProcess = false;
+ }, 1000);
+ },
+
+ // 鏇存柊杩涘害
+ updateProgress(e) {
+ // 鑾峰彇褰撳墠瑙︽懜鐐筙鍧愭爣
+ const currentX = e.touches[0].pageX;
+
+ // 璁$畻婊戝姩璺濈(鍍忕礌)
+ const deltaX = currentX - this.startX;
+
+ // 灏嗗儚绱犺窛绂昏浆鎹负杩涘害澧為噺
+ const deltaProgress = (deltaX / this.barWidth) * 100;
+ // 璁$畻鏂拌繘搴� = 寮�濮嬫椂鐨勮繘搴� + 婊戝姩澧為噺
+ let newProgress = this.startProgress + deltaProgress;
+
+ // 闄愬埗鑼冨洿鍦�0-100涔嬮棿
+ newProgress = Math.max(0, Math.min(100, newProgress));
+
+ this.progress = newProgress;
+ },
+ // 瑙嗛缂撳啿
+ videoWaiting(index) {
+ if (index === this.currentIndex) {
+ console.log("瑙嗛缂撳啿涓�傘�傘��");
+ this.videoLoading = true;
+ }
+ },
+ // 鑾峰彇瑙嗛鎬绘椂闀�
+ onLoadedMetadata(e) {
+ // this.duration = e.detail.duration;
+ // this.formartDuration.push(this.sliderFormatTime(this.duration));
+ // console.log("瑙嗛鎬绘椂闀�", this.duration);
+ },
+ // 淇濆瓨鎾斁璁板綍
+ async savePlayRecord() {
+ console.log(Date.now(), this.playRecord.startPlayTime, this.totalHidenTime);
+
+ const data = {
+ videoId: this.playRecord.videoId,
+ viewDuration: Date.now() - this.playRecord.startPlayTime - this.totalHidenTime - this
+ .totalPauseTime,
+ playAt: this.playRecord.playAt
+ }
+ this.playRecord = {
+ videoId: null,
+ viewDuration: 0, // 杩欎釜瑙嗛鎬诲叡瑙傜湅浜嗗涔�
+ playAt: 0, // 杩欎釜瑙嗛鎾斁鍒板摢浜�
+ startPlayTime: 0 // 杩欎釜瑙嗛浠庝粈涔堟椂鍊欏紑濮嬫挱鏀剧殑
+ }
+ this.totalHidenTime = 0
+ this.totalPauseTime = 0
+ savePlayRecord(data)
+ }
+ }
+}
</script>
<style scoped>
- ::v-deep .custom-tabbar {
- border-top: none !important;
- }
+::v-deep .custom-tabbar {
+ border-top: none !important;
+}
+.choosePlatType{
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: fixed;
+ z-index: 9999;
+ left: 0;
+ right: 0;
+
+}
+.platTypeItem{
+ width: 80rpx;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ height: 60rpx;
+
+}
+.platTypeItem:nth-child(n+1){
+ margin-left: 32rpx;
+}
+.platTypeItemChoose{
+ margin-top: 15rpx;
+ width: 40%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #fff;
+ height: 4rpx;
+ border-radius: 5rpx;
+}
+.platTypeItenName{
+ color: #fff;
+ font-weight: bold;
+ font-size: 32rpx;
+}
+.video-container {
+ position: relative;
+ width: 100%;
+ height: 100vh;
+ background-color: #000;
+}
- .video-container {
- position: relative;
- width: 100%;
- height: 100vh;
- background-color: #000;
- }
+.showLeft {
+ display: flex;
+ left: 0;
+ align-items: center;
+ justify-content: flex-start;
+ background-color: #b6b6b6;
+ opacity: 0.8;
+ position: fixed;
+ z-index: 99999;
+ height: 70rpx;
+ width: 50rpx;
+ border-radius: 0 50% 50% 0;
+}
- .showLeft {
- display: flex;
- top: 50rpx;
- left: 0;
- align-items: center;
- justify-content: flex-start;
- background-color: #b6b6b6;
- opacity: 0.8;
- position: fixed;
- z-index: 999;
- height: 70rpx;
- width: 50rpx;
- border-radius: 0 50% 50% 0;
- }
+.video-swiper {
+ width: 100%;
+ height: calc(100% - 50px);
+}
- .video-swiper {
- width: 100%;
- height: calc(100% - 50px);
- }
+.video-item {
+ width: 100%;
+ height: 100%;
+}
- .video-item {
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
+.play-icon {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 45px;
+ height: 45px;
+ z-index: 10;
+ opacity: 0.6;
+}
- .play-icon {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- width: 45px;
- height: 45px;
- z-index: 10;
- opacity: 0.6;
- }
+.video-info {
+ width: 70%;
+ position: absolute;
+ bottom: 70px;
+ left: 20px;
+ color: #f8f8f8;
+ z-index: 10;
+ letter-spacing: 1px;
+}
- .video-info {
- width: 70%;
- position: absolute;
- bottom: 70px;
- left: 20px;
- color: #f8f8f8;
- z-index: 10;
- letter-spacing: 1px;
- }
+.action-buttons {
+ position: absolute;
+ right: 20px;
+ bottom: 150px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ z-index: 10;
+}
- .action-buttons {
- position: absolute;
- right: 20px;
- bottom: 150px;
- display: flex;
- flex-direction: column;
- align-items: center;
- z-index: 10;
- }
+.action-item {
+ margin-bottom: 18px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #fff;
+}
- .action-item {
- margin-bottom: 18px;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- color: #fff;
- }
+.avatar-container {
+ margin-bottom: 27px;
+ position: relative;
+ /* 涓虹粷瀵瑰畾浣嶇殑瀛愬厓绱犳彁渚涘畾浣嶄笂涓嬫枃 */
+ width: 40px;
+ height: 40px;
+ display: inline-block;
+ /* 浣垮鍣ㄦ牴鎹唴瀹硅皟鏁村ぇ灏� */
+}
- .avatar-container {
- margin-bottom: 27px;
- position: relative;
- /* 涓虹粷瀵瑰畾浣嶇殑瀛愬厓绱犳彁渚涘畾浣嶄笂涓嬫枃 */
- width: 40px;
- height: 40px;
- display: inline-block;
- /* 浣垮鍣ㄦ牴鎹唴瀹硅皟鏁村ぇ灏� */
- }
+.avatar {
+ border: 2px solid #FFFFFF;
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ /* 鍏抽敭灞炴�э紝璁剧疆涓�50%鍗冲彲瀹炵幇鍦嗗舰 */
+ overflow: hidden;
+ /* 纭繚鍥剧墖涓嶄細瓒呭嚭鍦嗗舰杈圭晫 */
+ display: block;
+}
- .avatar {
- border: 2px solid #FFFFFF;
- box-sizing: border-box;
- width: 100%;
- height: 100%;
- border-radius: 50%;
- /* 鍏抽敭灞炴�э紝璁剧疆涓�50%鍗冲彲瀹炵幇鍦嗗舰 */
- overflow: hidden;
- /* 纭繚鍥剧墖涓嶄細瓒呭嚭鍦嗗舰杈圭晫 */
- display: block;
- }
+.follow-icon {
+ position: absolute;
+ bottom: 0;
+ /* 瀹氫綅鍒板簳閮� */
+ left: 50%;
+ /* 姘村钩灞呬腑寮�濮嬩綅缃� */
+ transform: translate(-50%, 50%);
+ /* 姘村钩灞呬腑骞跺悜涓嬬Щ鍔�50% */
- .follow-icon {
- position: absolute;
- bottom: 0;
- /* 瀹氫綅鍒板簳閮� */
- left: 50%;
- /* 姘村钩灞呬腑寮�濮嬩綅缃� */
- transform: translate(-50%, 50%);
- /* 姘村钩灞呬腑骞跺悜涓嬬Щ鍔�50% */
+ width: 18px;
+ /* 鍥炬爣澶у皬 */
+ height: 18px;
+ background-color: #FF5A5F;
+ /* 鍥炬爣鑳屾櫙鑹� */
+ border-radius: 50%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ /* 杞诲井闃村奖 */
+}
- width: 18px;
- /* 鍥炬爣澶у皬 */
- height: 18px;
- background-color: #FF5A5F;
- /* 鍥炬爣鑳屾櫙鑹� */
- border-radius: 50%;
- display: flex;
- justify-content: center;
- align-items: center;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
- /* 杞诲井闃村奖 */
- }
+.video-tag {
+ margin-left: 5px;
+ font-weight: bold;
+ color: #eeeeee;
+}
- .video-tag {
- margin-left: 5px;
- font-weight: bold;
- color: #eeeeee;
- }
+.video-author {
+ font-size: 1.2em;
+}
- .video-author {
- font-size: 1.2em;
- }
+/* 鍟嗗搧閾炬帴鎮寕灞傛牱寮� */
+.goods-link-warp {
+ position: absolute;
+ bottom: 160px;
+ left: 20px;
+ color: #f8f8f8;
+ z-index: 10;
+}
- /* 鍟嗗搧閾炬帴鎮寕灞傛牱寮� */
- .goods-link-warp {
- position: absolute;
- bottom: 160px;
- left: 20px;
- color: #f8f8f8;
- z-index: 10;
- }
+.goods-link {
+ position: relative;
+ margin: 20rpx 0;
+ padding: 12rpx;
+ background-color: rgba(255, 255, 255, 0.9);
+ border-radius: 12rpx;
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
+}
- .goods-link {
- position: relative;
- margin: 20rpx 0;
- padding: 12rpx;
- background-color: rgba(255, 255, 255, 0.9);
- border-radius: 12rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.08);
- }
+.goods-container {
+ display: flex;
+ align-items: center;
+}
- .goods-container {
- display: flex;
- align-items: center;
- }
+.goods-image {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 8rpx;
+ margin-right: 20rpx;
+}
- .goods-image {
- width: 120rpx;
- height: 120rpx;
- border-radius: 8rpx;
- margin-right: 20rpx;
- }
+.goods-info {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
- .goods-info {
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: center;
- }
+.goods-name {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: bold;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ margin-bottom: 8rpx;
+}
- .goods-name {
- font-size: 28rpx;
- color: #333;
- font-weight: bold;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
- margin-bottom: 8rpx;
- }
+.price-section {
+ display: flex;
+ align-items: center;
+ margin-bottom: 6rpx;
+}
- .price-section {
- display: flex;
- align-items: center;
- margin-bottom: 6rpx;
- }
+.current-price {
+ font-size: 32rpx;
+ color: #ff2e4d;
+ font-weight: bold;
+ margin-right: 12rpx;
+}
- .current-price {
- font-size: 32rpx;
- color: #ff2e4d;
- font-weight: bold;
- margin-right: 12rpx;
- }
+.original-price {
+ font-size: 28rpx;
+ color: #999;
+ text-decoration: line-through;
+}
- .original-price {
- font-size: 28rpx;
- color: #999;
- text-decoration: line-through;
- }
+.sales-count {
+ font-size: 22rpx;
+ color: #999;
+}
- .sales-count {
- font-size: 22rpx;
- color: #999;
- }
+.buy-button {
+ background: linear-gradient(to right, #ff5a5f, #ff2e4d);
+ color: white;
+ padding: 10rpx 28rpx;
+ border-radius: 20rpx;
+ font-size: 26rpx;
+ font-weight: bold;
+}
- .buy-button {
- background: linear-gradient(to right, #ff5a5f, #ff2e4d);
- color: white;
- padding: 10rpx 28rpx;
- border-radius: 20rpx;
- font-size: 26rpx;
- font-weight: bold;
- }
+/* 璇勮寮圭獥鏍峰紡 */
+.comment-popup {
+ background-color: #fff;
+ border-radius: 20rpx 20rpx 0 0;
+ padding-bottom: env(safe-area-inset-bottom);
+ height: 60vh;
+ display: flex;
+ flex-direction: column;
+}
- /* 璇勮寮圭獥鏍峰紡 */
- .comment-popup {
- background-color: #fff;
- border-radius: 20rpx 20rpx 0 0;
- padding-bottom: env(safe-area-inset-bottom);
- height: 60vh;
- display: flex;
- flex-direction: column;
- }
+.popup-header {
+ padding: 30rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1rpx solid #f5f5f5;
+}
- .popup-header {
- padding: 30rpx;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1rpx solid #f5f5f5;
- }
+.popup-title {
+ font-size: 32rpx;
+ font-weight: bold;
+}
- .popup-title {
- font-size: 32rpx;
- font-weight: bold;
- }
+.close-icon {
+ /* font-size: 36rpx; */
+ color: #999;
+}
+
+.comment-list {
+ flex: 1;
+ padding: 0rpx 20rpx 20rpx 20rpx;
+ box-sizing: border-box;
+ height: calc(60vh - 260rpx);
+}
- .close-icon {
- /* font-size: 36rpx; */
- color: #999;
- }
+.comment-item {
+ display: flex;
+ flex-direction: column;
+ padding: 10rpx 0 20rpx 0;
+}
- .comment-list {
- flex: 1;
- padding: 0rpx 20rpx 20rpx 20rpx;
- box-sizing: border-box;
- height: calc(60vh - 260rpx);
- }
+.comment-avatar {
+ width: 70rpx;
+ height: 70rpx;
+ border-radius: 50%;
+ margin-right: 10rpx;
+}
- .comment-item {
- display: flex;
- flex-direction: column;
- padding: 10rpx 0 20rpx 0;
- }
+.comment-reply-avatar {
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 50%;
+ margin-right: 10rpx;
+}
- .comment-avatar {
- width: 70rpx;
- height: 70rpx;
- border-radius: 50%;
- margin-right: 10rpx;
- }
+.comment-content {
+ flex: 1;
+}
- .comment-reply-avatar {
- width: 40rpx;
- height: 40rpx;
- border-radius: 50%;
- margin-right: 10rpx;
- }
+.nickname {
+ font-size: 28rpx;
+ color: #666;
+ display: block;
+ margin-bottom: 10rpx;
+}
- .comment-content {
- flex: 1;
- }
+.content {
+ font-size: 28rpx;
+ color: #333;
+ display: block;
+ margin-bottom: 10rpx;
+}
- .nickname {
- font-size: 28rpx;
- color: #666;
- display: block;
- margin-bottom: 10rpx;
- }
+.time {
+ font-size: 28rpx;
+ color: #999;
+}
- .content {
- font-size: 28rpx;
- color: #333;
- display: block;
- margin-bottom: 10rpx;
- }
+.comment-input-area {
+ display: flex;
+ padding: 20rpx 30rpx;
+ align-items: center;
+}
- .time {
- font-size: 28rpx;
- color: #999;
- }
+.comment-input {
+ flex: 1;
+ background-color: #fff;
+ height: 80rpx;
+ border: 1px solid #dcdcdc;
+ border-radius: 40rpx;
+ padding: 0 30rpx;
+ font-size: 28rpx;
+}
- .comment-input-area {
- display: flex;
- padding: 20rpx 30rpx;
- align-items: center;
- }
+.placeholder {
+ color: #ccc;
+}
- .comment-input {
- flex: 1;
- background-color: #fff;
- height: 80rpx;
- border: 1px solid #dcdcdc;
- border-radius: 40rpx;
- padding: 0 30rpx;
- font-size: 28rpx;
- }
+.submit-btn {
+ margin-left: 20rpx;
+ background-color: #07c160;
+ color: #fff;
+ border-radius: 40rpx;
+ padding: 0 30rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 28rpx;
+}
- .placeholder {
- color: #ccc;
- }
+.loading,
+.empty {
+ padding: 40rpx 0;
+ text-align: center;
+ color: #999;
+}
- .submit-btn {
- margin-left: 20rpx;
- background-color: #07c160;
- color: #fff;
- border-radius: 40rpx;
- padding: 0 30rpx;
- height: 80rpx;
- line-height: 80rpx;
- font-size: 28rpx;
- }
+.reply-list {
+ margin-top: 20rpx;
+ padding-left: 80rpx;
+}
- .loading,
- .empty {
- padding: 40rpx 0;
- text-align: center;
- color: #999;
- }
+.reply-op {
+ margin-top: 10rpx;
+ padding-left: 80rpx;
+ display: flex;
+ font-size: 28rpx;
+ color: #333;
+}
- .reply-list {
- margin-top: 20rpx;
- padding-left: 80rpx;
- }
+.reply-op-item {
+ display: flex;
+ align-items: center;
+ height: 40rpx;
+}
- .reply-op {
- margin-top: 10rpx;
- padding-left: 80rpx;
- display: flex;
- font-size: 28rpx;
- color: #333;
- }
+.reply-item {
+ display: flex;
+ margin-bottom: 20rpx;
+}
- .reply-op-item {
- display: flex;
- align-items: center;
- height: 40rpx;
- }
+.reply-content {
+ flex: 1;
+}
- .reply-item {
- display: flex;
- margin-bottom: 20rpx;
- }
+.reply-to {
+ color: #576b95;
+ margin: 0 10rpx;
+ font-size: 28rpx;
+}
- .reply-content {
- flex: 1;
- }
+.reply-title {
+ display: flex;
+ align-items: center;
+ font-size: 28rpx;
+ color: #333;
+}
- .reply-to {
- color: #576b95;
- margin: 0 10rpx;
- font-size: 28rpx;
- }
+.cancel-reply {
+ margin-left: 20rpx;
+ color: #576b95;
+ font-size: 28rpx;
+ padding: 6rpx 12rpx;
+ background: #f5f5f5;
+ border-radius: 20rpx;
+}
- .reply-title {
- display: flex;
- align-items: center;
- font-size: 28rpx;
- color: #333;
- }
+.view-more-replies {
+ color: #576b95;
+ font-size: 28rpx;
+ padding: 10rpx 0;
+ padding-left: 80rpx;
+}
- .cancel-reply {
- margin-left: 20rpx;
- color: #576b95;
- font-size: 28rpx;
- padding: 6rpx 12rpx;
- background: #f5f5f5;
- border-radius: 20rpx;
- }
+.comment-footer,
+.reply-footer {
+ display: flex;
+ align-items: center;
+ font-size: 28rpx;
+ color: #999;
+}
- .view-more-replies {
- color: #576b95;
- font-size: 28rpx;
- padding: 10rpx 0;
- padding-left: 80rpx;
- }
+.reply-btu {
+ margin-left: 30rpx;
+}
- .comment-footer,
- .reply-footer {
- display: flex;
- align-items: center;
- font-size: 28rpx;
- color: #999;
- }
+.thumbs-up {
+ position: absolute;
+ right: 20rpx;
+ font-size: 32rpx;
+ width: 120rpx;
+}
- .reply-btu {
- margin-left: 30rpx;
- }
+.textSideIcon {
+ font-size: 36rpx;
+ margin-left: 5rpx;
+}
- .thumbs-up {
- position: absolute;
- right: 20rpx;
- font-size: 32rpx;
- width: 120rpx;
- }
+.line {
+ margin-right: 10rpx;
+ color: #cccccc;
+}
- .textSideIcon {
- font-size: 36rpx;
- margin-left: 5rpx;
- }
+.thumbs-num {
+ margin-left: 4rpx;
+}
- .line {
- margin-right: 10rpx;
- color: #cccccc;
- }
+.container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+}
- .thumbs-num {
- margin-left: 4rpx;
- }
+.progress-bar {
+ position: relative;
+ width: 100%;
+ height: 16px;
+ background-color: #eee;
+ overflow: hidden;
+}
- .container {
- display: flex;
- flex-direction: column;
- align-items: center;
- position: absolute;
- bottom: 0;
- width: 100%;
- }
+.progress-fill {
+ position: absolute;
+ left: 0;
+ top: 0;
+ height: 100%;
+ background-color: lightgray;
+ transition: width 0.1s;
+}
- .progress-bar {
- position: relative;
- width: 100%;
- height: 16px;
- background-color: #eee;
- overflow: hidden;
- }
+.process-warp {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
- .progress-fill {
- position: absolute;
- left: 0;
- top: 0;
- height: 100%;
- background-color: lightgray;
- transition: width 0.1s;
- }
+.progress-text {
+ margin-top: 10px;
+ font-size: 14px;
+ color: #fff;
+}
- .process-warp {
- width: 100%;
- display: flex;
- flex-direction: column;
- align-items: center;
- }
+.swiper-box {
+ width: 100%;
+ height: 1400rpx;
+}
- .progress-text {
- margin-top: 10px;
- font-size: 14px;
- color: #666;
- }
+.swiper-item {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+ height: 100%;
+}
- .swiper-box {
- width: 100%;
- height: 1400rpx;
- }
+.currentCategort {
+ padding: 10rpx;
+}
- .swiper-item {
- display: flex;
- justify-content: center;
- align-items: center;
- width: 100%;
- height: 100%;
- }
+.typeNavigation {
+ height: 100%;
+ padding: 10rpx;
+ box-sizing: border-box;
+}
- .currentCategort {
- padding: 10rpx;
- }
+.typeNavigationItem {
+ padding: 24rpx;
+ font-size: 28rpx;
+ color: black;
+ margin-top: 10rpx;
+}
- .typeNavigation {
- height: 100%;
- padding: 10rpx;
- box-sizing: border-box;
- }
- .typeNavigationItem {
- padding: 24rpx;
- font-size: 28rpx;
- color: black;
- margin-top: 10rpx;
- border-radius: 12rpx;
- border: 1rpx solid gray;
- }
+.typeNavigationItemCheck {
+ color: #ef321e;
+ font-size: 32rpx;
+ font-weight: bold;
+ border: 0;
+}
- .typeNavigationItemCheck {
- background-color: #42b993;
- color: #fff;
- border: 0;
- }
+.container ::v-deep .navigationLeft .uni-drawer__content {
+ height: 300rpx !important;
+ top: 100rpx !important;
+ background-color: lightpink !important;
- .container ::v-deep .navigationLeft .uni-drawer__content {
- height: 300rpx !important;
- top: 100rpx !important;
- background-color: lightpink !important;
+}
- }
-</style>
\ No newline at end of file
+.custom-share-btn {
+ font-size: unset;
+ background: none;
+ padding: 0;
+ margin: 0;
+ line-height: normal;
+ border: none;
+}
+.custom-share-btn::after {
+ border: none;
+}
+</style>
--
Gitblit v1.8.0