From fdf0f9d0ae6659d4110aee59bcf9216f9e0fac7f Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期一, 02 十二月 2024 15:25:19 +0800
Subject: [PATCH] 1.登录页样式替换

---
 src/assets/images/bg3.webp     |    0 
 src/views/login/index.vue      |   71 ++----
 src/views/login/index_back.vue |  507 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 532 insertions(+), 46 deletions(-)

diff --git a/src/assets/images/bg3.webp b/src/assets/images/bg3.webp
new file mode 100644
index 0000000..4df6cdf
--- /dev/null
+++ b/src/assets/images/bg3.webp
Binary files differ
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 0398046..395054e 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -1,44 +1,7 @@
 <template>
   <div class="login-container">
+    <div class="bg" />
     <div class="login-container-center">
-      <el-carousel
-        :autoplay="true"
-        indicator-position="outside"
-        height="580px"
-        :interval="3000"
-        style="width: 500px;margin-left: 20px"
-      >
-        <el-carousel-item>
-          <img src="@/assets/images/img1.png" style="margin-top: -30px">
-          <div class="itemLabel">
-            <p class="title" :style="{color:$store.state.settings.theme}">鏅烘収鐗╄仈</p>
-            <p class="content">鐢熶骇鐜板満鏁版嵁瀹炴椂閲囬泦銆� 浼犻�掋�佸缁村害鍙鍖栧憟鐜�</p>
-          </div>
-        </el-carousel-item>
-        <el-carousel-item>
-          <img src="@/assets/images/img2.png" style="margin-top: -30px">
-          <div class="itemLabel">
-            <p class="title" :style="{color:$store.state.settings.theme}">绮剧泭鎬濈淮</p>
-            <p class="content">杩愮敤绮剧泭鎬濇兂鍜孖T绯荤粺鎶� 鏈墦閫犲伐鍘傚埗閫犲崗鍚屽钩鍙�</p>
-          </div>
-        </el-carousel-item>
-        <el-carousel-item>
-          <img src="@/assets/images/img3.png" style="margin-top: -30px">
-          <div class="itemLabel">
-            <p class="title" :style="{color:$store.state.settings.theme}">琛屼笟缁勪欢</p>
-            <p class="content">鍩轰簬鍒堕�犳ā鍨嬪揩閫熺伒娲诲湴 閰嶇疆瀹㈡埛涓撳睘鐨勫簲鐢ㄥ満鏅�</p>
-          </div>
-        </el-carousel-item>
-        <!--        <el-carousel-item v-for="item in carouselArr" :key="item.title">-->
-        <!--          <div :style="{ width:'200px',height:'300px' ,margin:'95px 0px 35px 155px'}">-->
-        <!--            <img :src="item.url" alt="" style="width: 200px;height: 300px">-->
-        <!--          </div>-->
-        <!--          <div class="itemLabel">-->
-        <!--            <div class="title">{{ item.title }}</div>-->
-        <!--            <div class="content">{{ item.content }}</div>-->
-        <!--          </div>-->
-        <!--        </el-carousel-item>-->
-      </el-carousel>
 
       <el-form
         ref="loginForm"
@@ -105,7 +68,8 @@
         <el-button
           :loading="loading"
           type="primary"
-          style="width:100%;margin-top:30px;letter-spacing: 10px;height: 40px;"
+          style="width:100%;margin-top:30px;letter-spacing: 10px;height: 40px;
+          background: #6e67fe !important;"
           @click.native.prevent="handleLogin"
         >鐧诲綍
         </el-button>
@@ -341,23 +305,38 @@
   min-height: 100%;
   width: 100%;
   //background-color: $bg;
+  background-color: #6e67fe;
   overflow: hidden;
-  background: url("../../assets/images/login_bg.png") no-repeat;
-  background-size: 100% 100%;
-  opacity: 1;
+  //background: url("../../assets/images/login_bg.png") no-repeat;
+  //background: url("../../assets/images/bg3.webp") no-repeat;
+  //background-size: 100% 100%;
+  //opacity: 1;
+
+  .bg{
+    background: url("../../assets/images/bg3.webp") no-repeat;
+    background-size: 100% 100%;
+    width: 60vw;
+    height: 100vh;
+    //margin-top: 10vh;
+
+  }
 
   .login-container-center {
-    width: 1000px;
+    //width: 1000px;
+    width: 546px;
     height: 600px;
     background-color: #fff;
     border-radius: 10px;
     z-index: 0.5;
     //浣跨洅瀛愬眳涓�
     position: absolute;
-    left: 50%;
-    top: 50%;
-    transform: translate(-50%, -50%);
+    right: 5vw;
+    top: calc(50vh - 300px);
+    //left: 50%;
+    //top: 50%;
+    //transform: translate(-50%, -50%);
 
+    //transform: scale(0.9);
     .itemLabel {
       display: flex;
       justify-content: center;
diff --git a/src/views/login/index_back.vue b/src/views/login/index_back.vue
new file mode 100644
index 0000000..0398046
--- /dev/null
+++ b/src/views/login/index_back.vue
@@ -0,0 +1,507 @@
+<template>
+  <div class="login-container">
+    <div class="login-container-center">
+      <el-carousel
+        :autoplay="true"
+        indicator-position="outside"
+        height="580px"
+        :interval="3000"
+        style="width: 500px;margin-left: 20px"
+      >
+        <el-carousel-item>
+          <img src="@/assets/images/img1.png" style="margin-top: -30px">
+          <div class="itemLabel">
+            <p class="title" :style="{color:$store.state.settings.theme}">鏅烘収鐗╄仈</p>
+            <p class="content">鐢熶骇鐜板満鏁版嵁瀹炴椂閲囬泦銆� 浼犻�掋�佸缁村害鍙鍖栧憟鐜�</p>
+          </div>
+        </el-carousel-item>
+        <el-carousel-item>
+          <img src="@/assets/images/img2.png" style="margin-top: -30px">
+          <div class="itemLabel">
+            <p class="title" :style="{color:$store.state.settings.theme}">绮剧泭鎬濈淮</p>
+            <p class="content">杩愮敤绮剧泭鎬濇兂鍜孖T绯荤粺鎶� 鏈墦閫犲伐鍘傚埗閫犲崗鍚屽钩鍙�</p>
+          </div>
+        </el-carousel-item>
+        <el-carousel-item>
+          <img src="@/assets/images/img3.png" style="margin-top: -30px">
+          <div class="itemLabel">
+            <p class="title" :style="{color:$store.state.settings.theme}">琛屼笟缁勪欢</p>
+            <p class="content">鍩轰簬鍒堕�犳ā鍨嬪揩閫熺伒娲诲湴 閰嶇疆瀹㈡埛涓撳睘鐨勫簲鐢ㄥ満鏅�</p>
+          </div>
+        </el-carousel-item>
+        <!--        <el-carousel-item v-for="item in carouselArr" :key="item.title">-->
+        <!--          <div :style="{ width:'200px',height:'300px' ,margin:'95px 0px 35px 155px'}">-->
+        <!--            <img :src="item.url" alt="" style="width: 200px;height: 300px">-->
+        <!--          </div>-->
+        <!--          <div class="itemLabel">-->
+        <!--            <div class="title">{{ item.title }}</div>-->
+        <!--            <div class="content">{{ item.content }}</div>-->
+        <!--          </div>-->
+        <!--        </el-carousel-item>-->
+      </el-carousel>
+
+      <el-form
+        ref="loginForm"
+        :model="loginForm"
+        :rules="loginRules"
+        class="login-form"
+        auto-complete="on"
+        label-position="left"
+      >
+
+        <div class="title-container">
+          <div class="title_img" />
+          <!--          <h3 class="title">鏂板嚡杩埗閫犱簯骞冲彴</h3>-->
+        </div>
+
+        <el-form-item prop="username">
+          <!--          <span class="svg-container">-->
+          <!--            <svg-icon icon-class="user" />-->
+          <!--          </span>-->
+          <el-input
+            ref="username"
+            v-model="loginForm.username"
+            placeholder="璇疯緭鍏ョ敤鎴风紪鐮�"
+            name="username"
+            type="text"
+            tabindex="1"
+            class="username"
+            style="width: 100%;"
+            auto-complete="on"
+            @blur="focus1=false"
+            @focus="focus1=true"
+          >
+            <i slot="prefix" :style="{color:focus1?'lightseagreen':'#C0C4CC'}" class="el-input__icon el-icon-user" />
+          </el-input>
+        </el-form-item>
+
+        <el-form-item prop="password" class="password">
+          <!--          <span class="svg-container">-->
+          <!--            <svg-icon icon-class="password" />-->
+          <!--          </span>-->
+          <el-input
+            :key="passwordType"
+            ref="password"
+            v-model="loginForm.password"
+            :type="passwordType"
+            placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�"
+            name="password"
+            tabindex="2"
+            style="width: 100%;"
+            auto-complete="on"
+            @keyup.enter.native="handleLogin"
+            @blur="focus2=false"
+            @focus="focus2=true"
+          >
+            <i slot="prefix" :style="{color:focus2?'lightseagreen':'#C0C4CC'}" class="el-input__icon el-icon-lock" />
+          </el-input>
+          <span class="show-pwd" @click="showPwd">
+            <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
+          </span>
+        </el-form-item>
+
+        <el-checkbox v-model="checkedPassword">璁颁綇瀵嗙爜</el-checkbox>
+
+        <el-button
+          :loading="loading"
+          type="primary"
+          style="width:100%;margin-top:30px;letter-spacing: 10px;height: 40px;"
+          @click.native.prevent="handleLogin"
+        >鐧诲綍
+        </el-button>
+
+        <!--        <div class="tips">-->
+        <!--          <span style="margin-right:20px;">username: admin</span>-->
+        <!--          <span> password: any</span>-->
+        <!--        </div>-->
+
+      </el-form>
+    </div>
+
+    <el-dialog
+      title="鎻愮ず"
+      :visible.sync="dialogVisible"
+      width="500px"
+      :close-on-click-modal="false"
+      :show-close="false"
+      top="5vh"
+      class="dialogVisible"
+    >
+      <div style="font-size:18px;">
+        <!--        <i class="el-icon-warning-outline" style="color: #ffef00" />-->
+        褰撳墠璐﹀彿宸茬櫥褰曪紝鏄惁寮哄埗涓嬬嚎!
+      </div>
+      <span slot="footer" class="dialog-footer">
+
+        <div class="footerButton">
+          <el-button @click="dialogVisibleCancel">鍚�</el-button>
+          <el-button type="primary" @click="dialogVisibleConfirm">鏄�</el-button>
+        </div>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { validUsername } from '@/utils/validate'
+import { getCookie, removeCookie, setCookie } from '@/utils/auth'
+import { ForcedOffline, UserTorgData } from '@/api/user'
+import { ButtonData } from '@/api/basicSettings'
+import Vue from 'vue'
+
+export default {
+  name: 'Login',
+  data() {
+    const validateUsername = (rule, value, callback) => {
+      // if (!validUsername(value)) {
+      //   callback(new Error('璇疯緭鍏ユ纭殑鐢ㄦ埛鍚嶏紒'))
+      // } else {
+      //   callback()
+      // }
+      // const mPattern = /^\w+$/ // 姝e垯 绛変环浜嶽A-Za-z0-9_]
+
+      if (value.length < 1) {
+        callback(new Error('鐢ㄦ埛缂栫爜涓嶈兘涓虹┖锛�'))
+      } else {
+        callback()
+      }
+      // if (value.length < 1) {
+      //   callback(new Error('璐﹀彿涓嶈兘涓虹┖锛�'))
+      // } else if (!mPattern.test(value)) {
+      //   callback(new Error('璐﹀彿涓嶇鍚堣鍒欙紝鍙緭鍏ュ瓧姣嶃�佹暟瀛楀強涓嬪垝绾�'))
+      // } else {
+      //   callback()
+      // }
+    }
+    const validatePassword = (rule, value, callback) => {
+      if (value.length < 1) {
+        callback(new Error('鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖锛�'))
+      } else {
+        callback()
+      }
+    }
+    return {
+      loginForm: {
+        username: '',
+        password: ''
+      },
+      loginRules: {
+        username: [{ required: true, trigger: ['blur', 'change'], validator: validateUsername }],
+        password: [{ required: true, trigger: ['blur', 'change'], validator: validatePassword }]
+      },
+      loading: false,
+      passwordType: 'password',
+      checkedPassword: false,
+      redirect: undefined,
+      focus1: false,
+      focus2: false,
+      dialogVisible: false
+    }
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect
+      },
+      immediate: true
+    }
+  },
+  mounted() {
+    const account = localStorage.getItem('account')
+    if (account) {
+      this.loginForm.username = localStorage.getItem('account')
+      this.loginForm.password = localStorage.getItem('password')
+      this.checkedPassword = true
+    }
+  },
+  methods: {
+    showPwd() {
+      if (this.passwordType === 'password') {
+        this.passwordType = ''
+      } else {
+        this.passwordType = 'password'
+      }
+      this.$nextTick(() => {
+        this.$refs.password.focus()
+      })
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true
+          this.$store.dispatch('user/login', this.loginForm).then(() => {
+            if (getCookie('code') === '302') {
+              this.dialogVisible = true
+            } else {
+              if (this.checkedPassword) {
+                localStorage.setItem('account', this.loginForm.username)
+                localStorage.setItem('password', this.loginForm.password)
+              } else {
+                localStorage.removeItem('account')
+                localStorage.removeItem('password')
+              }
+
+              this.$router.push({ path: this.redirect || '/' })
+              // ButtonData().then(res => {
+              //   localStorage.setItem('ButtonData', JSON.stringify(res.data))
+              // })
+              // UserTorgData({ usercode: getCookie('usercode') }).then(res => {
+              //   setCookie('username', res.data.user)
+              //   // sessionStorage.setItem('username', res.data.user)
+              //   sessionStorage.setItem('torg', JSON.stringify(res.data.torg))
+              // })
+            }
+            this.loading = false
+          }).catch(() => {
+            this.loading = false
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+
+    dialogVisibleCancel() {
+      // localStorage.removeItem('token')
+      this.dialogVisible = false
+    },
+    async dialogVisibleConfirm() {
+      const data = {
+        token: localStorage.getItem('token'),
+        rid: ''
+      }
+      const res = await ForcedOffline(data)
+      if (res.code === '200') {
+        this.$notify.success('寮哄埗涓嬬嚎鎴愬姛锛�')
+        this.dialogVisible = false
+        this.$router.push({ path: this.redirect || '/' })
+        // await this.handleLogin()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+/* 淇input 鑳屾櫙涓嶅崗璋� 鍜屽厜鏍囧彉鑹� */
+/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
+
+$bg: #283443;
+$light_gray: #000;
+$cursor: #000;
+
+@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
+  .login-container .el-input input {
+    color: $cursor;
+  }
+}
+
+/* reset element-ui css */
+.login-container {
+  .el-input {
+    display: inline-block;
+    height: 47px;
+    width: 85%;
+
+    input {
+      background: transparent;
+      border: 0px;
+      -webkit-appearance: none;
+      border-radius: 0px;
+      //padding: 12px 5px 12px 15px;
+      color: #000;;
+      height: 47px;
+      caret-color: $cursor; //鏀瑰彉鍏夋爣棰滆壊
+
+      &:-webkit-autofill {
+        box-shadow: 0 0 0px 1000px $bg inset !important;
+        -webkit-text-fill-color: $cursor !important;
+      }
+    }
+
+  }
+
+  .el-form-item {
+    border: 1px solid rgba(255, 255, 255, 0.1);
+    background: rgba(0, 0, 0, 0.1);
+    border-radius: 5px;
+    color: #454545;
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+$bg: #2d3a4b;
+$dark_gray: #889aa4;
+$light_gray: #eee;
+$main_color: #42b983;
+
+.login-container {
+  min-height: 100%;
+  width: 100%;
+  //background-color: $bg;
+  overflow: hidden;
+  background: url("../../assets/images/login_bg.png") no-repeat;
+  background-size: 100% 100%;
+  opacity: 1;
+
+  .login-container-center {
+    width: 1000px;
+    height: 600px;
+    background-color: #fff;
+    border-radius: 10px;
+    z-index: 0.5;
+    //浣跨洅瀛愬眳涓�
+    position: absolute;
+    left: 50%;
+    top: 50%;
+    transform: translate(-50%, -50%);
+
+    .itemLabel {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      flex-direction: column;
+    }
+
+    .title {
+      font-size: 20px;
+      color: lightseagreen;
+      margin-bottom: 10px;
+    }
+
+    .content {
+      width: 180px;
+    }
+
+    .login-form {
+      position: absolute;
+      width: 400px;
+      top: 134px;
+      right: 72px;
+    }
+
+  }
+
+  .tips {
+    font-size: 14px;
+    color: #000;
+    margin-bottom: 10px;
+
+    span {
+      &:first-of-type {
+        margin-right: 16px;
+      }
+    }
+  }
+
+  .svg-container {
+    padding: 6px 5px 6px 15px;
+    color: $dark_gray;
+    vertical-align: middle;
+    width: 30px;
+    display: inline-block;
+  }
+
+  .title-container {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+
+    .title_img {
+      background: url("../../assets/images/xkd_newlogo.png") no-repeat;
+      width: 300px;
+      height: 200px;
+      margin: -50px 0 20px;
+      background-size: 100% 100%;
+    }
+
+    .title {
+      font-size: 26px;
+      color: #000000;
+      margin: 0px auto 40px auto;
+      text-align: center;
+      //font-weight: lighter;
+
+    }
+  }
+
+  .show-pwd {
+    position: absolute;
+    right: 10px;
+    top: 7px;
+    font-size: 16px;
+    color: $dark_gray;
+    cursor: pointer;
+    user-select: none;
+  }
+
+  //.username{
+  //  border: 1px solid red;
+  //}
+
+  ::v-deep .el-input__inner {
+    border-radius: 5px;
+    background: #ffffff;
+    padding-left: 35px;
+    line-height: 40px;
+    border: 1px solid #eee;
+  }
+
+  ::v-deep .el-input__icon {
+    color: #000;
+  }
+
+  ::v-deep .el-input__inner:focus {
+    border: 1px solid $main_color;
+  }
+
+  ::v-deep .el-input__icon:focus {
+    color: $main_color;
+  }
+
+  ::v-deep .el-input input:-webkit-autofill {
+    -webkit-box-shadow: 0 0 0px 1000px #fff inset !important;
+    box-shadow: 0 0 0px 1000px #fff inset !important;
+    -webkit-text-fill-color: #000 !important;
+  }
+}
+
+::v-deep .el-dialog__title {
+  color: red;
+}
+
+::v-deep .el-dialog__body {
+  padding: 20px 20px !important;
+}
+
+::v-deep .el-dialog__footer {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.footerButton {
+  display: flex;
+  justify-content: end;
+}
+
+::v-deep .dialogVisible .el-button--primary {
+  background-color: #42b983 !important;
+  height: 30px;
+  display: flex;
+  align-items: center;
+  //border: 1px solid $main_color;
+  border: none;
+  padding: 0 20px;
+}
+
+::v-deep .dialogVisible .el-button--default {
+  height: 30px;
+  display: flex;
+  align-items: center;
+  padding: 0 20px;
+}
+
+</style>

--
Gitblit v1.9.3