litian
2024-03-21 05707c8c6adb1042597c52091ad25ed64d15bb55
packagePersonal/pages/userSetting/index.js
@@ -1,18 +1,33 @@
// packagePersonal/pages/userSetting/index.js
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {},
    defaultAvatarUrl: 'https://cdn-we-retail.ym.tencent.com/miniapp/usercenter/icon-user-center-avatar@2x.png',
    userInfoBox: false,
    editType: '',
    userInfoForm: {
      phone: '',
      email: '',
      captcha: '',
      code: '',
    },
    phoneError: false,
    emailError: false,
    imgCode: '',
    countDown: 0,
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  onLoad() {
    if (wx.getStorageSync(app.config.tokenKey)) {
      this.getUserInfo()
    }
  },
  /**
@@ -28,21 +43,282 @@
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  // 获取登录用户身份
  getUserInfo() {
    app.MG.identity.getCurrentAppUser().then(res => {
      // 用户信息优先级:教师认证 > 微信 > 学生(注册时默认)
      if (res) {
        let defaultUser = {};
        let teacherRole = res.roleLinks.find((item) => item.role.refCode == 'teacher')
        let teacherInfos = res.infoList.find((item) => item.type == 'teacherInfo')
        let secretData = res.secretList.find(i => i.type == 'LoginNameAndPassword')
        let WeChatInfo = res.infoList.find((item) => item.type === "WeChat");
        let phoneInfo = res.secretList.find((item) => item.type == 'MobilePhone')
        let emailInfo = res.secretList.find((item) => item.type == 'EMail')
        if (teacherRole && teacherInfos) {
          defaultUser = {
            ...teacherInfos,
            fullName: teacherInfos.fullName,
            icon: teacherInfos.icon,
            userId: res.userId,
            role: 'Teacher',
            roleId: teacherRole.role.id,
            phoneNumber: phoneInfo?.credential,
            Email: emailInfo ? emailInfo.credential : JSON.parse(teacherInfos.data).email
          }
        } else if (WeChatInfo) {
          defaultUser = {
            ...WeChatInfo,
            fullName: WeChatInfo.name,
            icon: WeChatInfo.icon,
            userId: res.userId,
            phoneNumber: phoneInfo?.credential,
            Email: emailInfo?.credential
          }
        } else if (secretData) {
          defaultUser = {
            fullName: secretData.credential,
            icon: "",
            userId: res.userId,
            phoneNumber: phoneInfo?.credential,
            Email: emailInfo?.credential
          }
        }
        this.setData({
          userInfo: defaultUser
        })
      }
    });
  },
  //修改用户类型
  editUserInfo(e) {
    console.log(e)
    let { info } = e.currentTarget.dataset
    if (!this.data.userInfoBox) {
      this.setData({
        userInfoBox: true,
        editType: info,
        "userInfoForm.captcha": "",
        "userInfoForm.code": ""
      });
    }
    this.getImgCapcha()
  },
  onVisibleChange(e) {
    this.setData({
      userInfoBox: e.detail.visible,
      countDown: 0,
    });
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  //输入手机号
  onPhoneInput(e) {
    console.log(e)
    const { phoneError } = this.data;
    const isPhoneNumber = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(e.detail.value);
    if (phoneError === isPhoneNumber) {
      this.setData({
        phoneError: !isPhoneNumber,
        "userInfoForm.phone": e.detail.value,
      });
    }
  },
  onEmailInput(e) {
    const { emailError } = this.data;
    const isPhoneNumber = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(e.detail.value);
    if (emailError === isPhoneNumber) {
      this.setData({
        emailError: !isPhoneNumber,
        "userInfoForm.email": e.detail.value,
      });
    }
  },
  getImgCapcha() {
    app.MG.identity.getImgCode().then((res) => {
      this.setData({
        imgCode: 'data:image/png;base64,' + res,
      });
    })
  },
  //图形验证码
  onCaptchaInput(e) {
    this.setData({
      "userInfoForm.captcha": e.detail.value,
    });
  },
  //短信邮箱验证码
  onCodeInput(e) {
    this.setData({
      "userInfoForm.code": e.detail.value,
    });
  },
  getPhoneCode() {
    if (this.data.userInfoForm.phone && this.data.userInfoForm.captcha) {
      app.MG.identity
        .getPhoneCode({
          phoneNumber: this.data.userInfoForm.phone,
          imageCaptcha: this.data.userInfoForm.captcha,
          appRefCode: app.config.appRefCode
        })
        .then((res) => {
          if (res == '验证码发送成功') {
            wx.showToast({
              title: res,
              icon: 'none',
              duration: 1000
            })
            // 开启短信验证倒计时
            this.getSecond(60)
          } else {
            wx.showToast({
              title: res,
              icon: 'none',
              duration: 1000
            })
            this.getImgCapcha()
          }
        })
    } else {
      wx.showToast({
        title: '请填写手机号或图形验证码',
        icon: 'none',
        duration: 1000
      })
    }
  },
  getSecond(time) {
    let timer = null
    if (!timer) {
      let countDown = time;
      this.setData({
        countDown: time,
      });
      timer = setInterval(() => {
        countDown--
        this.setData({
          countDown: countDown,
        });
        if (this.data.countDow == 0) {
          clearInterval(timer)
          timer = null
        }
      }, 1000)
    }
  },
  getEmailCode() {
    console.log(this.data.userInfoForm.email)
    if (this.data.userInfoForm.email && this.data.userInfoForm.captcha) {
      app.MG.identity
        .getEmailCode({
          sendEmail: this.data.userInfoForm.email,
          captcha: this.data.userInfoForm.captcha,
          appRefCode: app.config.appRefCode
        })
        .then((res) => {
          if (res == true) {
            wx.showToast({
              title: '验证码已发送',
              icon: 'none',
              duration: 1000
            })
            // 开启短信验证倒计时
            this.getSecond(60)
          } else {
            wx.showToast({
              title: '邮箱验证码发送失败',
              icon: 'none',
              duration: 1000
            })
            this.getImgCapcha()
          }
        })
    } else {
      wx.showToast({
        title: '请填写邮箱或图形验证码',
        icon: 'none',
        duration: 1000
      })
    }
  },
  confirmInfo() {
    if (this.data.changeType == 'phone') {
      let query = {
        phoneNumber: this.data.userInfoForm.phone,
        phoneCaptcha: this.data.userInfoForm.code
      }
      app.MG.identity.userSetPhoneNumber(query).then((res) => {
        if (res == '验证码过期或错误') {
          wx.showToast({
            title: res + ',请稍后重试',
            icon: 'none',
            duration: 1000
          })
        } else if (res == '此手机号码已被其它账号绑定') {
          wx.showToast({
            title: res + ',请更换其他手机号。',
            icon: 'none',
            duration: 1000
          })
        } else {
          wx.showToast({
            title: res,
            icon: 'none',
            duration: 1000
          })
          this.setData({
            userInfoBox: false,
          });
          this.getUserInfo()
        }
      })
    } else if (this.data.editType == 'email') {
      let query = {
        eMail: this.data.userInfoForm.email,
        captcha: this.data.userInfoForm.code
      }
      app.MG.identity.bindingEmail(query).then((res) => {
        if (res == '验证码过期') {
          wx.showToast({
            title: res + ',请稍后重试。',
            icon: 'none',
            duration: 1000
          })
        } else if (res == '此邮箱已被其它账号绑定') {
          wx.showToast({
            title: res + ',请更换其他邮箱。',
            icon: 'none',
            duration: 1000
          })
        } else if (res == '验证码无效') {
          wx.showToast({
            title: res,
            icon: 'none',
            duration: 1000
          })
        } else {
          wx.showToast({
            title: res,
            icon: 'none',
            duration: 1000
          })
          this.setData({
            userInfoBox: false,
          });
          this.getUserInfo()
        }
      })
    }
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */