| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- <template>
- <div class="login-page">
- <div class="login-container">
- <div class="login-header">
- <div class="brand">
- <!-- <div class="brand-icon">申</div> -->
- <div class="brand-icon"><img :src="logo" alt="logo" style="width: 40px; height: 40px;" /></div>
- <div>
- <strong>申勤物业</strong>
- <span>数字化平台</span>
- </div>
- </div>
- <!-- <h1>登录系统</h1>
- <p>请输入账号密码登录</p> -->
- </div>
- <el-form :model="loginForm" class="login-form" ref="loginFormRef">
- <el-form-item prop="username">
- <el-input
- v-model="loginForm.username"
- placeholder="请输入账号"
- prefix-icon="User"
- size="large"
- />
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- v-model="loginForm.password"
- type="password"
- placeholder="请输入密码"
- prefix-icon="Lock"
- size="large"
- @keyup.enter="handleLogin"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" size="large" class="login-btn" @click="handleLogin">
- 登录
- </el-button>
- </el-form-item>
- </el-form>
- <!-- <div class="login-footer">
- <span>忘记密码?</span>
- <span>|</span>
- <span>联系管理员</span>
- </div> -->
- </div>
- </div>
- </template>
- <script setup lang="ts">
- import { reactive } from 'vue'
- import { ElMessage } from 'element-plus'
- import { useRouter } from 'vue-router'
- import encrypt from '@/utils/encrypt'
- const router = useRouter()
- const logo = new URL('/static/image/logo.png', import.meta.url).href
- const loginForm = reactive({
- username: '',
- password: ''
- })
- const handleLogin = async () => {
- if (!loginForm.username || !loginForm.password) {
- ElMessage.warning('请输入用户名和密码')
- return
- }
- try {
- sessionStorage.setItem('tempUser', JSON.stringify(loginForm))
- await encrypt({ username: loginForm.username, password: loginForm.password })
- ElMessage.success('登录成功')
- setTimeout(() => {
- router.push('/dashboard')
- }, 500)
- } catch (err) {
- ElMessage.error('登录失败,请检查用户名和密码')
- }
- }
- </script>
- <style scoped>
- .login-page {
- min-height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- background: linear-gradient(135deg, #0d9488 0%, #0f766e 50%, #14532d 100%);
- padding: 20px;
- }
- .login-container {
- width: 100%;
- max-width: 420px;
- background: #fff;
- border-radius: 16px;
- padding: 40px;
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
- }
- .login-header {
- text-align: center;
- margin-bottom: 32px;
- }
- .brand {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 12px;
- margin-bottom: 20px;
- }
- .brand-icon {
- width: 48px;
- height: 48px;
- /* background: #0d9488; */
- border-radius: 12px;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
- font-weight: 700;
- font-size: 20px;
- }
- .brand strong {
- display: block;
- font-size: 18px;
- color: #1a2b3c;
- }
- .brand span {
- font-size: 12px;
- color: #8a9bab;
- }
- .login-header h1 {
- font-size: 24px;
- font-weight: 600;
- color: #1a2b3c;
- margin-bottom: 8px;
- }
- .login-header p {
- font-size: 14px;
- color: #8a9bab;
- }
- .login-form {
- margin-bottom: 24px;
- }
- .login-btn {
- width: 100%;
- height: 44px;
- font-size: 15px;
- font-weight: 600;
- background: linear-gradient(135deg, #0d9488 0%, #0f766e 100%);
- border: none;
- }
- .login-btn:hover {
- background: linear-gradient(135deg, #0b7d73 0%, #0d5c55 100%);
- }
- .login-footer {
- display: flex;
- justify-content: center;
- gap: 16px;
- font-size: 13px;
- color: #8a9bab;
- }
- .login-footer span {
- cursor: pointer;
- }
- .login-footer span:hover {
- color: #0d9488;
- }
- </style>
|