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, } }