From 78a173f85f8a4666d83cf8d900f04dd9f8e3e127 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 17 六月 2025 08:53:12 +0800
Subject: [PATCH] 提交一把订单
---
platform/src/views/login.vue | 496 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 300 insertions(+), 196 deletions(-)
diff --git a/platform/src/views/login.vue b/platform/src/views/login.vue
index 765944c..90ed866 100644
--- a/platform/src/views/login.vue
+++ b/platform/src/views/login.vue
@@ -1,210 +1,314 @@
<template>
- <div class="wrap">
- <div class="introduce">
- <h2>浜戞槗淇濆鎴锋湇鍔$郴缁�</h2>
- </div>
- <div class="login">
- <h1>绯荤粺鐧诲綍 / LOGIN IN</h1>
- <div class="info-input">
- <el-input v-model="username" placeholder="璇疯緭鍏ョ敤鎴峰悕" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/>
- <el-input v-model="password" placeholder="璇疯緭鍏ュ瘑鐮�" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/>
- <div class="captcha-input">
- <el-input v-model="captcha.value" placeholder="鍥剧墖楠岃瘉鐮�" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login"/>
- <img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha">
- <span v-else><i class="el-icon-loading"></i></span>
+ <div class="wrap">
+ <div class="introduce">
+ <h2>浜戞槗淇�</h2>
</div>
- </div>
- <el-button :loading="loading" @click="login">鐧� 褰�</el-button>
+ <div class="login">
+ <h1>绯荤粺鐧诲綍 / LOGIN IN</h1>
+ <div class="login_type">
+ <div :class="active === 1 ? 'login_type_item active' : 'login_type_item'" @click="handleClick(1)">璐﹀彿鐧诲綍</div>
+ <div :class="active === 2 ? 'login_type_item active' : 'login_type_item'" @click="handleClick(2)">鎵嬫満鐧诲綍</div>
+ </div>
+ <div class="info-input">
+ <template v-if="active === 1">
+ <el-input v-model="username" placeholder="璇疯緭鍏ョ敤鎴峰悕" prefix-icon="el-icon-user-solid" maxlength="50" v-trim/>
+ <el-input v-model="password" placeholder="璇疯緭鍏ュ瘑鐮�" type="password" prefix-icon="eva-icon-password" maxlength="30" show-password/>
+ <div class="captcha-input">
+ <el-input v-model="captcha.value" placeholder="鍥剧墖楠岃瘉鐮�" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login"/>
+ <img v-if="!captcha.loading" :src="captcha.uri" @click="refreshCaptcha">
+ <span v-else><i class="el-icon-loading"></i></span>
+ </div>
+ </template>
+ <template v-else>
+ <el-input v-model="phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" prefix-icon="el-icon-phone" maxlength="11" v-trim/>
+ <div class="captcha-input">
+ <el-input v-model="code" placeholder="璇疯緭鍏ラ獙璇佺爜" prefix-icon="eva-icon-shield" maxlength="4" @keypress.enter.native="login" v-trim/>
+ <el-button type="primary" style="width: 120px; margin-left: 20px;" @click="send" v-if="num === 0">鍙戦�侀獙璇佺爜</el-button>
+ <el-button type="primary" style="width: 120px; margin-left: 20px;" v-else>{{num}}</el-button>
+ </div>
+ </template>
+ </div>
+ <el-button :loading="loading" @click="login">鐧� 褰�</el-button>
+ </div>
</div>
- </div>
</template>
<script>
-import { mapMutations } from 'vuex'
-import { getCaptcha, loginByPassword } from '@/api/system/common'
+ import { mapMutations } from 'vuex'
+ import { getCaptcha, loginByPassword, loginByPhone } from '@/api/system/common'
+ import { sendSms } from '@/api/business/smsEmail'
-export default {
- name: 'Login',
- data () {
- return {
- loading: false,
- username: '',
- password: '',
- // 楠岃瘉鐮�
- captcha: {
- loading: false,
- value: '',
- uuid: '',
- uri: ''
- }
+ export default {
+ name: 'Login',
+ data () {
+ return {
+ loading: false,
+ username: '',
+ password: '',
+ phone: '',
+ code: '',
+ active: 1,
+ num: 0,
+ timer: null,
+ // 楠岃瘉鐮�
+ captcha: {
+ loading: false,
+ value: '',
+ uuid: '',
+ uri: ''
+ }
+ }
+ },
+ methods: {
+ ...mapMutations(['setUserInfo']),
+ handleClick(e) {
+ this.active = e
+ this.username = ''
+ this.password = ''
+ this.phone = ''
+ this.code = ''
+ },
+ send() {
+ if (!this.phone) {
+ this.$message.warning('璇峰厛杈撳叆鎵嬫満鍙�')
+ return
+ }
+ var reg = /^1[3456789]\d{9}$/;
+ if (!reg.test(this.phone)) {
+ this.$message.warning('鎵嬫満鍙蜂笉鍚堟硶')
+ return
+ }
+ sendSms({
+ phone: this.phone
+ }).then(res => {
+ this.num = 60
+ this.setTimer()
+ })
+ },
+ setTimer () {
+ this.timer = setInterval(() => {
+ if (this.num === 0) {
+ this.num = 0
+ clearInterval(this.timer)
+ this.timer = null
+ return
+ }
+ this.num -= 1
+ }, 1000)
+ },
+ // 鐧诲綍
+ login () {
+ if (this.loading) {
+ return
+ }
+ if (this.active === 1) {
+ 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(() => {
+ window.location.href = process.env.VUE_APP_CONTEXT_PATH
+ })
+ .catch(e => {
+ this.refreshCaptcha()
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
+ } else {
+ if (!this.phone) {
+ this.$tip.error('璇疯緭鍏ユ墜鏈哄彿')
+ return
+ }
+ if (!this.code) {
+ this.$tip.error('璇疯緭鍏ラ獙璇佺爜')
+ return
+ }
+ this.loading = true
+ loginByPhone({
+ phone: this.phone,
+ code: this.code.trim()
+ })
+ .then(() => {
+ window.location.href = process.env.VUE_APP_CONTEXT_PATH
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.loading = false
+ })
+ }
+ },
+ // 鍒锋柊楠岃瘉鐮�
+ refreshCaptcha () {
+ this.captcha.loading = true
+ getCaptcha()
+ .then(data => {
+ this.captcha.uri = data.image
+ this.captcha.uuid = data.uuid
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ setTimeout(() => {
+ this.captcha.loading = false
+ }, 150)
+ })
+ },
+ // 鐧诲綍鍓嶉獙璇�
+ __check () {
+ if (this.username.trim() === '') {
+ this.$tip.error('璇疯緭鍏ョ敤鎴峰悕')
+ return false
+ }
+ if (this.password === '') {
+ this.$tip.error('璇疯緭鍏ュ瘑鐮�')
+ return false
+ }
+ if (this.captcha.value.trim() === '') {
+ this.$tip.error('璇疯緭鍏ュ浘鐗囬獙璇佺爜')
+ return false
+ }
+ return true
+ }
+ },
+ created () {
+ this.refreshCaptcha()
+ }
}
- },
- methods: {
- ...mapMutations(['setUserInfo']),
- // 鐧诲綍
- login () {
- 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(() => {
- window.location.href = process.env.VUE_APP_CONTEXT_PATH
- })
- .catch(e => {
- this.refreshCaptcha()
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- this.loading = false
- })
- },
- // 鍒锋柊楠岃瘉鐮�
- refreshCaptcha () {
- this.captcha.loading = true
- getCaptcha()
- .then(data => {
- this.captcha.uri = data.image
- this.captcha.uuid = data.uuid
- })
- .catch(e => {
- this.$tip.apiFailed(e)
- })
- .finally(() => {
- setTimeout(() => {
- this.captcha.loading = false
- }, 150)
- })
- },
- // 鐧诲綍鍓嶉獙璇�
- __check () {
- if (this.username.trim() === '') {
- this.$tip.error('璇疯緭鍏ョ敤鎴峰悕')
- return false
- }
- if (this.password === '') {
- this.$tip.error('璇疯緭鍏ュ瘑鐮�')
- return false
- }
- if (this.captcha.value.trim() === '') {
- this.$tip.error('璇疯緭鍏ュ浘鐗囬獙璇佺爜')
- return false
- }
- return true
- }
- },
- created () {
- this.refreshCaptcha()
- }
-}
</script>
<style scoped lang="scss">
-@import "@/assets/style/variables.scss";
-$input-gap: 30px;
-.wrap {
- display: flex;
- width: 100%;
- height: 100vh;
- background-image: url("../assets/images/login.jpg");
- background-repeat: no-repeat;
- background-size: auto 180%;
- background-clip: content-box;
- background-position: center;
- // 宸﹁竟浠嬬粛
- .introduce {
- padding-left: 10%;
- width: 100%;
- height: 100%;
- box-sizing: border-box;
- color: #fff;
- background: rgba(0, 0, 0, 0.4);
- display: flex;
- flex-direction: column;
- justify-content: center;
- h2 {
- font-size:34px;
- font-style: italic;
- font-weight: 900;
- margin-top: 50px;
- }
- h3 {
- font-size: 49px;
- font-weight: 300;
- margin: 25px 0;
- }
- }
- // 鍙宠竟鐧诲綍
- .login {
- height: 100%;
- width: 38%;
- max-width: 560px;
- min-width: 460px;
- flex-shrink: 0;
- text-align: center;
- background: #fff;
- padding: 0 80px;
- display: flex;
- flex-direction: column;
- justify-content: center;
- box-sizing: border-box;
- h1 {
- font-size: 28px;
- font-weight: 500;
- }
- .info-input {
- margin-top: $input-gap;
- margin-bottom: 60px;
- /deep/ .el-input {
- margin-top: 30px;
- .el-input__inner {
- height: 50px;
- background: #F9F9F9;
- border: 1px solid transparent;
- &:focus {
- border: 1px solid $primary-color;
- }
- }
- }
- }
- // 楠岃瘉鐮佽緭鍏�
- .captcha-input {
- display: flex;
- margin-top: $input-gap;
- height: 50px;
- .el-input {
- width: 100%;
- margin-top: 0;
- }
- span, img {
- width: 45%;
- height: 100%;
- flex-shrink: 0;
- margin-left: 16px;
- }
- span {
+ @import "@/assets/style/variables.scss";
+ $input-gap: 30px;
+ .wrap {
display: flex;
- align-items: center;
- justify-content: center;
- background: #f7f7f7;
- border-radius: 8px;
- }
+ width: 100%;
+ height: 100vh;
+ background-image: url("../assets/images/login.jpg");
+ background-repeat: no-repeat;
+ background-size: auto 180%;
+ background-clip: content-box;
+ background-position: center;
+ // 宸﹁竟浠嬬粛
+ .introduce {
+ padding-left: 10%;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+ color: #fff;
+ background: rgba(0, 0, 0, 0.4);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ h2 {
+ font-size:34px;
+ font-style: italic;
+ font-weight: 900;
+ margin-top: 50px;
+ }
+ h3 {
+ font-size: 49px;
+ font-weight: 300;
+ margin: 25px 0;
+ }
+ }
+ // 鍙宠竟鐧诲綍
+ .login {
+ height: 100%;
+ width: 38%;
+ max-width: 560px;
+ min-width: 460px;
+ flex-shrink: 0;
+ text-align: center;
+ background: #fff;
+ padding: 0 80px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ box-sizing: border-box;
+ h1 {
+ font-size: 28px;
+ font-weight: 500;
+ }
+ .login_type {
+ width: 100%;
+ height: 50px;
+ display: flex;
+ align-items: center;
+ margin: 20px 0;
+ .active {
+ box-sizing: border-box;
+ color: rgba(64, 106, 255, 0.996) !important;
+ border-bottom: 1px solid rgba(64, 106, 255, 0.996) !important;
+ }
+ .login_type_item {
+ flex: 1;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: black;
+ font-size: 14px;
+ cursor: pointer;
+ }
+ }
+ .info-input {
+ margin-bottom: 60px;
+ /deep/ .el-input {
+ margin-top: 30px;
+ &:first-child {
+ margin-top: 0 !important;
+ }
+ .el-input__inner {
+ height: 50px;
+ background: #F9F9F9;
+ border: 1px solid transparent;
+ &:focus {
+ border: 1px solid $primary-color;
+ }
+ }
+ }
+ }
+ // 楠岃瘉鐮佽緭鍏�
+ .captcha-input {
+ display: flex;
+ margin-top: $input-gap;
+ height: 50px;
+ .el-input {
+ width: 100%;
+ margin-top: 0;
+ }
+ span, img {
+ width: 45%;
+ height: 100%;
+ flex-shrink: 0;
+ margin-left: 16px;
+ }
+ span {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #f7f7f7;
+ border-radius: 8px;
+ }
+ }
+ .el-button {
+ height: 50px;
+ width: 100%;
+ color: #fff;
+ font-size: 16px;
+ background: linear-gradient(130deg, $primary-color + 20 0%, $primary-color - 20 100%);
+ }
+ }
}
- .el-button {
- height: 50px;
- width: 100%;
- color: #fff;
- font-size: 16px;
- background: linear-gradient(130deg, $primary-color + 20 0%, $primary-color - 20 100%);
- }
- }
-}
</style>
--
Gitblit v1.9.3