医学道
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
video/src/pages/login/login.tsx

110 lines
3.3 KiB

import {FC, useEffect, useState} from "react";
import {Profile} from "@/store";
import {Image, Text, View} from "@tarojs/components";
import Taro from "@tarojs/taro";
import styles from './login.module.scss'
import Icon from "@/components/icon";
import {userApi} from "@/api";
import {loginApi, LoginParams} from "@/api/login";
import MyButton from "@/components/button/MyButton";
const Login: FC = () => {
// const {statusBarHeight = 0} = Taro.getSystemInfoSync()
// const bbc = getMenuButtonBoundingClientRect();
// const navHeight = bbc.bottom + (bbc.top - statusBarHeight) - statusBarHeight
const [isLoading, setLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const {setUser, setToken, setCompany} = Profile.useContainer()
const [h5params, setH5Params] = useState<LoginParams | null>(null)
useEffect(() => {
if (process.env.TARO_ENV === 'h5') {
setLoading(true);
loginApi.getParams().then((res) => {
setH5Params(res);
setError(null);
}).catch(e => {
setError(e?.errMsg ?? '系统内部错误')
}).finally(() => {
setLoading(false);
})
}
}, [])
function login() {
if (isLoading) return;
if (h5params == null && process.env.TARO_ENV === 'h5') {
setError('页面参数错误,请刷新页面!')
return;
}
setLoading(true)
if (process.env.TARO_ENV === 'h5') {
location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
"appid=" + h5params!.appid +
"&redirect_uri=" + encodeURIComponent(h5params!.route) +
"&response_type=code" +
"&scope=snsapi_userinfo" +
"#wechat_redirect";
} else {
Taro.login({
success: async (res) => {
try {
const {catch_key, user, token, company} = await userApi.login(res.code)
if (token) {
setUser(user)
setToken(token)
setCompany(company)
setLoading(false)
Taro.switchTab({url: '/pages/home/home'})
} else {
Taro.setStorageSync('openid', catch_key)
Taro.reLaunch({url: '/pages/check/check'})
}
} catch (e) {
}
setLoading(false)
},
fail: (res) => {
setError(res.errMsg)
setLoading(false)
},
})
}
}
async function TESTLOGIN() {
const res = await loginApi.testLogin()
Taro.setStorageSync('profile', JSON.stringify(res))
Taro.reLaunch({url: '/pages/home/home'})
}
return (
<View className={styles.container}>
<View className={styles.brand}>
<Image mode={'scaleToFill'} src="https://playedu.yaojiankang.top/favicon.ico"/>
<View className='mt-3'></View>
</View>
<View className={styles.loginTips}>
<Text>使</Text>
</View>
<MyButton onClick={login} loading={isLoading}></MyButton>
{error ? <View className={styles.errorTips}>
<View style={{flex: 1}}>{error}</View>
<Icon name={'close'} onClick={() => setError(null)}/>
</View> : null}
{/*{process.env.TARO_APP_LGOIN === 'true' && <MyButton onClick={TESTLOGIN}>线下登录</MyButton>}*/}
</View>
)
}
export default Login