uniapp微信小程序最新获取昵称和头像

1.微信获取头像和昵称最新需要用户上传头像和手动输入昵称,否则昵称默认是微信用户,头像是灰色头像 ps(会提示使用微信头像和微信昵称)
uniapp微信小程序最新获取昵称和头像_第1张图片

<template>
	<view>
		<view class="cx_content_bill">
			<view class="cx_pile_status">
				<image :src="currentPile.filePath" class="lottery-cover-img"></image>
			</view>
			<view class="cx_pileType">{{currentPile.pileName}}</view>
			<view class="cx_pile_pay">
				家庭充电桩交付突破1,000,000</view>
			<view class="cx_pile_titleA">百万成就百万交付</view>
			<view class="cx_nick_img">
				<image :src="avatar" style="width: 100%;height: 100%;"></image>
			</view>
			<view class="cx_pile_titleB">
				<view>我是{{nickname}}</view>
				<view>我正在使用{{currentPile.pileName}}</view>
				<view>如果您的充电桩铭牌上也有 </view>
				<view>您就是正在寻找的百万</view>
			</view>
			<view class="cx_pile_logo"></view>
			<view class="cx_pile_share" @click="showTips">
				<view>马上分享</view>
				<view class="cx_pile_shareIma"></view>
			</view>
			<!-- 活动隐私协议 -->
			<tui-bottom-popup :zIndex="1002" :maskZIndex="1001" :show="popupShow" @close="popup" disabled shadow>
				<view class="cx_popup">
					<view class="cx_popup_title">
						活动隐私协议
					</view>
					<view class="cx_popup_content">
						1.本人同意为了生成我的个人充电海报而查询,调用我的微信头像、昵称、位置等信息,生成我的专属活动页面并向我进行信息展示。</view>
					<view class="cx_popup_content">
						2.专属活动页面为自动生成结果,可能与实际情况存在一定误差。该活动页面生成后,您的个人信息将在系统中保留30天后删除。
					</view>
					<view class="cx_popup_content">
						3.专属活动页面包含我的个人信息。如我转发、共享该活动页面,即视为我同意并向接收者提供我的个人信息。对该等转发、共享活动而导致的个人信息泄露承担任何直接或间接的责任。
					</view>
					<view class="cx_popup_content">
						4.在本协议中未声明的其他一切权利,仍归本公司所有。本公司保留对本协议的最终解释权利。如果您还有其他问题和建议,可以通过
					</view>
					<view class="cx_popup_content" style="display: flex;justify-content: flex-start;width: 100%;">
						<text style="color: #237FFF;" @click="callPhone">400580</text>联系我们
					</view>
					<!-- <view class="cx_popup_btn" @click="agree">已阅读并同意</view> -->
					<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="cx_popup_btn"
						v-if="!nickFlag">已阅读并同意</button>
					<button @click="getUserInfo" class="cx_popup_btn" v-if="nickFlag">用户授权</button>
				</view>
			</tui-bottom-popup>
			<!-- 获取用户头像昵称 -->
			<tui-bottom-popup :zIndex="1002" :maskZIndex="1001" :show="popupShows" @close="popup" disabled shadow>
				<view class="getnickbox">
					<view class="flex_align_center">
						<image src="https://img.cdn.wxzhida.cn/zd-ali-app/zdlogo.png" class="logoimg" mode="aspectFit">
						</image>
						<view class="name">
							活动申请
						</view>
					</view>
					<view class="m1 mt30">获取你的头像、昵称</view>
					<view class="m2">展示个人信息</view>
					<view class="xin1">
						<button type="default" class="flex_spacebetween buttoncss" open-type="chooseAvatar"
							@chooseavatar="chooseavatar">
							<view class="flex_align_center toubox">
								<view class="t1">头像</view>
								<view v-if="avatar == ''" class="avatarbox">
								</view>
								<image v-else :src="avatar" class="avatarimg"></image>
							</view>
							<tui-icon name="arrowright"></tui-icon>
						</button>
					</view>
					<view class="nick">
						<view class="n1">昵称:</view>
						<input type="nickname" v-model="nickname" placeholder="请输入昵称" maxlength="8">
					</view>
					<view class="fixedBtn wan">
						<view class="user-info" @click="refuse">拒绝</view>
						<view class="user-priamy" @click="getUserInfo">允许</view>
					</view>
				</view>
			</tui-bottom-popup>
			<!-- 分享朋友圈和朋友列表 -->
			<tui-bottom-popup :zIndex="1002" :maskZIndex="1001" :show="popupShowes" @close="popup">
				<view class="cx_popupss">
					<view class="wechatB_A">
						<view class="wechatA" @click="shareFriend">
							<button open-type="share" style="border-color: transparent;" class="wechatA"></button>
						</view>
						<view>发送朋友</view>
					</view>
					<view class="wechatB_A">
						<view class="wechatB" @click="goShareFri"></view>
						<view>
							分享朋友圈
						</view>
					</view>
				</view>
				<view class="cx_popup_cancle" @click="popupShowes = false">取消</view>
		</tui-bottom-popup>
	</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				popupShow: false,
				nickFlag: false,
				jsCode: '',
				backgroundColor: 'rgba(0, 0, 0, 0.7)',
				modal: false,
				canvasdata: {}, //canvas数据
				imagedata: {}, //头像数据
				codeimage: "", //最后生成图片地址
				posterCover: '',
				popupShows: false,
				avatar: '',
				nickname: '',
				mobile: '',
				currentPile: {},
				popupShowes: false,
			}
		},
		onShareAppMessage(res) {
			return {
				title: '百万好礼派送中',
				path: '/pages/selectPile/index',
				imageUrl: 'https://img.cdn.wxzhida.cn/zd-lottery/xxcc.jpg'
			}
		},
		async onShow() {

			this.getPileDetail()
			if (uni.getStorageSync('userInfo') != '') {
				if (this.showFlags) { //进了webview分享页面就自动跳到抽奖页面
					let res = await this.getLottery()
					console.log('bbbb')
					console.log(res)
					if (res.data.data == null) {
						uni.reLaunch({
							url: '/pages/return-visit/index'
						})
					} else {
						if (res.data.data.isLottery == '01' || res.data.data.isLottery == '' || res.data.data
							.isLottery ==
							undefined || res.data.data.isLottery == null) { //未抽奖
							uni.reLaunch({
								url: '/pages/return-visit/index'
							})
						} else {
							// uni.showToast({
							// 	title: "您已经参与过抽奖!",
							// 	icon: "none",
							// 	duration: 3000
							// });
						}
					}
				}

				let user = uni.getStorageSync('userInfo')
				console.log('user=' + JSON.stringify(user))
				this.popupShow = false;
				this.avatar = user.avatar
				this.nickname = user.nickname
			} else {
				this.popupShow = true;
				this.wxLogin()
			}
		},
		mounted() {

		},
		watch: {},
		computed: {
			showFlags() {
				return this.$store.state.showFlag
			},
		},
		created() {

		},
		methods: {
			/*查询用户有没有抽过奖*/
			getLottery() {
				let that = this;
				return new Promise((resolve, reject) => {
					uni.request({
						url: this.$A.lottery.find,
						method: "POST",
						data: {
							userPhone: uni.getStorageSync("userPhone")
						},
						success: (res) => {
							resolve(res)
						},
						fail: (err) => {

							// console.log(err.data)
						},
						complete: (end) => {
							// console.log(end)

						}
					})

				})

			},
			/*拒绝提供用户信息*/
			refuse() {
				this.popupShows = false;
				this.popupShow = true;
			},
			/*拉去桩详情*/
			getPileDetail() {
				uni.request({
					url: this.$A.picture.getPicture,
					method: "POST",
					data: {
						erpCode: this.$store.state.currentSelectPile.erpCode
					},
					success: (res) => {
						this.$store.commit('setCurrentPile', res.data.data)
						this.currentPile = res.data.data
					},
					fail: (err) => {

						// console.log(err.data)
					},
					complete: (end) => {
						// console.log(end)

					}
				})
			},
			/*马上分享*/
			showTips() {
				this.popupShowes = true;
				// uni.navigateTo({ //encodeURIComponent(JSON.stringify(item))
				// 	url: `/pages/bill/web-view?pileName=${this.currentPile.pileName}&pileUrl=${this.currentPile.filePath}&avatar=${this.avatar}&nickname=${this.nickname}`,
				// });
			},
			popup() {

			},
			/*拨打电话*/
			callPhone() {
				uni.makePhoneCall({
					phoneNumber: '4006596580' //仅为示例
				});
			},
			/*同意*/
			agree() {
				this.popupShow = false;
			},
			// 获取用户手机号
			getPhoneNumber(e, type) { // 参数encryptedData
				console.log(e)
				this.pageType = type;
				if (e.detail.errMsg == "getPhoneNumber:ok") { // 用户允许或去手机号
					uni.showLoading({
						title: '授权中...',
						mask: true,
					});
					this.login(e.detail);
				}
			},
			/*获取手机号码*/
			login(data) {
				uni.request({
					url: this.$A.getPhone.main,
					method: "POST",
					data: {
						encryptedData: data.encryptedData,
						iv: data.iv,
						code: this.jsCode
					},
					success: (res) => {
						let phoneNum = JSON.parse(res.data.data.userPhone).phoneNumber
						uni.setStorageSync('userPhone', phoneNum)
						this.mobile = JSON.parse(res.data.data.userPhone).phoneNumber
						this.nickFlag = true;
					},
					fail: (err) => {
						uni.showToast({
							title: "登录失败!",
							icon: "error"
						});
						// console.log(err.data)
					},
					complete: (end) => {
						// console.log(end)
						uni.hideLoading()
					}
				})
			},
			//登录---目的拿到code
			wxLogin() {
				let _this = this
				// 获取登录用户code
				uni.login({
					provider: 'weixin',
					success: function(res) {
						console.log(res)
						if (res.code) {
							_this.jsCode = res.code;
							console.log('jsCode=' + res.code)
						} else {
							// uni.showToast({
							// 	title: '获取logon_code失败',
							// 	duration: 2000
							// })
							_this.wxLogin()
						}
					},
					fail: (res) => {
						// uni.showToast({
						// 	title: '获取logon_code失败',
						// 	duration: 2000
						// })
						_this.wxLogin()
					}
				})
			},
			/*选择头像*/
			chooseavatar(e) {
				console.log(e)
				let that = this;
				uni.uploadFile({
					url: this.$A.picture.uploadFile, //
					filePath: e.detail.avatarUrl,
					name: 'file',
					formData: {
						mobile: that.mobile
					},
					success: r => {
						let imgData = JSON.parse(r.data)
						this.avatar = imgData.data.headImg;
					}
				});
			},
			/*提交用户昵称头像*/
			getUserInfo() {
				let that = this;
				this.popupShow = false;
				this.popupShows = true;
				if (this.avatar == "") {
					uni.showToast({
						title: '请选择头像',
						icon: 'none'
					})
					return
				}
				// 坑,,,点击昵称后,开发者工具上 一直提示 昵称是空,但是 真机上 是正常的
				if (this.nickname == "") {
					uni.showToast({
						title: '请编辑用户昵称',
						icon: 'none'
					})
					return
				}
				uni.setStorageSync("userInfo", {
					avatar: this.avatar,
					nickname: this.nickname
				})
				this.popupShow = false;
				this.popupShows = false;
			},
			/*分享朋友圈*/
			goShareFri() {
				this.$store.commit("setShowFlag", true)
				this.popupShowes = false;
				uni.navigateTo({ //encodeURIComponent(JSON.stringify(item))
					url: `/pages/bill/web-view?pileName=${this.currentPile.pileName}&pileUrl=${this.currentPile.filePath}&avatar=${this.avatar}&nickname=${this.nickname}`,
				});
			},
			/*点击分享朋友*/
			shareFriend() {
				this.$store.commit("setShowFlag", true)
				this.popupShowes = false;
			}
		}
	}
</script>

<style lang="less">
	page {
		width: 100%;
		height: 100vh;
		box-sizing: border-box;
		background: url('https://img.cdn.wxzhida.cn/zd-mini-lottery/billbg.png');
		background-size: 100% 100%;
	}

	.cx_content_bill {
		width: 100%;
		height: 100%;
		box-sizing: border-box;
		display: flex;
		flex-direction: column;
		align-items: center;
		position: relative;
		z-index: 999999;
	}

	.cx_pile_status {
		position: absolute;
		top: 58rpx;
		left: 50%;
		width: 316rpx;
		height: 440rpx;
		transform: translateX(-50%);
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.lottery-cover-img {
		width: 100%;
		height: 100%;
	}

	.cx_pileType {
		height: 44rpx;
		font-size: 32rpx;
		font-weight: 600;
		color: #FFFFFF;
		line-height: 44rpx;
		letter-spacing: 8rpx;
		text-align: center;
		width: 100%;
		position: absolute;
		top: 608rpx;
	}

	.cx_pile_pay {
		font-size: 32rpx;
		font-weight: 400;
		color: #FFFFFF;
		line-height: 26rpx;
		letter-spacing: 2rpx;
		position: absolute;
		top: 724rpx;
		width: 100%;
		text-align: center;
		left: 50%;
		transform: translateX(-50%);
	}

	.cx_pile_titleA {
		width: 100%;
		font-size: 52rpx;
		font-weight: 600;
		color: #FFFFFF;
		text-align: center;
		line-height: 74rpx;
		letter-spacing: 2rpx;
		position: absolute;
		top: 768rpx;
	}

	.cx_pile_titleB {
		width: 100%;
		height: 156rpx;
		font-size: 24rpx;
		font-weight: 400;
		color: #FFFFFF;
		letter-spacing: 4rpx;
		text-align: center;
		position: absolute;
		top: 1002rpx;
		line-height: 38rpx;

	}

	.cx_pile_logo {
		width: 116rpx;
		height: 24rpx;
		background: url('https://img.cdn.wxzhida.cn/zd-mini-lottery/zd.png');
		background-size: 100% 100%;
		position: absolute;
		top: 1336rpx;
		left: 50%;
		transform: translateX(-50%);
	}

	.cx_pile_share {
		width: 200rpx;
		height: 60rpx;
		box-sizing: border-box;
		background: linear-gradient(205deg, #F380F2 0%, #51D2EC 100%);
		border-radius: 29rpx;
		position: absolute;
		top: 1238rpx;
		left: 50%;
		transform: translateX(-50%);
		display: flex;
		align-items: center;
		justify-content: space-between;

		padding: 0 28rpx;
		font-size: 24rpx;
		font-weight: 400;
		color: #FFFFFF;
	}

	.cx_pile_shareIma {
		width: 28rpx;
		height: 30rpx;
		background: url('https://img.cdn.wxzhida.cn/zd-mini-lottery/hy-share.png');
		background-size: 100% 100%;
	}

	.cx_nick_img {
		width: 80rpx;
		height: 80rpx;
		border-radius: 50%;
		position: absolute;
		top: 882rpx;
		left: 50%;
		overflow: hidden;
		transform: translateX(-50%);
	}

	.cx_popup {
		width: 100%;
		padding: 40rpx 50rpx 60rpx 54rpx;
		display: flex;
		flex-direction: column;
		align-items: center;
		box-sizing: border-box;
	}

	.cx_popupss {
		width: 100%;
		padding: 60rpx 180rpx 100rpx 180rpx;
		display: flex;
		justify-content: space-between;
		align-items: center;
		box-sizing: border-box;
		font-size: 24rpx;
		font-weight: 400;
		color: #000000;
		letter-spacing: 2rpx;
	}

	.wechatA {
		width: 118rpx;
		height: 118rpx;
		background: url('https://img.cdn.wxzhida.cn/zd-mini-lottery/wechatC.png');
		background-size: 100% 100%;
	}
	.wechatB_A{
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: space-between;
	}
	.shareBtn {
		width: 100%;
		height: 100%;
		border: 0 rpx solid transparent;
	}

	.wechatB {
		width: 118rpx;
		height: 118rpx;
		background: url('https://img.cdn.wxzhida.cn/zd-mini-lottery/wechatD.png');
		background-size: 100% 100%;
	}

	.cx_popup_cancle {
		width: 100%;
		text-align: center;
		margin-bottom: 30rpx;
	}

	.cx_popup_title {
		height: 50rpx;
		width: 100%;
		text-align: center;
		font-size: 36rpx;
		font-weight: 600;
		color: #000000;
		line-height: 50rpx;
		margin-bottom: 30rpx;
	}

	.cx_popup_content {
		font-size: 28rpx;
		font-weight: 400;
		color: #000000;
		line-height: 40rpx;
	}

	.cx_popup_btn {
		width: 510rpx;
		height: 90rpx;
		background: #000000;
		border-radius: 45rpx;
		font-size: 28rpx;
		font-weight: 400;
		color: #FFFFFF;
		display: flex;
		justify-content: center;
		align-items: center;
		margin-top: 38rpx;
	}

	.tui-modal-custom {
		width: 100%;
		height: 800rpx;
		box-sizing: border-box;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	.getnickbox {
		padding: 40rpx 20rpx;

		.flex_align_center {
			display: flex;
			align-items: center;
		}

		.fixedBtn {
			display: flex;
			justify-content: center;
			align-items: center;
			width: 100%;
			padding-top: 50rpx;

			.user-info {
				color: #07C160;
				width: 180rpx;
				height: 64rpx;
				display: flex;
				justify-content: center;
				align-items: center;
				background-color: #FFFFFF;
				border: 1rpx solid #07C160;
				border-radius: 10rpx;
			}

			.user-priamy {
				width: 180rpx;
				height: 64rpx;
				border-radius: 10rpx;
				margin-left: 50rpx;
				display: flex;
				justify-content: center;
				align-items: center;
				background-color: #07C160;
				color: #FFFFFF;
			}
		}

		.logoimg {
			width: 50rpx;
			height: 50rpx;
		}

		.name {
			margin-left: 20rpx;
		}

		.m1 {
			font-weight: 500;
		}

		.m2 {
			padding-bottom: 30rpx;
			border-bottom: 1rpx solid #f2f2f2;
			color: #999;
			padding-top: 10rpx;
			font-size: 24rpx;
		}

		.xin1 {
			border-bottom: 1rpx solid #f2f2f2;
			margin-bottom: 30rpx;

			.flex_spacebetween {
				display: flex;
				justify-content: space-between;
			}

			.toubox {
				padding: 10rpx 0;

				.t1 {
					font-size: 28rpx;
					margin-right: 30rpx;
				}

				.avatarbox {
					width: 100rpx;
					height: 100rpx;
					border-radius: 20rpx;
				}

				.avatarimg {
					width: 100rpx;
					height: 100rpx;
					border-radius: 20rpx;
				}
			}
		}

		.buttoncss {
			background-color: #fff;
			border-radius: 0px;
			border: 0rpx solid transparent;
		}

		button::after {
			border: 0px solid rgba(0, 0, 0, .2);
		}

		.nick {
			padding-bottom: 30rpx;
			border-bottom: 2rpx solid #f2f2f2;
			display: flex;
			align-items: center;
			padding-left: 14px;
			padding-right: 14px;

			.n1 {
				font-size: 28rpx;
				margin-right: 30rpx;
			}
		}


		.mt30 {
			margin-top: 30rpx;
		}
	}

	button::after {
		border: none;
	}
</style>


你可能感兴趣的:(uni-app,微信小程序,vue.js)