| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 | <template>	<view>		<page-head :title="title"></page-head>		<view class="uni-padding-wrap">			<view class="uni-title">分享内容</view>			<view class="uni-textarea">				<textarea class="textarea" v-model="shareText" />				</view>			<view class="uni-title">分享图片:</view>			<view class="uni-uploader" style="padding:15rpx; background:#FFF;">				<view class="uni-uploader__input-box" v-if="!image" @tap="chooseImage"></view>				<image class="uni-uploader__img" v-if="image" :src="image"></image>			</view>			<!-- #ifdef APP-PLUS -->			<view class="uni-title">分享类型:</view>			<view>				<radio-group @change="radioChange">					<label class="radio">						<radio value="1" checked="true"/>文字					</label>					<label class="radio">						<radio value="2" />图片					</label>					<label class="radio">						<radio value="0" />图文					</label>					<label class="radio">						<radio value="5" />小程序					</label>				</radio-group>			</view>			<view class="uni-btn-v uni-common-mt" v-if="providerList.length > 0">				<block v-for="(value,index) in providerList" :key="index">					<button type="primary" v-if="value" :disabled="isDisableButton(value)" @tap="share(value)">{{value.name}}</button>				</block>			</view>			<!-- #endif -->			<!-- #ifdef MP || QUICKAPP-WEBVIEW -->			<view class="uni-btn-v uni-common-mt">				<button type="primary" open-type="share">分享</button>			</view>			<!-- #endif -->		</view>	</view></template><script>	export default {		data() {			return {				title: 'share',				shareText: 'uni-app可以同时发布成原生App、小程序、H5,邀请你一起体验!',				href:"https://uniapp.dcloud.io",				image: '',				shareType:1,				providerList: []			}		},		computed:{			isDisableButton() {				return function(item) {					if(this.shareType === 0 && item.id === 'qq'){						return true;					}					if(this.shareType === 5 && item.name !== '分享到微信好友'){						return true;					}					return false;				}			}		},		onShareAppMessage() {			return {				title: this.shareText ? this.shareText : "欢迎体验uni-app",				path: '/pages/tabBar/component/component',				imageUrl:this.image ? this.image : 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b6304f00-5168-11eb-bd01-97bc1429a9ff.png'			}		},		onUnload:function(){			this.shareText='uni-app可以同时发布成原生App、小程序、H5,邀请你一起体验!',			this.href = 'https://uniapp.dcloud.io',			this.image='';		},		onLoad: function () {			uni.getProvider({				service: 'share',				success: (e) => {					console.log('success', e);					let data = []					for (let i = 0; i < e.provider.length; i++) {						switch (e.provider[i]) {							case 'weixin':								data.push({									name: '分享到微信好友',									id: 'weixin',									sort:0								})								data.push({									name: '分享到微信朋友圈',									id: 'weixin',									type:'WXSenceTimeline',									sort:1								})								break;							case 'sinaweibo':								data.push({									name: '分享到新浪微博',									id: 'sinaweibo',									sort:2								})								break;							case 'qq':								data.push({									name: '分享到QQ',									id: 'qq',									sort:3								})								break;							default:								break;						}					}					this.providerList = data.sort((x,y) => {						return x.sort - y.sort					});				},				fail: (e) => {					console.log('获取分享通道失败', e);					uni.showModal({						content:'获取分享通道失败',						showCancel:false					})				}			});		},		methods: {			async share(e) {				console.log('分享通道:'+ e.id +'; 分享类型:' + this.shareType);								if(!this.shareText && (this.shareType === 1 || this.shareType === 0)){					uni.showModal({						content:'分享内容不能为空',						showCancel:false					})					return;				}								if(!this.image && (this.shareType === 2 || this.shareType === 0)){					uni.showModal({						content:'分享图片不能为空',						showCancel:false					})					return;				}								let shareOPtions = {					provider: e.id,					scene: e.type && e.type === 'WXSenceTimeline' ? 'WXSenceTimeline' : 'WXSceneSession', //WXSceneSession”分享到聊天界面,“WXSenceTimeline”分享到朋友圈,“WXSceneFavorite”分享到微信收藏     					type: this.shareType,					success: (e) => {						console.log('success', e);						uni.showModal({							content: '已分享',							showCancel:false						})					},					fail: (e) => {						console.log('fail', e)						uni.showModal({							content: e.errMsg,							showCancel:false						})					},					complete:function(){						console.log('分享操作结束!')					}				}								switch (this.shareType){					case 0:						shareOPtions.summary = this.shareText;						shareOPtions.imageUrl = this.image;						shareOPtions.title = '欢迎体验uniapp';						shareOPtions.href = 'https://uniapp.dcloud.io';						break;					case 1:						shareOPtions.summary = this.shareText;						break;					case 2:						shareOPtions.imageUrl = this.image;						break;					case 5:						shareOPtions.imageUrl = this.image ? this.image : 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b6304f00-5168-11eb-bd01-97bc1429a9ff.png'						shareOPtions.title = '欢迎体验uniapp';						shareOPtions.miniProgram = {							id:'gh_33446d7f7a26',							path:'/pages/tabBar/component/component',							webUrl:'https://uniapp.dcloud.io',							type:0						};						break;					default:						break;				}								if(shareOPtions.type === 0 && plus.os.name === 'iOS'){//如果是图文分享,且是ios平台,则压缩图片 					shareOPtions.imageUrl = await this.compress();				}				if(shareOPtions.type === 1 && shareOPtions.provider === 'qq'){//如果是分享文字到qq,则必须加上href和title					shareOPtions.href = 'https://uniapp.dcloud.io';					shareOPtions.title = '欢迎体验uniapp';				}				uni.share(shareOPtions);			},			radioChange(e){				console.log('type:' + e.detail.value);				this.shareType = parseInt(e.detail.value);			},			chooseImage() {				uni.chooseImage({					count: 1,					sourceType: ['album', 'camera'],					sizeType: ['compressed', 'original'],					success: (res) => {						this.image = res.tempFilePaths[0];					},					fail: (err) => {						// #ifdef MP						uni.getSetting({							success: (res) => {								let authStatus = res.authSetting['scope.album'] && res.authSetting['scope.camera'];								if (!authStatus) {									uni.showModal({										title: '授权失败',										content: 'Hello uni-app需要从您的相机或相册获取图片,请在设置界面打开相关权限',										success: (res) => {											if (res.confirm) {												uni.openSetting()											}										}									})								}							}						})						// #endif					}				})			},			compress(){//压缩图片 图文分享要求分享图片大小不能超过20Kb				console.log('开始压缩');				let img = this.image;				return new Promise((res) => {					var localPath = plus.io.convertAbsoluteFileSystem(img.replace('file://', ''));					console.log('after' + localPath);					// 压缩size					plus.io.resolveLocalFileSystemURL(localPath, (entry) => {						entry.file((file) => {// 可通过entry对象操作图片 							console.log('getFile:' + JSON.stringify(file));							if(file.size > 20480) {// 压缩后size 大于20Kb								plus.zip.compressImage({									src: img,									dst: img.replace('.jpg', '2222.jpg').replace('.JPG', '2222.JPG'),									width: '10%',									height: '10%',									quality: 1,									overwrite: true								}, (event) => {									console.log('success zip****' + event.size);									let newImg = img.replace('.jpg', '2222.jpg').replace('.JPG', '2222.JPG');									res(newImg);								}, function(error) {									uni.showModal({										content:'分享图片太大,需要请重新选择图片!',										showCancel:false									})								});							}						});					}, (e) => {						console.log('Resolve file URL failed: ' + e.message);						uni.showModal({							content:'分享图片太大,需要请重新选择图片!',							showCancel:false						})					});				})			}		}	}</script><style></style>
 |