2022-05-30 20:32:47 +08:00

107 lines
4.0 KiB
TypeScript

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<Param>(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
}
}