陶杰
2024-12-31 d77c11e64afea02c5de52e13bb8df374bfb389fb
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>