-
zhangwei
2025-03-05 16213c0f85aa3ac8317797bf4a05fd12940e16d3
src/pages/login/index.vue
@@ -1,183 +1,63 @@
<template>
   <view>
      <view class="wrap">
         <image src="@/static/logo.png" mode="widthFix" class="tip_img"></image>
         <view class="login_tip">
            为了提供更优质的服务,需要获取您的头像和昵称。
         </view>
         <view class="login_btn">
            <!-- #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU -->
            <button v-if="canIUseGetUserProfile" type="primary" class="uni-tip-button" @click="login">授权并登录</button>
            <button v-else type="primary" open-type="getUserInfo" @getuserinfo="login"
               class="uni-tip-button">授权并登录</button>
            <view class="no_login" @click="back">
            <button v-if="canIUseGetPhoneNumber" class="uni-tip-button"
               style="backgroundColor:#fece01;borderColor:#fece01" @click="mobileAuthLogin">授权并登录</button>
            <button style="backgroundColor:#fece01;borderColor:#fece01" v-else open-type="getPhoneNumber"
               @getphonenumber="getPhoneNumber" class="uni-tip-button">授权并登录</button>
            <view class="no_login" @click="back" style="color:#fece01;borderColor:#fece01">
               暂不授权
            </view>
            <!-- #endif  -->
            <checkbox-group @change="changeAgree">
               <view class="regisiter-agreement">
                  <label>
                     <checkbox value="1" :checked="isChecked" color="#35A6FF" style="transform:scale(0.7)" />
                     <checkbox value="1" :checked="isChecked" color="#fece01" style="transform:scale(0.7)" />
                     已阅读并同意以下协议
                     <text class="color-base-text" @click.stop="openPopup(1)">《用户服务协议》</text>和 <text
                        class="color-base-text" @click.stop="openPopup(2)">《隐私政策》</text>
                     <text class="color-base-text" @click.stop="toArticle(1)">《用户服务协议》</text>
                     <!-- 和 <text class="color-base-text" @click.stop="toArticle(2)">《隐私政策》</text> -->
                  </label>
               </view>
            </checkbox-group>
         </view>
         <!-- <view class="mobile_login" @click="toMobileLogin">
            同意并输入手机号登录
         </view> -->
         <!-- <view class="agreement_wrap">
            <view class="agree_item">
               <view class="item_icon" @click="isChecked = !isChecked">
                  <image v-if="!isChecked" :src="$util.img('upload/img/iconCheck.png')" mode="aspectFit"
                     class="item_select_img"></image>
                  <image v-else :src="$util.img('upload/img/publish-selected.png')" mode="aspectFit"
                     class="item_select_img"></image>
               </view>
               <view class="item_content">
                  首次登录自动注册运满满及货车帮账号,且已阅读并同意<text class="agreement">《用户服务协议》</text><text
                     class="agreement">《个人信息保护政策》</text><text class="agreement">《账号关联协议》</text>
               </view>
            </view>
            <view class="agree_item">
               <view class="item_icon" @click="isCheckedSan = !isCheckedSan">
                  <image v-if="!isCheckedSan" :src="$util.img('upload/img/iconCheck.png')" mode="aspectFit"
                     class="item_select_img"></image>
                  <image v-else :src="$util.img('upload/img/publish-selected.png')" mode="aspectFit"
                     class="item_select_img"></image>
               </view>
               <view class="item_content">
                  已阅读并同意<text class="agreement">《第三方合作清单》</text>
               </view>
            </view>
         </view> -->
      </view>
      <u-popup ref="popup" type="center">
         <view class="bind-wrap">
            <!-- #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU -->
            <view class="heard">提示</view>
            <view class="bind-tips">为了方便您接收通知消息,需要您完成授权</view>
            <view class="auth-login ns-btn-default-all color-base-bg" @click="toWeb">
               去授权
            </view>
            <!-- <button open-type="getPhoneNumber" class="auth-login ns-btn-default-all color-base-bg"
               @getphonenumber="mobileAuthLogin"><text>点击绑定手机号码</text></button> -->
            <!-- #endif  -->
         </view>
      </u-popup>
      <u-popup ref="bindMobile">
         <view class="bind-wrap">
            <!-- #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU -->
            <view class="heard">提示</view>
            <view class="bind-tips">为了方便联系您,需要绑定您的手机号码</view>
            <button open-type="getPhoneNumber" class="auth-login ns-btn-default-all color-base-bg"
               @getphonenumber="mobileAuthLogin"><text>点击绑定手机号码</text></button>
            <!-- #endif  -->
         </view>
      </u-popup>
   </view>
</template>
<script>
   import {
      mapActions,
      mapGetters,
      mapMutations
   } from 'vuex'
   export default {
      data() {
         return {
            isChecked: false,
            isCheckedSan: false,
            canIUseGetUserProfile: false
            canIUseGetPhoneNumber: false
         };
      },
      created() {
         // #ifdef MP-WEIXIN
         if (wx.getUserProfile) this.canIUseGetUserProfile = true;
         if (uni.getStorageSync('queryPhoneNumber')) this.canIUseGetPhoneNumber = true;
         // #endif
      },
      onShow() {
         if (uni.getStorageSync('wx_openid_set') && uni.getStorageSync('wx_openid_set') == 1) {
            uni.showLoading({
               title: '加载中',
               mask: true
            })
            this.$api.sendRequest({
               url: '/api.php/user/info',
               data: {
                  uid: uni.getStorageSync('authInfo').id
               },
               success: res => {
                  if (res.code == 1) {
                     // uni.hideLoading()
                     // if (res.data.openid) this.authInfo.weapp_openid = res.data.openid;
                     // if (res.data.unionid) this.authInfo.wx_unionid = res.data.unionid;
                     if (res.data.wx_openid) {
                        this.$util.showToast({
                           title: "登录成功",
                           icon: "success"
                        })
                        uni.setStorage({
                           key: 'uid',
                           data: res.data.id,
                           success: () => {
                              uni.removeStorageSync('wx_openid_set');
                              uni.removeStorageSync('source_member');
                              uni.removeStorageSync('authInfo');
                              this.$api.sendRequest({
                                 url: "/api.php/user/is_perfect",
                                 data: {
                                    uid: res.data.id,
                                 },
                                 success: res => {
                                    if (res.code == 1) {
                                       console.log(res)
                                       uni.setStorageSync(
                                          'is_perfect_user', '1')
                                    } else {
                                       uni.setStorageSync(
                                          'is_perfect_user', res.code
                                          )
                                    }
                                 },
                                 fail: res => {
                                    this.$util.showToast({
                                       title: "接口错误"
                                    });
                                 }
                              });
                              // this.$store.dispatch('getCartNumber');
                              setTimeout(() => {
                                 this.$util.redirectTo(
                                    '/pages/index/index', {},
                                    'tabbar')
                              }, 1000)
                           }
                        });
                     } else {
                        this.$util.showToast({
                           title: '授权失败'
                        });
                     }
                     if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
                  } else {
                     uni.removeStorageSync('uid')
                     this.$forceUpdate()
                     this.$util.showToast({
                        title: res.msg
                     });
                     if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
                  }
               }
            })
         }
      },
      methods: {
         openPopup(type) {
            this.$util.redirectTo('/otherPages/member/webView/webView', {
               link: type
         ...mapActions([
            'getUserInfo'
         ]),
         toArticle(type) {
            uni.navigateTo({
               url: '/pages/article/article'
            })
         },
         changeAgree(e) {
@@ -188,164 +68,93 @@
               this.isChecked = false
            }
         },
         toWeb() {
            if (!this.isChecked) {
               return this.$util.showToast({
                  title: "请先同意协议"
               })
            }
            uni.setStorageSync('wx_openid_set', 1)
            this.$util.redirectTo('/otherPages/member/webView/webView', {
               uid: uni.getStorageSync('authInfo').id
            })
         },
         back() {
            uni.navigateBack()
            uni.switchTab({
               url: '/pages/index/index'
            });
         },
         toMobileLogin() {
         getPhoneNumber(e) {
            if (!this.isChecked) {
               return this.$util.showToast({
               return this.$common.showToast({
                  title: "请先同意协议"
               })
            }
            this.$util.redirectTo('/otherPages/member/mobileLogin/mobileLogin')
            if (e.detail.errMsg == 'getPhoneNumber:ok') {
               this.$db.set('queryPhoneNumber', 'getPhoneNumber:ok');
               uni.login({
                  provider: 'weixin',
                  timeout: 3000,
                  success: res => {
                     let obj = {
                        bindgetphonenumber: e.detail.code,
                        jsCode: res.code
                     }
                     this.$api.CreateUser(obj).then(result => {
                        if (result.code == 1) {
                           this.$db.set('userToken', result.data.accessToken);
                           this.getUserInfo()
                           this.$util.redirectTo(
                              '/pages/index/index', {},
                              'tabbar')
                        } else {
                           this.$util.showToast({
                              title: result.msg
                           });
                        }
                     }).catch((err) => {
                        console.log(err, 'uni.loginerr')
                     })
                  },
               })
            }
            console.log(e)
         },
         mobileAuthLogin(e) {
            console.log(e)
            if (!this.isChecked) {
               return this.$util.showToast({
               return this.$common.showToast({
                  title: "请先同意协议"
               })
            }
            // return
            if (e.detail.errMsg == 'getPhoneNumber:ok') {
               let authData = uni.getStorageSync('authInfo');
               console.log(authData)
               var data = {
                  code: e.detail.code,
                  uid: authData.id
                  // iv: e.detail.iv,
                  // encryptedData: e.detail.encryptedData
               };
               console.log(e)
               // if (Object.keys(authData).length) {
               //    Object.assign(data, authData);
               // }
               // if (authData.avatarUrl) data.headimg = authData.avatarUrl;
               // if (authData.nickName) data.nickname = authData.nickName;
               // if (uni.getStorageSync('source_member')) data.source_member = uni.getStorageSync('source_member');
               if (this.isSub) return;
               this.isSub = true;
               this.$api.sendRequest({
                  url: '/api.php/login/binding_mobile',
                  data,
                  success: res => {
                     if (res.code == 1) {
                        console.log(res)
                        if (res.data.wx_openid) {
                           this.$util.showToast({
                              title: "登录成功",
                              icon: "success"
                           })
                           uni.setStorage({
                              key: 'uid',
                              data: res.data.id,
                              success: () => {
                                 uni.removeStorageSync('wx_openid_set');
                                 uni.removeStorageSync('source_member');
                                 uni.removeStorageSync('authInfo');
                                 this.$api.sendRequest({
                                    url: "/api.php/user/is_perfect",
                                    data: {
                                       uid: res.data.id,
                                    },
                                    success: res => {
                                       if (res.code == 1) {
                                          console.log(res)
                                          uni.setStorageSync(
                                             'is_perfect_user', '1')
                                       } else {
                                          uni.setStorageSync(
                                             'is_perfect_user', res
                                             .code)
                                       }
                                    },
                                    fail: res => {
                                       this.$util.showToast({
                                          title: "接口错误"
                                       });
                                    }
                                 });
                                 // this.$store.dispatch('getCartNumber');
                                 setTimeout(() => {
                                    this.$util.redirectTo(
                                       '/pages/index/index', {},
                                       'tabbar')
                                 }, 1000)
                              }
                           });
                        } else {
                           this.$refs.bindMobile.close()
                           // uni.setStorageSync('wx_openid_set',1)
                           this.$refs.popup.open()
                        }
                        // this.$store.commit('setToken', res.data.token);
                        // this.$refs.bindMobile.close();
                        // if (res.data.is_register && this.$refs.registerReward.getReward()) {
                        //    this.$refs.registerReward.open();
                        // }
            uni.login({
               provider: 'weixin',
               timeout: 3000,
               success: res => {
                  this.$api.temLogin(res.code).then((result) => {
                     if (result.code == 1) {
                        this.$db.set('userToken', result.data.accessToken);
                        this.getUserInfo()
                        this.$util.redirectTo(
                           '/pages/index/index', {},
                           'tabbar')
                     } else {
                        this.isSub = false;
                        this.$util.showToast({
                           title: res.msg
                           title: result.msg ? result.msg : result.error
                        });
                     }
                  },
                  fail: res => {
                     this.isSub = false;
                     this.$util.showToast({
                        title: 'request:fail'
                     });
                  }
               });
            }
                  }).catch((err) => {
                     console.log('err', err);
                  })
               },
            })
         },
         getCode(userInfo, callback) {
            uni.login({
               provider: 'weixin',
               timeout: 3000,
               success: res => {
                  console.log(res)
                  console.log(res, 'getCode')
                  let data = {
                     code: res.code,
                     nickname: userInfo.nickName,
                     avatar: userInfo.avatarUrl,
                  }
                  if (uni.getStorageSync('source_member')) {
                     data.source_member = uni.getStorageSync('source_member')
                  }
                  if (res.code) {
                     this.$api.sendRequest({
                        url: '/api.php/login/wx_login',
                        data,
                        success: res => {
                           if (res.code >= 0) {
                              // if (res.data.openid) this.authInfo.weapp_openid = res.data.openid;
                              // if (res.data.unionid) this.authInfo.wx_unionid = res.data.unionid;
                              typeof callback == 'function' && callback(res);
                           } else {
                              this.$util.showToast({
                                 title: '小程序配置错误'
                              });
                           }
                        }
                     })
                  }
                  // if (uni.getStorageSync('source_member')) {
                  //    data.source_member = uni.getStorageSync('source_member')
                  // }
                  // if (res.code) {
                  //    this.$api.temLogin(data)
                  // }
               },
               fail: () => {
                  this.$util.showToast({
@@ -356,225 +165,15 @@
         },
         login(e) {
            if (!this.isChecked) {
               return this.$util.showToast({
               return this.$common.showToast({
                  title: "请先同意协议"
               })
            }
            // if (!this.isChecked || !this.isCheckedSan) {
            //    this.$util.showToast({
            //       title: "请勾选用户注册/登录协议和第三方合作清单"
            //    })
            //    return
            // }
            // #ifdef MP-WEIXIN
            if (this.canIUseGetUserProfile) {
               wx.getUserProfile({
                  desc: '获取用户个人信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
                  success: (res) => {
                     console.log(res)
                     if (res.errMsg == 'getUserProfile:ok') {
                        // this.authInfo.nickName = res.userInfo.nickName;
                        // this.authInfo.avatarUrl = res.userInfo.avatarUrl;
                        // uni.setStorageSync('authInfo', this.authInfo)
                        this.getCode(res.userInfo, data => {
                           console.log(data)
                           if (data.code == 1) {
                              uni.setStorageSync('authInfo', data.data)
                              if (!data.data.mobile) {
                                 this.$refs.bindMobile.open()
                              } else {
                                 if (data.data.wx_openid) {
                                    this.$util.showToast({
                                       title: "登录成功",
                                       icon: "success"
                                    })
                                    uni.setStorage({
                                       key: 'uid',
                                       data: data.data.id,
                                       success: () => {
                                          uni.removeStorageSync(
                                             'wx_openid_set');
                                          uni.removeStorageSync(
                                             'source_member');
                                          uni.removeStorageSync('authInfo');
                                          this.$api.sendRequest({
                                             url: "/api.php/user/is_perfect",
                                             data: {
                                                uid: data.data.id,
                                             },
                                             success: res => {
                                                if (res.code ==
                                                   1) {
                                                   console
                                                      .log(
                                                         res
                                                         )
                                                   uni.setStorageSync(
                                                      'is_perfect_user',
                                                      '1'
                                                      )
                                                } else {
                                                   uni.setStorageSync(
                                                      'is_perfect_user',
                                                      res
                                                      .code
                                                      )
                                                }
                                             },
                                             fail: res => {
                                                this.$util
                                                   .showToast({
                                                      title: "接口错误"
                                                   });
                                             }
                                          });
                                          // this.$store.dispatch('getCartNumber');
                                          setTimeout(() => {
                                             this.$util.redirectTo(
                                                '/pages/index/index', {},
                                                'tabbar')
                                          }, 1000)
                                       }
                                    });
                                 } else {
                                    // uni.setStorageSync('wx_openid_set',1)
                                    this.$refs.popup.open()
                                 }
                              }
                           }
                           return
                           // if (data) {
                           //    this.authLogin(data);
                           // } else {
                           //    this.$refs.auth.close();
                           //    this.toLogin();
                           // }
                        });
                     }
                  }
               })
            } else if (e.detail.errMsg == 'getUserInfo:ok') {
               this.getCode(data => {
                  if (data.code == 1) {
                     uni.setStorageSync('authInfo', data.data)
                     if (!data.data.mobile) {
                        this.$refs.bindMobile.open()
                     } else {
                        if (data.data.wx_openid) {
                           this.$util.showToast({
                              title: "登录成功",
                              icon: "success"
                           })
                           uni.setStorage({
                              key: 'uid',
                              data: data.data.id,
                              success: () => {
                                 uni.removeStorageSync('wx_openid_set');
                                 uni.removeStorageSync('source_member');
                                 uni.removeStorageSync('authInfo');
                                 this.$api.sendRequest({
                                    url: "/api.php/user/is_perfect",
                                    data: {
                                       uid: data.data.id,
                                    },
                                    success: res => {
                                       if (res.code == 1) {
                                          console.log(res)
                                          uni.setStorageSync(
                                             'is_perfect_user', '1')
                                       } else {
                                          uni.setStorageSync(
                                             'is_perfect_user', res.code
                                             )
                                       }
                                    },
                                    fail: res => {
                                       this.$util.showToast({
                                          title: "接口错误"
                                       });
                                    }
                                 });
                                 // this.$store.dispatch('getCartNumber');
                                 setTimeout(() => {
                                    this.$util.redirectTo(
                                       '/pages/index/index', {},
                                       'tabbar')
                                 }, 1000)
                              }
                           });
                        } else {
                           // uni.setStorageSync('wx_openid_set',1)
                           this.$refs.popup.open()
                        }
                     }
                  }
               });
            }
            // #endif
            // if (!uni.getStorageSync('wx_openid_set')) {
            //    // #ifdef MP-QQ || MP-BAIDU
            //    if (e.detail.errMsg == 'getUserInfo:ok') {
            //       this.getCode(data => {
            //          if (data) {
            //             this.authLogin(data);
            //          } else {
            //             this.$refs.auth.close();
            //             this.toLogin();
            //          }
            //       });
            //    }
            //    // #endif
            //    // #ifdef MP-WEIXIN
            //    if (this.canIUseGetUserProfile) {
            //       wx.getUserProfile({
            //          desc: '获取用户个人信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
            //          success: (res) => {
            //             if (res.errMsg == 'getUserProfile:ok') {
            //                // this.authInfo.nickName = res.userInfo.nickName;
            //                // this.authInfo.avatarUrl = res.userInfo.avatarUrl;
            //                // uni.setStorageSync('authInfo', this.authInfo)
            //                this.getCode(data => {
            //                   console.log(data)
            //                   return
            //                   if (data) {
            //                      this.authLogin(data);
            //                   } else {
            //                      this.$refs.auth.close();
            //                      this.toLogin();
            //                   }
            //                });
            //             }
            //          }
            //       })
            //    } else if (e.detail.errMsg == 'getUserInfo:ok') {
            //       this.getCode(data => {
            //          if (data) {
            //             this.authLogin(data);
            //          } else {
            //             this.$refs.auth.close();
            //             this.toLogin();
            //          }
            //       });
            //    }
            //    // #endif
            //    // #ifndef MP
            //    this.$refs.auth.close();
            //    this.toLogin();
            //    // #endif
            // } else {
            //    this.$refs.auth.close();
            //    this.toLogin();
            // }
            uni.login({
               provider: 'weixin',
               timeout: 3000,
               success: res => {},
            })
         },
      }
   }
@@ -582,7 +181,7 @@
<style lang="scss" scoped>
   .wrap {
      background: linear-gradient(to bottom, #B4DEFF, #ffffff);
      background: linear-gradient(to bottom, #fbec99, #ffffff);
      display: flex;
      align-items: center;
      flex-direction: column;
@@ -613,7 +212,7 @@
            line-height: 60rpx;
            .color-base-text {
               color: #35A6FF;
               color: #fece01;
            }
         }
@@ -624,6 +223,7 @@
            line-height: 70rpx;
            background-color: #35A6FF;
            border-radius: 70rpx;
            padding: 0;
         }
         .no_login {
@@ -741,4 +341,4 @@
      color: #ffffff;
      background-color: #35A6FF;
   }
</style>
</style>