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>
|