| | |
| | | <template> |
| | | <div class="login-container"> |
| | | <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left"> |
| | | <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" |
| | | label-position="left"> |
| | | |
| | | <div class="title-container"> |
| | | <h3 class="title">江西语音视频培训系统</h3> |
| | |
| | | |
| | | <el-form-item prop="userName"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="user" /> |
| | | <svg-icon icon-class="user"/> |
| | | </span> |
| | | <el-input |
| | | ref="userName" |
| | |
| | | <el-tooltip v-model="capsTooltip" content="Caps lock is On" placement="right" manual> |
| | | <el-form-item prop="password"> |
| | | <span class="svg-container"> |
| | | <svg-icon icon-class="password" /> |
| | | <svg-icon icon-class="password"/> |
| | | </span> |
| | | <el-input |
| | | :key="passwordType" |
| | |
| | | @keyup.enter.native="handleLogin" |
| | | /> |
| | | <span class="show-pwd" @click="showPwd"> |
| | | <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" /> |
| | | <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"/> |
| | | </span> |
| | | </el-form-item> |
| | | </el-tooltip> |
| | | |
| | | <el-checkbox v-model="loginForm.remember" style="margin-bottom: 20px;margin-left: 5px;">记住密码</el-checkbox> |
| | | |
| | | <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">登录</el-button> |
| | | <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" |
| | | @click.native.prevent="handleLogin">登录 |
| | | </el-button> |
| | | |
| | | </el-form> |
| | | |
| | | <el-dialog |
| | | title="修改密码" |
| | | :visible.sync="forceUpdateShow" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | width="400px" |
| | | :show-close="false" |
| | | > |
| | | <el-form :model="updatePasswordForm"> |
| | | <el-form-item label="新密码"> |
| | | <el-input v-model="updatePasswordForm.newPassword" placeholder="应包含大小写、数字" show-password></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="确认密码"> |
| | | <el-input v-model="updatePasswordForm.confirmPassword" placeholder="确认密码" show-password></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="forceUpdateShow = false">关 闭</el-button> |
| | | <el-button type="primary" @click="updatePassword">修 改</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | |
| | | <script> |
| | | import { mapMutations } from 'vuex' |
| | | import loginApi from '@/api/login' |
| | | import UserApi from '@/api/user' |
| | | |
| | | export default { |
| | | name: 'Login', |
| | |
| | | } |
| | | } |
| | | return { |
| | | forceUpdateShow: false, |
| | | updatePasswordForm: { |
| | | userId: null, |
| | | newPassword: '', |
| | | confirmPassword: '' |
| | | }, |
| | | loginForm: { |
| | | userName: '', |
| | | password: '', |
| | |
| | | // window.removeEventListener('storage', this.afterQRScan) |
| | | }, |
| | | methods: { |
| | | updatePassword () { |
| | | if (this.updatePasswordForm.newPassword !== this.updatePasswordForm.confirmPassword) { |
| | | this.$message.error("两次输入的密码不一致") |
| | | return |
| | | } |
| | | UserApi.updatePassword(this.updatePasswordForm).then(res => { |
| | | if (res.code === 1) { |
| | | this.$message.success('密码修改成功。请重新登录') |
| | | this.loginForm.password = '' |
| | | this.forceUpdateShow = false |
| | | } |
| | | }) |
| | | }, |
| | | checkCapslock ({ shiftKey, key } = {}) { |
| | | if (key && key.length === 1) { |
| | | // eslint-disable-next-line no-mixed-operators |
| | |
| | | this.$refs.loginForm.validate(valid => { |
| | | if (valid) { |
| | | this.loading = true |
| | | loginApi.login(this.loginForm).then(function (result) { |
| | | loginApi.login(this.loginForm).then(result => { |
| | | // 如果code为205,则强制修改密码 |
| | | if (result && result.code === 205) { |
| | | this.updatePasswordForm.userId = result.data |
| | | this.forceUpdateShow = true |
| | | this.loading = false |
| | | return |
| | | } |
| | | if (result && result.code === 1) { |
| | | _this.setUserName(_this.loginForm.userName) |
| | | _this.$router.push({ path: '/dashboard' }) |
| | |
| | | /* 修复input 背景不协调 和光标变色 */ |
| | | /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */ |
| | | |
| | | $bg:#283443; |
| | | $light_gray:#fff; |
| | | $bg: #283443; |
| | | $light_gray: #fff; |
| | | $cursor: #fff; |
| | | |
| | | @supports (-webkit-mask: none) and (not (cater-color: $cursor)) { |
| | |
| | | </style> |
| | | |
| | | <style lang="scss" scoped> |
| | | $bg:#2d3a4b; |
| | | $dark_gray:#889aa4; |
| | | $light_gray:#eee; |
| | | $bg: #2d3a4b; |
| | | $dark_gray: #889aa4; |
| | | $light_gray: #eee; |
| | | |
| | | .login-container { |
| | | background-image:url('../../assets/loginBackground.png'); |
| | | background-image: url('../../assets/loginBackground.png'); |
| | | background-size: cover; |
| | | background-attachment: fixed; |
| | | min-height: 100%; |
| | |
| | | position: relative; |
| | | width: 520px; |
| | | max-width: 100%; |
| | | padding:30px 50px 10px 50px; |
| | | margin:200px auto auto auto; |
| | | padding: 30px 50px 10px 50px; |
| | | margin: 200px auto auto auto; |
| | | overflow: hidden; |
| | | background: white; |
| | | } |