| | |
| | | <template> |
| | | LoginPage |
| | | |
| | | <el-button type="primary" class="login-btn" @click="login">登录</el-button> |
| | | <div class="login-container"> |
| | | <div class="login-wrapper"> |
| | | <div class="login-header"> |
| | | <h1 class="login-title">餐饮油烟智能监测与监管一体化平台</h1> |
| | | <p class="login-subtitle">欢迎登录</p> |
| | | </div> |
| | | <div class="login-form"> |
| | | <el-form :model="loginForm" :rules="rules" ref="loginFormRef" label-position="top"> |
| | | <el-form-item label="账号" prop="username"> |
| | | <el-input |
| | | v-model="loginForm.username" |
| | | placeholder="请输入账号" |
| | | prefix-icon="User" |
| | | size="large" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="密码" prop="password"> |
| | | <el-input |
| | | v-model="loginForm.password" |
| | | type="password" |
| | | placeholder="请输入密码" |
| | | prefix-icon="Lock" |
| | | size="large" |
| | | show-password |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | class="login-btn" |
| | | :loading="loading" |
| | | @click="login" |
| | | size="large" |
| | | style="width: 100%" |
| | | > |
| | | 登录 |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ref, reactive } from 'vue' |
| | | import { useRouter } from 'vue-router' |
| | | import type { FormInstance, FormRules } from 'element-plus' |
| | | import { ElMessage } from 'element-plus' |
| | | |
| | | const router = useRouter() |
| | | function login() { |
| | | const loginFormRef = ref<FormInstance>() |
| | | const loading = ref(false) |
| | | |
| | | const loginForm = reactive({ |
| | | username: 'admin', |
| | | password: '123456', |
| | | }) |
| | | |
| | | const rules = reactive<FormRules>({ |
| | | username: [{ required: true, message: '请输入账号', trigger: 'blur' }], |
| | | password: [{ required: true, message: '请输入密码', trigger: 'blur' }], |
| | | }) |
| | | |
| | | async function login() { |
| | | if (!loginFormRef.value) return |
| | | |
| | | try { |
| | | await loginFormRef.value.validate() |
| | | loading.value = true |
| | | |
| | | // 模拟登录验证 |
| | | setTimeout(() => { |
| | | if (loginForm.username === 'admin' && loginForm.password === '123456') { |
| | | router.push('/index/monitor/data-dashboard') |
| | | // router.push('/index') |
| | | } else { |
| | | ElMessage.error('账号或密码错误') |
| | | } |
| | | loading.value = false |
| | | }, 500) |
| | | } catch (error) { |
| | | console.log('验证失败:', error) |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | /* 全局样式重置 */ |
| | | * { |
| | | margin: 0; |
| | | padding: 0; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | html, |
| | | body { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: hidden; |
| | | } |
| | | </style> |
| | | |
| | | <style scoped> |
| | | .login-container { |
| | | width: 100vw; |
| | | height: 100vh; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: flex-end; |
| | | background-image: url('@/assets/loginPageBg.png'); |
| | | background-size: cover; |
| | | background-position: center; |
| | | background-repeat: no-repeat; |
| | | padding-right: 10%; |
| | | } |
| | | |
| | | .login-wrapper { |
| | | width: 400px; |
| | | background: rgba(255, 255, 255, 0.95); |
| | | border-radius: 8px; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); |
| | | padding: 32px; |
| | | animation: fadeIn 0.5s ease-in-out; |
| | | } |
| | | |
| | | .login-header { |
| | | text-align: center; |
| | | margin-bottom: 32px; |
| | | } |
| | | |
| | | .login-title { |
| | | font-size: 20px; |
| | | font-weight: 600; |
| | | color: #1a1a1a; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .login-subtitle { |
| | | font-size: 14px; |
| | | color: #666; |
| | | } |
| | | |
| | | .login-form { |
| | | width: 100%; |
| | | } |
| | | |
| | | .login-btn { |
| | | margin-top: 16px; |
| | | } |
| | | |
| | | @keyframes fadeIn { |
| | | from { |
| | | opacity: 0; |
| | | transform: translateY(-20px); |
| | | } |
| | | to { |
| | | opacity: 1; |
| | | transform: translateY(0); |
| | | } |
| | | } |
| | | </style> |