Commit aaadbc39 authored by Xuguangxing's avatar Xuguangxing

feat: share

parent 6b5e3af3
...@@ -59,10 +59,10 @@ export default { ...@@ -59,10 +59,10 @@ export default {
}, },
mounted() { mounted() {
EventBus.$on('goods_share_info', ({ shareInfo, type }) => { EventBus.$on('goods_share_info', ({ shareInfo, type }) => {
if (!isApp && !isWxMp) { // if (!isApp && !isWxMp) {
this.tipDialogMessage(); // this.tipDialogMessage();
return; // return;
} // }
this.type = type; this.type = type;
if (typeof shareInfo === 'object') { if (typeof shareInfo === 'object') {
this.sharePicData = shareInfo; this.sharePicData = shareInfo;
...@@ -103,13 +103,13 @@ export default { ...@@ -103,13 +103,13 @@ export default {
// 如果传递的数据有海报则不处理 // 如果传递的数据有海报则不处理
} }
// 否则直接创建海报 // 否则直接创建海报
this.$refs.sharePic.createAndUploadPic(); this.$refs.sharePic.createAndUploadPic(this.sharePicData);
}, },
async getGroupShareInfo(orderNo) { async getGroupShareInfo(orderNo) {
try { try {
const [res] = await groupBuyApi.getGroupShareInfo(orderNo); const [res] = await groupBuyApi.getGroupShareInfo(orderNo);
this.sharePicData = res; this.sharePicData = res;
this.$refs.sharePic.createAndUploadPic(); this.$refs.sharePic.createAndUploadPic(this.sharePicData);
} catch (err) { } catch (err) {
console.log(err); console.log(err);
} }
......
...@@ -76,40 +76,28 @@ import groupBuyApi from '@/api/groupBuy'; ...@@ -76,40 +76,28 @@ import groupBuyApi from '@/api/groupBuy';
import { upload } from 'qiniu-js'; import { upload } from 'qiniu-js';
import config from '@/config'; import config from '@/config';
export default { export default {
props: {
sharePicData: {
type: Object,
default: () => {
return {};
}
}
},
data() { data() {
return { return {
qrcodeUrl: '', qrcodeUrl: '',
avatorList: [], avatorList: [],
openGroupCnt: 7, openGroupCnt: 7,
maxCount: 0 maxCount: 0,
sharePicData: {}
}; };
}, },
watch: {
sharePicData() {
this.handleAvator();
}
},
methods: { methods: {
handleAvator() { handleAvator(sharePicData) {
const openGroupCnt = this.sharePicData.openGroupCnt || 7; const openGroupCnt = sharePicData.openGroupCnt || 7;
let peoplePhotoList = this.sharePicData.peoplePhotoList || []; let peoplePhotoList = sharePicData.peoplePhotoList || [];
this.maxCount = openGroupCnt >= 6 ? 6 : openGroupCnt; this.maxCount = openGroupCnt >= 6 ? 6 : openGroupCnt;
this.openGroupCnt = openGroupCnt; this.openGroupCnt = openGroupCnt;
this.avatorList = peoplePhotoList.slice(0, openGroupCnt); this.avatorList = peoplePhotoList.slice(0, openGroupCnt);
}, },
async createAndUploadPic() { async createAndUploadPic(sharePicData) {
console.log(JSON.stringify(this.sharePicData)); this.sharePicData = sharePicData;
this.handleAvator(); this.handleAvator(sharePicData);
const _this = this; const _this = this;
const [qrcodeUrl] = await groupBuyApi.getQrcodeUrl(this.sharePicData); const [qrcodeUrl] = await groupBuyApi.getQrcodeUrl(sharePicData);
this.qrcodeUrl = qrcodeUrl; this.qrcodeUrl = qrcodeUrl;
const [res] = await qiNiuApi.getQiniuToken(); const [res] = await qiNiuApi.getQiniuToken();
const token = res.token; const token = res.token;
......
<template> <template>
<div v-if="showPage" class="goods" style="height: 100%"> <div v-if="showPage" class="goods" style="height: 100%">
<div class="goods-share-button"> <div class="goods-share-button" @click="setShareData">
<cr-image <cr-image
src="@/assets/images/share-icon.png" src="@/assets/images/share-icon.png"
width="" width=""
...@@ -186,7 +186,6 @@ ...@@ -186,7 +186,6 @@
:group-id="groupId" :group-id="groupId"
@buy="goVccOrDetail" @buy="goVccOrDetail"
/> />
<sharePic ref="sharePic" />
</div> </div>
</template> </template>
<script> <script>
...@@ -201,12 +200,12 @@ import successInfo from '@/components/groupBuySuccessInfo'; ...@@ -201,12 +200,12 @@ import successInfo from '@/components/groupBuySuccessInfo';
import rules from '@/components/rules'; import rules from '@/components/rules';
import groupDescInfo from './components/groupDescInfo'; import groupDescInfo from './components/groupDescInfo';
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import sharePic from '@/components/sharePic';
import localStorage from '@/service/localStorage.service'; import localStorage from '@/service/localStorage.service';
// import goodsCheckMixin from '@/mixins/goodsCheck.mixin'; // import goodsCheckMixin from '@/mixins/goodsCheck.mixin';
import Bridge from '@qg/js-bridge'; import Bridge from '@qg/js-bridge';
import MpBridge from '@/service/mp'; import MpBridge from '@/service/mp';
import { isWxMp, isApp } from '@/service/validation.service'; import { isWxMp, isApp } from '@/service/validation.service';
import { EventBus } from '@/service/utils.service';
export default { export default {
// eslint-disable-next-line vue/name-property-casing // eslint-disable-next-line vue/name-property-casing
name: 'goodDetail', name: 'goodDetail',
...@@ -218,8 +217,7 @@ export default { ...@@ -218,8 +217,7 @@ export default {
avatorGroup, avatorGroup,
successInfo, successInfo,
rules, rules,
groupDescInfo, groupDescInfo
sharePic
}, },
filters: { filters: {
Img2Thumb Img2Thumb
...@@ -295,6 +293,32 @@ export default { ...@@ -295,6 +293,32 @@ export default {
}, 5000); }, 5000);
}, },
methods: { methods: {
setShareData() {
const avatorList = [];
this.detailInfo.groupBuyInfo.groupBuyValidUserInfoList.map(v => {
avatorList.push(v.avatar);
});
const sharePicData = {
groupBuySuccessGuys: this.detailInfo?.groupBuyInfo.groupBuySuccessPersonCount,
salePrice: this.detailInfo.price, // y
groupBuyGroupId: this.groupId,
goodsSpecialId: this.detailParam.goodsSpecialId,
openGroupCnt: this.detailInfo?.groupBuyInfo.groupBuyLimitUserCount,
templateId: this.detailParam.templateId,
templateDetailId: this.detailParam.templateDetailId,
needGuys: this.detailInfo?.groupBuyInfo.groupBuyNeedUserCount,
skuName: this.detailInfo.goodsName, // y
activityId: this.detailParam.activityId,
skuImg: this.detailInfo.thumbImageUrl, // y,
activityPrice: this.detailInfo.activityPrice, // y
skuNo: this.detailParam.skuNo,
peoplePhotoList: avatorList
};
EventBus.$emit('goods_share_info', {
shareInfo: sharePicData,
type: 2
});
},
getToken() { getToken() {
window.xyqbNativeEvent = function(res) { window.xyqbNativeEvent = function(res) {
const json = typeof res === 'string' ? JSON.parse(res) : res; const json = typeof res === 'string' ? JSON.parse(res) : res;
......
...@@ -89,7 +89,6 @@ ...@@ -89,7 +89,6 @@
</div> </div>
</div> </div>
<bottom-nav v-if="showButtonNav" :status="2" :disabled="false" @share="setShareData" /> <bottom-nav v-if="showButtonNav" :status="2" :disabled="false" @share="setShareData" />
<sharePic ref="sharePic" :share-pic-data="sharePicData" @outputPicUrl="outputPicUrl" />
</div> </div>
</template> </template>
<script> <script>
...@@ -101,7 +100,8 @@ import successInfo from '@/components/groupBuySuccessInfo'; ...@@ -101,7 +100,8 @@ import successInfo from '@/components/groupBuySuccessInfo';
import rules from '@/components/rules'; import rules from '@/components/rules';
import groupDescInfo from './components/groupDescInfo'; import groupDescInfo from './components/groupDescInfo';
import localStorage from '@/service/localStorage.service'; import localStorage from '@/service/localStorage.service';
import sharePic from '@/components/sharePic'; import { EventBus } from '@/service/utils.service';
// import sharePic from '@/components/sharePic';
import config from '@/config'; import config from '@/config';
export default { export default {
// eslint-disable-next-line vue/name-property-casing // eslint-disable-next-line vue/name-property-casing
...@@ -112,8 +112,8 @@ export default { ...@@ -112,8 +112,8 @@ export default {
avatorGroup, avatorGroup,
successInfo, successInfo,
rules, rules,
groupDescInfo, groupDescInfo
sharePic // sharePic
}, },
data() { data() {
return { return {
...@@ -121,7 +121,6 @@ export default { ...@@ -121,7 +121,6 @@ export default {
showInfo: false, showInfo: false,
countDownText: '', countDownText: '',
stockPercentage: 0, stockPercentage: 0,
sharePicData: {}, // 生成海报图所需要的链接
shareInfo: {}, // 调用分享需要的参数 shareInfo: {}, // 调用分享需要的参数
picUrl: '', // 海报url picUrl: '', // 海报url
// 以下是原有的data // 以下是原有的data
...@@ -137,19 +136,6 @@ export default { ...@@ -137,19 +136,6 @@ export default {
showButtonNav: false // 是否显示底部按钮 showButtonNav: false // 是否显示底部按钮
}; };
}, },
computed: {
goodsShareInfo() {
return this.$store.state.pay.goodsShareInfo;
}
},
watch: {
goodsShareInfo: {
immediate: false,
handler(val) {
this.onShareEventChange(val);
}
}
},
created() { created() {
console.log(config.localHost); console.log(config.localHost);
this.detailParam = { ...this.$route.query }; this.detailParam = { ...this.$route.query };
...@@ -175,43 +161,12 @@ export default { ...@@ -175,43 +161,12 @@ export default {
}, 5000); }, 5000);
}, },
methods: { methods: {
async onShareEventChange({ ev, nativeBridge }) {
if (ev === 'pic') {
// 处理图片url
nativeBridge.openNewUrl({
newUrl: `/pages/goodshare/index?url=${encodeURIComponent(JSON.stringify(this.picUrl))}`
});
this.$store.dispatch('goods_share_close');
}
if (ev === 'weixin') {
nativeBridge.run({
event: 'showShareView',
data: this.shareInfo
});
}
},
outputPicUrl(res) {
const fullPath = this.$route.fullPath.replace('skuInfoSmallPic?', 'skuInfo?');
const link =
fullPath.indexOf('groupBuyGroupId=') > -1
? fullPath
: fullPath + `&groupBuyGroupId=${this.groupId}`;
this.picUrl = res || '';
this.shareInfo = {
title: this.detailInfo.goodsName,
desc: '',
link: config.localHost + link || '', // 页面地址
imgUrl: this.detailInfo.thumbImageUrl, // 图片地
posterUrl: res || ''
};
this.$store.dispatch('goods_share_open', this.shareInfo);
},
setShareData() { setShareData() {
const avatorList = []; const avatorList = [];
this.detailInfo.groupBuyInfo.groupBuyValidUserInfoList.map(v => { this.detailInfo.groupBuyInfo.groupBuyValidUserInfoList.map(v => {
avatorList.push(v.avatar); avatorList.push(v.avatar);
}); });
this.sharePicData = { const sharePicData = {
groupBuySuccessGuys: this.detailInfo?.groupBuyInfo.groupBuySuccessPersonCount, groupBuySuccessGuys: this.detailInfo?.groupBuyInfo.groupBuySuccessPersonCount,
salePrice: this.detailInfo.price, // y salePrice: this.detailInfo.price, // y
groupBuyGroupId: this.groupId, groupBuyGroupId: this.groupId,
...@@ -227,8 +182,9 @@ export default { ...@@ -227,8 +182,9 @@ export default {
skuNo: this.detailParam.skuNo, skuNo: this.detailParam.skuNo,
peoplePhotoList: avatorList peoplePhotoList: avatorList
}; };
this.$nextTick(() => { EventBus.$emit('goods_share_info', {
this.$refs.sharePic.createAndUploadPic(); shareInfo: sharePicData,
type: 2
}); });
}, },
changeButtonVisible(res) { changeButtonVisible(res) {
......
...@@ -64,7 +64,6 @@ ...@@ -64,7 +64,6 @@
</div> </div>
</div> </div>
<!-- <Goods /> --> <!-- <Goods /> -->
<sharePic ref="sharePic" :share-pic-data="sharePicData" @outputPicUrl="outputPicUrl" />
</div> </div>
</template> </template>
<script> <script>
...@@ -75,14 +74,10 @@ import groupBuyApi from '@/api/groupBuy'; ...@@ -75,14 +74,10 @@ import groupBuyApi from '@/api/groupBuy';
// import Goods from '@/components/RecoGoods/RecoGoods.vue'; // import Goods from '@/components/RecoGoods/RecoGoods.vue';
import { isApp, isWxMp } from '@/service/validation.service'; import { isApp, isWxMp } from '@/service/validation.service';
import { EventBus } from '@/service/utils.service'; import { EventBus } from '@/service/utils.service';
import sharePic from '@/components/sharePic';
import qs from 'qs';
import config from '@/config';
export default { export default {
components: { components: {
// Goods, // Goods,
CouponCard, CouponCard
sharePic
}, },
extends: goUrlExtends, extends: goUrlExtends,
data() { data() {
...@@ -96,23 +91,9 @@ export default { ...@@ -96,23 +91,9 @@ export default {
payStatusName: '', payStatusName: '',
payMethodName: '', payMethodName: '',
payType: '', payType: '',
sharePicData: {},
picUrl: '' picUrl: ''
}; };
}, },
computed: {
goodsShareInfo() {
return this.$store.state.pay.goodsShareInfo;
}
},
watch: {
goodsShareInfo: {
immediate: false,
handler(val) {
this.onShareEventChange(val);
}
}
},
created() { created() {
const { orderNo, reason, amount, freeAmount, payType } = this.$route.query; const { orderNo, reason, amount, freeAmount, payType } = this.$route.query;
const { success } = this.$route.meta; const { success } = this.$route.meta;
...@@ -126,54 +107,15 @@ export default { ...@@ -126,54 +107,15 @@ export default {
this.payStatusName = success ? '支付成功' : '支付失败'; this.payStatusName = success ? '支付成功' : '支付失败';
this.getCouponList(); this.getCouponList();
}, },
beforeDestroy() {
EventBus.$off('shareClickItem');
},
methods: { methods: {
async onShareEventChange({ ev, nativeBridge }) {
if (ev === 'pic') {
// 处理图片url
nativeBridge.openNewUrl({
newUrl: `/pages/goodshare/index?url=${encodeURIComponent(JSON.stringify(this.picUrl))}`
});
this.$store.dispatch('goods_share_close');
}
if (ev === 'weixin') {
nativeBridge.run({
event: 'showShareView',
data: this.shareInfo
});
}
},
outputPicUrl(res) {
this.picUrl = res;
const linkPath = qs.stringify({
h: 0,
skuNo: this.sharePicData.skuNo,
groupBuyGroupId: this.sharePicData.groupBuyGroupId,
goodsSpecialId: this.sharePicData.goodsSpecialId,
activityId: this.sharePicData.activityId,
templateId: this.sharePicData.templateId,
templateDetailId: this.sharePicData.templateDetailId
});
let detailUrl = `${config.localHost}/groupBuy/skuInfo?${linkPath}`;
this.shareInfo = {
title: this.sharePicData.skuName,
desc: '',
link: detailUrl || '', // 页面地址
imgUrl: this.sharePicData.skuImg, // 图片地
posterUrl: res || ''
};
this.$store.dispatch('goods_share_open', this.shareInfo);
},
async setShareData() { async setShareData() {
const [res, error] = await groupBuyApi.getGroupShareInfo(this.orderNo); const [res, error] = await groupBuyApi.getGroupShareInfo(this.orderNo);
if (error) { if (error) {
return this.$toast('获取分享数据失败'); return this.$toast('获取分享数据失败');
} }
this.sharePicData = res; EventBus.$emit('goods_share_info', {
this.$nextTick(() => { shareInfo: res,
this.$refs.sharePic.createAndUploadPic(); type: 3
}); });
}, },
goPage(type) { goPage(type) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment