You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* Share v1.0.0
* @Class Share
* @description shopro-share 1.0.0 分享方法
* @Author lidongtony
* @Date 2021-04-19
* @Email lidongtony@qq.com
*/
import store from "@/shopro/store";
import $platform from "@/shopro/platform";
// #ifdef H5
import wxsdk from "@/shopro/wechat/sdk";
// #endif
export default {
// 设置分享信息
setShareInfo(scene = {
title: '', // 自定义分享标题
desc: '', // 自定义描述
image: '', // 自定义分享图片
params: {} // 自定义分享参数
}) {
let that = this;
let shareInfo = {
title: '', // 分享标题
desc: '', // 描述
image: '', // 分享图片
path: '', // 分享路径
copyLink: '', // 复制链接
query: '' // 分享参数
}
let shareConfig = store.getters.initShare;
let shopConfig = store.getters.initShop;
if (shopConfig?.domain === '' || shareConfig.title === '' || shareConfig.image === '') {
throw '请在商城配置中设置商城域名和分享信息'
}
// 设置自定义分享信息
shareInfo.title = scene.title !== '' ? scene.title : shareConfig.title;
shareInfo.image = scene.image !== '' ? scene.image : shareConfig.image;
shareInfo.desc = scene.desc !== '' ? scene.desc : '';
// 自动拼接分享用户参数
let query = that.setShareQuery(scene.params);
// #ifdef MP
shareInfo.path = `/pages/index/index?${query}`;
// #endif
// #ifndef MP
shareInfo.path = `${store.getters.initShop?.domain}?${query}`;
// #endif
shareInfo.copyLink = `${store.getters.initShop?.domain}?${query}`;
shareInfo.query = query;
// #ifdef H5
if($platform.get() === 'wxOfficialAccount') {
wxsdk.share(shareInfo);
}
// #endif
store.commit("shareInfo", shareInfo);
return shareInfo;
},
// 自定义分享参数拼接: 由于小程序码长度限制(B码最大32位长度),为了确保分享参数最大可扩展性使用spm方法拼接 shareUserId.page.pageId.platform.from ----例 spm=88888888.3.1666666.3.2 即为ID为88888888用户通过微信网页平台生成了拼团ID为1666666的拼团分享海报
setShareQuery(params) {
let shareUserId = '0'; // 设置分享者用户ID
if (params.shareId === undefined) {
if (store.getters.isLogin) {
shareUserId = store.getters.userInfo.id;
}
}
let page = '1'; // 页面类型: 1=首页(默认),2=商品,3=拼团...按需扩展
if (params.page !== undefined) {
page = params.page;
}
let pageId = '0'; // 设置页面ID: 如商品ID、拼团ID等
if (params.pageId !== undefined) {
pageId = params.pageId;
}
let platform = ['H5', 'wxOfficialAccount', 'wxMiniProgram', 'App'].indexOf($platform.get()) +
1; // 设置分享的平台渠道: 1=H5,2=微信公众号网页,3=微信小程序,4=App,...按需扩展
let from = '1'; // 设置分享方式: 1=直接转发,2=海报,3=链接,...按需扩展
if (params.from !== undefined) {
from = params.from;
}
//spmParam = ... 可按需扩展
return `spm=${shareUserId}.${page}.${pageId}.${platform}.${from}`;
},
getShareQuery(spm) {
let shareParams = {};
let shareParamsArray = spm.split('.');
if(shareParamsArray[0] != '0') {
shareParams.shareUserId = shareParamsArray[0];
}
switch(shareParamsArray[1]) {
case '1':
// 默认首页不跳转
break;
case '2':
shareParams.page = '/pages/goods/detail';
break;
case '3':
shareParams.page = '/pages/activity/groupon/detail';
break;
}
if(shareParamsArray[2] !== '0') {
shareParams.pageId = shareParamsArray[2];
}
shareParams.platform = shareParamsArray[3];
shareParams.from = shareParamsArray[4];
return shareParams;
}
}