import {BASE_URL, WX_APPID } from "@/common/constant" import Taro, { useRouter } from "@tarojs/taro" import { useRef, useState } from "react" import qs from 'qs' import useUserInfo from "./useUserInfo" //开这个hook 主要是为了让useHttp 能够调用 type Param = {success: true|false, data: any, msg: string, code: null|number, loading: false|true} export default () => { let initData = { success: false, data: null, msg: '', code: null, loading: false } let loginData = useRef(initData) const {setToken, setSessionKey} = useUserInfo() const router = useRouter() //微信登录请求v2 const fetchData = async (login_code) => { const q = { url: BASE_URL + '/v1/mall/login', header: { "Platform": 6, "Appid": WX_APPID, }, method: 'post', data:{js_code: login_code} } try{ const result = await Taro.request(q as any) const {code, data, msg} = result.data if(result.statusCode === 200) { loginData.current.success = (code === 0 ? true : false) loginData.current.code = code loginData.current.msg = msg loginData.current.data = data } else { Taro.showToast({ title: `错误:登录失败`, icon: 'none' }) console.log('登录错误:', result.errMsg) } }catch(e) { Taro.showToast({ title: `错误:登录失败`, icon: 'none' }) console.log('登录错误:', e.errMsg) } return loginData.current } //微信登录 const login = () => { return new Promise((reslove, reject) => { Taro.login({ success: async (res) => { if (res.code) { const {data, success, msg} = await fetchData(res.code) if(success) { setToken(data.token) setSessionKey(data.session_key) reslove(data) let params = router.params delete params.$taroTimestamp 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) }) } } else { Taro.showToast({ title:'登录失败', icon:"none" }) reject(msg) } } else { console.log('登录失败!' + res.errMsg) reject(res.errMsg) } }, fail: function(e) { console.log('登录失败!::',e) reject(e) } }) }) } return { login } }