TestEShopDist/src/use/useLogin.ts
2023-03-18 14:15:44 +08:00

157 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Taro, { useDidShow } from '@tarojs/taro'
import useUserInfo from './useUserInfo'
import useLoginRequest from './useLoginRequest'
import { BindingCompanyApi, GetAdminUserInfoApi, GetPhoneNumberApi, GetWxUserInfoApi } from '@/api/user'
import type { InvitationWay } from '@/common/enum'
import { SHARE_SCENE } from '@/common/enum'
import { GetShortCodeApi, PrepareCreateInvitationInfoApi } from '@/api/share'
import { IMG_CND_Prefix } from '@/common/constant'
import { formatImgUrl } from '@/common/format'
import { bindInvitationUser } from '@/common/shortCode'
import { isEmptyObject } from '@/common/common'
export default () => {
const { setUserInfo, setAdminUserInfo, setSortCode, userInfo } = useUserInfo()
// 获取用户信息
const { fetchData: FetchData } = GetAdminUserInfoApi()
// 获取分享码(右上角分享码)
const { SharePage } = SHARE_SCENE
const { fetchData: fetchDataShortCode } = GetShortCodeApi()
const getShortCode = async(user_id) => {
const { data: resPage } = await fetchDataShortCode({ share_user_id: user_id, type: SharePage.value })
setSortCode({
...userInfo.sort_code,
shareShortPage: { title: '打造面料爆品 专注客户服务', code: resPage.md5_key, img: `${IMG_CND_Prefix}/mall/share_img_01.png` },
})
}
const getAdminUserInfo = async() => {
const res = await FetchData()
res.data.avatar_url = res.data.avatar_url ? res.data.avatar_url : formatImgUrl('/user/avatar.png')
setAdminUserInfo({ ...res.data })
getShortCode(res.data.user_id)
}
// 获取用户头像等信息数据
const { fetchData: fetchDataUserInfo } = GetWxUserInfoApi()
// 获取手机号码
const { fetchData: fetchDataUserPhone } = GetPhoneNumberApi()
const { fetchData: fetchBindingCompany } = BindingCompanyApi()
const getPhoneNumber = (code) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async(resolve, reject) => {
if (userInfo.adminUserInfo?.is_authorize_phone) {
resolve(true)
return true
}
const res = await fetchDataUserPhone({ code })
if (res.success) {
setUserInfo({ ...userInfo.userInfo, phone: res.data.phone_number })
await fetchBindingCompany()
await getAdminUserInfo()
handleBindInvitationUser()
resolve(res.data)
}
else {
reject(res.msg)
}
})
}
// 登录请求
const { login } = useLoginRequest()
const wxLogin = async() => {
try {
await login()
await getAdminUserInfo()
}
catch (e) {
console.log('登录失败::', e)
}
}
// 登录加checkLogin检查
const checkLogin = () => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async(resolve) => {
if (!userInfo.token) {
await wxLogin()
resolve(true)
}
else {
// 这个东西不要打开checkSession有调用频率问题
// Taro.checkSession({
// success: async () => {
// resolve(true)
// if(!userInfo.adminUserInfo) getAdminUserInfo()
// },
// fail: async () => {
// await wxLogin()
// resolve(true)
// }
// })
}
})
}
useDidShow(() => {
checkLogin()
})
const getSelfUserInfo = async() => {
return new Promise((resolve, reject) => {
if (userInfo.adminUserInfo?.is_authorize_name) {
resolve(true)
return true
}
Taro.getUserProfile({
desc: '用于完善会员资料',
success: async(res) => {
if (!userInfo.session_key) {
await wxLogin()
}
const user_res = await fetchDataUserInfo({
session_key: userInfo.session_key,
raw_data: res.rawData,
signature: res.signature,
encrypted_data: res.encryptedData,
iv: res.iv,
})
if (user_res.success) {
setUserInfo({ ...user_res.data })
getAdminUserInfo()
resolve(true)
}
else {
reject(user_res.msg)
}
},
fail: (e) => {
console.log('授权失败::', e)
reject(e.errMsg)
},
})
})
}
const handleBindInvitationUser = () => {
// 从缓存拿出
const newPageInfo = JSON.parse(Taro.getStorageSync('invitationInfo') || '{}')
console.log('handleBindInvitationUser router', newPageInfo)
// else if (page && page.options?.user_id && invitationWay.includes(Number(page.options?.invitation_way) as InvitationWay)) {
if (!isEmptyObject(newPageInfo)) {
const { user_id, invitation_way } = newPageInfo!
// 获取最新的用户信息
// 校验是否被绑定过了 自己不能邀请自己
if (!userInfo.adminUserInfo.is_passive_invite && newPageInfo?.user_id !== userInfo.adminUserInfo.user_id) {
bindInvitationUser(Number(invitation_way) as InvitationWay, Number(user_id))
}
}
}
return {
checkLogin,
wxLogin,
getSelfUserInfo,
getPhoneNumber,
userInfo,
getAdminUserInfo,
}
}