From 50eac4101c827bc7202b8259534eed70aa909a49 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 15 十月 2025 00:42:55 +0800
Subject: [PATCH] Merge branch 'dev_fix_sub' of http://42.193.1.25:9521/r/lmk-shop-wx into dev_fix_sub
---
api/members.js | 7
pages/kitchen/KitchenVideo.vue | 97 ++
api/store-coupon.js | 52 +
api/userAction.js | 45 +
pages/mine/activity/reportActivity.vue | 39
pages/storeClaim/storePrizeClaim.vue | 401 +++++++++
pages/cart/coupon/myCoupon.vue | 35
pages/cart/payment/success.vue | 63 +
pages/health/healthVideo.vue | 96 ++
pages/tabbar/index/home.vue | 112 ++
api/prize.js | 13
pages/cusbar/video/video.vue | 38
pages/mine/activity/detail.vue | 36
pages/order/orderDetail.vue | 38
pages/order/afterSales/afterSales.vue | 36
pages/storeClaim/store-claim.vue | 365 ++++++++
pages/video/video-goods-detail-swiper.vue | 108 ++
pages/cusbar/cart/cartList.vue | 39
pages/order/fillorder.vue | 35
pages/product/goods.vue | 133 ++
pages/prize/PrizeDetail/PrizeDetail.vue | 105 ++
pages/video/video-similar.vue | 87 ++
pages.json | 48 +
pages/cart/payment/payOrder.vue | 38
pages/video/video-goods-detail.vue | 37
pages/order/afterSales/afterSalesSelect.vue | 38
pages/order/myOrder.vue | 68 +
pages/cart/coupon/couponCenter.vue | 38
pages/tabbar/user/my.vue | 125 ++
pages/order/afterSales/afterSalesDetail.vue | 37
pages/commodity-square/commoditySquare.vue | 38
31 files changed, 2,366 insertions(+), 81 deletions(-)
diff --git a/api/members.js b/api/members.js
index 9fde8be..8f5c1ea 100644
--- a/api/members.js
+++ b/api/members.js
@@ -481,3 +481,10 @@
data:params
});
}
+export function bindMemberAndStore(params){
+ return http.request({
+ url: '/lmk/member/bindMemberAndStore',
+ method: Method.PUT,
+ data:params
+ });
+}
\ No newline at end of file
diff --git a/api/prize.js b/api/prize.js
index 7d9186b..32578c1 100644
--- a/api/prize.js
+++ b/api/prize.js
@@ -57,4 +57,17 @@
method: Method.POST,
needToken: true
});
+}
+/**
+ * 澧炲姞鎶藉鏈轰細
+ *
+ * @param params
+ */
+export function addPrizeNum(data) {
+ return http.request({
+ url: `/lmk/prize/addPrizeNum`,
+ method: Method.POST,
+ needToken: true,
+ data:data
+ });
}
\ No newline at end of file
diff --git a/api/store-coupon.js b/api/store-coupon.js
new file mode 100644
index 0000000..7f5b46f
--- /dev/null
+++ b/api/store-coupon.js
@@ -0,0 +1,52 @@
+import { http, Method } from "@/utils/request.js";
+
+/**
+ * 鏍规嵁搴楅摵浼樻儬鍒稿叧鑱擨D鑾峰彇浼樻儬鍒歌鎯�
+ * @param {string|number} storeCoupRef - 搴楅摵浼樻儬鍒稿叧鑱擨D
+ * @returns {Promise} 杩斿洖浼樻儬鍒歌鎯�
+ */
+export function getStoreCouponDetail(storeCoupRef) {
+ return http.request({
+ url: `/lmk/store/coupon/${storeCoupRef}`,
+ method: Method.GET,
+ needToken: true,
+ });
+}
+
+/**
+ * 棰嗗彇搴楅摵浼樻儬鍒�
+ * @param {string|number} storeCoupRef - 搴楅摵浼樻儬鍒稿叧鑱擨D
+ * @returns {Promise} 杩斿洖棰嗗彇缁撴灉
+ */
+export function claimStoreCoupon(storeCoupRef) {
+ return http.request({
+ url: `/lmk/store/coupon/${storeCoupRef}`,
+ method: Method.POST,
+ needToken: true,
+ });
+}
+/**
+ * 鏍规嵁搴楅摵浼樻儬鍒稿叧鑱擨D鑾峰彇浼樻儬鍒歌鎯�
+ * @param {string|number} storeCoupRef - 搴楅摵浼樻儬鍒稿叧鑱擨D
+ * @returns {Promise} 杩斿洖浼樻儬鍒歌鎯�
+ */
+export function getStorePrize(storeCoupRef) {
+ return http.request({
+ url: `/lmk/store/prize/${storeCoupRef}`,
+ method: Method.GET,
+ needToken: true,
+ });
+}
+
+/**
+ * 棰嗗彇搴楅摵浼樻儬鍒�
+ * @param {string|number} storeCoupRef - 搴楅摵浼樻儬鍒稿叧鑱擨D
+ * @returns {Promise} 杩斿洖棰嗗彇缁撴灉
+ */
+export function claimPrize(storeCoupRef) {
+ return http.request({
+ url: `/lmk/store/prize/${storeCoupRef}`,
+ method: Method.POST,
+ needToken: true,
+ });
+}
\ No newline at end of file
diff --git a/api/userAction.js b/api/userAction.js
new file mode 100644
index 0000000..40ed5e9
--- /dev/null
+++ b/api/userAction.js
@@ -0,0 +1,45 @@
+/**
+ * 娲诲姩鐩稿叧API
+ */
+import { http, Method } from "@/utils/request.js";
+
+import api from "@/config/api.js";
+
+/**
+ * 鑾峰彇浼氳瘽id
+ *
+ * @param params
+ */
+ export function getSessionId() {
+ return http.request({
+ url: "/lmk/action-record/sessionId",
+ method: Method.GET,
+ needToken: true
+ });
+}
+/**
+ * 鎻掑叆鐢ㄦ埛琛屼负
+ *
+ * @param params
+ */
+ export function userAction(data) {
+ return http.request({
+ url: "/lmk/action-record",
+ method: Method.POST,
+ needToken: true,
+ data:data
+ });
+}
+/**
+ * 鍒嗕韩鍜岀偣鍑诲垎浜�
+ *
+ * @param params
+ */
+ export function userShare(data) {
+ return http.request({
+ url: "/lmk/action-record/share",
+ method: Method.POST,
+ needToken: true,
+ data:data
+ });
+}
diff --git a/pages.json b/pages.json
index 080939b..f95be17 100644
--- a/pages.json
+++ b/pages.json
@@ -198,6 +198,7 @@
// "path": "pages/tabbar/user/my",
// "style": {
// "navigationBarTextStyle": "white",
+ // "navigationBarTextStyle": "white",
// "enablePullDownRefresh": true,
// "navigationStyle": "custom",
// "componentPlaceholder": {
@@ -1569,7 +1570,13 @@
{
"path": "complain/complainInfo",
"style": {
- "navigationBarTitleText": "鎶曡瘔璇︽儏"
+ "navigationBarTitleText": "鎶曡瘔璇︽儏",
+ "componentPlaceholder": {
+ "u-image": "view",
+ "u-cell-group": "view",
+ "u-cell-item": "view",
+ "u-input": "view"
+ }
}
},
{
@@ -2247,7 +2254,44 @@
}
}
]
- }
+ },
+ {
+ "root": "pages/storeClaim",
+ "pages": [{
+ "path" : "store-claim",
+ "style" :
+ {
+ "navigationBarTitleText" : "浼樻儬鍗烽鍙�",
+ "componentPlaceholder":{
+ "u-card": "view",
+ "u-navbar": "view",
+ "u-tag": "view",
+ "u-icon": "view",
+ "u-button": "view",
+ "u-empty": "view"
+
+ }
+ }
+ },
+ {
+ "path" : "storePrizeClaim",
+ "style" :
+ {
+ "navigationBarTitleText" : "棰嗗彇鎶藉鏈轰細",
+ "componentPlaceholder":{
+ "u-card": "view",
+ "u-navbar": "view",
+ "u-tag": "view",
+ "u-icon": "view",
+ "u-button": "view",
+ "u-empty": "view",
+ "u-image":"view"
+
+ }
+ }
+ }]
+ }
+
],
"globalStyle": {
"navigationBarTextStyle": "black",
diff --git a/pages/cart/coupon/couponCenter.vue b/pages/cart/coupon/couponCenter.vue
index 958c482..37ad1ad 100644
--- a/pages/cart/coupon/couponCenter.vue
+++ b/pages/cart/coupon/couponCenter.vue
@@ -54,6 +54,7 @@
import {
getAllCoupons
} from "@/api/promotions.js";
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
return {
@@ -65,10 +66,45 @@
pageSize: 10,
},
storeId: "", //搴楅摵 id,
- couponData: ""
+ couponData: "",
+ sendOnShow:false,
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"COUPON_CENTER",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(option) {
+ this.actionParam.pageParams = JSON.stringify(option)
this.storeId = option.storeId;
this.getCoupon();
},
diff --git a/pages/cart/coupon/myCoupon.vue b/pages/cart/coupon/myCoupon.vue
index afacc3b..d8876e3 100644
--- a/pages/cart/coupon/myCoupon.vue
+++ b/pages/cart/coupon/myCoupon.vue
@@ -126,6 +126,7 @@
import '@/components/uview-components/uview-ui';
import { getMemberCoupons } from "@/api/members.js";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
@@ -171,10 +172,44 @@
},
],
couponList: [], //浼樻儬鍒稿垪琛�
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"MY_COUPON",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
+ 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)
+ },
+ onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
+ },
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
this.navList[this.tabCurrentIndex].params.pageNumber = 1;
this.navList[this.tabCurrentIndex].dataList = [];
this.getData();
diff --git a/pages/cart/payment/payOrder.vue b/pages/cart/payment/payOrder.vue
index f1c642f..9c1636a 100644
--- a/pages/cart/payment/payOrder.vue
+++ b/pages/cart/payment/payOrder.vue
@@ -46,6 +46,7 @@
import '@/components/uview-components/uview-ui'
import * as API_Trade from "@/api/trade";
import {payCallback} from '@/api/members'
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
return {
@@ -71,12 +72,45 @@
walletValue: 0.0,
// 鏀粯鍊掕鏃�
autoCancel: 0,
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"PAY_ORDER",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(val) {
this.routerVal = val;
-
+ this.actionParam.pageParams = JSON.stringify(val)
//鍒濆鍖栧弬鏁�
// #ifdef APP-PLUS
this.paymentType = "APP";
@@ -126,7 +160,7 @@
paymentMethod +
"&payPrice=" +
this.cashierParams.price+
- "&orderType="+this.orderType
+ "&orderType="+this.orderType +"&orderSn="+this.cashierParams.orderSns
});
},
diff --git a/pages/cart/payment/success.vue b/pages/cart/payment/success.vue
index 9b16e07..1227781 100644
--- a/pages/cart/payment/success.vue
+++ b/pages/cart/payment/success.vue
@@ -54,6 +54,8 @@
</template>
<script>
// import goodsRecommend from "@/pages/cart/m-goods-recommend/index.vue";
+import { getSessionId, userAction } from "@/api/userAction.js";
+import {addPrizeNum} from '@/api/prize.js'
export default {
data() {
return {
@@ -64,6 +66,16 @@
payPrice: 0,
goodsList: [],
activeColor: this.$mainColor,
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"PAY_SUCCESS",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
// components: {
@@ -83,12 +95,61 @@
}
},
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.paymentMethod = options.paymentMethod || "";
this.from = options.from || "";
this.payPrice = options.payPrice || 0;
this.orderType = options.orderType;
-
+ let param = {
+ addType:"USER_BUY_ORDER_NUM",
+ extend:"",
+ }
+ let extend = {orderSn:options.orderSn}
+ param.extend = JSON.stringify(extend)
+ addPrizeNum(param);
+ let param2 = {
+ addType:"USER_BUY_SUM_PRICE",
+ extend:"",
+ }
+ let extend2 = {orderSn:options.orderSn}
+ param2.extend = JSON.stringify(extend2)
+ addPrizeNum(param2);
+ const shareId = uni.getStorageSync("shareId")
+ if(shareId){
+ let param3 = {
+ addType:"SHARE_USER_SHOPPING",
+ extend:"",
+
+ }
+ let extend3 = {orderSn:options.orderSn,
+ shareId:shareId}
+ param3.extend = JSON.stringify(extend3)
+ addPrizeNum(param3);
+ }
},
methods: {
checkOrder() {
diff --git a/pages/commodity-square/commoditySquare.vue b/pages/commodity-square/commoditySquare.vue
index 3d23697..0b5de17 100644
--- a/pages/commodity-square/commoditySquare.vue
+++ b/pages/commodity-square/commoditySquare.vue
@@ -100,6 +100,7 @@
<script>
import TopBar from "@/components/TopBar.vue";
+ import { getSessionId, userAction } from "@/api/userAction.js";
import {
getCategoryList,
getGoodsList,
@@ -155,6 +156,17 @@
order: 'asc',
sort: 'goodsSort'
},
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"SHOPPING_SQUARE",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
}
},
methods: {
@@ -413,8 +425,32 @@
console.log(this.maxPages)
}
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
+ async onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
- async onLoad() {
await this.getCartList();
// 鑾峰彇鐘舵�佹爮楂樺害
const systemInfo = uni.getSystemInfoSync();
diff --git a/pages/cusbar/cart/cartList.vue b/pages/cusbar/cart/cartList.vue
index da6bd4a..a2a46ea 100644
--- a/pages/cusbar/cart/cartList.vue
+++ b/pages/cusbar/cart/cartList.vue
@@ -188,6 +188,7 @@
import '@/components/uview-components/uview-ui';
import * as API_Trade from "@/api/trade";
import { debounce } from "@/utils/tools.js";
+import { getSessionId, userAction } from "@/api/userAction.js";
// import uniNumberBox from '@/components/uni-number-box'
export default {
data() {
@@ -220,7 +221,18 @@
checkout: false, //鍏ㄩ�夋寜閽�
WEIXIN_num: "", //璐墿杞﹀吋瀹瑰井淇℃杩涘櫒
marginBottom: 0 ,// 搴曢儴瀹夊叏鍖哄煙
- windowHeight: 0 // 鍙娇鐢ㄥ睆骞曢珮搴�
+ windowHeight: 0 ,// 鍙娇鐢ㄥ睆骞曢珮搴�
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"CART_LIST",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
@@ -235,10 +247,35 @@
onPullDownRefresh(){
this.getCardData();
},
+ 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)
+ },
+ onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
+
+ },
/**
* 鍒濆鍖栦俊鎭�
*/
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
this.deleteShow ? (this.deleteShow = false) : true;
this.getCardData();
// if (this.$refs.swiperAction) {
diff --git a/pages/cusbar/video/video.vue b/pages/cusbar/video/video.vue
index 68065a6..e5d6cdd 100644
--- a/pages/cusbar/video/video.vue
+++ b/pages/cusbar/video/video.vue
@@ -213,6 +213,7 @@
import { getRecommendTag3 } from "@/api/video-tag.js";
import { getFileKey } from "@/utils/file.js";
import { getVideoGoodsList } from "@/api/goods.js";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
components: {MyTag},
@@ -267,7 +268,17 @@
screenWidth: 375,
gap: 10, // 鍥剧墖闂磋窛
windowHeight: 0,
- marginBottom: 0
+ marginBottom: 0,
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"PUBLISH_VIDEO",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
computed: {
@@ -288,7 +299,22 @@
return (this.screenWidth - (this.gap * 4) - 20) / 3
}
},
- onLoad() {
+ 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)
+ },
+ onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
+
// 鑾峰彇灞忓箷瀹藉害
const systemInfo = uni.getSystemInfoSync()
this.screenWidth = systemInfo.windowWidth
@@ -299,6 +325,14 @@
this.getVideoGoodsByEs()
},
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
this.initCOS()
// 鍒濆鍖栨帹鑽愭爣绛�
this.getRecommendTags()
diff --git a/pages/health/healthVideo.vue b/pages/health/healthVideo.vue
index 4b17775..fd691c3 100644
--- a/pages/health/healthVideo.vue
+++ b/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: {
@@ -353,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
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
// const token = storage.getAccessToken();
// if (! token) {
// this.wxSilentLogin(() => {
@@ -371,10 +396,32 @@
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) {
@@ -392,12 +439,16 @@
queryParam.shareType = shareType
queryParam.source = source
console.log('瑙f瀽鍙傛暟:', { shareType, videoId,source });
+ this.actionParam.pageParams = JSON.stringify(params)
+ this.actionParam.joinType = 'SHARE'
}
const token = storage.getAccessToken();
if (! token) {
this.wxSilentLogin(() => {
// 鍒ゆ柇鏄笉鏄偣鍑诲垎浜摼鎺ヨ繘鏉ョ殑
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})
@@ -427,11 +478,42 @@
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鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ 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: {
// 瑙f瀽URL鍙傛暟
diff --git a/pages/kitchen/KitchenVideo.vue b/pages/kitchen/KitchenVideo.vue
index f69b41b..5a4aae7 100644
--- a/pages/kitchen/KitchenVideo.vue
+++ b/pages/kitchen/KitchenVideo.vue
@@ -285,7 +285,7 @@
} from "@/api/collect.js";
import { saveShare, saveShareClickRecord } from "@/api/share.js";
import storage from "@/utils/storage.js";
-
+import { getSessionId, userAction,userShare } from "@/api/userAction.js";
export default {
computed: {
hasPlayTime() {
@@ -387,10 +387,35 @@
similarlyNomore: false, // 鏄惁杩樻湁鏇村鐩镐技瑙嗛
similaryVideoIndex: 0, // 鐩镐技瑙嗛鐨勬挱鏀句綅缃�
similarlyLoading: false, // 鐩镐技瑙嗛鍔犺浇
- marginBottom: 0 // 搴曢儴瀹夊叏鍖哄煙
+ marginBottom: 0 ,// 搴曢儴瀹夊叏鍖哄煙
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"KITCHEN_VIDEO",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ },
+ shareParam:{
+ pageCode:"KITCHEN_VIDEO",
+ shareOption:"{}",
+ pageType:"DETAIL"
+ },
+ shareId:'',
+
}
},
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
// this.showDrawer('showLeft')
this.loadVideos()
// 濡傛灉瑙嗛鎸変笅鏆傚仠鍚庡垏鎹㈤〉闈㈠啀鍥炲埌椤甸潰鏃讹紝鍙畻鏆傚仠鏃堕棿锛堝洜涓烘殏鍋滄椂闂村拰绂诲紑椤甸潰鏃堕棿鏄噸澶嶇殑锛屽彧绠椾竴涓級
@@ -399,10 +424,32 @@
this.totalHidenTime += duration
}
},
+ 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)
},
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;
// 鑾峰彇鐘舵�佹爮楂樺害
const systemInfo = uni.getSystemInfoSync();
@@ -429,12 +476,16 @@
queryParam.shareType = shareType
queryParam.source = source
console.log('瑙f瀽鍙傛暟:', { shareType, videoId,source });
+ this.actionParam.pageParams = JSON.stringify(params)
+ this.actionParam.joinType = 'SHARE'
}
const token = storage.getAccessToken();
if(!token){
this.wxSilentLogin(() => {
// 鍒ゆ柇鏄笉鏄偣鍑诲垎浜摼鎺ヨ繘鏉ョ殑
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})
@@ -468,11 +519,43 @@
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鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ 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: {
// 瑙f瀽URL鍙傛暟
diff --git a/pages/mine/activity/detail.vue b/pages/mine/activity/detail.vue
index f05c52c..9c2680e 100644
--- a/pages/mine/activity/detail.vue
+++ b/pages/mine/activity/detail.vue
@@ -75,6 +75,7 @@
getActivityDetail,
activityReport
} from '@/api/activity.js';
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
return {
@@ -103,9 +104,44 @@
collectType: '',
refId: '',
},
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"ACTIVITY_DETAIL",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
// 鎺ユ敹 URL 鍙傛暟
if (options.id) {
this.detailId = options.id;
diff --git a/pages/mine/activity/reportActivity.vue b/pages/mine/activity/reportActivity.vue
index 5741ab1..671497f 100644
--- a/pages/mine/activity/reportActivity.vue
+++ b/pages/mine/activity/reportActivity.vue
@@ -55,6 +55,7 @@
import TopBar from "@/components/TopBar.vue";
import '@/components/uview-components/uview-ui';
import {getActivityReportList} from '@/api/activity.js';
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
components: {TopBar},
data() {
@@ -75,10 +76,44 @@
},
loading: false, // 鏄惁姝e湪鍔犺浇
noMore: false, // 鏄惁娌℃湁鏇村鏁版嵁
- total: 0 // 鎬绘暟鎹噺
+ total: 0 ,// 鎬绘暟鎹噺
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"ACTIVITY_LIST",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
- onLoad() {
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
+ onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.getActivityList();
},
methods: {
diff --git a/pages/order/afterSales/afterSales.vue b/pages/order/afterSales/afterSales.vue
index 31d504e..44ee64d 100644
--- a/pages/order/afterSales/afterSales.vue
+++ b/pages/order/afterSales/afterSales.vue
@@ -204,6 +204,7 @@
import { getAfterSaleList, cancelAfterSale } from "@/api/after-sale.js";
import { getOrderList } from "@/api/order.js";
import storage from "@/utils/storage";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
@@ -240,9 +241,44 @@
},
status: "loadmore",
keywords: "", // 鎼滅储璁㈠崟sn
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"AFTER_SALE",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.orderList = [];
this.params.pageNumber = 1;
if (options.orderSn) this.params.keywords = options.orderSn;
diff --git a/pages/order/afterSales/afterSalesDetail.vue b/pages/order/afterSales/afterSalesDetail.vue
index a157028..c282daa 100644
--- a/pages/order/afterSales/afterSalesDetail.vue
+++ b/pages/order/afterSales/afterSalesDetail.vue
@@ -108,6 +108,7 @@
import { upload } from "@/api/common.js";
import { checkBankno } from "@/utils/Foundation";
import storage from "@/utils/storage.js";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
component: {
city,
@@ -169,13 +170,47 @@
refundWay: "",
serviceType: "", //鐢宠绫诲瀷
},
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"REFUND_ORDER",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
-
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
/**
* 鍒ゆ柇褰撳墠鍐呭骞剁敓鎴愭暟鎹�
*/
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
let navTitle = "鐢宠鍞悗";
this.form.serviceType = "RETURN_GOODS";
if (options.value == 1) {
diff --git a/pages/order/afterSales/afterSalesSelect.vue b/pages/order/afterSales/afterSalesSelect.vue
index a10e5b8..1651219 100644
--- a/pages/order/afterSales/afterSalesSelect.vue
+++ b/pages/order/afterSales/afterSalesSelect.vue
@@ -58,15 +58,51 @@
import '@/components/uview-components/uview-ui'
import { getAfterSaleInfo } from "@/api/after-sale";
import storage from "@/utils/storage";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
return {
sn: "",
sku: {}, //sku
- applyInfo:""
+ applyInfo:"",
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"APPLY_SALE",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.sn = options.sn;
this.sku = storage.getAfterSaleData();
// 鏌ョ湅褰撳墠鍟嗗搧鏄惁鏀寔閫�娆鹃��璐�
diff --git a/pages/order/fillorder.vue b/pages/order/fillorder.vue
index 667add2..fddeb77 100644
--- a/pages/order/fillorder.vue
+++ b/pages/order/fillorder.vue
@@ -400,9 +400,11 @@
import LiLiWXPay from "@/js_sdk/lili-pay/wx-pay.js";
import invoices from "@/pages/order/invoice/setInvoice";
import { mapState } from "vuex";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
onLoad: function (val) {
this.routerVal = val;
+ this.actionParam.pageParams = JSON.stringify(val)
},
components: {
invoices,
@@ -454,6 +456,17 @@
storeAddress: "",
originOrderData:"", // 鍘熷璁㈠崟鏁版嵁
+ pageSessionNo:"",
+ sendOnShow:false,
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"FILL_ORDER",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
watch: {
@@ -516,8 +529,28 @@
return true; //闃绘榛樿杩斿洖琛屼负
}
},
-
+ 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
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
// 鍒ゆ柇鏄惁瀛樺湪鍐欒繃澶囨敞淇℃伅鐨勫晢鍝�
if (this.remark && this.remark.length > 0) {
this.remarkFlag = true;
diff --git a/pages/order/myOrder.vue b/pages/order/myOrder.vue
index 4f7be7d..55b224e 100644
--- a/pages/order/myOrder.vue
+++ b/pages/order/myOrder.vue
@@ -175,6 +175,14 @@
</u-button> -->
</view>
</view>
+ <view style="display: flex;justify-content: space-around;">
+ <view class="" @click="callPhone">
+ 瀹㈡湇鐑嚎: 19980834650
+ </view>
+ <view class="" @click="copyToClipboard">
+ 瀹㈡湇寰俊: meiyikuang
+ </view>
+ </view>
</view>
</view>
<uni-load-more :status="tabItem.loadStatus"></uni-load-more>
@@ -241,6 +249,7 @@
import { getClearReason } from "@/api/after-sale.js";
import LiLiWXPay from "@/js_sdk/lili-pay/wx-pay.js";
import {buyBack} from "@/api/trade.js";
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
data() {
@@ -327,6 +336,16 @@
reason: "", //鍙栨秷鍘熷洜
cancelList: "", //鍙栨秷鍒楄〃
rogShow: false, //鏄剧ず鏄惁鏀惰揣
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"ORDER_LIST",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
@@ -349,7 +368,28 @@
}
// this.loadData(this.status);
},
+ 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)
+ },
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
if(this.$options.filters.tipsToLogin()){
if (!this.tabCurrentIndex) {
this.initData(0);
@@ -359,6 +399,7 @@
},
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
/**
* 淇app绔偣鍑婚櫎鍏ㄩ儴璁㈠崟澶栫殑鎸夐挳杩涘叆鏃朵笉鍔犺浇鏁版嵁鐨勯棶棰�
* 鏇挎崲onLoad涓嬩唬鐮佸嵆鍙�
@@ -386,6 +427,29 @@
},
},
methods: {
+ copyToClipboard(){
+ uni.setClipboardData({
+ data:'meiyikuang',
+ success() {
+ uni.showToast({
+ title: '澶嶅埗鎴愬姛',
+ icon: 'none'
+ })
+ }
+ })
+ },
+ callPhone(){
+ uni.showModal({
+ title:'纭鑱旂郴瀹㈡湇鍚�?',
+ success(e) {
+ if(e.confirm){
+ uni.makePhoneCall({
+ phoneNumber:'19980834650'
+ })
+ }
+ }
+ })
+ },
openCouponPackage(order){
console.log(order)
uni.navigateTo({
@@ -654,6 +718,10 @@
url:
"/pages/mine/msgTips/packageMsg/logisticsDetail?order_sn=" + order.sn,
});
+ // uni.navigateTo({
+ // url:
+ // `/pages/order/deliverDetail?order_sn=${order.sn}`,
+ // });
},
},
};
diff --git a/pages/order/orderDetail.vue b/pages/order/orderDetail.vue
index a244454..d89c8d9 100644
--- a/pages/order/orderDetail.vue
+++ b/pages/order/orderDetail.vue
@@ -10,7 +10,7 @@
</div>
<!-- 鐗╂祦淇℃伅 -->
<view class="info-view logistics-view">
- <view class="logistics-List" v-if="logisticsList && logisticsList.traces && logisticsList.traces.length != 0 ">
+ <view class="logistics-List" v-if="logisticsList && logisticsList.traces && logisticsList.traces.length != 0 && !(orderPackage && orderPackage.length)">
<view class="logistics-List-title">
{{ logisticsList.traces[logisticsList.traces.length - 1].AcceptStation }}
</view>
@@ -270,7 +270,7 @@
import shares from "@/pages/order/m-share/index.vue"; //鍒嗕韩
import { getClearReason } from "@/api/after-sale.js";
-
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
components: {
shares,
@@ -325,9 +325,43 @@
orderPackage:"",
//鍟嗗搧淇℃伅鍐嶆潵涓�鍗曚娇鐢�
skuList:[],
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"ORDER_DETAIL",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
+ },
onLoad(options) {
+ this.actionParam.pageParams = JSON.stringify(options)
this.loadData(options.sn);
this.sn = options.sn;
},
diff --git a/pages/prize/PrizeDetail/PrizeDetail.vue b/pages/prize/PrizeDetail/PrizeDetail.vue
index 6e2bba5..9b6102e 100644
--- a/pages/prize/PrizeDetail/PrizeDetail.vue
+++ b/pages/prize/PrizeDetail/PrizeDetail.vue
@@ -96,7 +96,6 @@
<button class="chance-item" open-type="share">
<view class="chance-icon">馃懃</view>
<text class="chance-title">鍒嗕韩濂藉弸</text>
- <text class="chance-subtitle">+1娆℃満浼�</text>
</button>
<!-- <view class="chance-item" @tap="shareToTimeline">
<view class="chance-icon">馃寪</view>
@@ -106,17 +105,14 @@
<view class="chance-item" @tap="watchVideo">
<view class="chance-icon">馃幀</view>
<text class="chance-title">娴忚瑙嗛</text>
- <text class="chance-subtitle">+1娆℃満浼�</text>
</view>
<view class="chance-item" @tap="browseProduct">
<view class="chance-icon">馃泹锔�</view>
<text class="chance-title">娴忚鍟嗗搧</text>
- <text class="chance-subtitle">+1娆℃満浼�</text>
</view>
<view class="chance-item " @tap="goShopping">
<view class="chance-icon">馃洅</view>
<text class="chance-title">鍘昏喘鐗�</text>
- <text class="chance-subtitle">浜彈璐墿涔愯叮</text>
</view>
</view>
@@ -148,11 +144,14 @@
</template>
<script>
import bgConfig from '@/pages/prize/PrizeDetail/prize-bgConfig.js'
+ import { getSessionId, userAction ,userShare } from "@/api/userAction.js";
+
import {
prizeInfo,
prizeNum,
prize,
- grantRecord
+ grantRecord,
+ addPrizeNum
} from '@/api/prize.js'
export default {
data() {
@@ -212,7 +211,23 @@
shareTimelineAttempt: false,
activityCover: '',
activityName: '',
- couponId: ''
+ couponId: '',
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"PRIZE_DETAIL",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ },
+ shareParam:{
+ pageCode:"PRIZE_DETAIL",
+ shareOption:"{}",
+ pageType:"DETAIL"
+ },
+ shareId:'',
};
},
computed: {
@@ -221,7 +236,54 @@
return [...this.originalWinners]
}
},
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = res.data.data
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ param.sessionId = this.pageSessionNo
+ userAction(param)
+ }
+ })
+ const shareId = uni.getStorageSync("shareId");
+ if(shareId){
+ let param = {
+ addType:"SHARE_USER_REGISTRY",
+ extend:"",
+ }
+ let extend = {shareId:shareId}
+ param.extend = JSON.stringify(extend)
+ addPrizeNum(param);
+
+ let param2 = {
+ addType:"USER_STAY_TIME",
+ extend:"",
+ }
+ addPrizeNum(param2);
+ }
+ },
async onLoad(option) {
+ if(option.shareId){
+ this.actionParam.shareId = option.shareId;
+ this.actionParam.joinType = 'SHARE'
+ console.log('瑙﹀彂onLoad')
+ }
+ this.actionParam.pageParams = JSON.stringify(option)
+
const pages = getCurrentPages()
console.log('================pages ', pages)
this.activityId = option.id
@@ -266,17 +328,38 @@
// this.startAutoScroll()
},
onShareAppMessage() {
- return {
+ // 杩斿洖涓�涓狿romise
+ return new Promise((resolve) => {
+ this.shareId = '';
+ this.shareParam.shareOption = JSON.stringify({
+ id:this.activityId
+ })
+ userShare(this.shareParam).then(res => {
+ this.shareId = res.data.data;
+ console.log('------------------1銆�', this.shareId);
+
+ // 褰撹幏鍙栧埌shareId鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ resolve({
title: this.activityName,
- path: '/pages/prize/PrizeDetail/PrizeDetail?id=' + this.activityId,
+ path: '/pages/prize/PrizeDetail/PrizeDetail?id=' + this.activityId + '&shareId=' + this.shareId,
imageUrl: this.activityCover,
success(e) {
- console.log("鍒嗕韩鎴愬姛", e)
+ console.log("鍒嗕韩鎴愬姛", e);
},
fail(e) {
- console.log('鍒嗕韩澶辫触', e)
+ console.log('鍒嗕韩澶辫触', e);
}
- }
+ });
+ }).catch(err => {
+ // 澶勭悊閿欒鎯呭喌锛屼緥濡備娇鐢ㄩ粯璁ゅ弬鏁�
+ console.error('鑾峰彇鍒嗕韩ID澶辫触', err);
+ resolve({
+ title: this.activityName,
+ path: '/pages/prize/PrizeDetail/PrizeDetail?id=' + this.activityId,
+ imageUrl: this.activityCover
+ });
+ });
+ });
},
beforeDestroy() {
this.stopAutoScroll()
diff --git a/pages/product/goods.vue b/pages/product/goods.vue
index e74e3dc..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>
@@ -301,17 +311,16 @@
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 shares from "@/pages/product/m-share/index.vue"; //鍒嗕韩
+
import popups from "@/pages/product/popups/popups.vue"; //姘旀场妗�
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,
@@ -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,8 +523,64 @@
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) {
-
+ 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:'',
@@ -512,22 +595,44 @@
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) {
diff --git a/pages/storeClaim/store-claim.vue b/pages/storeClaim/store-claim.vue
new file mode 100644
index 0000000..aebe6d2
--- /dev/null
+++ b/pages/storeClaim/store-claim.vue
@@ -0,0 +1,365 @@
+<template>
+ <view class="container">
+ <!-- 浼樻儬鍒稿崱鐗� -->
+ <view class="coupon-card" v-if="couponInfo.storeCoupRef">
+ <u-card :border="false" :head-style="{ padding: '30rpx' }" :body-style="{ padding: '0 30rpx 30rpx' }">
+ <!-- 澶撮儴锛氬簵閾轰俊鎭� -->
+ <view slot="head" class="card-head">
+ <view class="store-info">
+ <u-icon name="home" size="36" color="#999"></u-icon>
+ <text class="store-name">{{ couponInfo.storeName }}</text>
+ </view>
+ <u-tag v-if="couponInfo.claimStatus === 'NOT_CLAIM'" text="鏈鍙�" type="warning" mode="plain" size="mini" />
+ <u-tag v-else-if="couponInfo.claimStatus === 'CLAIM'" text="宸查鍙�" type="success" mode="plain" size="mini" />
+ <u-tag v-else text="宸茶繃鏈�" type="info" mode="plain" size="mini" />
+ </view>
+
+ <!-- 涓讳綋锛氫紭鎯犲埜淇℃伅 -->
+ <view slot="body" class="card-body">
+ <view class="coupon-title">
+ <text class="title">{{ couponInfo.couponName }}</text>
+ <text class="coupon-no">缂栧彿锛歿{ couponInfo.couponNo }}</text>
+ </view>
+
+ <view class="coupon-desc" v-if="couponInfo.couponDesc">
+ <text class="desc">{{ couponInfo.couponDesc }}</text>
+ </view>
+
+ <view class="coupon-rule" v-if="couponInfo.couponRule">
+ <text class="rule-title">浣跨敤瑙勫垯锛�</text>
+ <text class="rule-content">{{ couponInfo.couponRule }}</text>
+ </view>
+
+ <view class="coupon-time" v-if="couponInfo.startTime && couponInfo.endTime">
+ <u-icon name="clock" size="28" color="#999"></u-icon>
+ <text class="time-text">鏈夋晥鏈燂細{{ formatDate(couponInfo.startTime) }} 鑷� {{ formatDate(couponInfo.endTime) }}</text>
+ </view>
+
+ <view class="coupon-condition" v-if="couponInfo.consumeThreshold > 0">
+ <u-icon name="coupon" size="28" color="#999"></u-icon>
+ <text class="condition-text">婊{ formatAmount(couponInfo.consumeThreshold) }}鍏冨彲鐢�</text>
+ </view>
+ </view>
+
+ <!-- 搴曢儴锛氭搷浣滄寜閽� -->
+ <view slot="foot" class="card-foot">
+ <u-button
+ :type="couponInfo.claimStatus === 'NOT_CLAIM' ? 'primary' : 'default'"
+ :disabled="couponInfo.claimStatus !== 'NOT_CLAIM'"
+ :loading="loading"
+ @click="claimCoupon"
+ :ripple="true"
+ :hair-line="false"
+ >
+ {{ couponInfo.claimStatus === 'NOT_CLAIM' ? '绔嬪嵆棰嗗彇' : couponInfo.claimStatus === 'CLAIM' ? '宸查鍙�' : '宸茶繃鏈�' }}
+ </u-button>
+ </view>
+ </u-card>
+ </view>
+
+ <!-- 绌虹姸鎬� -->
+ <view class="empty-state" v-else>
+ <u-empty text="浼樻儬鍒镐俊鎭笉瀛樺湪" mode="coupon" :icon-size="200"></u-empty>
+ </view>
+
+ <!-- 浣跨敤璇存槑 -->
+ <view class="instructions">
+ <view class="instructions-title">
+ <u-icon name="info-circle" size="28" color="#999"></u-icon>
+ <text class="title-text">浣跨敤璇存槑</text>
+ </view>
+ <view class="instructions-content">
+ <text class="content-text">1. 浼樻儬鍒镐粎闄愬湪鎸囧畾搴楅摵浣跨敤\n2. 姣忎釜鐢ㄦ埛闄愰涓�寮燶n3. 浼樻儬鍒镐笉鍙厬鎹㈢幇閲慭n4. 璇峰湪鏈夋晥鏈熷唴浣跨敤</text>
+ </view>
+ </view>
+
+ <!-- 绌虹櫧鍗犱綅 -->
+ <view class="placeholder"></view>
+ </view>
+</template>
+
+<script>
+ import { getStoreCouponDetail, claimStoreCoupon } from '@/api/store-coupon.js';
+ import { formatPrice } from '@/utils/Foundation.js';
+
+ export default {
+ data() {
+ return {
+ loading: false,
+ storeCoupRef: '', // 搴楅摵浼樻儬鍒稿叧鑱擨D
+ couponInfo: {
+ id: "",
+ storeCoupRef: "",
+ storeId: "",
+ storeName: "",
+ couponId: "",
+ couponName: "",
+ couponNo: "",
+ couponAmount: 0, // 浼樻儬閲戦
+ couponDesc: "", // 浼樻儬鍒告弿杩�
+ couponRule: "", // 浣跨敤瑙勫垯
+ startTime: "", // 寮�濮嬫椂闂�
+ endTime: "", // 缁撴潫鏃堕棿
+ consumeThreshold: 0, // 娑堣垂闂ㄦ
+ claimStatus: "NOT_CLAIM", // 棰嗗彇鐘舵��
+ }
+ }
+ },
+ onShow() {
+ this.getCouponDetail(this.storeCoupRef);
+ },
+ onLoad(options) {
+ // 鑾峰彇浼犻�掔殑搴楅摵浼樻儬鍒稿叧鑱擨D
+ if (options.storeCoupRef) {
+ this.storeCoupRef = options.storeCoupRef;
+ this.getCouponDetail(options.storeCoupRef);
+ } else if (options.id) {
+ // 鍏煎鏃у弬鏁�
+ this.storeCoupRef = options.id;
+ this.getCouponDetail(options.id);
+ }else if(options.q){
+ // 鍙岄噸瑙g爜锛氬井淇″URL杩涜浜嗕袱娆$紪鐮�
+ const decodedUrl = decodeURIComponent(decodeURIComponent(options.q));
+ console.log('鍘熷URL:', decodedUrl);
+
+ // 瑙f瀽URL涓殑鏌ヨ鍙傛暟
+ const params = this.parseUrlParams(decodedUrl);
+ this.storeCoupRef = params.id;
+ this.getCouponDetail(this.storeCoupRef);
+ }
+ else {
+ this.$u.toast('鍙傛暟閿欒');
+ }
+ },
+ 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;
+ },
+ // 鏍煎紡鍖栭噾棰�
+ formatAmount(amount) {
+ if (!amount) return '0';
+ return formatPrice(parseFloat(amount));
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateStr) {
+ if (!dateStr) return '';
+ return dateStr.split(' ')[0];
+ },
+
+ // 鑾峰彇浼樻儬鍒歌鎯�
+ async getCouponDetail(storeCoupRef) {
+ uni.showLoading({
+ title: '鍔犺浇涓�...'
+ });
+
+ try {
+ const res = await getStoreCouponDetail(storeCoupRef);
+ console.log(JSON.stringify(res))
+ if (res.data.code === 200) {
+ this.couponInfo = {
+ ...this.couponInfo,
+ ...res.data.data,
+ couponAmount: res.data.data.couponAmount || 0,
+ consumeThreshold: res.data.data.consumeThreshold || 0
+ };
+ } else {
+ this.$u.toast(res.data.message || '鑾峰彇浼樻儬鍒歌鎯呭け璐�');
+ }
+ } catch (err) {
+ this.$u.toast('鑾峰彇浼樻儬鍒歌鎯呭け璐ワ紝璇风◢鍚庨噸璇�');
+ console.error('鑾峰彇浼樻儬鍒歌鎯呭け璐�:', err);
+ } finally {
+ uni.hideLoading();
+ }
+ },
+
+ // 棰嗗彇浼樻儬鍒�
+ async claimCoupon() {
+ if (this.couponInfo.claimStatus !== 'NOT_CLAIM') {
+ return;
+ }
+
+ // 纭棰嗗彇
+ uni.showModal({
+ title: '鎻愮ず',
+ content: `纭畾瑕侀鍙�"${this.couponInfo.couponName}"浼樻儬鍒稿悧锛焋,
+ success: (res) => {
+ if (res.confirm) {
+ this.doClaimCoupon();
+ }
+ }
+ });
+ },
+
+ // 鎵ц棰嗗彇浼樻儬鍒告搷浣�
+ async doClaimCoupon() {
+ this.loading = true;
+ try {
+ // 璋冪敤棰嗗彇浼樻儬鍒告帴鍙�
+ const res = await claimStoreCoupon(this.storeCoupRef);
+ if (res.data.code === 200) {
+ this.$u.toast('棰嗗彇鎴愬姛');
+ this.couponInfo.claimStatus = 'CLAIM';
+
+ // 寤惰繜杩斿洖涓婁竴椤碉紝璁╃敤鎴风湅鍒伴鍙栨垚鍔熺殑鎻愮ず
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ } else {
+ this.$u.toast(res.data.message || '棰嗗彇澶辫触');
+ }
+ } catch (err) {
+ this.$u.toast('棰嗗彇澶辫触锛岃绋嶅悗閲嶈瘯');
+ console.error('棰嗗彇浼樻儬鍒稿け璐�:', err);
+ } finally {
+ this.loading = false;
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+.container {
+ background-color: #f5f5f5;
+ min-height: 100vh;
+}
+
+.coupon-card {
+ margin: 20rpx;
+}
+
+.card-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.store-info {
+ display: flex;
+ align-items: center;
+}
+
+.store-name {
+ margin-left: 10rpx;
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.card-body {
+ padding-top: 20rpx;
+}
+
+.coupon-title {
+ margin-bottom: 30rpx;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+}
+
+.title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.coupon-no {
+ font-size: 24rpx;
+ color: #999;
+ margin-left: 20rpx;
+}
+
+.coupon-desc {
+ margin-bottom: 30rpx;
+}
+
+.desc {
+ font-size: 28rpx;
+ color: #666;
+}
+
+.coupon-rule {
+ margin-bottom: 30rpx;
+}
+
+.rule-title {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: bold;
+}
+
+.rule-content {
+ font-size: 26rpx;
+ color: #666;
+}
+
+.coupon-time, .coupon-condition {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20rpx;
+}
+
+.time-text, .condition-text {
+ font-size: 24rpx;
+ color: #999;
+ margin-left: 10rpx;
+}
+
+.card-foot {
+ padding: 20rpx 0;
+}
+
+.instructions {
+ background-color: #ffffff;
+ margin: 20rpx;
+ padding: 30rpx;
+ border-radius: 16rpx;
+}
+
+.instructions-title {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20rpx;
+}
+
+.title-text {
+ margin-left: 10rpx;
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.instructions-content {
+ padding-left: 40rpx;
+}
+
+.content-text {
+ font-size: 26rpx;
+ color: #666;
+ line-height: 1.6;
+}
+
+.placeholder {
+ height: 40rpx;
+}
+
+.empty-state {
+ margin-top: 200rpx;
+}
+</style>
\ No newline at end of file
diff --git a/pages/storeClaim/storePrizeClaim.vue b/pages/storeClaim/storePrizeClaim.vue
new file mode 100644
index 0000000..4a3a526
--- /dev/null
+++ b/pages/storeClaim/storePrizeClaim.vue
@@ -0,0 +1,401 @@
+<template>
+ <view class="container">
+ <!-- 鎶藉鏈轰細鍗$墖 -->
+ <view class="prize-card" v-if="prizeInfo.id">
+ <u-card :border="false" :head-style="{ padding: '30rpx' }" :body-style="{ padding: '0 30rpx 30rpx' }">
+ <!-- 澶撮儴锛氬簵閾轰俊鎭� -->
+ <view slot="head" class="card-head">
+ <view class="store-info">
+ <u-icon name="home" size="36" color="#999"></u-icon>
+ <text class="store-name">{{ prizeInfo.storeName || '榛樿搴楅摵' }}</text>
+ </view>
+ <u-tag v-if="prizeInfo.claimStatus === 'NOT_CLAIM'" text="鏈鍙�" type="warning" mode="plain" size="mini" />
+ <u-tag v-else-if="prizeInfo.claimStatus === 'CLAIM'" text="宸查鍙�" type="success" mode="plain" size="mini" />
+ <u-tag v-else text="宸茶繃鏈�" type="info" mode="plain" size="mini" />
+ </view>
+
+ <!-- 涓讳綋锛氭娊濂栨満浼氫俊鎭� -->
+ <view slot="body" class="card-body">
+ <!-- 灏侀潰鍥剧墖 -->
+ <view class="cover-image" v-if="prizeInfo.activityCover">
+ <u-image
+ :src="prizeInfo.activityCover"
+ width="100%"
+ height="300rpx"
+ mode="aspectFill"
+ border-radius="10"
+ :fade="true"
+ duration="450"
+ ></u-image>
+ </view>
+
+ <view class="prize-title">
+ <text class="title">{{ prizeInfo.activityName || prizeInfo.prizeName || '鎶藉鏈轰細' }}</text>
+ </view>
+
+ <view class="prize-desc" v-if="prizeInfo.activityDes || prizeInfo.prizeDesc">
+ <text class="desc">{{ prizeInfo.activityDes || prizeInfo.prizeDesc }}</text>
+ </view>
+
+ <view class="prize-rule" v-if="prizeInfo.prizeRule">
+ <text class="rule-title">浣跨敤璇存槑锛�</text>
+ <text class="rule-content">{{ prizeInfo.prizeRule }}</text>
+ </view>
+
+ <view class="prize-time" v-if="prizeInfo.beginTime && prizeInfo.endTime">
+ <u-icon name="clock" size="28" color="#999"></u-icon>
+ <text class="time-text">鏈夋晥鏈燂細{{ formatDate(prizeInfo.beginTime) }} 鑷� {{ formatDate(prizeInfo.endTime) }}</text>
+ </view>
+ </view>
+
+ <!-- 搴曢儴锛氭搷浣滄寜閽� -->
+ <view slot="foot" class="card-foot">
+ <u-button
+ :type="prizeInfo.claimStatus === 'NOT_CLAIM' ? 'primary' : 'default'"
+ :disabled="prizeInfo.claimStatus !== 'NOT_CLAIM'"
+ :loading="loading"
+ @click="claimPrize"
+ :ripple="true"
+ :hair-line="false"
+ >
+ {{ prizeInfo.claimStatus === 'NOT_CLAIM' ? '绔嬪嵆棰嗗彇' : prizeInfo.claimStatus === 'CLAIM' ? '宸查鍙�' : '宸茶繃鏈�' }}
+ </u-button>
+ </view>
+ </u-card>
+ </view>
+
+ <!-- 绌虹姸鎬� -->
+ <view class="empty-state" v-else>
+ <u-empty text="鎶藉鏈轰細淇℃伅涓嶅瓨鍦�" mode="coupon" :icon-size="200"></u-empty>
+ </view>
+
+ <!-- 浣跨敤璇存槑 -->
+ <view class="instructions">
+ <view class="instructions-title">
+ <u-icon name="info-circle" size="28" color="#999"></u-icon>
+ <text class="title-text">浣跨敤璇存槑</text>
+ </view>
+ <view class="instructions-content">
+ <text class="content-text">1. 鎶藉鏈轰細浠呴檺鍦ㄦ寚瀹氬簵閾轰娇鐢╘n2. 鎶藉鏈轰細涓嶅彲杞\n3. 璇峰湪鏈夋晥鏈熷唴浣跨敤</text>
+ </view>
+ </view>
+
+ <!-- 绌虹櫧鍗犱綅 -->
+ <view class="placeholder"></view>
+ </view>
+</template>
+
+<script>
+ import { getStorePrize, claimPrize } from '@/api/store-coupon.js';
+
+ export default {
+ data() {
+ return {
+ loading: false,
+ prizeId: '', // 鎶藉鏈轰細ID
+ prizeInfo: {
+ id: "",
+ storeId: "",
+ storeName: "",
+ activityName: "", // 娲诲姩鍚嶇О
+ prizeName: "鎶藉鏈轰細",
+ prizeNo: "",
+ activityDes: "", // 娲诲姩鎻忚堪
+ prizeDesc: "鑾峰緱涓�娆℃娊濂栨満浼氾紝鍙湪鎸囧畾娲诲姩涓娇鐢�", // 鎶藉鏈轰細鎻忚堪
+ prizeRule: "姣忔鎶藉娑堣�椾竴娆℃娊濂栨満浼氾紝鎶戒腑濂栧搧鍚庨渶鍙婃椂棰嗗彇", // 浣跨敤瑙勫垯
+ beginTime: "", // 寮�濮嬫椂闂�
+ endTime: "", // 缁撴潫鏃堕棿
+ claimStatus: "NOT_CLAIM", // 棰嗗彇鐘舵��
+ activityCover: "", // 灏侀潰鍥剧墖
+ enableStatus: "ON" // 鍚敤鐘舵��
+ }
+ }
+ },
+ onShow() {
+ if (this.prizeId) {
+ this.getPrizeDetail(this.prizeId);
+ }
+ },
+ onLoad(options) {
+ console.log('椤甸潰鍙傛暟:', JSON.stringify(options));
+ // 鑾峰彇浼犻�掔殑鎶藉鏈轰細ID
+ if (options.id) {
+ this.prizeId = options.id;
+ this.getPrizeDetail(options.id);
+ } else if(options.q){
+ // 鍙岄噸瑙g爜锛氬井淇″URL杩涜浜嗕袱娆$紪鐮�
+ const decodedUrl = decodeURIComponent(decodeURIComponent(options.q));
+ console.log('鍘熷URL:', decodedUrl);
+
+ // 瑙f瀽URL涓殑鏌ヨ鍙傛暟
+ const params = this.parseUrlParams(decodedUrl);
+ this.prizeId = params.id;
+ this.getPrizeDetail(this.prizeId);
+ } else {
+ this.$u.toast('鍙傛暟閿欒');
+ }
+ },
+ 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;
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateStr) {
+ if (!dateStr) return '';
+ // 澶勭悊甯︽椂鍖虹殑鏃堕棿鏍煎紡
+ const date = new Date(dateStr);
+ if (isNaN(date.getTime())) {
+ // 濡傛灉鏃ユ湡瑙f瀽澶辫触锛岃繑鍥炲師濮嬪瓧绗︿覆鐨勬棩鏈熼儴鍒�
+ return dateStr.split('T')[0];
+ }
+ // 鏍煎紡鍖栦负 YYYY-MM-DD
+ const year = date.getFullYear();
+ const month = String(date.getMonth() + 1).padStart(2, '0');
+ const day = String(date.getDate()).padStart(2, '0');
+ return `${year}-${month}-${day}`;
+ },
+
+ // 鑾峰彇鎶藉鏈轰細璇︽儏
+ async getPrizeDetail(prizeId) {
+ uni.showLoading({
+ title: '鍔犺浇涓�...'
+ });
+
+ try {
+ console.log('璇锋眰濂栧搧璇︽儏锛孖D:', prizeId);
+ const res = await getStorePrize(prizeId);
+ console.log('鎺ュ彛杩斿洖鏁版嵁:', JSON.stringify(res));
+
+ if (res.statusCode === 200) {
+ // 鏍规嵁浣犳彁渚涚殑鎺ュ彛鏁版嵁缁撴瀯澶勭悊
+ if (res.data && res.data.code === 200 && res.data.data) {
+ this.prizeInfo = {
+ ...this.prizeInfo,
+ ...res.data.data,
+ // 纭繚瀛楁鏄犲皠姝g‘
+ id: res.data.data.id || "",
+ storeId: res.data.data.storeId || "",
+ storeName: res.data.data.storeName || "榛樿搴楅摵",
+ activityName: res.data.data.activityName || "鎶藉娲诲姩",
+ prizeName: res.data.data.prizeName || "鎶藉鏈轰細",
+ prizeNo: res.data.data.no || "",
+ activityDes: res.data.data.activityDes || "鑾峰緱涓�娆℃娊濂栨満浼氾紝鍙湪鎸囧畾娲诲姩涓娇鐢�",
+ prizeDesc: res.data.data.prizeDesc || "鑾峰緱涓�娆℃娊濂栨満浼氾紝鍙湪鎸囧畾娲诲姩涓娇鐢�",
+ beginTime: res.data.data.beginTime || res.data.data.startTime || "",
+ endTime: res.data.data.endTime || "",
+ activityCover: res.data.data.activityCover || "",
+ enableStatus: res.data.data.enableStatus || "ON",
+ claimStatus: "NOT_CLAIM" // 榛樿涓烘湭棰嗗彇鐘舵��
+ };
+ console.log('璁剧疆鍚庣殑prizeInfo:', JSON.stringify(this.prizeInfo));
+ } else {
+ this.$u.toast(res.data.message || '鑾峰彇鎶藉鏈轰細璇︽儏澶辫触');
+ }
+ } else {
+ this.$u.toast(res.data.message);
+ }
+ } catch (err) {
+ this.$u.toast('鑾峰彇鎶藉鏈轰細璇︽儏澶辫触锛岃绋嶅悗閲嶈瘯');
+ console.error('鑾峰彇鎶藉鏈轰細璇︽儏澶辫触:', err.message);
+ } finally {
+ uni.hideLoading();
+ }
+ },
+
+ // 棰嗗彇鎶藉鏈轰細
+ async claimPrize() {
+ if (this.prizeInfo.claimStatus !== 'NOT_CLAIM') {
+ this.$u.toast('璇ユ娊濂栨満浼氭棤娉曢鍙�');
+ return;
+ }
+
+ // 纭棰嗗彇
+ uni.showModal({
+ title: '鎻愮ず',
+ content: `纭畾瑕侀鍙�"${this.prizeInfo.activityName || this.prizeInfo.prizeName || '鏈鎶藉鏈轰細'}"鍚楋紵`,
+ success: (res) => {
+ if (res.confirm) {
+ this.doClaimPrize();
+ }
+ }
+ });
+ },
+
+ // 鎵ц棰嗗彇鎶藉鏈轰細鎿嶄綔
+ async doClaimPrize() {
+ this.loading = true;
+ try {
+ // 璋冪敤棰嗗彇鎶藉鏈轰細鎺ュ彛
+ const res = await claimPrize(this.prizeId);
+ console.log('棰嗗彇鎺ュ彛杩斿洖:', JSON.stringify(res));
+
+ // 鏍规嵁鎺ュ彛杩斿洖澶勭悊缁撴灉
+ if (res.statusCode === 200) {
+ // 妫�鏌ヨ繑鍥炵殑鏁版嵁缁撴瀯
+ if (res.data && res.data.code === 200) {
+ this.$u.toast('棰嗗彇鎴愬姛');
+ this.prizeInfo.claimStatus = 'CLAIM';
+
+ // 寤惰繜杩斿洖涓婁竴椤碉紝璁╃敤鎴风湅鍒伴鍙栨垚鍔熺殑鎻愮ず
+ setTimeout(() => {
+ uni.navigateBack();
+ }, 1500);
+ } else {
+ this.$u.toast(res.data.message || '棰嗗彇澶辫触');
+ }
+ } else {
+ this.$u.toast('棰嗗彇澶辫触: ' + (res.data.message || '鏈煡閿欒'));
+ }
+ } catch (err) {
+ this.$u.toast('棰嗗彇澶辫触锛岃绋嶅悗閲嶈瘯');
+ console.error('棰嗗彇鎶藉鏈轰細澶辫触:', err.message);
+ } finally {
+ this.loading = false;
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+.container {
+ background-color: #f5f5f5;
+ min-height: 100vh;
+}
+
+.prize-card {
+ margin: 20rpx;
+}
+
+.card-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.store-info {
+ display: flex;
+ align-items: center;
+}
+
+.store-name {
+ margin-left: 10rpx;
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.card-body {
+ padding-top: 20rpx;
+}
+
+.cover-image {
+ margin-bottom: 30rpx;
+}
+
+.prize-title {
+ margin-bottom: 30rpx;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+}
+
+.title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.prize-desc {
+ margin-bottom: 30rpx;
+}
+
+.desc {
+ font-size: 28rpx;
+ color: #666;
+}
+
+.prize-rule {
+ margin-bottom: 30rpx;
+}
+
+.rule-title {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: bold;
+}
+
+.rule-content {
+ font-size: 26rpx;
+ color: #666;
+}
+
+.prize-time {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20rpx;
+}
+
+.time-text {
+ font-size: 24rpx;
+ color: #999;
+ margin-left: 10rpx;
+}
+
+.card-foot {
+ padding: 20rpx 0;
+}
+
+.instructions {
+ background-color: #ffffff;
+ margin: 20rpx;
+ padding: 30rpx;
+ border-radius: 16rpx;
+}
+
+.instructions-title {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20rpx;
+}
+
+.title-text {
+ margin-left: 10rpx;
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.instructions-content {
+ padding-left: 40rpx;
+}
+
+.content-text {
+ font-size: 26rpx;
+ color: #666;
+ line-height: 1.6;
+}
+
+.placeholder {
+ height: 40rpx;
+}
+
+.empty-state {
+ margin-top: 200rpx;
+}
+</style>
\ No newline at end of file
diff --git a/pages/tabbar/index/home.vue b/pages/tabbar/index/home.vue
index d4d323e..bf2e045 100644
--- a/pages/tabbar/index/home.vue
+++ b/pages/tabbar/index/home.vue
@@ -267,13 +267,15 @@
import { mapState, mapMutations } from 'vuex'
import { setPopupRedisTime, getPopupAcitivty } from '@/api/popup.js'
import { changeCollect } from "@/api/collect.js";
-import { saveShare, saveShareClickRecord } from "@/api/share.js";
+import { saveShare, saveShareClickRecord} from "@/api/share.js";
+import { getSessionId, userAction,userShare } from "@/api/userAction.js";
import { silentLogin } from "@/api/connect.js";
import { getUserInfo } from "@/api/members";
import storage from "@/utils/storage.js";
import TopBar from "@/components/TopBar.vue";
import { nextTick } from "vue";
import { getVideoCover } from "@/api/common.js"
+import {addPrizeNum} from '@/api/prize.js'
export default {
components: { TopBar, ActivityPopup },
computed: {
@@ -370,10 +372,36 @@
similarlyNomore: false, // 鏄惁杩樻湁鏇村鐩镐技瑙嗛
similaryVideoIndex: 0, // 鐩镐技瑙嗛鐨勬挱鏀句綅缃�
similarlyLoading: false, // 鐩镐技瑙嗛鍔犺浇
- marginBottom: 0 // 搴曢儴瀹夊叏鍖哄煙
+ marginBottom: 0 ,// 搴曢儴瀹夊叏鍖哄煙
+ pageSessionNo:"",
+ shareId:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"RECOMMEND_VIDEO",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"LIST"
+ },
+ shareParam:{
+ pageCode:"RECOMMEND_VIDEO",
+ shareOption:"{}",
+ pageType:"LIST"
+ },
}
},
onShow() {
+ getSessionId().then(res=>{
+ console.log('res',JSON.stringify(res))
+ this.pageSessionNo = res.data.data
+ if(this.pageSessionNo){
+ let param = Object.assign({},this.actionParam);
+ this.actionParam.sessionId = this.pageSessionNo
+ param.sessionId = this.pageSessionNo
+ userAction(param)
+ }
+ })
this.openActivityPopup()
@@ -401,11 +429,32 @@
this.totalHidenTime += duration
}
},
- onHide() {
- this.startHidenTime = Date.now()
- },
+ 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)
+ },
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鎴愬姛');
+ }
+ });
+ }
console.log('-----------鍒嗕韩鍑虹殑鏁版嵁---------->', option)
//澶勭悊鎵爜鍑烘潵鐨勮棰�
this.marginBottom = uni.getSystemInfoSync().safeAreaInsets.bottom
@@ -421,6 +470,9 @@
const shareType = params.shareType;
const videoId = params.videoId;
queryParam.videoId = videoId
+ this.actionParam.joinType = "SCAN";
+ this.actionParam.pageParams = JSON.stringify(params);
+
console.log('瑙f瀽鍙傛暟:', { shareType, videoId });
}
const token = storage.getAccessToken();
@@ -428,6 +480,8 @@
this.wxSilentLogin(() => {
// 鍒ゆ柇鏄笉鏄偣鍑诲垎浜摼鎺ヨ繘鏉ョ殑
if (option.userId && option.videoId) {
+ this.actionParam.joinType = "SHARE";
+ this.actionParam.pageParams = JSON.stringify(option);
queryParam.videoId = option.videoId
// 淇濆瓨鍒嗕韩鐐瑰嚮璁板綍
saveShareClickRecord({ refId: option.videoId, shareUserId: option.userId })
@@ -471,13 +525,47 @@
// }
// })
- console.log(videoInfo)
- return {
- title: videoInfo.title,
- path: `/pages/tabbar/index/home?videoId=${videoInfo.id}&userId=${userInfo.id}`,
- imageUrl: videoInfo.coverUrl
- }
// 淇濆瓨鍒嗕韩璁板綍
+
+ // 杩斿洖涓�涓狿romise
+ 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;
+ let param = {
+ addType:"SHARE_GOODS_VIDEO",
+ extend:"",
+ }
+ let extend = {shareId:this.shareId}
+ param.extend = JSON.stringify(extend)
+ addPrizeNum(param);
+ // 褰撹幏鍙栧埌shareId鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ 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: {
async openActivityPopup() {
diff --git a/pages/tabbar/user/my.vue b/pages/tabbar/user/my.vue
index 6552fd3..7e56634 100644
--- a/pages/tabbar/user/my.vue
+++ b/pages/tabbar/user/my.vue
@@ -140,10 +140,11 @@
import '@/pages/subComponents/uview-components/uview-ui';
import tool from "@/pages/tabbar/user/utils/tool.vue";
import { getSTSToken } from "@/api/common.js";
-import { getCouponsNum, getFootprintNum } from "@/api/members.js";
+import { getCouponsNum, getFootprintNum,bindMemberAndStore } from "@/api/members.js";
import { getUserWallet } from "@/api/members";
import configs from '@/config/config'
import storage from '@/utils/storage.js'
+import { getSessionId, userAction } from "@/api/userAction.js";
export default {
components: {
tool
@@ -160,12 +161,82 @@
couponNum: "",
footNum: "",
walletNum: "",
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"TBA_BAR_MY",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
};
},
- onLoad() {
- this.initCOS()
+ onLoad(option) {
+ this.actionParam.pageParams = JSON.stringify(option)
+ console.log('-----------鍒嗕韩鍑虹殑鏁版嵁---------->', option)
+ let shareStoreId = null;
+ let shareTime = null;
+ // 妫�鏌ユ槸鍚﹀瓨鍦╭鍙傛暟
+ if (option.q) {
+ // 鍙岄噸瑙g爜锛氬井淇″URL杩涜浜嗕袱娆$紪鐮�
+ const decodedUrl = decodeURIComponent(decodeURIComponent(option.q));
+ console.log('鍘熷URL:', decodedUrl);
+
+ // 瑙f瀽URL涓殑鏌ヨ鍙傛暟
+ const params = this.parseUrlParams(decodedUrl);
+ shareStoreId = params.shareStoreId;
+ try {
+ // 灏嗘暟鎹瓨鍌ㄥ埌鏈湴缂撳瓨
+ uni.setStorageSync('shareStoreId', shareStoreId);
+ //鍒涘缓涓�涓壂鐮佺殑鏃堕棿
+ // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓� yyyy-MM-dd HH:mm:ss
+ const now = new Date();
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕�+1
+ const day = String(now.getDate()).padStart(2, '0');
+ const hours = String(now.getHours()).padStart(2, '0');
+ const minutes = String(now.getMinutes()).padStart(2, '0');
+ const seconds = String(now.getSeconds()).padStart(2, '0');
+
+ shareTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+ uni.setStorageSync('shareTime', shareTime);
+ console.log('鏁版嵁瀛樺偍鎴愬姛');
+ } catch (e) {
+ console.error('瀛樺偍澶辫触锛�', e);
+ }
+ }
+ this.initCOS()
+ },
+ 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)
+ },
+ // onLoad(options) {
+ //
+ // this.initCOS()
+ // },
onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = res.data.data
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ param.sessionId = this.pageSessionNo
+ userAction(param)
+ }
+ })
+
this.userInfo = this.$options.filters.isLogin() || {};
if (this.$options.filters.isLogin("auth")) {
this.getUserOrderNum();
@@ -174,6 +245,16 @@
this.couponNum = 0;
this.footNum = 0;
}
+
+ let shareStoreId = uni.getStorageSync('shareStoreId');
+ let shareTime = uni.getStorageSync('shareTime');
+ console.log('浠庣紦瀛樿鍙栧弬鏁�:', { shareStoreId, shareTime });
+ if (shareStoreId && shareTime) {
+ console.log('妫�娴嬪埌鏈夋晥鍙傛暟锛岃皟鐢ㄥ悗绔帴鍙�');
+ this.bindMemberAndStore(shareStoreId, shareTime);
+ } else {
+ console.log('鏃犳湁鏁堝弬鏁帮紝鎵ц姝e父閫昏緫');
+ }
},
onPullDownRefresh() {
this.getUserOrderNum();
@@ -190,6 +271,44 @@
mounted() { },
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;
+ },
+ async bindMemberAndStore(shareStoreId, shareTime){
+ let form ={
+ shareStoreId: shareStoreId,
+ shareTime: shareTime
+ }
+ // let form ={
+ // shareStoreId: "1376433565247471616",
+ // shareTime: "2025-09-26 16:18:00"
+ // }
+ try {
+ const res = await bindMemberAndStore(form);
+ if(res.statusCode === 200){
+ //娓呴櫎缂撳瓨
+ uni.removeStorageSync('shareStoreId');
+ uni.removeStorageSync('shareTime');
+ }
+ }
+ catch(error) {
+ console.error('鍑洪敊:', error);
+ };
+ },
// goTOSuccess(){
// uni.redirectTo({
// url:"/pages/cart/payment/success?paymentMethod=WECHAT" +
diff --git a/pages/video/video-goods-detail-swiper.vue b/pages/video/video-goods-detail-swiper.vue
index 600c26b..87bb2f5 100644
--- a/pages/video/video-goods-detail-swiper.vue
+++ b/pages/video/video-goods-detail-swiper.vue
@@ -95,10 +95,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" :data-obj="item"></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>
@@ -293,6 +301,7 @@
import popups from "@/pages/product/popups/popups.vue"; //姘旀场妗�
import takeDownFormSaleGoods from "@/pages/product/m-take-down-sale-goods/index.vue"; //涓嬫灦妗�
import setup from "@/pages/product/product/popup/popup.js";
+import { getSessionId, userAction,userShare } from "@/api/userAction.js";
import { getGoodsDetail } from "@/api/video.js"
import {
@@ -439,6 +448,22 @@
touchStartX: 0,
touchEndX: 0,
minSwipeDistance: 100, // 鏈�灏忔粦鍔ㄨ窛绂伙紝鐢ㄤ簬鍒ゆ柇鏄惁涓烘湁鏁堟粦鍔�
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"RECOMMEND_VIDEO_LEFT_GOODS",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ },
+ shareParam:{
+ pageCode:"RECOMMEND_VIDEO_LEFT_GOODS",
+ shareOption:"{}",
+ pageType:"DETAIL"
+ },
+ shareId:'',
};
},
@@ -481,18 +506,53 @@
this.productRefHeight = windowHeight - bottomHeight + "px";
},
async onLoad(options) {
+ if(options.shareId){
+ this.actionParam.shareId = options.shareId;
+ this.actionParam.joinType = 'SHARE';
+ uni.setStorage({
+ key: 'shareId',
+ data: options.shareId,
+ success: function () {
+ console.log('缂撳瓨shareId鎴愬姛');
+ }
+ });
+ console.log('瑙﹀彂onLoad')
+ }
+ this.actionParam.pageParams = JSON.stringify(options)
+
this.videoId = options.videoId;
this.getGoodsList();
// #ifdef MP-WEIXIN
// 灏忕▼搴忛粯璁ゅ垎浜�
- uni.showShareMenu({
- withShareTicket: true,
- menus: ["shareAppMessage", "shareTimeline"],
- });
+ // 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
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
// this.goodsDetail = {};
// debugger
// //濡傛灉鏈夊弬鏁癷ds璇存槑浜嬪垎閿�鐭繛鎺ワ紝闇�瑕佽幏鍙栧弬鏁�
@@ -507,7 +567,41 @@
// this.init(this.routerVal.id, this.routerVal.goodsId, this.routerVal.distributionId);
// }
},
-
+ onShareAppMessage(e){
+ const goodsInfo = e.target.dataset.obj;
+ console.log(goodsInfo)
+ return new Promise((resolve) => {
+ this.shareId = '';
+ let shareObj ={
+ id:goodsInfo.id,
+ goodsId:goodsInfo.goodsId
+ }
+ this.shareParam.shareOption = JSON.stringify(shareObj)
+ userShare(this.shareParam).then(res => {
+ this.shareId = res.data.data;
+ // 褰撹幏鍙栧埌shareId鍚庯紝鍐峳esolve鍒嗕韩閰嶇疆
+ resolve({
+ title: this.goodsDetail.goodsName,
+ path: '/pages/product/goods' +'?id='+ goodsInfo.id + '&goodsId=' + goodsInfo.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='+ goodsInfo.id+ '&goodsId=' + goodsInfo.goodsId,
+ imageUrl: this.goodsDetail.goodsGalleryList[0],
+ });
+ });
+ });
+ },
methods: {
// 鑾峰彇鍟嗗搧鍒楄〃
async getGoodsList() {
diff --git a/pages/video/video-goods-detail.vue b/pages/video/video-goods-detail.vue
index 62ae3a8..9039cc5 100644
--- a/pages/video/video-goods-detail.vue
+++ b/pages/video/video-goods-detail.vue
@@ -31,6 +31,7 @@
import {getGoodsDetail} from "@/api/video.js"
import { buyBack } from "@/api/trade.js";
import '@/components/uview-components/uview-ui';
+ import { getSessionId, userAction } from "@/api/userAction.js";
export default {
computed: {
totalMoney() {
@@ -45,11 +46,45 @@
data() {
return {
videoId: '',
- goodsList: []
+ goodsList: [],
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"RECOMMEND_VIDEO_GOODS",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ }
}
+ },
+ 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)
+ },
+ onShow() {
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = this.pageSessionNo
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ userAction(param)
+ }
+ })
},
onLoad(option) {
this.videoId = option.videoId;
+ this.actionParam.pageParams = JSON.stringify(option)
this.getGoodsList();
},
methods: {
diff --git a/pages/video/video-similar.vue b/pages/video/video-similar.vue
index 6fc7b5d..19a4b88 100644
--- a/pages/video/video-similar.vue
+++ b/pages/video/video-similar.vue
@@ -108,7 +108,7 @@
<script>
import { getGoodsSimilarlyVideos, savePlayRecord, changeCollect, changeThumbsUp } from "@/api/video.js"
-
+import { getSessionId, userAction ,userShare } from "@/api/userAction.js";
export default {
data() {
return {
@@ -146,10 +146,41 @@
// 鍙虫粦杩斿洖棣栭〉鐩稿叧
touchStartX: 0,
touchEndX: 0,
- minSwipeDistance: 100 // 鏈�灏忔粦鍔ㄨ窛绂�
+ minSwipeDistance: 100 ,// 鏈�灏忔粦鍔ㄨ窛绂�
+ pageSessionNo:"",
+ actionParam:{
+ sessionId:'',
+ actionType:"PAGE",
+ joinType:"SELF",
+ pageCode:"RECOMMEND_VIDEO_RIGHT_VIDEO",
+ pageParams:"{}",
+ pageStatus:"JOIN",
+ pageType:"DETAIL"
+ },
+ shareParam:{
+ pageCode:"RECOMMEND_VIDEO_RIGHT_VIDEO",
+ shareOption:"{}",
+ pageType:"DETAIL"
+ },
+ shareId:'',
}
},
onLoad(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.goodsId) {
this.loadSimilarVideos(options.goodsId, options.currentVideoId);
@@ -161,6 +192,15 @@
const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
videoContext.play();
}
+ getSessionId().then(res=>{
+ this.pageSessionNo = res.data.data
+ this.actionParam.sessionId = res.data.data
+ if(this.pageSessionNo){
+ let param = Object.assign({}, this.actionParam);
+ param.sessionId = this.pageSessionNo
+ userAction(param)
+ }
+ })
},
onHide() {
// 椤甸潰闅愯棌鏃舵殏鍋滆棰�
@@ -168,6 +208,49 @@
const videoContext = uni.createVideoContext(`video${this.currentIndex}`, this);
videoContext.pause();
}
+ this.startHidenTime = Date.now()
+ let param = Object.assign({}, this.actionParam);
+ this.sendOnShow = true;
+ param.pageStatus = "LEAVE"
+ userAction(param)
+ },
+ onShareAppMessage(e){
+ const userInfo = storage.getUserInfo();
+ if (!userInfo) {
+ console.log("鏈櫥褰曚笉鑳藉垎浜�");
+ return
+ }
+ const videoInfo = e.target.dataset.obj;
+ 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;
+ 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: {
// 鍔犺浇鐩镐技瑙嗛
--
Gitblit v1.8.0