<template>
  <view>
    <u-toast ref="uToast" />
  </view>
</template>

<script>
import getUrlParams from '@/utils/getUrlParams.js';
export default {
  data() {
    return {
      backUrl: '',
      code: '',
      loginType: 2
    };
  },
  onLoad(page) {
    uni.showLoading({
      title: '登录中...',
      mask: true
    });
    let local = window.location.href;
    let locationLocaturl = window.location.search;
    // 微信返回的回调地址
    let backUrl = getUrlParams(local, 'backUrl');
    if (backUrl) {
      this.backUrl = decodeURIComponent(backUrl);
    }
    console.log('backUrl', decodeURIComponent(backUrl));
    let loginType = getUrlParams(local, 'loginType');
    if (loginType) {
      this.loginType = loginType;
    }
    console.log('loginType', loginType);
    let code = getUrlParams(locationLocaturl, 'code');
    console.log('code', code);
    if (code) {
      this.code = code;
      // 判断重复回调问题
      let wechatLoginKey = localStorage.getItem('wechatLoginKey');
      if (wechatLoginKey) {
        wechatLoginKey = JSON.parse(wechatLoginKey);
        if (code === wechatLoginKey.code) {
          this.getUserInfo(wechatLoginKey.openId);
        } else {
          this.handleGetWXInfo(this.code);
        }
      } else {
        this.handleGetWXInfo(this.code);
      }
    } else {
      location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?
					appid=${this.config.wxAppid}&
					redirect_uri=${encodeURIComponent(local)}&
					response_type=code&
					scope=snsapi_userinfo&
					state=STATE#wechat_redirect`;
    }
  },
  methods: {
    // 通过code获取 openId等用户信息
    handleGetWXInfo(code) {
      this.$u.api
        .getWXInfo(code)
        .then((res) => {
          if (res.code === 200) {
            this.$u.vuex('vuex_wxinfo', res.data);
            localStorage.setItem(
              'wechatLoginKey',
              JSON.stringify({
                code,
                openId: res.data.openId
              })
            );
            this.getUserInfo(res.data.openId);
          } else {
            uni.hideLoading();
          }
        })
        .catch((err) => {
          uni.hideLoading();
        });
    },
    /**
     * 通过openId获取token
     * @param {Object} openId
     */
    getToken(openId) {
      this.$u.api.codeV2Api.sendSmsCodeV2api({ openId }).then((res) => {
        if (res.code === 200) {
          this.$u.vuex('vuex_token', res.data.accessToken);
          this.$u.vuex('vuex_hasLogin', true);
          if (res.data.needVerify) {
            localStorage.setItem('backUrl', this.backUrl);
            this.$u.route({
              url: 'pages/center/phoneLogin/phoneLogin',
              type: 'reLaunch'
            });
          } else {
            this.$u.vuex('vuex_user', res.data);
            if (this.backUrl.indexOf('wechatLogin') > -1) {
              location.href = '/';
            } else {
              location.href = this.backUrl;
            }
          }
          uni.hideLoading();
        } else {
          this.$refs.uToast.show({
            title: res.msg || '获取用户信息失败!',
            type: 'error'
          });
          uni.hideLoading();
        }
      });
    },
    /**
     * @description:
     * @param {*} openId
     * @return {*}
     */
    async getUserInfo(openId) {
      try {
        const queryParams = {
          loginType: this.loginType,
          openid: openId,
          nickName: this?.vuex_wxinfo?.nickname,
          avatar: this?.vuex_wxinfo?.headImgUrl
        };
        const userInfo = await this.$u.api.userLoginApi.openidLoginApi({ ...queryParams });
        const { accessToken, needVerify } = userInfo.data;
        this.$u.vuex('vuex_token', accessToken);
        this.$u.vuex('vuex_hasLogin', true);
        if (needVerify) {
          localStorage.setItem('backUrl', this.backUrl);
          this.$u.route({
            url: 'pages/center/phoneLogin/phoneLogin',
            type: 'reLaunch'
          });
        } else {
          this.$u.vuex('vuex_user', userInfo.data);
          if (this.backUrl.indexOf('wechatLogin') > -1) {
            location.href = '/';
          } else {
            location.href = this.backUrl;
          }
        }
        uni.hideLoading();
      } catch (error) {
        this.$refs.uToast.show({
          title: '获取用户信息失败!',
          type: 'error'
        });
        uni.hideLoading();
      }
    }
  }
};
</script>
