From a1bde7bdd85d7cc8632ab169e42570b631571d6f Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 30 九月 2025 11:43:11 +0800
Subject: [PATCH] 商品行为分析

---
 pages/product/goods.vue |  232 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 189 insertions(+), 43 deletions(-)

diff --git a/pages/product/goods.vue b/pages/product/goods.vue
index 919364c..f44ad0c 100644
--- a/pages/product/goods.vue
+++ b/pages/product/goods.vue
@@ -6,13 +6,15 @@
     <!-- 浠卙5鏈夋晥 鎵撳紑App -->
 
     <!-- 鍒嗕韩 -->
-    <shares v-if="enableShare && goodsDetail.id" :skuId="this.routerVal.id" :goodsId="this.routerVal.goodsId" :link="
+<!--    <shares v-if="enableShare && goodsDetail.id" :skuId="this.routerVal.id" :goodsId="this.routerVal.goodsId" :link="
       '/pages/product/goods?id=' +
       this.routerVal.id +
       '&goodsId=' +
       this.routerVal.goodsId
     " :thumbnail="goodsDetail.thumbnail" :goodsName="goodsDetail.goodsName" type="goods"
       @close="enableShare = false" />
+	  -->
+	  
     <popups v-model="popupsSwitch" @tapPopup="handleNavbarList" :popData="navbarListData" :x="navbarListX"
       :y="navbarListY" placement="top-start" />
     <view class="index">
@@ -114,10 +116,18 @@
                     </span>
                   </view>
 
-                  <view class="icons share" @click="shareChange()">
+            <!--      <view class="icons share" @click="shareChange()">
                     <u-icon size="30" name="share-fill"></u-icon>
                     <view>鍒嗕韩</view>
-                  </view>
+                  </view> -->
+				  <view class="icons share"  style="margin-top: -15px;">
+				         <button open-type="share" class="custom-share-btn" plain="true" style="border: none;">
+				              <u-icon size="30" name="share-fill"></u-icon>
+				         </button>
+				          <view style="margin-top: -14px;">鍒嗕韩</view>
+				        </view>
+				  
+				  
                   <view class="icons" @click="clickFavorite(goodsDetail.id)">
                     <u-icon size="30" :color="favorite ? '#f2270c' : '#262626'"
                       :name="favorite ? 'heart-fill' : 'heart'"></u-icon>
@@ -155,7 +165,7 @@
           <!-- 閰嶇疆鍦板潃 濡傛灉鏄櫄鎷熶骇鍝佺殑鏃跺�欎笉灞曠ず -->
           <view class="card-box" v-if="goodsDetail.goodsType != 'VIRTUAL_GOODS'">
             <view class="card-flex" @click="shutMask(4)">
-              <view class="card-title"> 宸查�� </view>
+              <view class="card-title"> 鍙�夎鏍� </view>
               <view class="card-content">
                 <span v-if="selectedGoods.spec">{{ selectedGoods.spec.specName }}-{{
                   selectedGoods.spec.specValue
@@ -184,21 +194,21 @@
           <Evaluation id="main5" :goodsDetail="goodsDetail" />
 
           <!-- 搴楅摵鎺ㄨ崘 -->
-          <storeLayout id="main7" :storeDetail="storeDetail" :goodsDetail="goodsDetail" :res="recommendList" />
+          <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" />
 
           <!-- 瀹濊礉鎺ㄨ崘 -->
-          <GoodsRecommend id="main11" :res="likeGoodsList" />
+          <GoodsRecommend id="main11" :res="likeGoodsList" v-if="false" />
         </view>
       </scroll-view>
 
 
       <view class="page-bottom mp-iphonex-bottom" id="pageBottom">
         <view class="icon-btn">
-          <view class="icon-btn-item" @click="navigateToStore(goodsDetail.storeId)">
+        <view class="icon-btn-item" @click="navigateToStore(goodsDetail.storeId)">
             <u-icon size="34" class="red" name="home-fill"></u-icon>
             <view class="red icon-btn-name">搴楅摵</view>
           </view>
@@ -213,10 +223,10 @@
           </view>
         </view>
         <!-- 涓嬫灦灞曠ず -->
-        <div class="detail-btn" v-if="takeDownFromSale">
+<!--        <div class="detail-btn" v-if="takeDownFromSale">
           <view class="to-store-car to-store-btn"  @click="reStartTakeDownSale">
             鏌ョ湅绫讳技鍟嗗搧</view>
-        </div>
+        </div> -->
         <!-- 姝e父缁撶畻椤甸潰 -->
         <view class="detail-btn" v-if="!isGroup && !takeDownFromSale">
           <view class="to-store-car to-store-btn" v-if="goodsDetail.goodsType != 'VIRTUAL_GOODS'" @click="shutMask(4)">
@@ -289,29 +299,28 @@
 import storage from "@/utils/storage.js";
 
 /************缁勪欢***************/
-import PromotionLayout from "./product/promotion/-promotion"; //淇冮攢缁勪欢
-import PromotionDetailsLayout from "./product/promotion/-promotion-details"; //淇冮攢娲诲姩璇︽儏
-import PromotionAssembleLayout from "./product/promotion/-promotion-assemble-promotions"; //淇冮攢娲诲姩鏉�
-import PromotionAssembleListLayout from "./product/promotion/-promotion-assemble-list"; //鎷煎洟鐢ㄦ埛鍒楄〃
-import PromotionCoupon from "./product/promotion/-promotion-coupon"; //浼樻儬鍒哥粍浠�
-import GoodsIntro from "./product/goods/-goods-intro"; //鍟嗗搧浠嬬粛缁勪欢
-import GoodsRecommend from "./product/goods/-goods-recommend"; //瀹濊礉鎺ㄨ崘
-import storeLayout from "./product/shop/-shop"; //搴楅摵缁勪欢
-import Evaluation from "./product/evaluation/-evaluation"; //璇勪环缁勪欢
-import GoodsSwiper from "./product/goods/-goods-swiper"; //杞挱鍥剧粍浠�
-import popupGoods from "@/pages/subComponents/m-buy/goods.vue"; //璐墿杞﹀晢鍝佺殑妯″潡
-import popupAddress from "./product/popup/address"; //鍦板潃閫夋嫨妯″潡
-import shares from "@/components/m-share/index"; //鍒嗕韩
+import PromotionLayout from "@/pages/product/product/promotion/-promotion.vue"; //淇冮攢缁勪欢
+import PromotionDetailsLayout from "@/pages/product/product/promotion/-promotion-details.vue"; //淇冮攢娲诲姩璇︽儏
+import PromotionAssembleLayout from "@/pages/product/product/promotion/-promotion-assemble-promotions.vue"; //淇冮攢娲诲姩鏉�
+import PromotionAssembleListLayout from "@/pages/product/product/promotion/-promotion-assemble-list.vue"; //鎷煎洟鐢ㄦ埛鍒楄〃
+import PromotionCoupon from "@/pages/product/product/promotion/-promotion-coupon.vue"; //浼樻儬鍒哥粍浠�
+import GoodsIntro from "@/pages/product/product/goods/-goods-intro.vue"; //鍟嗗搧浠嬬粛缁勪欢
+import GoodsRecommend from "@/pages/product/product/goods/-goods-recommend.vue"; //瀹濊礉鎺ㄨ崘
+import storeLayout from "@/pages/product/product/shop/-shop.vue"; //搴楅摵缁勪欢
+import Evaluation from "@/pages/product/product/evaluation/-evaluation"; //璇勪环缁勪欢
+import GoodsSwiper from "@/pages/product/product/goods/-goods-swiper.vue"; //杞挱鍥剧粍浠�
+import popupGoods from "@/pages/product/m-buy/goods.vue"; //璐墿杞﹀晢鍝佺殑妯″潡
+import popupAddress from "@/pages/product/product/popup/address.vue"; //鍦板潃閫夋嫨妯″潡
+
 import popups from "@/pages/product/popups/popups.vue"; //姘旀场妗�
-import takeDownFormSaleGoods from "@/pages/product/m-take-down-sale-goods/index"; //涓嬫灦妗�
+import takeDownFormSaleGoods from "@/pages/product/m-take-down-sale-goods/index.vue"; //涓嬫灦妗�
 import setup from "./product/popup/popup";
-	import {
-		getSTSToken
-	} from '@/api/common.js'
+import { getSessionId, userAction,userShare } from "@/api/userAction.js";
+import { getSTSToken } from '@/api/common.js'
+import {addPrizeNum} from '@/api/prize.js'
 export default {
   components: {
     popups,
-    shares,
     PromotionLayout,
     PromotionDetailsLayout,
     PromotionAssembleLayout,
@@ -400,10 +409,10 @@
           text: "璇︽儏",
           id: "3",
         },
-        {
-          text: "鎺ㄨ崘",
-          id: "4",
-        },
+        // {
+        //   text: "鎺ㄨ崘",
+        //   id: "4",
+        // },
       ],
       tabScrollTop: null,
       scrollArr: [],
@@ -444,6 +453,24 @@
       IMLink: "", // IM鍦板潃
       wholesaleList: [],
       takeDownFromSale: false, // 涓嬫灦閿�鍞姸鎬�
+	  pageSessionNo:"",
+    sendOnShow:false,
+	  actionParam:{
+	  		sessionId:'',
+	  		actionType:"PAGE",
+	  		joinType:"SELF",
+	  		pageCode:"GOODS_DETAILS",
+	  		pageParams:"{}",
+	  		pageStatus:"JOIN",
+	  		pageType:"DETAIL",
+			shareId:null,
+	  	},
+		shareParam:{
+			pageCode:"GOODS_DETAILS",
+			shareOption:"{}",
+			pageType:"DETAIL"
+		},
+		shareId:'',
     };
   },
 
@@ -496,17 +523,116 @@
 
     this.productRefHeight = windowHeight - bottomHeight + "px";
   },
+
+
+
+ onShareAppMessage(e) {
+ 		console.log("寮�濮嬪垎浜�")
+ 		console.log(this.goodsDetail)
+ 		// 杩斿洖涓�涓狿romise
+ 		return new Promise((resolve) => {
+ 			
+ 					this.shareId = '';
+ 					this.shareParam.shareOption = JSON.stringify(this.routerVal)
+ 					userShare(this.shareParam).then(res => {
+ 					  this.shareId = res.data.data;
+						let param = {
+							addType:"SHARE_GOODS_VIDEO",
+							extend:"",
+						}
+						let extend = {shareId:this.shareId}
+						param.extend = JSON.stringify(extend)
+						addPrizeNum(param);
+ 					  
+ 					  // 褰撹幏鍙栧埌shareId鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ 					  resolve({
+ 						title: this.goodsDetail.goodsName,
+ 						path: '/pages/product/goods' +'?id='+ this.routerVal.id + '&goodsId=' + this.routerVal.goodsId +'&shareId=' + this.shareId,
+ 						imageUrl: this.goodsDetail.goodsGalleryList[0],
+ 						success(e) {
+ 						  console.log("鍒嗕韩鎴愬姛", e);
+ 						},
+ 						fail(e) {
+ 						  console.log('鍒嗕韩澶辫触', e);
+ 						}
+ 					  });
+ 					}).catch(err => {
+ 					  // 澶勭悊閿欒鎯呭喌锛屼緥濡備娇鐢ㄩ粯璁ゅ弬鏁�
+ 					  console.error('鑾峰彇鍒嗕韩ID澶辫触', err);
+ 					  resolve({
+ 						title: this.goodsDetail.goodsName,
+ 						path: '/pages/product/goods' +'?id='+ this.routerVal.id + '&goodsId=' + this.routerVal.goodsId,
+ 						imageUrl: this.goodsDetail.goodsGalleryList[0],
+ 					  });
+ 					});
+ 		});
+ 	},
   async onLoad (options) {
-    this.routerVal = options;
+	if(options.shareId){
+		this.actionParam.shareId = options.shareId;
+		this.actionParam.joinType = 'SHARE'
+		console.log('瑙﹀彂onLoad')
+		uni.setStorage({
+			key: 'shareId',
+			data: options.shareId,
+			success: function () {
+				console.log('缂撳瓨shareId鎴愬姛');
+			}
+		});
+	}
+	this.actionParam.pageParams = JSON.stringify(options)
+	  if(options.q){
+		  const queryParam = {
+			  id:'',
+			  goodsId:'',
+			  distributionId:''
+		  };
+		  const decodedUrl = decodeURIComponent(decodeURIComponent(options.q));
+		  console.log('鍘熷URL:', decodedUrl);
+		  const params = this.parseUrlParams(decodedUrl);
+		  const id = params.id;
+		  const gooodsId = params.goodsId;
+		  queryParam.id = id;
+		  queryParam.goodsId = gooodsId;
+		  this.routerVal = queryParam;
+		  this.actionParam.pageParams = JSON.stringify(params)
+		  this.actionParam.joinType = 'SCAN'
+	  }else{
+		  this.routerVal = options;
+		  this.actionParam.pageParams = JSON.stringify(options)
+	  }
+	  console.log('鎵撳嵃淇℃伅')
+	   console.log(options)
+	  console.log(this.routerVal)
+    
     // #ifdef MP-WEIXIN
-    // 灏忕▼搴忛粯璁ゅ垎浜�
-    uni.showShareMenu({
-      withShareTicket: true,
-      menus: ["shareAppMessage", "shareTimeline"],
-    });
+
     // #endif
   },
+  
+  onUnload() {
+    let param = Object.assign({}, this.actionParam);
+    if (this.sendOnShow)return
+    param.pageStatus = "LEAVE"
+    userAction(param)
+  },
+  onHide() {
+    this.startHidenTime = Date.now()
+    let	param = Object.assign({}, this.actionParam);
+    this.sendOnShow = true;
+    param.pageStatus = "LEAVE"
+    userAction(param)
+  },
   async onShow () {
+	  getSessionId().then(res=>{
+	  	this.pageSessionNo = res.data.data
+		this.actionParam.sessionId = this.pageSessionNo
+		this.actionParam.sessionId = res.data.data
+	  	if(this.pageSessionNo){
+	  	let	param = Object.assign({}, this.actionParam);
+	  		userAction(param)
+	  	}
+	  })	
     this.goodsDetail = {};
     //濡傛灉鏈夊弬鏁癷ds璇存槑浜嬪垎閿�鐭繛鎺ワ紝闇�瑕佽幏鍙栧弬鏁�
     if (this.routerVal.scene) {
@@ -522,6 +648,23 @@
   },
 
   methods: {
+	  // 瑙f瀽URL鍙傛暟
+	  parseUrlParams(url) {
+	    const params = {};
+	    // 澶勭悊鍙兘瀛樺湪鐨刪ash锛堝鏋滄湁鐨勮瘽锛�
+	    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;
+	  },
     // 閲嶆柊鎵撳紑涓嬫灦
     reStartTakeDownSale(){
       this.$refs.takeDownSale.show = true
@@ -555,6 +698,8 @@
      * 鍒濆鍖栦俊鎭�
      */
     async init (id, goodsId, distributionId = "") {
+		console.log('鎵撳嵃id:' + id)
+		console.log('鎵撳嵃goodsId:'+ goodsId)
       this.isGroup = false; //鍒濆鍖栨嫾鍥�
       this.productId = id; // skuId
       // 杩欓噷璇锋眰鑾峰彇鍒伴〉闈㈡暟鎹�  瑙f瀽鏁版嵁
@@ -611,7 +756,7 @@
       this.goodsSpec = response.data.result.specs;
       this.PromotionList = response.data.result.promotionMap;
       this.goodsParams = response.data.result.goodsParamsDTOList || [];
-
+	console.log('浼樻儬鍗锋椿鍔�--------------------銆�',response.data.result.promotionMap)
       // 鍒ゆ柇鏄惁鎷煎洟娲诲姩鎴栬�呯Н鍒嗗晢鍝� 濡傛灉鏈夊垯鏄剧ず鎷煎洟娲诲姩淇℃伅
       this.PromotionList &&
         Object.keys(this.PromotionList).forEach((item) => {
@@ -732,13 +877,14 @@
      * 鏌ョ湅璐墿杞�
      */
     reluchToCart () {
+		console.log('鐐瑰嚮浜嗚喘鐗╄溅-----------------------銆�')
       let obj = {
         from: "product",
         id: this.productId,
       };
       storage.setCartBackbtn(obj);
-      uni.switchTab({
-        url: "/pages/tabbar/cart/cartList",
+      uni.redirectTo({
+        url: "/pages/cusbar/cart/cartList",
       });
     },
 
@@ -758,8 +904,8 @@
      */
     back () {
       if (getCurrentPages().length == 1) {
-        uni.switchTab({
-          url: "/pages/tabbar/home/index",
+        uni.redirectTo({
+            url: "/pages/commodity-square/commoditySquare",
         });
       } else {
         uni.navigateBack();

--
Gitblit v1.8.0