From eb82684152ffb0acddf67da92e4533a0190eb258 Mon Sep 17 00:00:00 2001 From: MrShi <1878285526@qq.com> Date: 星期五, 10 十月 2025 18:27:31 +0800 Subject: [PATCH] 对接口 --- admin/src/views/login.vue | 133 +++++++++++++++++++++++++++++++++----------- 1 files changed, 99 insertions(+), 34 deletions(-) diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue index d0312a4..12a0bb7 100644 --- a/admin/src/views/login.vue +++ b/admin/src/views/login.vue @@ -3,6 +3,7 @@ <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"> @@ -42,14 +43,15 @@ <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> @@ -57,7 +59,8 @@ <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"> @@ -71,8 +74,9 @@ <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', @@ -82,7 +86,11 @@ isRemPsd: false, username: '', password: '', - activeTab: '1', + phone: '', + downTime: 0, + + smsCode: '', + activeTab: '0', // 楠岃瘉鐮� captcha: { loading: false, @@ -95,6 +103,7 @@ 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() @@ -106,41 +115,76 @@ 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 @@ -224,7 +268,20 @@ 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; @@ -314,9 +371,11 @@ width: 100%; align-items: center; position: relative; + .el-input { height: 40px; flex: 1; + // font-size: 14px; ::v-deep .el-input__inner { height: 40px !important; @@ -327,7 +386,8 @@ width: 100px; margin-left: 10px; } - .code_get{ + + .code_get { position: absolute; top: 10px; right: 10px; @@ -337,6 +397,11 @@ margin-left: 10px; cursor: pointer; color: $primary-color; + text-align: right; + } + + .downtime { + color: #999999; } } -- Gitblit v1.9.3