123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <view>
- <page-head :title="title"></page-head>
- <view class="uni-padding-wrap">
- <view style="background:#FFF; padding:40rpx;">
- <block v-if="hasUserInfo === false">
- <view class="uni-hello-text uni-center">
- <text>请点击下方按钮获取用户头像及昵称或手机号</text>
- </view>
- </block>
- <block v-if="hasUserInfo === true">
- <view class="uni-h4 uni-center uni-common-mt">{{userInfo.nickName || userInfo.nickname || userInfo.gender || userInfo.email || userInfo.phoneNumber}}</view>
- <view v-if="userInfo.avatarUrl || userInfo.avatar_url " style="padding:30rpx 0; text-align:center;">
- <image class="userinfo-avatar" :src="userInfo.avatarUrl||userInfo.avatar_url"></image>
- </view>
- </block>
- </view>
- <view class="uni-btn-v">
- <!-- #ifdef APP-PLUS || MP-ALIPAY || MP-TOUTIAO -->
- <button type="primary" :loading="btnLoading" @click="getUserInfo">获取用户信息</button>
- <!-- #endif -->
- <!-- #ifdef MP-WEIXIN || MP-BAIDU || MP-QQ || MP-JD -->
- <button type="primary" open-type="getUserInfo" @getuserinfo="mpGetUserInfo">获取用户信息</button>
- <!-- #endif -->
- <button @click="clear">清空</button>
- </view>
- </view>
- </view>
- </template>
- <script>
- import {
- mapState,
- mapMutations,
- mapActions
- } from 'vuex'
- export default {
- data() {
- return {
- title: 'getUserInfo',
- hasUserInfo: false,
- userInfo: {},
- btnLoading: false
- }
- },
- computed: {
- ...mapState([
- 'loginProvider',
- 'isUniverifyLogin'
- ])
- },
- methods: {
- ...mapActions(['getPhoneNumber']),
- // 获取用户信息 API 在小程序可直接使用,在 5+App 里面需要先登录才能调用
- getUserInfo() {
- this.btnLoading = true;
- if (this.isUniverifyLogin) {
- // 一键登录
- this.getPhoneNumber(uni.getStorageSync('univerifyInfo')).then(phoneNumber => {
- this.hasUserInfo = true;
- this.userInfo = {
- phoneNumber
- };
- }).catch(err => {
- console.error('getUserInfo fail:', err);
- this.hasUserInfo = false;
- }).finally(() => {
- this.btnLoading = false;
- })
- return;
- }
- if(this.loginProvider === 'apple'){
- const nickname = uni.getStorageSync('apple_nickname')
- if(nickname){
- this.hasUserInfo = true;
- this.userInfo = { nickName:nickname }
- this.btnLoading = false;
- return;
- }
- }
- uni.getUserInfo({
- provider: this.loginProvider,
- success: (result) => {
- this.hasUserInfo = true;
- this.userInfo = result.userInfo;
- },
- fail: (error) => {
- console.log('getUserInfo fail', error);
- let content = error.errMsg;
- if (~content.indexOf('uni.login')) {
- content = '请在登录页面完成登录操作';
- }
- // #ifndef APP-PLUS
- uni.getSetting({
- success: (res) => {
- let authStatus = res.authSetting['scope.userInfo'];
- if (!authStatus) {
- uni.showModal({
- title: '授权失败',
- content: 'Hello uni-app需要获取您的用户信息,请在设置界面打开相关权限',
- success: (res) => {
- if (res.confirm) {
- uni.openSetting()
- }
- }
- })
- } else {
- uni.showModal({
- title: '获取用户信息失败',
- content: '错误原因' + content,
- showCancel: false
- });
- }
- }
- })
- // #endif
- // #ifdef APP-PLUS
- uni.showModal({
- title: '获取用户信息失败',
- content: '错误原因' + content,
- showCancel: false
- });
- // #endif
- },
- complete: () => {
- this.btnLoading = false;
- }
- });
- },
- mpGetUserInfo(result) {
- console.log('mpGetUserInfo', result);
- if (result.detail.errMsg !== 'getUserInfo:ok') {
- uni.showModal({
- title: '获取用户信息失败',
- content: '错误原因' + result.detail.errMsg,
- showCancel: false
- });
- return;
- }
- this.hasUserInfo = true;
- if(result.detail && result.detail.userInfo){
- this.userInfo = result.detail.userInfo;
- }else{
- // #ifdef MP-JD
- this.userInfo = result.detail.user_info;
- // #endif
- }
- },
- clear() {
- this.hasUserInfo = false;
- this.userInfo = {};
- }
- }
- }
- </script>
- <style>
- .userinfo-avatar {
- border-radius: 128rpx;
- width: 128rpx;
- height: 128rpx;
- }
- </style>
|