绿满眶商城微信小程序-uniapp
64772c366d7a81bbadad32d45746ec18df5cb5f1..587acb1557cebb464aa0e250ff3dbfc436a860fd
2025-08-06 zxl
Merge remote-tracking branch 'origin/dev_fix_sub' into dev_fix_sub
587acb 对比 | 目录
2025-08-06 zxl
取消商品参数展示,首页视频全屏播放
747566 对比 | 目录
3个文件已修改
2个文件已添加
100 ■■■■ 已修改文件
pages/product/goods.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/product/product/goods/-goods-intro.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar/index/home.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar/index/static/off_screen.png 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar/index/static/on_screen.png 补丁 | 查看 | 原始文档 | blame | 历史
pages/product/goods.vue
@@ -187,7 +187,7 @@
          <storeLayout v-if="false" id="main7" :storeDetail="storeDetail" :goodsDetail="goodsDetail" :res="recommendList" />
          <!-- 宝贝详情 -->
          <GoodsIntro id="main9" :res="goodsDetail" :goodsParams="goodsParams" :goodsId="goodsDetail.goodsId"
         <GoodsIntro id="main9" :res="goodsDetail" :goodsParams="goodsParams" :goodsId="goodsDetail.goodsId"
            v-if="goodsDetail.id" />
          <!-- 宝贝推荐 -->
pages/product/product/goods/-goods-intro.vue
@@ -23,15 +23,18 @@
        </view>
      </view>
    </view>
    <view class="detail-box">
    <!-- 撑起底部内容 -->
    <view style="height: 100px;">
    </view>
 <!--   <view class="detail-box">
      <view class="goods-detail">
        <view class="detail_padding">
          <div class="goods-detail-box">
            <div class="goods-detail-item goods-active">商品参数</div>
          </div>
            <div class="goods-detail-item goods-active">商品参数321</div>
          </div> -->
          <!-- <u-divider>商品参数</u-divider> -->
          <div class="param-list" v-if="goodsParams.length == 0">
       <!--   <div class="param-list" v-if="goodsParams.length == 0">
            <u-empty text="暂无商品参数" mode="list"></u-empty>
          </div>
          <div
@@ -55,7 +58,7 @@
          </div>
        </view>
      </view>
    </view>
    </view> -->
  </div>
</template>
pages/tabbar/index/home.vue
@@ -34,14 +34,18 @@
                :ref="'video'+index"
                :src="item.videoUrl"
                :autoplay="index === currentIndex"
                :controls="false"
                :controls="isControls"
                :loop="true"
                :object-fit="item.videoFit"
                :enable-progress-gesture="false"
                :show-center-play-btn="false"
                :show-progress="true"
                :show-fullscreen-btn="true"
                :show-progress="false"
                :show-fullscreen-btn="isControls"
                :show-play-btn="isControls"
                :show-mute-btn="false"
                class="video-item"
                @fullscreenchange="onFullscreenChange"
                @play="onPlay(item.id, index)"
                @pause="onPause(index)"
                @ended="onEnded(index)"
@@ -50,6 +54,14 @@
                @loadedmetadata="onLoadedMetadata($event)"
                @waiting="videoWaiting(index)"
              ></video>
               <view class="fullscreen-btn">
                    <image
                      class="fullscreen-icon"
                      :src="isFullScreen ? off_screen : on_screen"
                      mode="aspectFit"
                      @click="requestFullScreen('video'+index,item)"
                    ></image>
                </view>
              <!-- 自定义控制条 -->
              <view
                @touchstart.stop="handleTouchStart"
@@ -73,6 +85,7 @@
                </view>
              </view>
        </view>
        <view style="width: 100%; height: 100%;" v-else-if="item.videoContentType === 'img'">
          <uni-swiper-dot
            :info="item.imgs"
@@ -125,7 +138,7 @@
        <view class="video-info" :style="{bottom: marginBottom + 20 + 'px'}">
          <view style="width: 100%; position: relative;">
              <text class="video-author">@{{item.authorName}}</text>
              <text class="iconfont" @click="jumpToSearch" style="position: absolute;right: 45px;">&#xe64e;</text>
              <text class="iconfont" @click="jumpToSearch" style="position: absolute;right: 42px;bottom: 50rpx;">&#xe64e;</text>
          </view>
          <view style="width: 100%;word-wrap: break-word;white-space: normal;overflow-wrap: break-word;">
              <text class="video-title">{{item.title}}</text>
@@ -269,6 +282,7 @@
import { getUserInfo } from "@/api/members";
import storage from "@/utils/storage.js";
import TopBar from "@/components/TopBar.vue";
import { nextTick } from "vue";
export default {
  components: {TopBar},
@@ -279,6 +293,10 @@
  },
  data() {
    return {
        isControls:false,
        on_screen: require('@/pages/tabbar/index/static/on_screen.png'),
        off_screen: require('@/pages/tabbar/index/static/off_screen.png'),
        isFullScreen:false,
        isTouch:false,
        userId :'',
        currentImgIndex: 0, // 播放到第几张图--索引
@@ -450,7 +468,40 @@
          path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
      }
  },
  methods: {
  methods: {
      requestFullScreen(id,item){
          console.log(item)
          const videoContext = uni.createVideoContext(id, this)
          // 根据视频方向决定全屏方向
            const direction = this.shouldUseLandscape(item) ? 90 : 0;
            // 先暂停视频(避免切换时的声音问题)
            // videoContext.pause();
          // 请求全屏
           videoContext.requestFullScreen({
             direction: direction,
           });
      },
      shouldUseLandscape(item) {
        if(item.videoFit === 'cover'){
            return false
        }
        // 默认横屏(根据业务需求调整)
        return true;
      },
      // 全屏状态变化事件
          onFullscreenChange(e) {
            console.log('全屏状态变化:', e.detail.fullScreen)
            if(e.detail.fullScreen){
                 this.isControls = true;
            }else{
                this.isControls = false;
            }
          },
      getUserId(){
          const {id} = uni.getStorageSync('user_info_obj_dev')
          this.userId = id;
@@ -1178,6 +1229,26 @@
</script>
<style scoped>
    .fullscreen-btn {
      width: 60rpx;
      height: 60rpx;
      border-radius: 50%;
      background-color: rgba(0, 0, 0, 0.4);
      display: flex;
      justify-content: center;
      align-items: center;
      z-index: 999;
      backdrop-filter: blur(10rpx);
      border: 1rpx solid rgba(255, 255, 255, 0.2);
      margin-top: -90rpx;
      margin-left: 15rpx;
    }
    /* 图标样式 */
    .fullscreen-icon {
      width: 36rpx;
      height: 36rpx;
      opacity: 0.9;
    }
    ::v-deep .custom-tabbar {
        border-top: none !important;
    }
@@ -1194,7 +1265,7 @@
    .video-item {
      width: 100%;
      height: 100%;
      height: 70%;
      /* object-fit: cover; */
    }
    .play-icon {
pages/tabbar/index/static/off_screen.png
pages/tabbar/index/static/on_screen.png