|  |  |  | 
|---|
|  |  |  | <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: 186px; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|