107 lines
4.0 KiB
TypeScript
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
|
|
}
|
|
|
|
}
|
|
|