157 lines
5.2 KiB
TypeScript
157 lines
5.2 KiB
TypeScript
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,
|
||
}
|
||
}
|