绿满眶商城微信小程序-uniapp
zxl
2 天以前 883630c60e9a941d6cf721cfb4b9160ab406a7dd
pages/health/healthVideo.vue
@@ -264,6 +264,7 @@
import { silentLogin } from "@/api/connect.js";
import { getUserInfo } from "@/api/members";
import storage from "@/utils/storage.js";
import { getSessionId, userAction,userShare } from "@/api/userAction.js";
export default {
  components: {TopBar},
  computed: {
@@ -337,6 +338,7 @@
      },
      loading: false,  // 是否正在加载
      videoQuery: {
         source:'system',
         pageNumber: 1,
         pageSize: 10,
         videoFrom: 'recommend'
@@ -352,10 +354,34 @@
      similarlyNomore: false, // 是否还有更多相似视频
      similaryVideoIndex: 0, // 相似视频的播放位置
      similarlyLoading: false, // 相似视频加载
      marginBottom: 0 // 底部安全区域
      marginBottom: 0 ,// 底部安全区域
        pageSessionNo:"",
        actionParam:{
            sessionId:'',
            actionType:"PAGE",
            joinType:"SELF",
            pageCode:"HEALTH_VIDEO",
            pageParams:"{}",
            pageStatus:"JOIN",
            pageType:"DETAIL"
         },
         shareParam:{
            pageCode:"HEALTH_VIDEO",
            shareOption:"{}",
            pageType:"DETAIL"
         },
         shareId:'',
    }
  },
  onShow() {
     getSessionId().then(res=>{
      this.pageSessionNo = res.data.data
      if(this.pageSessionNo){
      let   param = Object.assign({}, this.actionParam);
         param.sessionId = this.pageSessionNo
         userAction(param)
      }
     })
     // const token = storage.getAccessToken();
     // if (! token) {
       //  this.wxSilentLogin(() => {
@@ -370,23 +396,72 @@
        this.totalHidenTime += duration
     }
  },
  onUnload() {
    let param = Object.assign({}, this.actionParam);
    if (this.sendOnShow)return
    param.pageStatus = "LEAVE"
    userAction(param)
  },
  onHide() {
     this.startHidenTime = Date.now()
    this.startHidenTime = Date.now()
    let param = Object.assign({}, this.actionParam);
    this.sendOnShow = true;
    param.pageStatus = "LEAVE"
    userAction(param)
  },
  onLoad(option) {
     if(option.shareId){
      console.log('触发onLoad')
        this.actionParam.shareId = option.shareId;
        this.actionParam.joinType = 'SHARE'
        uni.setStorage({
           key: 'shareId',
           data: option.shareId,
           success: function () {
              console.log('缓存shareId成功');
           }
        });
     }
     this.marginBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
     let queryParam = this.videoQuery;
     if (option.q) {
       // 双重解码:微信对URL进行了两次编码
       const decodedUrl = decodeURIComponent(decodeURIComponent(option.q));
       console.log('原始URL:', decodedUrl);
       // 解析URL中的查询参数
       const params = this.parseUrlParams(decodedUrl);
       const shareType = params.shareType;
       const videoId = params.videoId;
      const source = params.source
       queryParam.videoId = videoId
      queryParam.shareType = shareType
      queryParam.source = source
       console.log('解析参数:', { shareType, videoId,source });
      this.actionParam.pageParams = JSON.stringify(params)
      this.actionParam.joinType = 'SHARE'
     }
     const token = storage.getAccessToken();
     if (! token) {
        this.wxSilentLogin(() => {
           this.loadVideos();
           // 判断是不是点击分享链接进来的
           if (option.userId && option.videoId) {
              this.actionParam.pageParams = JSON.stringify(option)
              this.actionParam.joinType = 'SCAN'
                queryParam.videoId = option.videoId
              // 保存分享点击记录
              saveShareClickRecord({refId: option.videoId, shareUserId: option.userId})
           }
           this.loadVideos(queryParam);
        })
     } else {
      this.loadVideos();
        if (option.userId && option.videoId) {
            queryParam.videoId = option.videoId
           // 保存分享点击记录
           saveShareClickRecord({refId: option.videoId, shareUserId: option.userId})
        }
      this.loadVideos(queryParam);
     }
  },
  onShareAppMessage(e) {
@@ -403,13 +478,61 @@
      shareUser: userInfo.id
   }
   saveShare(data)
     return {
        title: videoInfo.title,
        path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
        imageUrl: videoInfo.coverUrl
     }
     // return {
     //    title: videoInfo.title,
     //    path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
     //    imageUrl: videoInfo.coverUrl
     // }
   return new Promise((resolve) => {
            this.shareId = '';
            let shareObj ={
               videoId:videoInfo.id,
               userId:userInfo.id
            }
            this.shareParam.shareOption = JSON.stringify(shareObj)
            userShare(this.shareParam).then(res => {
              this.shareId = res.data.data;
              // 当获取到shareId后,再resolve分享配置
              resolve({
               title: videoInfo.title,
               path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}&shareId=${this.shareId}`,
               imageUrl: videoInfo.coverUrl,
               success(e) {
                 console.log("分享成功", e);
               },
               fail(e) {
                 console.log('分享失败', e);
               }
              });
            }).catch(err => {
              // 处理错误情况,例如使用默认参数
              console.error('获取分享ID失败', err);
              resolve({
                  title: videoInfo.title,
                  path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
                  imageUrl: videoInfo.coverUrl
              });
            });
   });
  },
  methods: {
     // 解析URL参数
     parseUrlParams(url) {
       const params = {};
       // 处理可能存在的hash(如果有的话)
       const cleanUrl = url.split('#')[0];
       const queryStr = cleanUrl.split('?')[1] || '';
       queryStr.split('&').forEach(pair => {
         const [key, value] = pair.split('=');
         if (key) {
           // 如果值存在,则解码,否则设为空字符串
           params[key] = value ? decodeURIComponent(value) : '';
         }
       });
       return params;
     },
     // 查询当前视频的关联视频(挂了同一商品的)
     async getGoodsSimilarly() {
             if (this.similarlyLoading || this.similarlyNomore) return Promise.resolve();;
@@ -739,11 +862,45 @@
     },
    // 加载视频数据
    async loadVideos() {
    async loadVideos(param) {
      if (this.loading || this.videoNoMore) return;
      this.loading = true;
   if(param){
      console.log("二维码扫码数据执行在此处1")
      console.log(this.videoQuery)
      getHealthRecommendVideos(this.videoQuery).then(res => {
         console.log(res)
              // 新增一个字段用于循环时的key
              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++;
      })
   }else{
      console.log("二维码扫码数据执行在此处2")
      console.log(this.videoQuery)
      getHealthRecommendVideos(this.videoQuery).then(res => {
        console.log(res)
        // 新增一个字段用于循环时的key
        const data = res.data.data.map(item => {
           return {
@@ -768,7 +925,7 @@
        }
        this.videoQuery.pageNumber++;
     })
     })}
    },
    // 滑动切换视频