<template>
<div class="wrapper">
<img class="wrapper__img" src="http://www.dell-lee.com/imgs/vue3/user.png" />
<div class="wrapper__input">
<input class="wrapper__input__content" placeholder="请输入用户名" v-model="username" />
</div>
<div class="wrapper__input">
<input class="wrapper__input__content" placeholder="请输入密码" v-model="password" type="password"/>
</div>
<div class="wrapper__login-button" @click="handleLogin">登录</div>
<div class="wrapper__login-link" @click="handleRegister">立即注册</div>
<Toast v-if="show" :message="showMessage" />
</div>
</template>
<script>
import { useRouter } from 'vue-router';
import { reactive, toRefs } from '@vue/reactivity';
import Toast, { useToastEffect } from '../../components/Toast'
import { post } from '../../utils/requests.js'
// 调用路由方法
// 处理登录逻辑
const useLoginEffect = (showToast) => {
const router = useRouter();
const data = reactive({
username: '',
password: ''
});
const handleLogin = async () => {
try {
const result = await post('/api/user/login', {
username: data.username,
password: data.password
})
const { username, password } = data
// 用data结构出来的username类型为字符串
if ( username == "" || password == "") {
showToast('用户名或密码不能为空')
return
} else {
if (result?.errno === 0) {
localStorage.isLogin = true;
router.push({ name: 'Home' })
// 路由跳转到name指定的路由
} else {
showToast('登陆失败')
}
}
} catch (e) {
showToast('请求失败')
}
}
const { username, password } = toRefs(data)
return { username, password, handleLogin }
}
// 处理注册跳转
const useRegisterEffect = () => {
const router = useRouter()
const handleRegister = () => {
router.push({ name: 'Register' })
}
return { handleRegister }
}
export default {
components: { Toast },
name: 'Login',
// setup写主要流程
setup() {
const { show, showToast, showMessage } = useToastEffect();
const { username, password, handleLogin } = useLoginEffect(showToast)
const { handleRegister } = useRegisterEffect()
return {
username, password, show, showMessage,
handleLogin, handleRegister
}
}
}
</script>
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星