| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <template>
- <div class="login-page">
- <div class="login-box">
- <div class="login-header">
- <i class="el-icon-monitor"></i>
- <span>管理后台</span>
- </div>
- <p class="login-tip">请使用账号密码登录</p>
- <el-form
- ref="form"
- :model="form"
- :rules="rules"
- size="medium"
- @submit.native.prevent="handleSubmit"
- >
- <el-form-item prop="username">
- <el-input
- v-model="form.username"
- placeholder="请输入账号"
- prefix-icon="el-icon-user"
- autocomplete="username"
- />
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- v-model="form.password"
- type="password"
- placeholder="请输入密码"
- prefix-icon="el-icon-lock"
- autocomplete="current-password"
- show-password
- @keyup.enter.native="handleSubmit"
- />
- </el-form-item>
- <el-form-item>
- <el-button
- type="primary"
- :loading="loading"
- class="login-btn"
- native-type="submit"
- >
- 登录
- </el-button>
- </el-form-item>
- </el-form>
- <p class="login-hint">演示账号:admin / 123456</p>
- </div>
- </div>
- </template>
- <script>
- import request from '@/utils/request'
- export default {
- name: 'Login',
- data() {
- return {
- loading: false,
- form: { username: '', password: '' },
- rules: {
- username: [{ required: true, message: '请输入账号', trigger: 'blur' }],
- password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
- }
- }
- },
- methods: {
- handleSubmit() {
- this.$refs.form.validate(async (valid) => {
- if (!valid) return
- this.loading = true
- try {
- const res = await request.post('/api/login', this.form)
- localStorage.setItem('token', res.data.token)
- localStorage.setItem('username', res.data.username)
- this.$message.success('登录成功')
- const redirect = this.$route.query.redirect || '/'
- this.$router.replace(redirect)
- } finally {
- this.loading = false
- }
- })
- }
- }
- }
- </script>
- <style scoped>
- .login-page {
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
- background: linear-gradient(135deg, #304156 0%, #1f2d3d 100%);
- }
- .login-box {
- width: 380px;
- padding: 36px 32px 24px;
- background: #fff;
- border-radius: 8px;
- box-shadow: 0 6px 24px rgba(0, 0, 0, 0.2);
- }
- .login-header {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 10px;
- color: #304156;
- font-size: 22px;
- font-weight: bold;
- }
- .login-header i { font-size: 26px; }
- .login-tip {
- margin: 10px 0 24px;
- color: #909399;
- text-align: center;
- font-size: 13px;
- }
- .login-btn {
- width: 100%;
- }
- .login-hint {
- margin: 8px 0 0;
- color: #c0c4cc;
- text-align: center;
- font-size: 12px;
- }
- </style>
|