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.
293 lines
8.2 KiB
293 lines
8.2 KiB
<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>
|
|
|