From 566c35444def62d13f0c76c3a8e642cd234b2b45 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期五, 19 九月 2025 14:16:52 +0800
Subject: [PATCH] ss
---
admin/src/views/login.vue | 220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 220 insertions(+), 0 deletions(-)
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
new file mode 100644
index 0000000..65d9460
--- /dev/null
+++ b/admin/src/views/login.vue
@@ -0,0 +1,220 @@
+<template>
+ <div class="wrap">
+ <div class="introduce">
+ <h2>璞嗙背璺宠烦瀹樼綉鍚庡彴绠$悊</h2>
+ <h3></h3>
+ </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>
+ </div>
+ <el-button :loading="loading" @click="login">鐧� 褰�</el-button>
+ </div>
+ </div>
+</template>
+
+<script>
+import { mapMutations } from 'vuex'
+import { getCaptcha, loginByPassword } from '@/api/system/common'
+
+export default {
+ name: 'Login',
+ data () {
+ return {
+ loading: false,
+ username: '',
+ password: '',
+ // 楠岃瘉鐮�
+ captcha: {
+ loading: false,
+ value: '',
+ uuid: '',
+ uri: ''
+ }
+ }
+ },
+ 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
+ },true)
+ .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)
+ })
+ },
+ /**
+ * 鐧诲綍鍓嶉獙璇�
+ *
+ * @returns {boolean}
+ * @private
+ */
+ __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.png");
+ 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:44px;
+ font-style: italic;
+ font-weight: 900;
+ margin-top: 0px;
+ }
+ 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 {
+ 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%);
+ }
+ }
+}
+</style>
--
Gitblit v1.9.3