|
@@ -1,375 +0,0 @@
|
|
|
-<template>
|
|
|
- <div class="login-container">
|
|
|
- <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>
|
|
|
- </div>
|
|
|
-
|
|
|
- <el-form-item prop="username">
|
|
|
- <span class="svg-container">
|
|
|
- <svg-icon icon-class="user" />
|
|
|
- </span>
|
|
|
- <el-input ref="username" v-model="loginForm.username" placeholder="请输入您的账号" name="username" type="text"
|
|
|
- maxlength="11" tabindex="1" auto-complete="on" />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item prop="password">
|
|
|
- <span class="svg-container">
|
|
|
- <svg-icon icon-class="password" />
|
|
|
- </span>
|
|
|
- <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
|
|
|
- placeholder="请输入登录密码" name="password" tabindex="2" auto-complete="on" @keyup.enter.native="handleLogin" />
|
|
|
- <span class="show-pwd" @click="showPwd">
|
|
|
- <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
|
|
|
- </span>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item prop="code">
|
|
|
- <el-row :span="24" style="display: flex;align-items: center;">
|
|
|
- <el-col :span="12">
|
|
|
- <el-input v-model="loginForm.code" auto-complete="off" placeholder="请输入验证码" size=""
|
|
|
- @keyup.enter.native="submitForm('loginForm')"></el-input>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12" style="display: flex;justify-content: flex-end;">
|
|
|
- <div class="login-code" @click="refreshCode">
|
|
|
- <!--验证码组件-->
|
|
|
- <s-identify :identifyCode="identifyCode"></s-identify>
|
|
|
- </div>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form-item>
|
|
|
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
|
|
|
- @click.native.prevent="handleLogin">进入</el-button>
|
|
|
-
|
|
|
- <!-- <div class="tips">
|
|
|
- <span style="margin-right:20px;">username: admin</span>
|
|
|
- <span>password: any</span>
|
|
|
- </div> -->
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script>
|
|
|
- import Cookies from 'js-cookie'
|
|
|
- import {
|
|
|
- mapActions
|
|
|
- } from 'vuex'
|
|
|
- import {
|
|
|
- validUsername,
|
|
|
- isLoginName
|
|
|
- } from '@/utils/validate'
|
|
|
- import SIdentify from './sidentify'
|
|
|
- export default {
|
|
|
- name: 'Login',
|
|
|
- components: {
|
|
|
- SIdentify
|
|
|
- },
|
|
|
- data() {
|
|
|
- const validateUsername = (rule, value, callback) => {
|
|
|
- if (!validUsername(value)) {
|
|
|
- callback(new Error('请输入正确的账号'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- const validatePassword = (rule, value, callback) => {
|
|
|
- if (value.length < 6) {
|
|
|
- callback(new Error('请输入正确的密码'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- const validateCode = (rule, value, callback) => {
|
|
|
- if (this.identifyCode !== value) {
|
|
|
- this.loginForm.code = ''
|
|
|
- this.refreshCode()
|
|
|
- callback(new Error('请输入正确的验证码'))
|
|
|
- } else {
|
|
|
- callback()
|
|
|
- }
|
|
|
- }
|
|
|
- return {
|
|
|
- isDebugLogin: false,
|
|
|
- loginForm: {
|
|
|
- username: '',
|
|
|
- password: '',
|
|
|
- code: ''
|
|
|
- },
|
|
|
- identifyCodes: '1234567890',
|
|
|
- identifyCode: '',
|
|
|
- loginRules: {
|
|
|
- username: [{
|
|
|
- required: true,
|
|
|
- trigger: 'blur',
|
|
|
- message: '请输入用户名'
|
|
|
- },
|
|
|
- {
|
|
|
- min: 1,
|
|
|
- max: 200,
|
|
|
- message: '长度在1-200字符之间',
|
|
|
- trigger: 'blur'
|
|
|
- },
|
|
|
- {
|
|
|
- validator: isLoginName,
|
|
|
- trigger: 'blur'
|
|
|
- }
|
|
|
- ],
|
|
|
- password: [{
|
|
|
- required: true,
|
|
|
- message: '请输入密码',
|
|
|
- trigger: 'blur'
|
|
|
- },
|
|
|
- {
|
|
|
- min: 1,
|
|
|
- max: 100,
|
|
|
- message: '长度在1-100字符之间',
|
|
|
- trigger: 'blur'
|
|
|
- }
|
|
|
- ],
|
|
|
- code: [{
|
|
|
- required: true,
|
|
|
- message: '请输入验证码',
|
|
|
- trigger: 'blur'
|
|
|
- },
|
|
|
- {
|
|
|
- validator: validateCode,
|
|
|
- trigger: 'blur'
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- loading: false,
|
|
|
- rememberMe: true,
|
|
|
- passwordType: 'password',
|
|
|
- redirect: undefined
|
|
|
- }
|
|
|
- },
|
|
|
- watch: {
|
|
|
- $route: {
|
|
|
- handler: function(route) {
|
|
|
- this.redirect = route.query && route.query.redirect
|
|
|
- },
|
|
|
- immediate: true
|
|
|
- },
|
|
|
- isDebugLogin(v) {
|
|
|
- if (v) {
|
|
|
- this.loginForm.password = '123'
|
|
|
- this.refreshCode()
|
|
|
- }
|
|
|
- },
|
|
|
- identifyCode(v) {
|
|
|
- this.isDebugLogin && (this.loginForm.code = v)
|
|
|
- }
|
|
|
- },
|
|
|
- methods: {
|
|
|
- ...mapActions('user', ['login']),
|
|
|
- randomNum(min, max) {
|
|
|
- return Math.floor(Math.random() * (max - min) + min)
|
|
|
- },
|
|
|
- refreshCode() {
|
|
|
- this.identifyCode = ''
|
|
|
- this.makeCode(this.identifyCodes, 4)
|
|
|
- },
|
|
|
- makeCode(o, l) {
|
|
|
- for (let i = 0; i < l; i++) {
|
|
|
- this.identifyCode += this.identifyCodes[
|
|
|
- this.randomNum(0, this.identifyCodes.length)
|
|
|
- ]
|
|
|
- }
|
|
|
- },
|
|
|
- showPwd() {
|
|
|
- if (this.passwordType === 'password') {
|
|
|
- this.passwordType = ''
|
|
|
- } else {
|
|
|
- this.passwordType = 'password'
|
|
|
- }
|
|
|
- this.$nextTick(() => {
|
|
|
- this.$refs.password.focus()
|
|
|
- })
|
|
|
- },
|
|
|
- handleLogin() {
|
|
|
- this.$refs.loginForm.validate(async (valid) => {
|
|
|
- if (valid) {
|
|
|
- this.loginForm.companyName = '黑龙江中天昊元贸易有限公司'
|
|
|
- this.loading = true
|
|
|
- // this.$store.dispatch('user/login', this.loginForm)
|
|
|
- // const res = await this.$store.dispatch('user/login', this.loginForm)
|
|
|
- const res = await this.login(this.loginForm)
|
|
|
- debugger
|
|
|
- localStorage.setItem('ws_login_type', 2)
|
|
|
- Cookies.set('ws_login_companyShortName', this.loginForm.companyName, {
|
|
|
- expires: 365,
|
|
|
- })
|
|
|
- Cookies.set('ws_login_account', this.loginForm.username, {
|
|
|
- expires: 365,
|
|
|
- })
|
|
|
- if (this.rememberMe) {
|
|
|
- Cookies.set('ws_login_pwd', this.loginForm.password, {
|
|
|
- expires: 365,
|
|
|
- })
|
|
|
- Cookies.set('ws_login_rememberMe', 1, {
|
|
|
- expires: 365
|
|
|
- })
|
|
|
- } else {
|
|
|
- Cookies.remove('ws_login_companyShortName')
|
|
|
- Cookies.remove('ws_login_account')
|
|
|
- Cookies.remove('ws_login_pwd')
|
|
|
- Cookies.set('ws_login_rememberMe', 0, {
|
|
|
- expires: 365
|
|
|
- })
|
|
|
- }
|
|
|
- const redirect = this.$route.query.redirect
|
|
|
- if (redirect) {
|
|
|
- this.$router.push(redirect)
|
|
|
- } else {
|
|
|
- this.$router.push('/')
|
|
|
- }
|
|
|
- // .then(response => {
|
|
|
- // localStorage.setItem('UserInfo', JSON.stringify(response.data))
|
|
|
- // this.$router.push({
|
|
|
- // path: this.redirect || '/'
|
|
|
- // })
|
|
|
- // this.loading = false
|
|
|
- // })
|
|
|
- // .catch(() => {
|
|
|
- // this.loading = false
|
|
|
- // })
|
|
|
- } else {
|
|
|
- console.log('error submit!!')
|
|
|
- return false
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- created() {
|
|
|
- this.refreshCode()
|
|
|
- }
|
|
|
- }
|
|
|
-</script>
|
|
|
-
|
|
|
-<style lang="scss">
|
|
|
- /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
|
|
|
-
|
|
|
- $bg: #283443;
|
|
|
- $light_gray: #fff;
|
|
|
- $cursor: #fff;
|
|
|
-
|
|
|
- @supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
|
|
|
- .login-container .el-input input {
|
|
|
- color: $cursor;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* reset element-ui css */
|
|
|
- .login-container {
|
|
|
- .el-input {
|
|
|
- display: inline-block;
|
|
|
- height: 47px;
|
|
|
- width: 85%;
|
|
|
-
|
|
|
- input {
|
|
|
- background: transparent;
|
|
|
- border: 0px;
|
|
|
- -webkit-appearance: none;
|
|
|
- border-radius: 0px;
|
|
|
- padding: 12px 5px 12px 15px;
|
|
|
- color: $light_gray;
|
|
|
- height: 47px;
|
|
|
- caret-color: $cursor;
|
|
|
-
|
|
|
- &:-webkit-autofill {
|
|
|
- box-shadow: 0 0 0px 1000px $bg inset !important;
|
|
|
- -webkit-text-fill-color: $cursor !important;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .el-form-item {
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
- background: rgba(0, 0, 0, 0.1);
|
|
|
- border-radius: 5px;
|
|
|
- color: #454545;
|
|
|
- }
|
|
|
- }
|
|
|
-</style>
|
|
|
-
|
|
|
-<style lang="scss" scoped>
|
|
|
- $bg: #2d3a4b;
|
|
|
- $dark_gray: #889aa4;
|
|
|
- $light_gray: #eee;
|
|
|
-
|
|
|
- .login-container {
|
|
|
- min-height: 100%;
|
|
|
- width: 100%;
|
|
|
- background-color: $bg;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- .login-form {
|
|
|
- position: relative;
|
|
|
- width: 520px;
|
|
|
- max-width: 100%;
|
|
|
- padding: 160px 35px 0;
|
|
|
- margin: 0 auto;
|
|
|
- overflow: hidden;
|
|
|
- }
|
|
|
-
|
|
|
- .tips {
|
|
|
- font-size: 14px;
|
|
|
- color: #fff;
|
|
|
- margin-bottom: 10px;
|
|
|
-
|
|
|
- span {
|
|
|
- &:first-of-type {
|
|
|
- margin-right: 16px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .svg-container {
|
|
|
- padding: 6px 5px 6px 15px;
|
|
|
- color: $dark_gray;
|
|
|
- vertical-align: middle;
|
|
|
- width: 30px;
|
|
|
- display: inline-block;
|
|
|
- }
|
|
|
-
|
|
|
- .title-container {
|
|
|
- position: relative;
|
|
|
-
|
|
|
- .title {
|
|
|
- font-size: 26px;
|
|
|
- color: $light_gray;
|
|
|
- margin: 0px auto 40px auto;
|
|
|
- text-align: center;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .show-pwd {
|
|
|
- position: absolute;
|
|
|
- right: 10px;
|
|
|
- top: 7px;
|
|
|
- font-size: 16px;
|
|
|
- color: $dark_gray;
|
|
|
- cursor: pointer;
|
|
|
- user-select: none;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .login-code {
|
|
|
- cursor: pointer;
|
|
|
- margin-right: 5px;
|
|
|
-
|
|
|
- .login-code-img {
|
|
|
- width: 100px;
|
|
|
- height: 38px;
|
|
|
- background-color: #eee;
|
|
|
- border: 1px solid #f0f0f0;
|
|
|
- color: #333;
|
|
|
- font-size: 18px;
|
|
|
- font-weight: bold;
|
|
|
- letter-spacing: 2px;
|
|
|
- text-indent: 2px;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
- }
|
|
|
-</style>
|