8 changed files with 515 additions and 132 deletions
@ -0,0 +1,155 @@ |
|||
<template> |
|||
<div class="aui-wrapper aui-page__login"> |
|||
<div class="aui-content__wrapper"> |
|||
<main class="aui-content"> |
|||
<div class="login-header"> |
|||
<h2 class="login-brand">{{ $t('brand.lg') }}</h2> |
|||
</div> |
|||
<div class="login-body"> |
|||
<h3 class="login-title">{{ $t('login.title') }}</h3> |
|||
<el-form :model="dataForm" |
|||
:rules="dataRule" |
|||
ref="dataForm" |
|||
@keyup.enter.native="dataFormSubmitHandle()" |
|||
status-icon> |
|||
<!-- <el-form-item> |
|||
<el-select v-model="$i18n.locale" |
|||
class="w-percent-100"> |
|||
<el-option v-for="(val, key) in i18nMessages" |
|||
:key="key" |
|||
:label="val._lang" |
|||
:value="key"></el-option> |
|||
</el-select> |
|||
</el-form-item> --> |
|||
<el-form-item prop="phone"> |
|||
<el-input v-model="dataForm.phone" |
|||
placeholder="手机号"> |
|||
<span slot="prefix" |
|||
class="el-input__icon"> |
|||
<svg class="icon-svg" |
|||
aria-hidden="true"> |
|||
<use xlink:href="#icon-user"></use> |
|||
</svg> |
|||
</span> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item prop="password"> |
|||
<el-input v-model="dataForm.password" |
|||
type="password" |
|||
:placeholder="$t('login.password')"> |
|||
<span slot="prefix" |
|||
class="el-input__icon"> |
|||
<svg class="icon-svg" |
|||
aria-hidden="true"> |
|||
<use xlink:href="#icon-lock"></use> |
|||
</svg> |
|||
</span> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item prop="captcha"> |
|||
<el-row :gutter="20"> |
|||
<el-col :span="14"> |
|||
<el-input v-model="dataForm.captcha" |
|||
:placeholder="$t('login.captcha')"> |
|||
<span slot="prefix" |
|||
class="el-input__icon"> |
|||
<svg class="icon-svg" |
|||
aria-hidden="true"> |
|||
<use xlink:href="#icon-safetycertificate"></use> |
|||
</svg> |
|||
</span> |
|||
</el-input> |
|||
</el-col> |
|||
<el-col :span="10" |
|||
class="login-captcha"> |
|||
<img :src="captchaPath" |
|||
@click="getCaptcha()"> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" |
|||
@click="dataFormSubmitHandle()" |
|||
class="w-percent-100">{{ $t('login.title') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="login-footer"> |
|||
<p> |
|||
<a href="https://demo.cloud.renren.io/renren-cloud" |
|||
target="_blank">{{ $t('login.demo') }}</a> |
|||
</p> |
|||
<!-- 2020 © renren.io --> |
|||
<p><a href="https://www.renren.io/" |
|||
target="_blank">{{ $t('login.copyright') }}</a></p> |
|||
</div> |
|||
</main> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Cookies from 'js-cookie' |
|||
import debounce from 'lodash/debounce' |
|||
import { messages } from '@/i18n' |
|||
import { getUUID } from '@/utils' |
|||
export default { |
|||
data () { |
|||
return { |
|||
i18nMessages: messages, |
|||
captchaPath: '', |
|||
dataForm: { |
|||
app: 'oper', |
|||
client: 'web', |
|||
username: '', |
|||
phone: '', |
|||
password: '', |
|||
uuid: '', |
|||
captcha: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule () { |
|||
return { |
|||
phone: [ |
|||
{ required: true, message: '手机号不能为空', trigger: 'blur' } |
|||
], |
|||
password: [ |
|||
{ required: true, message: '密码不能为空', trigger: 'blur' } |
|||
], |
|||
captcha: [ |
|||
{ required: true, message: '验证码不能为空', trigger: 'blur' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
created () { |
|||
this.getCaptcha() |
|||
}, |
|||
methods: { |
|||
// 获取验证码 |
|||
getCaptcha () { |
|||
this.dataForm.uuid = getUUID() |
|||
this.captchaPath = `${window.SITE_CONFIG['apiURL']}/auth/login/captcha?uuid=${this.dataForm.uuid}` |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function () { |
|||
this.$refs['dataForm'].validate((valid, messageObj) => { |
|||
if (!valid) { |
|||
app.util.validateRule(messageObj) |
|||
} |
|||
this.$http.post('/auth/login/operweb/loginbypassword', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
this.getCaptcha() |
|||
return this.$message.error(res.msg) |
|||
} |
|||
localStorage.setItem('userType', 'oper') |
|||
Cookies.set('token', res.data.token) |
|||
this.$router.replace({ name: 'home' }).catch(() => { }) |
|||
}).catch(() => { }) |
|||
}) |
|||
}, 1000, { 'leading': true, 'trailing': false }) |
|||
} |
|||
} |
|||
</script> |
Loading…
Reference in new issue