canyin-project/yb_wm/components/common/sq-btn.vue

301 lines
7.3 KiB
Vue
Raw Normal View History

2024-11-01 16:07:54 +08:00
<template>
<block>
<!-- #ifdef APP-PLUS || MP-TOUTIAO -->
<button v-if="type==1" :class="['sqbtn',cname]"
:style="[{width:w+'rpx',height:h+'rpx',lineHeight:h+'rpx',},sname]" @click="getUserInfo">{{t}}</button>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN || MP-BAIDU || MP-ALIPAY -->
<button v-if="type==1" :class="['sqbtn',cname]"
:style="[{width:w+'rpx',height:h+'rpx',lineHeight:h+'rpx',},sname]"
:open-type="api.platform=='ali'?'getAuthorize':'getUserInfo'" @getuserinfo="mpGetUserInfo" scope='userInfo'
@getAuthorize="onGetAuthorize">{{t}}</button>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN || MP-BAIDU -->
<button v-if="type==2" :class="['sqbtn',cname]"
:style="[{width:w+'rpx',height:h+'rpx',lineHeight:h+'rpx',},sname]" open-type="getPhoneNumber"
@getphonenumber="mpGetphonenumber">{{t}}</button>
<!-- #endif -->
<!-- 触发用户转发 -->
<!-- #ifndef H5 -->
<button @click="this.$emit('refresh')" hover-class='be' v-if="type==3" :class="['sqbtn',cname]"
:style="[{width:w+'rpx',height:h+'rpx',lineHeight:h+'rpx',},sname]" open-type="share">{{t}}</button>
<!-- #endif -->
<!-- #ifdef H5 -->
<button hover-class='be' v-if="type==3" :class="['sqbtn',cname]"
:style="[{width:w+'rpx',height:h+'rpx',lineHeight:h+'rpx',},sname]" @click="share">{{t}}</button>
<!-- #endif -->
<view v-if="type==4">
<mg-modal :ismr="true" v-model="show" width="600rpx" :z-index="3000">
<view class="bf bs30 sqtel t-c">
<view class="ptimg bsf ma">
<mg-img :src="system.icon"></mg-img>
</view>
<view class="f36 mt30 mb20 l-h1">{{system.name}}</view>
<view>绑定手机号后将会获得更多权益哦</view>
<!-- #ifdef MP-WEIXIN || MP-BAIDU|| MP-TOUTIAO -->
<button :disabled="loading" class="f30 telbtn cf" :style="{background:tColor}"
open-type="getPhoneNumber" @getphonenumber="mpGetphonenumber">立即绑定1</button>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button :disabled="loading" class="f30 telbtn cf" :style="{background:tColor}"
open-type="getAuthorize" scope='phoneNumber' @getAuthorize="getAlPhoneNumber">立即绑定</button>
<!-- #endif -->
</view>
</mg-modal>
</view>
</block>
</template>
<script>
import {
mapState,
mapMutations,
mapActions
} from 'vuex'
import mgModal from '@/components/common/modal.vue'
export default {
name: 'sq-btn',
components: {
mgModal,
},
props: {
cname: '',
sname: '',
w: '',
h: '',
t: '',
type: {
type: String,
default: '1',
}, //1用户信息2手机号3瓜分红包
storeid: {
type: String,
default: '',
},
value: {
type: Boolean,
default: false
},
},
data() {
return {
loading: false,
}
},
computed: {
ptname() {
let t = ''
switch (this.api.platform) {
case 'mini':
t = '微信'
break;
case 'ali':
t = '支付宝'
break;
case 'baidu':
t = '百度'
break;
case 'toutiao':
t = '字节跳动'
break;
}
return t
},
show: {
get() {
return this.value;
},
set(newVal) {
this.$emit("input", newVal)
}
},
},
watch: {
// sname: {
// handler(newVal) {
// console.log('newVal', newVal)
// },
// immediate: true
// },
},
methods: {
share() {
uni.showModal({
title: '提示',
content: '点击右上角分享',
showCancel: false,
confirmText: '我知道了'
})
},
onGetAuthorize(res) {
// console.log('onGetAuthorize', res)
my.getOpenUserInfo({
fail: (res) => {},
success: (res) => {
// console.log('my.getOpenUserInfo', JSON.parse(res.response).response)
let result = JSON.parse(res.response).response
this.refreshUser({
storeId: this.storeid,
portrait: result.avatar,
userName: result.nickName,
userId: this.uId,
}).then(res => {
this.$emit('refresh')
})
}
});
},
getAlPhoneNumber() {
my.getPhoneNumber({
success: res => {
var resData = JSON.parse(res.response);
this.util.request({
url: this.api.jm,
method: 'POST',
data: {
data: resData.response
}
}).then(res => {
console.log('jm res', res)
if (res.data) {
this.show = false
if (this.type == 4) {
this.util.message('绑定成功', 1, 1000)
} else {
this.$emit('refresh', res.data)
}
this.refreshUser({
nomask: 1,
get: 1,
now: 1,
})
}
})
console.log('getAlPhoneNumber success', resData)
},
fail: res => {
console.log('getAlPhoneNumber fail', res)
}
})
},
// 获取用户信息 API 在小程序可直接使用,在 5+App 里面需要先登录才能调用
getUserInfo() {
uni.getUserInfo({
success: (result) => {
// #ifdef MP-TOUTIAO
let portrait = result.userInfo.avatarUrl,
userName = result.userInfo.nickName,
userId = this.uId
// #endif
this.refreshUser({
storeId: this.storeid,
portrait,
userName,
userId
}).then(res => {
this.$emit('refresh')
})
console.log('getUserInfo success', result);
},
fail: (error) => {
console.log('getUserInfo fail', error);
uni.showModal({
title: '温馨提示',
content: '获取头像等信息失败',
showCancel: false
});
}
});
},
mpGetUserInfo(result) {
console.log('mpGetUserInfo', result);
if (result.detail.errMsg == 'getUserInfo:ok') {
let portrait = result.detail.userInfo.avatarUrl,
userName = result.detail.userInfo.nickName,
userId = this.uId
this.refreshUser({
storeId: this.storeid,
portrait,
userName,
userId
}).then(res => {
this.$emit('refresh')
})
console.log(portrait, userName, userId)
} else {
uni.showModal({
title: '温馨提示',
content: '获取头像等信息失败',
showCancel: false
});
return;
}
},
mpGetphonenumber(result) {
this.loading = true
console.log('mpGetphonenumber', result);
if (result.detail.errMsg == 'getPhoneNumber:ok') {
let sessionKey = getApp().globalData.session_key,
data = result.detail.encryptedData,
iv = result.detail.iv,
userId = this.uId
this.util.request({
url: this.api.jm,
method: 'POST',
data: {
userId,
sessionKey,
data,
iv
}
}).then(res => {
this.loading = false
if (res.data) {
this.show = false
if (this.type == 4) {
this.util.message('绑定成功', 1, 1000)
} else {
this.$emit('refresh', res.data)
}
this.refreshUser({
nomask: 1,
get: 1,
now: 1,
})
}
console.log(res)
}).catch(() => {
this.loading = false
})
console.log(sessionKey, data, iv)
} else {
this.loading = false
uni.showModal({
title: '温馨提示',
content: '授权手机号失败',
showCancel: false
});
return;
}
}
}
}
</script>
<style scoped lang='scss'>
.sqtel {
padding: 70rpx 40rpx;
}
.ptimg {
width: 136rpx;
height: 136rpx;
}
.telbtn {
line-height: 2.8;
margin-top: 70rpx;
}
/* #ifdef MP-ALIPAY*/
/* #endif */
</style>