|
|
@@ -1,141 +1,109 @@
|
|
|
<template>
|
|
|
- <el-container>
|
|
|
- <el-main>
|
|
|
- <login-bar />
|
|
|
- <router-view />
|
|
|
- <el-row v-if="devops" class="movie-list">
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px" />
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
- <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
|
|
|
- <el-card class="box-card">
|
|
|
- <el-tabs v-model="activeName" @tab-click="tabClick">
|
|
|
- <el-tab-pane name="login1">
|
|
|
- <span slot="label">密码登入</span>
|
|
|
- <div class="text item">
|
|
|
- <el-form ref="form" :model="userLogin" label-width="80px">
|
|
|
- <el-form-item label="帐号">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.principal"
|
|
|
- placeholder="请输入帐号"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="密码">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.credential"
|
|
|
- type="password"
|
|
|
- placeholder="请输入密码"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" size="mini" :loading="isLoading" @click.native="loginBtn">登 入</el-button>
|
|
|
- <el-button type="plain" size="mini" @click="forgot">忘记密码</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
- </el-card>
|
|
|
- </el-row>
|
|
|
- </el-col>
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px" />
|
|
|
- </el-row>
|
|
|
- <el-row v-else class="movie-list">
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px" />
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px" />
|
|
|
- <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
|
|
|
- <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
|
|
|
- <el-card class="box-card">
|
|
|
- <el-tabs v-model="activeName" @tab-click="tabClick">
|
|
|
- <el-tab-pane name="login1">
|
|
|
- <span slot="label">密码登入</span>
|
|
|
- <div class="text item">
|
|
|
- <el-form ref="form" :model="userLogin" label-width="80px">
|
|
|
- <el-form-item label="帐号">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.principal"
|
|
|
- placeholder="请输入手机号或邮箱"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="密码">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.credential"
|
|
|
- type="password"
|
|
|
- placeholder="请输入密码"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="图形验证码" label-width="90px">
|
|
|
- <el-image :src="captchaCode" @click="getCaptcha" />
|
|
|
- <el-input
|
|
|
- v-model="userLogin.captchaCode"
|
|
|
- placeholder="请输入图形验证码"
|
|
|
- style="width: 50%; padding-right: 1px"
|
|
|
- clearable
|
|
|
- @keyup.enter.native="loginBtn"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" size="mini" :loading="isLoading" @click.native="loginBtn">登 入</el-button>
|
|
|
- <el-button type="plain" size="mini" @click="register">注册帐号</el-button>
|
|
|
- <el-button type="plain" size="mini" @click="forgot">忘记密码</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane name="login2">
|
|
|
- <span slot="label">验证码登入</span>
|
|
|
- <div class="text item">
|
|
|
- <el-form ref="form" :model="userLogin" label-width="80px">
|
|
|
- <el-input v-model="userLogin.loginType" type="hidden" value="1" />
|
|
|
- <el-form-item label="帐号">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.principal"
|
|
|
- placeholder="请输入手机号"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- <el-button :disabled="isBtn" @click="loginVerifyCode">{{ code }}</el-button>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="验证码">
|
|
|
- <el-input
|
|
|
- v-model="userLogin.credential"
|
|
|
- placeholder="请输入验证码"
|
|
|
- style="padding-right: 1px"
|
|
|
- clearable
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="图形验证码" label-width="90px">
|
|
|
- <el-image :src="captchaCode" @click="getCaptcha" />
|
|
|
- <el-input
|
|
|
- v-model="userLogin.captchaCode"
|
|
|
- placeholder="请输入图形验证码"
|
|
|
- style="width: 50%; padding-right: 1px"
|
|
|
- clearable
|
|
|
- @keyup.enter.native="loginBtn"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" size="mini" :loading="isLoading" @click.native="loginByVerifyCode">登 入</el-button>
|
|
|
- <el-button type="plain" size="mini" @click="register">注册帐号</el-button>
|
|
|
- <el-button type="plain" size="mini" @click="forgot">忘记密码</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
- </el-card>
|
|
|
- </el-row>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-main>
|
|
|
- </el-container>
|
|
|
+ <div class="login-wrapper">
|
|
|
+ <login-bar />
|
|
|
+
|
|
|
+ <div class="login-container">
|
|
|
+ <el-card class="login-card" shadow="always">
|
|
|
+ <div class="login-title">欢迎回来</div>
|
|
|
+
|
|
|
+ <el-tabs v-model="activeName" stretch @tab-click="tabClick">
|
|
|
+ <el-tab-pane label="密码登录" name="login1">
|
|
|
+ <el-form ref="loginForm" :model="userLogin" label-position="top">
|
|
|
+ <el-form-item label="账号">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.principal"
|
|
|
+ prefix-icon="el-icon-user"
|
|
|
+ placeholder="手机号或邮箱"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="密码">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.credential"
|
|
|
+ prefix-icon="el-icon-lock"
|
|
|
+ type="password"
|
|
|
+ placeholder="请输入密码"
|
|
|
+ show-password
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="验证码">
|
|
|
+ <div class="captcha-box">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.captchaCode"
|
|
|
+ placeholder="图形验证码"
|
|
|
+ @keyup.enter.native="loginBtn"
|
|
|
+ />
|
|
|
+ <el-image
|
|
|
+ class="captcha-img"
|
|
|
+ :src="captchaCode"
|
|
|
+ title="点击刷新"
|
|
|
+ @click="getCaptcha"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <div class="action-buttons">
|
|
|
+ <el-button type="primary" class="submit-btn" :loading="isLoading" @click="loginBtn">登 录</el-button>
|
|
|
+ <div class="sub-actions">
|
|
|
+ <el-button type="text" size="mini" @click="register">注册账号</el-button>
|
|
|
+ <el-button type="text" size="mini" @click="forgot" class="forgot-link">忘记密码?</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-tab-pane>
|
|
|
+
|
|
|
+ <el-tab-pane label="验证码登录" name="login2">
|
|
|
+ <el-form ref="smsForm" :model="userLogin" label-position="top">
|
|
|
+ <el-form-item label="手机号">
|
|
|
+ <div class="sms-box">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.principal"
|
|
|
+ prefix-icon="el-icon-mobile-phone"
|
|
|
+ placeholder="请输入手机号"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ <el-button class="sms-btn" :disabled="isBtn" @click="loginVerifyCode">
|
|
|
+ {{ isBtn ? code + 's' : '获取验证码' }}
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="短信验证码">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.credential"
|
|
|
+ prefix-icon="el-icon-chat-dot-round"
|
|
|
+ placeholder="请输入验证码"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="验证码">
|
|
|
+ <div class="captcha-box">
|
|
|
+ <el-input
|
|
|
+ v-model="userLogin.captchaCode"
|
|
|
+ placeholder="图形验证码"
|
|
|
+ @keyup.enter.native="loginBtn"
|
|
|
+ />
|
|
|
+ <el-image class="captcha-img" :src="captchaCode" @click="getCaptcha" />
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <div class="action-buttons">
|
|
|
+ <el-button type="primary" class="submit-btn" :loading="isLoading" @click="loginByVerifyCode">登 录</el-button>
|
|
|
+ <div class="sub-actions">
|
|
|
+ <el-button type="text" size="mini" @click="register">注册账号</el-button>
|
|
|
+ <el-button type="text" size="mini" @click="forgot">忘记密码?</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
@@ -144,57 +112,132 @@ import LoginBar from 'components/layout/LoginBar'
|
|
|
|
|
|
export default {
|
|
|
name: 'Login',
|
|
|
- components: {
|
|
|
- LoginBar
|
|
|
- },
|
|
|
+ components: { LoginBar },
|
|
|
mixins: [userMixin],
|
|
|
data() {
|
|
|
return {
|
|
|
- devops: false,
|
|
|
activeName: 'login1'
|
|
|
}
|
|
|
},
|
|
|
- watch: {
|
|
|
- $route() {
|
|
|
- this.$router.go()
|
|
|
- }
|
|
|
- },
|
|
|
created() {
|
|
|
- this.devops = parseInt(process.env.VUE_APP_DEVOPS) === 1
|
|
|
- document.title = '用户登入'
|
|
|
+ document.title = '用户登录'
|
|
|
this.fetchPubkey(1)
|
|
|
},
|
|
|
methods: {
|
|
|
tabClick(tab) {
|
|
|
this.activeName = tab.name
|
|
|
},
|
|
|
- register() {
|
|
|
- this.$router.push('/register')
|
|
|
- },
|
|
|
- forgot() {
|
|
|
- if (this.devops) {
|
|
|
- this.$message.info('联系管理员')
|
|
|
- } else {
|
|
|
- this.$router.push('/forgot')
|
|
|
- }
|
|
|
- }
|
|
|
+ register() { this.$router.push('/register') },
|
|
|
+ forgot() { this.$router.push('/forgot') }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
-<style>
|
|
|
-/*处于手机屏幕时*/
|
|
|
-@media screen and (max-width: 768px){
|
|
|
- .movie-list {
|
|
|
- padding-top: 8px;
|
|
|
- padding-left: 0.5%;
|
|
|
- padding-right: 0.5%;
|
|
|
- }
|
|
|
+<style scoped>
|
|
|
+.login-wrapper {
|
|
|
+ min-height: 100vh;
|
|
|
+ background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.login-container {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ padding: 20px;
|
|
|
}
|
|
|
|
|
|
-.movie-list {
|
|
|
- padding-top: 15px;
|
|
|
- padding-left: 6%;
|
|
|
- padding-right: 6%;
|
|
|
+.login-card {
|
|
|
+ width: 100%;
|
|
|
+ max-width: 400px;
|
|
|
+ border-radius: 12px;
|
|
|
+ border: none;
|
|
|
+ padding: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.login-title {
|
|
|
+ text-align: center;
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #303133;
|
|
|
+ margin-bottom: 20px;
|
|
|
+ letter-spacing: 1px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 覆盖 Tabs 样式 */
|
|
|
+/deep/ .el-tabs__item {
|
|
|
+ font-size: 16px;
|
|
|
+ height: 50px;
|
|
|
+ line-height: 50px;
|
|
|
+}
|
|
|
+
|
|
|
+/deep/ .el-form-item__label {
|
|
|
+ padding-bottom: 4px;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+/* 验证码布局 */
|
|
|
+.captcha-box {
|
|
|
+ display: flex;
|
|
|
+ gap: 12px;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.captcha-img {
|
|
|
+ width: 120px;
|
|
|
+ height: 40px;
|
|
|
+ cursor: pointer;
|
|
|
+ border-radius: 4px;
|
|
|
+ flex-shrink: 0;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+}
|
|
|
+
|
|
|
+/* 短信验证码布局 */
|
|
|
+.sms-box {
|
|
|
+ display: flex;
|
|
|
+ gap: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.sms-btn {
|
|
|
+ width: 110px;
|
|
|
+ padding: 12px 0;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+/* 按钮区 */
|
|
|
+.action-buttons {
|
|
|
+ margin-top: 30px;
|
|
|
+}
|
|
|
+
|
|
|
+.submit-btn {
|
|
|
+ width: 100%;
|
|
|
+ font-size: 16px;
|
|
|
+ padding: 12px;
|
|
|
+ border-radius: 8px;
|
|
|
+ letter-spacing: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.sub-actions {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-top: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.forgot-link {
|
|
|
+ color: #909399;
|
|
|
+}
|
|
|
+
|
|
|
+/* 手机端适配 */
|
|
|
+@media screen and (max-width: 480px) {
|
|
|
+ .login-card {
|
|
|
+ box-shadow: none;
|
|
|
+ background: transparent;
|
|
|
+ }
|
|
|
+ .login-container {
|
|
|
+ align-items: flex-start;
|
|
|
+ padding-top: 40px;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|