login.js 5.75 KB
import {
  useUserStore
} from '../store/modules/user'
import request from './request'

function pcLogin(data) {
  return request({
    url: '/login',
    method: 'post',
    params: data
  }).then((res) => {
    uni.setStorageSync('token', 'Bearer ' + res.data.token)
    pcLoginOpenId()
  }).then(getInfo)
}

function h5Login(userName) {
  return request({
    url: `/h5Login`,
    method: 'post',
    params: {
      username: userName
    }
  }).then((res) => {
    uni.setStorageSync('token', 'Bearer ' + res.data.token)
  }).then(getInfo)
}

function h5LoginAuto() {
  const userName = uni.getStorageSync('userName')
  if (userName) {
    return h5Login(userName)
  } else {
    uni.redirectTo({
      url: '/login/login'
    })
  }
}

function logout() {
  return request({
    url: '/logout',
    method: 'post'
  }).then(() => {
    const userStore = useUserStore()
    const app = getApp()
    
    uni.removeStorageSync('token')
    uni.removeStorageSync('userName')
    uni.removeStorageSync('webUserName')
    uni.removeStorageSync('openId')
    
    userStore.setUser(null)
    app.globalData.isLogin = false
  })
}

function getCodeImg() {
  return request({
    url: '/captchaImage',
    method: 'get'
  })
}
function getSmsCodeImg(data) {
  return request({
    url: '/captchaSmsWithCaptchaImage',
    // url: '/captchaSmsWithCaptchaImageForMiniApp',
    method: 'post',
    params: data
  })
}
// 代退图形认证的获取手机验证码
function getSmsCode(data) {
  return request({
    // url: '/captchaSmsWithCaptchaImage',
    url: '/captchaSmsWithCaptchaImageForMiniApp',
    method: 'post',
    params: data
  })
}

function loginByPhone(phonenumber, code) {
  const data = {
    phonenumber,
    code
  }
  return request({
    url: '/userLoginByPhone',
    method: 'post',
    params: data
  }).then((res) => {
    uni.showToast({
      title: res.msg,
      icon: 'none'
    })
    uni.setStorageSync('token', 'Bearer ' + res.data.token)
  }).then(getInfo)
}

// 获取用户详细信息
function getInfo() {
  return request({
    url: '/getInfo',
    method: 'get'
  }).then(res => {
    const userStore = useUserStore()
    const app = getApp()
    const user = res.data.user

    uni.setStorageSync('userName', user.userName)
    uni.removeStorageSync('webUserName')
    userStore.setUser(user)

    app.globalData.userInfo = user
    app.globalData.deptType = user.dept.deptType
    app.globalData.genFlag = user.dept.genFlag
    app.globalData.changePassFlag = user.changePassFlag
    // deptType: 1=中跆协, 2/3=省, 6=道馆, 其他=市区
    const deptType = user.dept.deptType
    if (deptType == '1' || deptType == 1) {
      app.globalData.userType = '1'
    } else if (deptType == '2' || deptType == '3' || deptType == 2 || deptType == 3) {
      app.globalData.userType = '2'
    } else if (deptType == '6' || deptType == 6) {
      app.globalData.userType = '4'
    } else {
      app.globalData.userType = '3'
    }
  })
}

function getWebInfo() {
  return request({
    url: '/person/info/getInfo',
    method: 'get'
  }).then(res => {
    const userStore = useUserStore()
    const user = res.data.user
    
    delete res.data.user
    const perInfo = res.data
    
    uni.setStorageSync('webUserName', user.userName)
    uni.removeStorageSync('userName')
    userStore.setUser(user)
    userStore.setPerInfo(perInfo)
  })
}

// 团队会员用户注册接口
function groupMemberRegister(data) {
  return request({
    url: '/groupMemberRegister',
    method: 'post',
    params: data
  })
}

// 获取道馆信息
function getMyOwnMemberInfo() {
  return request({
    url: '/member/info/getMyOwnMemberInfo',
    method: 'get'
  }).then(res => {
    const app = getApp()
    app.globalData.authenticationStatus = res.data.authenticationStatus
    app.globalData.memberInfo = res.data.memberInfo
    app.globalData.isExam = res.data?.memberInfo?.isPoints
  })
}

function pcLoginOpenId() {
  uni.login({
    provider: 'weixin',
    success: (res) => {
      if (res.code) {
        pcBindOpenId(res.code)
      }
    },
    fail: (res) => {
      uni.showToast({
        title: '获取用户信息失败',
        icon: 'none',
        duration: 2000
      })
    }
  })
}

function wxLogin() {
  const openId = uni.getStorageSync('openId')
  if (openId) {
    return pcLoginByOpenId(openId)
  } else {
    return new Promise((resolve, reject) => {
      uni.login({
        provider: 'weixin',
        success: (res) => {
          resolve(res)
        },
        fail: (res) => {
          uni.showToast({
            title: '获取用户信息失败',
            icon: 'none',
            duration: 2000
          })
          reject(res)
        }
      })
    }).then(res => {
      return pcLoginByCode(res.code)
    })
  }
}

function pcLoginByCode(code) {
  return request({
    url: `/loginByJsCode?jsCode=${code}`,
    method: "POST"
  }).then((res) => {
    uni.setStorageSync('token', 'Bearer ' + res.data.token);
    uni.setStorageSync('openId', res.data.openId);
  })
}

function pcLoginByOpenId(openId) {
  return request({
    url: `/loginByOpenId?openId=${openId}`,
    method: "POST"
  }).then((res) => {
    uni.setStorageSync('token', 'Bearer ' + res.data.token);
  })
}

function pcBindOpenId(code) {
  return request({
    url: `/bindOpenId?jsCode=${code}`,
    method: "POST",
  }).then((res) => {
    uni.setStorageSync('openId', res.data.openId);
  })
}

export {
  pcLogin,
  getCodeImg,
  getSmsCode,
  getSmsCodeImg,
  h5Login,
  h5LoginAuto,
  loginByPhone,
  groupMemberRegister,
  getMyOwnMemberInfo,
  logout,
  getInfo,
  getWebInfo,
  wxLogin
}