增加验证码校验

dev
smallchill 6 years ago
parent 6d87153399
commit d76bd3a7e4
  1. 17
      src/api/user.js
  2. 186
      src/page/login/userlogin.vue
  3. 2
      src/store/modules/user.js
  4. 1
      src/styles/login.scss

@ -1,21 +1,23 @@
import request from '@/router/axios';
import { baseUrl } from '@/config/env';
export const loginByUsername = (tenantId, username, password, type) => request({
export const loginByUsername = (tenantId, username, password, type, key, code) => request({
url: '/api/blade-auth/oauth/token',
method: 'post',
headers: {
'Tenant-Id': tenantId
'Tenant-Id': tenantId,
'Captcha-Key': key,
'Captcha-Code': code,
},
params: {
tenantId,
username,
password,
grant_type: "password",
grant_type: "captcha",
scope: "all",
type
}
})
});
export const refreshToken = (refresh_token, tenantId) => request({
url: '/api/blade-auth/oauth/token',
@ -29,13 +31,18 @@ export const refreshToken = (refresh_token, tenantId) => request({
grant_type: "refresh_token",
scope: "all",
}
})
});
export const getButtons = () => request({
url: '/api/blade-system/menu/buttons',
method: 'get'
});
export const getCaptcha = () => request({
url: '/api/blade-auth/oauth/captcha',
method: 'get'
});
export const getUserInfo = () => request({
url: baseUrl + '/user/getUserInfo',
method: 'get'

@ -34,92 +34,132 @@
<i slot="prefix" class="icon-mima"/>
</el-input>
</el-form-item>
<el-form-item prop="code">
<el-row :span="24">
<el-col :span="16">
<el-input size="small"
@keyup.enter.native="handleLogin"
v-model="loginForm.code"
auto-complete="off"
:placeholder="$t('login.code')">
<i slot="prefix" class="icon-yanzhengma"/>
</el-input>
</el-col>
<el-col :span="8">
<div class="login-code">
<img :src="loginForm.image" class="login-code-img" @click="refreshCode"
/>
</div>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button type="primary"
size="small"
@click.native.prevent="handleLogin"
class="login-submit">{{$t('login.submit')}}</el-button>
class="login-submit">{{$t('login.submit')}}
</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { mapGetters } from "vuex";
import website from '@/config/website';
import {info} from "@/api/system/tenant";
import {mapGetters} from "vuex";
import website from '@/config/website';
import {info} from "@/api/system/tenant";
import {getCaptcha} from "@/api/user";
export default {
name: "userlogin",
data() {
return {
tenantMode: website.tenantMode,
loginForm: {
tenantId: "000000",
username: "admin",
password: "admin",
type: "account"
},
loginRules: {
tenantId: [
{ required: false, message: "请输入租户ID", trigger: "blur" }
],
username: [
{ required: true, message: "请输入用户名", trigger: "blur" }
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 1, message: "密码长度最少为6位", trigger: "blur" }
]
},
passwordType: "password"
};
},
created() {
this.getTenant();
},
mounted() {},
computed: {
...mapGetters(["tagWel"])
},
props: [],
methods: {
showPassword() {
this.passwordType === ""
? (this.passwordType = "password")
: (this.passwordType = "");
export default {
name: "userlogin",
data() {
return {
tenantMode: website.tenantMode,
loginForm: {
//ID
tenantId: "000000",
//
username: "admin",
//
password: "admin",
//
type: "account",
//
code: "",
//
key: "",
//
image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
},
loginRules: {
tenantId: [
{required: false, message: "请输入租户ID", trigger: "blur"}
],
username: [
{required: true, message: "请输入用户名", trigger: "blur"}
],
password: [
{required: true, message: "请输入密码", trigger: "blur"},
{min: 1, message: "密码长度最少为6位", trigger: "blur"}
]
},
passwordType: "password"
};
},
created() {
this.getTenant();
this.refreshCode();
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '登录中,请稍后。。。',
spinner: "el-icon-loading"
});
this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
this.$router.push({ path: this.tagWel.value });
loading.close();
}).catch(() => {
loading.close()
});
}
});
mounted() {
},
getTenant() {
let domain = window.location.href.replace("/#/login", "");
// 便
//domain = "https://bladex.vip";
info(domain).then(res => {
const data = res.data;
if (data.success && data.data.tenantId) {
this.tenantMode = false;
this.loginForm.tenantId = data.data.tenantId;
this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
}
})
computed: {
...mapGetters(["tagWel"])
},
props: [],
methods: {
refreshCode() {
getCaptcha().then(res => {
const data = res.data;
this.loginForm.key = data.key;
this.loginForm.image = data.image;
})
},
showPassword() {
this.passwordType === ""
? (this.passwordType = "password")
: (this.passwordType = "");
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '登录中,请稍后。。。',
spinner: "el-icon-loading"
});
this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
this.$router.push({path: this.tagWel.value});
loading.close();
}).catch(() => {
loading.close()
});
}
});
},
getTenant() {
let domain = window.location.href.replace("/#/login", "");
// 便
//domain = "https://bladex.vip";
info(domain).then(res => {
const data = res.data;
if (data.success && data.data.tenantId) {
this.tenantMode = false;
this.loginForm.tenantId = data.data.tenantId;
this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
}
})
}
}
}
};
};
</script>
<style>

@ -47,7 +47,7 @@ const user = {
//根据用户名登录
LoginByUsername({commit}, userInfo) {
return new Promise((resolve, reject) => {
loginByUsername(userInfo.tenantId, userInfo.username, userInfo.password, userInfo.type).then(res => {
loginByUsername(userInfo.tenantId, userInfo.username, userInfo.password, userInfo.type, userInfo.key, userInfo.code).then(res => {
const data = res.data;
if (data.error_description) {
Message({

@ -180,4 +180,5 @@
line-height: 38px;
text-indent: 5px;
text-align: center;
cursor:pointer!important;
}

Loading…
Cancel
Save