| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 | <!-- 全局分享弹框 --><template>	<view>		<su-popup :show="state.showShareGuide" :showClose="false" @close="onCloseGuide" />		<view v-if="state.showShareGuide" class="guide-wrap">			<image class="guide-image" :src="sheep.$url.static('/static/img/shop/share/share_guide.png')" />		</view>		<su-popup :show="show" round="10" :showClose="false" @close="closeShareModal">			<!-- 分享 tools -->			<view class="share-box">				<view class="share-list-box ss-flex">					<!-- 操作 ①:发送给微信好友 -->					<button v-if="shareConfig.methods.includes('forward')"						class="share-item share-btn ss-flex-col ss-col-center" open-type="share"						@tap="onShareByForward">						<image class="share-img" :src="sheep.$url.static('/static/img/shop/share/share_wx.png')"							mode="" />						<text class="share-title">微信好友</text>					</button>					<!-- 操作 ②:生成海报图片 -->					<button v-if="shareConfig.methods.includes('poster')"						class="share-item share-btn ss-flex-col ss-col-center" @tap="onShareByPoster">						<image class="share-img" :src="sheep.$url.static('/static/img/shop/share/share_poster.png')"							mode="" />						<text class="share-title">生成海报</text>					</button>					<!-- 操作 ③:生成链接 -->					<button v-if="shareConfig.methods.includes('link')"						class="share-item share-btn ss-flex-col ss-col-center" @tap="onShareByCopyLink">						<image class="share-img" :src="sheep.$url.static('/static/img/shop/share/share_link.png')"							mode="" />						<text class="share-title">复制链接</text>					</button>				</view>				<view class="share-foot ss-flex ss-row-center ss-col-center" @tap="closeShareModal">					取消				</view>			</view>		</su-popup>		<!-- 分享海报,对应操作 ② -->		<canvas-poster ref="SharePosterRef" :show="state.showPosterModal" :shareInfo="shareInfo"			@close="state.showPosterModal = false" />	</view></template><script setup>	/**	 * 分享弹窗	 */	import {		ref,		unref,		reactive,		computed,		inject	} from 'vue';	import sheep from '@/sheep';	import canvasPoster from './canvas-poster/index.vue';	import {		closeShareModal,		showAuthModal	} from '@/sheep/hooks/useModal';		const show = computed(() => sheep.$store('modal').share);	const shareConfig = computed(() => sheep.$store('app').platform.share);	const SharePosterRef = ref('');	const props = defineProps({		shareInfo: {			type: Object,			default () {},		},			});	const state = reactive({		showShareGuide: false, // H5 的指引		showPosterModal: false, // 海报弹窗	});	// 操作 ②:生成海报分享	const onShareByPoster = () => {				closeShareModal();		if (!sheep.$store('user').isLogin) {			showAuthModal();			return;		}		unref(SharePosterRef).getPoster();		state.showPosterModal = true;	};	// 操作 ①:直接转发分享	const onShareByForward = () => {		closeShareModal();		// #ifdef H5		if (['WechatOfficialAccount', 'H5'].includes(sheep.$platform.name)) {			state.showShareGuide = true;			return;		}		// #endif		// #ifdef APP-PLUS		uni.share({			provider: 'weixin',			scene: 'WXSceneSession',			type: 0,			href: props.shareInfo.link,			title: props.shareInfo.title,			summary: props.shareInfo.desc,			imageUrl: props.shareInfo.image,			success: (res) => {				console.log('success:' + JSON.stringify(res));			},			fail: (err) => {				console.log('fail:' + JSON.stringify(err));			},		});		// #endif	};	// 操作 ③:复制链接分享	const onShareByCopyLink = () => {		closeShareModal();		if (!sheep.$store('user').isLogin) {			showAuthModal();			return;		}		sheep.$helper.copyText(props.shareInfo.link);		// sheep.$helper.copyText('https://zxgz.newfeifan.cn/');		// closeShareModal();	};	function onCloseGuide() {		state.showShareGuide = false;	}</script><style lang="scss" scoped>	.guide-image {		right: 30rpx;		top: 0;		position: fixed;		width: 580rpx;		height: 430rpx;		z-index: 10080;	}	// 分享tool	.share-box {		background: $white;		width: 750rpx;		border-radius: 30rpx 30rpx 0 0;		padding-top: 30rpx;		.share-foot {			font-size: 24rpx;			color: $gray-b;			height: 80rpx;			border-top: 1rpx solid $gray-e;		}		.share-list-box {			.share-btn {				background: none;				border: none;				line-height: 1;				padding: 0;				&::after {					border: none;				}			}			.share-item {				flex: 1;				padding-bottom: 20rpx;				.share-img {					width: 70rpx;					height: 70rpx;					background: $gray-f;					border-radius: 50%;					margin-bottom: 20rpx;				}				.share-title {					font-size: 24rpx;					color: $dark-6;				}			}		}	}</style>
 |