From d77c11e64afea02c5de52e13bb8df374bfb389fb Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期二, 31 十二月 2024 10:35:55 +0800
Subject: [PATCH] 1.微信登录

---
 pages/login/supplier-login.vue |  232 +++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 188 insertions(+), 44 deletions(-)

diff --git a/pages/login/supplier-login.vue b/pages/login/supplier-login.vue
index 15cd979..441ddef 100644
--- a/pages/login/supplier-login.vue
+++ b/pages/login/supplier-login.vue
@@ -127,16 +127,32 @@
 		<view class="flex" style="justify-content: center; margin-top: 150px;">
 			<u--image :showLoading="true" v-if="false"
 				src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
-				width="40rpx" height="40rpx" @click="handleWechatClick">
+				width="40rpx" height="40rpx">
 			</u--image>
 			<u-grid :border="false" :col="1">
-				<u-grid-item @click="handleWechatClick">
+				<u-grid-item v-if="wxUser.user" @click="handleWechatClick">
 					<u--image :showLoading="true"
 						src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
-						width="40rpx" height="40rpx" @click="handleWechatClick">
+						width="60rpx" height="60rpx" >
 					</u--image>
-					<text class="third-login-text" @click="handleWechatClick">微信登录</text>
+					
+					
 				</u-grid-item>
+				
+					<u-grid-item v-else>
+						
+						<button class="component-button-contact" style="font-size: 18rpx; margin: auto;" open-type="getPhoneNumber" @getphonenumber="handleGetPhoneNumber" >
+							<view style="display: flex; align-items: center;">
+								<u--image :showLoading="true"
+									src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
+									width="60rpx" height="60rpx" >
+								</u--image>
+							
+							</view>
+						</button>
+						
+					</u-grid-item>
+				
 			</u-grid>
 		</view>
 		<!-- #endif -->
@@ -146,6 +162,10 @@
 <script>
 export default {
 	async onLoad(options) {
+
+		// this.getOpenId();
+
+
 		this.source = options.source || ''
 		this.sharePartnerUserId = options.sharePartnerUserId || ''
 		// #ifdef PUB_CUSTOMER
@@ -365,6 +385,10 @@
 		// #endif
 
 	},
+
+	onShow() {
+		this.getOpenId();
+	},
 	onShareAppMessage() {
 		let that = this;
 		var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO &&
@@ -419,10 +443,168 @@
 			apitype: 'loginCustomer',
 			// #endif
 			// return 'loginPartner'
+			
+
+			wxUser:{
+				openId:'',
+				sessionKey:'',
+				unionId:'',
+				user:{},
+				phoneNumber:'',
+				purePhoneNumber:'',
+			},
+
 		};
 	},
 	methods: {
 
+		getOpenId(){
+			let that=this
+			uni.login({
+				"provider": "weixin",
+				"onlyAuthorize": true, // 微信登录仅请求授权认证
+				success: async function (event) {
+					console.log("aaaa")
+					console.log(event)
+					const { code } = event
+					await that.getExistUserByOpenId(code);
+					that.wxLoginCode=code
+					console.log("wxUser")
+					console.log(that.wxUser)
+
+				},
+				fail: function (err) {
+					// 登录授权失败
+					// err.code是错误码
+				}
+			})
+		},
+
+
+
+		async handleGetPhoneNumber(e){
+			let that = this
+			console.log(e)
+			console.log(e.detail.code)  // 动态令牌
+			console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
+			console.log(e.detail.errno)  // 错误码(失败时返回)
+			if (e.detail.errMsg == 'getPhoneNumber:ok') {
+				console.log('获取成功')
+				const {
+					code,data
+				} = await that.$http.request('post', '/api/wx/getuserphonenumber', {
+					data: {
+						code: e.detail.code,
+						userType: that.apitype.replace("login", "").toLowerCase()
+					}
+				})
+				if (code == 0) {
+					// 获取手机号码后,实现微信登录
+					console.log(data)
+					const phoneNumber=data.phone_info.phoneNumber;
+					const purePhoneNumber=data.phone_info.purePhoneNumber;
+					that.wxUser.phoneNumber=phoneNumber
+					that.wxUser.purePhoneNumber=purePhoneNumber
+					that.handleWechatClick()
+				} else {
+					
+				}
+			}else{
+				this.$message.showToast('获取授权失败,无法登录!')
+			}
+		},
+
+		async getExistUserByOpenId(accessCode){
+			let that=this;
+			const {
+					code,data
+				} = await that.$http.request('post', '/api/wx/getExistUserByOpenId', {
+					data: {
+						code: accessCode,
+						userType: that.apitype.replace("login", "").toLowerCase()
+					}
+				})
+				if (code == 0) {
+					console.log("查看当前用户是否已经绑定过")
+					console.log(data)
+					that.wxUser=data
+					if(that.wxUser&&that.wxUser.user){
+						return true
+					}
+					return false
+				} else {
+					this.$message.showToast('系统异常,无法获取当前微信是否已经绑定过账号')
+				}
+		},
+
+		handleWechatClick22() {
+			uni.login({
+				provider: 'univerify',
+				univerifyStyle: {
+					fullScreen: true
+				}
+			})
+		},
+
+		handleWechatClick_new() {
+			let that = this
+			// 微信登录
+			uni.login({
+				"provider": "weixin",
+				"onlyAuthorize": true, // 微信登录仅请求授权认证
+				success: async function (event) {
+					const { code } = event
+					that.$message.showLoading();
+					// 1.解析当前code,查看当前的openid是否已经绑定过用户,
+					// 2.如果没有的话,则获取当前手机号,并注册信息用户绑定再登录
+					// 3.如果已经绑定过用户,则直接登录
+					console.log("查看当前用户是否已经绑定过")
+					const resp = await that.getExistUserByOpenId(code)
+					if(resp){
+						// 已经绑定过用户,则直接登录
+						const resp = await that.$store.dispatch('loginwx', { code })
+						if (resp && resp.data) {
+							that.$forceUpdate()
+							uni.reLaunch({
+								url: '/pages/home/home'
+							})
+						}
+					}else{
+						// 没有绑定过用户,则获取当前手机号,并注册信息用户绑定再登录
+						// let el = uni.createSelectorQuery().in(this).select('#phoneButton');
+						// console.log(el)
+						// 使用 uni.createSelectorQuery 获取按钮元素
+						uni.createSelectorQuery().select('#phoneButton').boundingClientRect((rect) => {
+							if (rect) {
+							// 获取到按钮后,模拟点击
+							uni.createSelectorQuery().select('#phoneButton').node((res) => {
+								if (res.node) {
+								res.node.click(); // 模拟点击
+								}
+							}).exec();
+							}
+						}).exec();
+					}
+					
+
+					// const resp = await that.$store.dispatch('loginwx', { code })
+					// if (resp && resp.data) {
+					// 	that.$forceUpdate()
+					// 	uni.reLaunch({
+					// 		url: '/pages/home/home'
+					// 	})
+					// }
+					that.$message.hideLoading();
+				},
+				fail: function (err) {
+					// 登录授权失败
+					// err.code是错误码
+				}
+			})
+
+		},
+
+		
 		handleWechatClick() {
 			let that = this
 			// 微信登录
@@ -430,55 +612,16 @@
 				"provider": "weixin",
 				"onlyAuthorize": true, // 微信登录仅请求授权认证
 				success: async function (event) {
-					console.log("客户端成功获取授权临时票据(code),向业务服务器发起登录请求。")
-					console.log(event)
 					const { code } = event
-					console.log('code', code)
 					that.$message.showLoading();
-					const resp = await that.$store.dispatch('loginwx', { code })
+					const resp = await that.$store.dispatch('loginwx', { code,phoneNumber:that.wxUser.phoneNumber,purePhoneNumber:that.wxUser.purePhoneNumber })
 					if (resp && resp.data) {
 						that.$forceUpdate()
 						uni.reLaunch({
 							url: '/pages/home/home'
 						})
 					}
-					// const resp = await that.$http.request('get', '/api/wx/jscode2session', {
-					// 	params: {
-					// 		jsCode: code,
-					// 		userType: that.apitype.replace("login", "").toLowerCase()
-					// 	}
-					// });
 					that.$message.hideLoading();
-					// console.log('resp', resp)
-					// if (resp && resp.data) {
-					// 	var cts = resp.data;
-					// 	var openid = cts.openid; //openid 用户唯一标识
-					// 	if (cts && cts.openid) {
-					// 		that.$storage.setItem('openid', cts.openid);
-					// 	}
-
-					// 	var session_key = cts.session_key; //session_key  会话密钥
-
-					// 	if (true) {
-					// 		if (!!cts.errmsg) {
-					// 			that.$message.showToast('获取失败' + cts.errmsg);
-					// 		} else {
-					// 			//成功了,再调用
-					// 			uni.getUserInfo({
-					// 			provider: 'weixin',
-					// 			success: function (infoRes) {
-					// 				console.log("uni.getUserInfo")
-					// 				console.log(infoRes)
-					// 				console.log('用户信息:', infoRes.userInfo);
-					// 			},
-					// 			fail: function (err) {
-					// 				console.error('获取用户信息失败:', err);
-					// 			},
-					// 			});
-
-					// 		}
-					// 	}
-					// }
 				},
 				fail: function (err) {
 					// 登录授权失败
@@ -893,4 +1036,5 @@
 	font-size: 18rpx;
 	margin-top:5rpx;
 }
+
 </style>
\ No newline at end of file

--
Gitblit v1.9.3