import { useEffect, useState } from "react" import { WX_APPID } from "@/common/constant" import useUserInfo from "./useUserInfo" import Taro, { useRouter } from "@tarojs/taro" import { LoginApi } from "@/api/login" import { GetWxUserInfoApi, GetAdminUserInfoApi } from "@/api/user" import qs from 'qs'; export default () => { const {setToken, setSessionKey, setUserInfo, setAdminUserInfo, userInfo} = useUserInfo() useEffect(() => { console.log('userInfo::',userInfo.token) }, [userInfo]) const router = useRouter() //登录请求 const {fetchData} = LoginApi() //微信登录 const wxLogin = () => { return new Promise((reslove, reject) => { Taro.login({ success: async (res) => { if (res.code) { const {data, success, msg} = await fetchData({js_code: res.code}) if(success) { console.log('token::',data.token) setToken(data.token) setSessionKey(data.session_key) reslove(data) let params = router.params delete params.$taroTimestamp console.log('params::',params) if(router.path === '/pages/index/index' || router.path === '/pages/user/index') { Taro.reLaunch({ url: router.path +'?' + qs.stringify(params) }) } else { Taro.redirectTo({ url: router.path +'?' + qs.stringify(params) }) } getAdminUserInfo() //todo 删除本地授权用户信息,获取最新授权信息 } else { Taro.showToast({ title:'登录失败', icon:"none" }) reject(msg) } } else { console.log('登录失败!' + res.errMsg) reject(res.errMsg) } }, fail: function(e) { console.log('登录失败!::',e) reject(e) } }) }) } //获取用户信息 const {fetchData: useFetchData} = GetAdminUserInfoApi() const getAdminUserInfo = async () => { let res = await useFetchData() setAdminUserInfo(res.data) } //登录加checkLogin检查 const checkLogin = () => { return new Promise( async (reslove) => { if(!userInfo.token) { await wxLogin() reslove(true) } else { Taro.checkSession({ success: async () => { reslove(true) }, fail: async () => { await wxLogin() reslove(true) } }) } }) } //获取用户头像等信息数据 const {fetchData: fetchDataUserInfo} = GetWxUserInfoApi() const getSelfUserInfo = async () => { return new Promise((reslove, reject) => { if(!userInfo.userInfo) { Taro.getUserProfile({ desc: '用于完善会员资料', success: async (res) => { if(!userInfo.session_key) { await wxLogin() } const {data} = await fetchDataUserInfo({ session_key: userInfo.session_key, raw_data: res.rawData, signature: res.signature, encrypted_data: res.encryptedData, iv: res.iv }) setUserInfo({...data}) reslove(data) }, fail:(e) => { reject(e) } }) } else { reslove(true) } }) } return { checkLogin, wxLogin, getSelfUserInfo } }