| | |
| | | <img src="@/assets/images/bg@2x.png" class="main_bg" alt=""> |
| | | <div class="login_wrap"> |
| | | <div class="login_img"> |
| | | <div class="h2">芜湖烟草智慧安消安全防范系统</div> |
| | | <div class="h3">智慧物流园区安消一体化系统</div> |
| | | </div> |
| | | <div class="form_wrap"> |
| | |
| | | <div class="df_ac"> |
| | | <div class="label">手机号</div> |
| | | <div class="line"> |
| | | <el-input v-model="password" placeholder="请输入手机号" type="password" maxlength="30" show-password /> |
| | | <el-input v-model="phone" placeholder="请输入手机号" type="text" maxlength="16" /> |
| | | </div> |
| | | </div> |
| | | <div class="df_ac"> |
| | | <div class="label">验证码</div> |
| | | <div class="line"> |
| | | <el-input v-model="captcha.value" placeholder="请输入验证码" maxlength="4" @keypress.enter.native="login" /> |
| | | <span class="code_get" @click="getCode">获取验证码</span> |
| | | <el-input v-model="smsCode" placeholder="请输入验证码" maxlength="6" @keypress.enter.native="login" /> |
| | | <span v-if="downTime == 0" class="code_get" @click="getCode">获取验证码</span> |
| | | <span v-else class="code_get downtime">{{ downTime }}</span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <el-button :loading="loading" type="primary" class="login_btn" @click.native.prevent="login">立即登录</el-button> |
| | | <div class="btn_wrap"> |
| | | <el-checkbox v-model="isRemPsd"> |
| | | <span style="font-size: 13px; font-weight: 400" class="placeholder9">记住密码</span> |
| | | <span style="font-size: 13px; font-weight: 400" class="placeholder9">{{ activeTab == 0 ? '记住密码' : '记住手机号' |
| | | }}</span> |
| | | </el-checkbox> |
| | | </div> |
| | | <div class="google"> |
| | |
| | | |
| | | <script> |
| | | import { mapMutations } from 'vuex' |
| | | import { getCaptcha, loginByPassword } from '@/api/system/common' |
| | | import { getCaptcha, loginByPassword, sendSmsPost, loginByPhone } from '@/api/system/common' |
| | | import Cookies from "js-cookie" |
| | | import { Message } from 'element-ui' |
| | | |
| | | export default { |
| | | name: 'Login', |
| | |
| | | isRemPsd: false, |
| | | username: '', |
| | | password: '', |
| | | phone: '', |
| | | downTime: 0, |
| | | |
| | | smsCode: '', |
| | | activeTab: '0', |
| | | // 验证码 |
| | | captcha: { |
| | |
| | | mounted() { |
| | | this.username = localStorage.getItem('username') || '' |
| | | this.password = localStorage.getItem('password') || '' |
| | | this.phone = localStorage.getItem('phone') || '' |
| | | const isRemPsd = localStorage.getItem('isRemPsd') || false |
| | | this.isRemPsd = JSON.parse(isRemPsd) |
| | | this.refreshCaptcha() |
| | |
| | | if (this.loading) { |
| | | return |
| | | } |
| | | if (!this.__check()) { |
| | | return |
| | | } |
| | | this.loading = true |
| | | loginByPassword({ |
| | | username: this.username.trim(), |
| | | password: this.password, |
| | | code: this.captcha.value.trim(), |
| | | uuid: this.captcha.uuid |
| | | }) |
| | | .then((res) => { |
| | | // window.location.href = process.env.VUE_APP_CONTEXT_PATH |
| | | if (this.activeTab == 0) { |
| | | if (!this.__check()) { |
| | | return |
| | | } |
| | | this.loading = true |
| | | loginByPassword({ |
| | | username: this.username.trim(), |
| | | password: this.password, |
| | | code: this.captcha.value.trim(), |
| | | uuid: this.captcha.uuid |
| | | }) |
| | | .then((res) => { |
| | | // window.location.href = process.env.VUE_APP_CONTEXT_PATH |
| | | if (this.isRemPsd) { |
| | | localStorage.setItem('username', this.username.trim()) |
| | | localStorage.setItem('password', this.password.trim()) |
| | | localStorage.setItem('isRemPsd', this.isRemPsd) |
| | | } else { |
| | | localStorage.removeItem('username') |
| | | localStorage.removeItem('password') |
| | | localStorage.removeItem('isRemPsd') |
| | | } |
| | | Cookies.set('dm_user_token', res) |
| | | this.$router.push('index') |
| | | }) |
| | | .catch(e => { |
| | | this.refreshCaptcha() |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false |
| | | }) |
| | | } else { |
| | | const { smsCode, phone } = this |
| | | if (!phone || phone.length != 11) { |
| | | return Message.error('请输入正确的手机号') |
| | | } |
| | | if (!smsCode) { |
| | | return Message.error('请输入验证码') |
| | | } |
| | | this.loading = true |
| | | loginByPhone({ phone, code: smsCode }).then(res => { |
| | | if (this.isRemPsd) { |
| | | localStorage.setItem('username', this.username.trim()) |
| | | localStorage.setItem('password', this.password.trim()) |
| | | localStorage.setItem('isRemPsd', this.isRemPsd) |
| | | } else { |
| | | localStorage.removeItem('username') |
| | | localStorage.removeItem('password') |
| | | localStorage.removeItem('isRemPsd') |
| | | localStorage.setItem('phone', this.username.trim()) |
| | | } |
| | | Cookies.set('dm_user_token', res) |
| | | this.$router.push('index') |
| | | }) |
| | | .catch(e => { |
| | | }).catch(e => { |
| | | this.refreshCaptcha() |
| | | // this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | }).finally(() => { |
| | | this.loading = false |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | getCode() { |
| | | console.log('getCode'); |
| | | |
| | | console.log('getCode') |
| | | const { phone } = this |
| | | if (!phone || phone.length != 11) { |
| | | return Message.error('请输入正确的手机号') |
| | | } |
| | | sendSmsPost({ phone, type: 0 }).then(res => { |
| | | Message.success('短信发送成功') |
| | | this.downTime = 60 |
| | | let timer = setInterval(() => { |
| | | if (this.downTime == 0) { |
| | | return clearInterval(timer) |
| | | } |
| | | this.downTime-- |
| | | }, 1000) |
| | | }) |
| | | }, |
| | | tabClick(val) { |
| | | this.activeTab = val |
| | |
| | | background: url("../assets/images/login_img@2x.png"); |
| | | background-size: 100% 100%; |
| | | padding-left: 40px; |
| | | padding-top: 80px; |
| | | padding-top: 60px; |
| | | |
| | | .h2 { |
| | | color: $primary-color; |
| | | background-color: #fff; |
| | | height: 24px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border-radius: 4px; |
| | | width: 208px; |
| | | display: flex; |
| | | margin-bottom: 12px; |
| | | } |
| | | |
| | | .h3 { |
| | | font-size: 28px; |
| | |
| | | width: 100%; |
| | | align-items: center; |
| | | position: relative; |
| | | |
| | | .el-input { |
| | | height: 40px; |
| | | flex: 1; |
| | | |
| | | // font-size: 14px; |
| | | ::v-deep .el-input__inner { |
| | | height: 40px !important; |
| | |
| | | width: 100px; |
| | | margin-left: 10px; |
| | | } |
| | | .code_get{ |
| | | |
| | | .code_get { |
| | | position: absolute; |
| | | top: 10px; |
| | | right: 10px; |
| | |
| | | margin-left: 10px; |
| | | cursor: pointer; |
| | | color: $primary-color; |
| | | text-align: right; |
| | | } |
| | | |
| | | .downtime { |
| | | color: #999999; |
| | | } |
| | | } |
| | | |