vue3前端代码
<template> <div class="login-back"> <div class=" login-container" > <h2>人口信息管理系统</h2> <el-form ref="loginFormRef" :model="loginForm" :rules="loginRules" label-position="top"> <el-form-item prop="username" label="用户名"> <el-input v-model="loginForm.username" placeholder="请输入用户名"></el-input> </el-form-item> <el-form-item prop="password" label="密码"> <el-input type="password" v-model="loginForm.password" placeholder="请输入密码"></el-input> </el-form-item> <el-radio-group v-model="userType" > <el-radio label="admin">管理员登录</el-radio> <el-radio label="user">用户登录</el-radio> </el-radio-group> <el-form-item> <el-button type="primary" @click="login">登录</el-button> <el-button @click="register">注册</el-button> </el-form-item> </el-form> </div> </div> </template> <script setup> import {reactive, ref} from 'vue'; import { useRouter } from 'vue-router'; import axios from "axios"; import {ElMessage} from "element-plus"; const router = useRouter(); const slideAnimation = ref('false'); const userType = ref('admin'); const imageU = '' const loginForm = reactive({ username: '', password: '', }); const loginRules = ref({ //若输入框为空,提示 username: [{ required: true, message: '请输入用户名', trigger: 'blur' }], password: [{ required: true, message: '请输入密码', trigger: 'blur' }], }); const loginFormRef = ref(null); const login = () => { loginFormRef.value.validate(valid => { if (valid) { // 在这里进行登录逻辑处理 if (userType.value === 'admin') { // 管理员登录 adminLogin() } else { // 用户登录 userLogin() } } }); }; const adminLogin = () => { const username = loginForm.username; const password = loginForm.password; localStorage.setItem('username', JSON.stringify(username)); // 执行管理员登录逻辑 console.log("Username:", loginForm.username);// 确保在调用 staff 函数之前 username 是正确的 router.push({ name: 'staff', params: { username: loginForm.username, // 确保 loginForm.username 包含正确的用户名 password: loginForm.password // 确保 loginForm.password 包含正确的密码 } }); axios.get(`http://172.20.10.2:8080/getactor/${username}/${password}`) .then(response => { if(response.data==="没有该用户"){ ElMessage.success('没有该用户'); }else if(response.data==="登录成功"){ ElMessage.success('管理员登录成功'); router.push('/pindex'); }else{ ElMessage.success('用户名或密码错误'); } }) .catch(error => { }); }; const userLogin = () => { const username = loginForm.username; const password = loginForm.password; localStorage.setItem('username', JSON.stringify(username)); console.log(username,password) axios.post("http://localhost:8080/stafflogin",{ userid:username, password:password }).then( result => { if (result.data && result.data.data) { if(result.data.data=="职员") { alert("用户欢迎登录") router.push({ name:'staff', query:{ username:loginForm.username, password:loginForm.password }} ) } if(result.data.data=="职员经理") { alert("用户欢迎登录") } if(result.data.data=="总经理") { alert("用户欢迎登录") } if(result.data.data=="财务人员") { alert("用户欢迎登录") } } }).catch(error => { alert("用户名或密码错误") ElMessage.error('失败'); console.error(error); }); } const register = () => { // 跳转到注册页面的路由逻辑 if (userType.value === 'admin') { router.push('/sign') // 管理员登录 } else { // 用户登录 router.push('/sign') } }; </script> <style> .l-title{ margin-top: 200px; font-size: 30px; text-align: center; justify-content: center; } .login-back { display: flex; flex-direction: row; position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; background-size: cover; background-position: center; background-repeat: no-repeat; background-image: url("src/风景2.jpg"); } .login-container { margin: 100px 0 0 600px ; max-width: 500px; height: 500px; padding: 40px; /*margin-top: 200px;*/ /*margin-left: 1300px;*/ border: 1px solid #ccc; border-radius: 4px; background-color: #cccccc; opacity: 0.9; /* 设置透明度为 50% */ } .login-container h2 { text-align: center; margin-top:50px ; margin-bottom: 50px; } .el-form-item .el-button { margin-left: 50px; /* 设置按钮之间的间距 */ margin-right: 30px; } .el-radio-group .el-radio { margin-left: 30px; } .login-c{ margin: 200px 0 0 600px; padding: 0; width: 382px; height: 580px; border: 1px solid #ccc; border-radius: 4px; background-color: #cccccc; opacity: 0.9; /* 设置透明度为 50% */ } </style>
-
<template>
部分:login-back
类:包含登录页面的整体背景样式。login-container
类:包含登录表单的容器,设置了一些样式属性,如边框、圆角等。el-form
组件:使用Element Plus提供的表单组件,绑定了表单数据、验证规则等。el-input
组件:用于输入用户名和密码。el-radio-group
组件:提供单选按钮组,用于选择用户类型(管理员或普通用户)。el-button
组件:登录和注册按钮。
-
<script setup>
部分:- 使用Vue 3中的
script setup
语法。 - 引入了Vue、Vue Router、axios以及Element Plus的
ElMessage
组件。 - 使用
reactive
和ref
创建响应式数据和引用。 - 使用
useRouter
获取Vue Router 实例。 - 定义了一些数据变量,如
userType
、loginForm
、loginRules
等,以及一些处理登录和注册逻辑的函数。 - 使用axios进行登录验证,并通过Vue Router导航到相应页面。
- 使用Vue 3中的
-
<style>
部分:- 设置了页面元素的样式,包括背景、登录容器、标题等。
- 通过类名设置了一些样式属性,如边框、圆角、透明度等。