Jelajahi Sumber

登录样式修改,svg暂时没用到

gcz 3 tahun lalu
induk
melakukan
c69e894ace
7 mengubah file dengan 538 tambahan dan 299 penghapusan
  1. 384 0
      src/views/login copy.vue
  2. 150 299
      src/views/login.vue
  3. TEMPAT SAMPAH
      static/images/background.png
  4. 1 0
      static/svg/logo.svg
  5. 1 0
      static/svg/password.svg
  6. 1 0
      static/svg/user.svg
  7. 1 0
      static/svg/validCode.svg

+ 384 - 0
src/views/login copy.vue

@@ -0,0 +1,384 @@
+<template>
+  <div class="login-container">
+    <el-row>
+      <el-col :xs="24" :sm="24" :md="12" :lg="16" :xl="16">
+        <div style="color: transparent">占位符</div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+        <el-form
+          ref="form"
+          :model="form"
+          :rules="rules"
+          class="login-form"
+          label-position="left"
+        >
+          <div class="title">hello !</div>
+          <div class="title-tips">欢迎来到{{ title }}!</div>
+          <el-form-item style="margin-top: 40px" prop="username">
+            <span class="svg-container svg-container-admin">
+              <i class="el-icon-user-solid"></i>
+            </span>
+            <el-input
+              v-model.trim="form.username"
+              v-focus
+              placeholder="请输入用户名"
+              tabindex="1"
+              type="text"
+            />
+          </el-form-item>
+          <el-form-item prop="password">
+            <span class="svg-container">
+              <i class="el-icon-more"></i>
+            </span>
+            <el-input
+              :key="passwordType"
+              ref="password"
+              v-model.trim="form.password"
+              :type="passwordType"
+              tabindex="2"
+              placeholder="请输入密码"
+              maxlength="16"
+              @keyup.enter.native="handleLogin"
+            />
+            <span
+              v-if="passwordType === 'password'"
+              class="show-password"
+              @click="handlePassword"
+            >
+              <i class="el-icon-view"></i>
+            </span>
+            <span v-else class="show-password" @click="handlePassword">
+              <i class="el-icon-edit"></i>
+            </span>
+          </el-form-item>
+          <el-form-item
+            style="
+              display: flex;
+              flex-wrap: nowrap;
+              flex-direction: column;
+              flejustify-content: space-between;
+            "
+            prop="code"
+          >
+            <span class="svg-container svg-container-admin">
+              <i class="el-icon-s-help"></i>
+            </span>
+            <el-input
+              style="width: 60%"
+              v-model.trim="form.code"
+              v-focus
+              placeholder="请输入验证码"
+              tabindex="1"
+              type="text"
+            />
+            <img
+              class="code-img middle-img"
+              :src="codeImg"
+              alt=""
+              @click="handelGetCaptcha"
+            />
+          </el-form-item>
+          <el-button
+            :loading="loading"
+            class="login-btn"
+            type="primary"
+            @click="handleLogin"
+          >
+            登录
+          </el-button>
+          <router-link to="/register">
+            <div style="margin-top: 20px">注册</div>
+          </router-link>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { getCaptcha, login } from "@/utils/api.js";
+
+export default {
+  name: "Login",
+  inject: ["reload"],
+  directives: {
+    focus: {
+      inserted(el) {
+        el.querySelector("input").focus();
+      },
+    },
+  },
+  data() {
+    return {
+      nodeEnv: process.env.NODE_ENV,
+      title: "",
+      form: {
+        username: "ry123456",
+        password: "asd123fsadf@$!~",
+        // username: "ceshi001",
+        // password: "Py6z99qNy8BKf4",
+        code: "",
+        uuid: "",
+      },
+      rules: {
+        username: [
+          {
+            required: true,
+            pattern: /^[a-zA-Z][0-9a-zA-Z]{6,20}$/,
+            message: "请输入规则的用户名",
+            trigger: "blur",
+          },
+        ],
+        password: [
+          {
+            required: true,
+            pattern:
+              /((^(?=.*[a-z])(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-Z\W]{8,16}$))/,
+            message:
+              "请输入8-16位字符、大小写字母、数字、特殊字符,任意三种组合密码",
+            trigger: "blur",
+          },
+        ],
+        code: [
+          {
+            required: true,
+            message: "请输入验证码",
+            trigger: "blur",
+          },
+        ],
+      },
+      loading: false,
+      passwordType: "password",
+      redirect: undefined,
+      codeImg: "",
+    };
+  },
+  watch: {
+    $route: {
+      handler(route) {
+        // console.log("fromUrl", localStorage.getItem("fromUrl"));
+        this.redirect = localStorage.getItem("fromUrl");
+        // this.redirect = (route.query && route.query.redirect) || "/";
+      },
+      immediate: true,
+    },
+  },
+  created() {
+    this.title = this.webTitle;
+    this.handelGetCaptcha();
+    document.body.style.overflow = "hidden";
+  },
+  beforeDestroy() {
+    document.body.style.overflow = "auto";
+  },
+  mounted() {},
+  methods: {
+    handelGetCaptcha() {
+      getCaptcha()
+        .then((res) => {
+          this.codeImg = res.data.image;
+          this.form.uuid = res.data.key;
+          console.log("getCaptcha", res);
+        })
+        .catch((err) => {
+          console.log("getCaptcha err", err);
+        });
+    },
+    handlePassword() {
+      this.passwordType === "password"
+        ? (this.passwordType = "")
+        : (this.passwordType = "password");
+      this.$nextTick(() => {
+        this.$refs.password.focus();
+      });
+    },
+    handleLogin() {
+      let that = this;
+      let backUrl = "/";
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.loading = true;
+          console.log("this.form", this.form);
+          login(this.form)
+            .then((res) => {
+              this.$mc.vuex("vuex_token", res.data.access_token);
+              this.$message(res.msg);
+
+              const routerPath =
+                that.redirect === "/404" || that.redirect === "/401"
+                  ? "/"
+                  : that.redirect;
+              if (that.redirect) {
+                backUrl = that.redirect.split()[0];
+              }
+              //   console.log("that.redirect", that.redirect);
+              localStorage.removeItem("fromUrl");
+              this.reload();
+              location.href = backUrl;
+
+              //   that.$router.replace("/jobdetails").catch(() => {});
+              that.loading = false;
+
+              console.log("login", res);
+            })
+            .catch((err) => {
+              this.loading = false;
+              console.log("login err", err);
+            });
+        } else {
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+$base-input-height: 32px;
+$base-font-size-small: 12px;
+$base-color-red: #f34d37;
+$base-font-color: #606266;
+.login-container {
+  height: 100vh;
+  background: url("../../static/images/background.png") center center fixed
+    no-repeat;
+  background-size: cover;
+
+  .title {
+    font-size: 54px;
+    font-weight: 500;
+    color: rgba(14, 18, 26, 1);
+  }
+
+  .title-tips {
+    margin-top: 29px;
+    font-size: 26px;
+    font-weight: 400;
+    color: rgba(14, 18, 26, 1);
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+
+  .login-btn {
+    display: inherit;
+    width: 220px;
+    height: 60px;
+    margin-top: 5px;
+    border: 0;
+
+    &:hover {
+      opacity: 0.9;
+    }
+  }
+
+  .login-form {
+    position: relative;
+    max-width: 100%;
+    margin: calc((100vh - 425px) / 2) 10% 10%;
+    overflow: hidden;
+
+    .forget-password {
+      width: 100%;
+      margin-top: 40px;
+      text-align: left;
+
+      .forget-pass {
+        width: 129px;
+        height: 19px;
+        font-size: 20px;
+        font-weight: 400;
+        color: rgba(92, 102, 240, 1);
+      }
+    }
+  }
+
+  .tips {
+    margin-bottom: 10px;
+    font-size: 14px;
+    color: #ddd;
+    span {
+      &:first-of-type {
+        margin-right: 16px;
+      }
+    }
+  }
+
+  .title-container {
+    position: relative;
+
+    .title {
+      margin: 0 auto 40px auto;
+      font-size: 34px;
+      font-weight: bold;
+      color: blue;
+      text-align: center;
+    }
+  }
+
+  .svg-container {
+    position: absolute;
+    top: 14px;
+    left: 15px;
+    z-index: 999;
+    font-size: 16px;
+    color: #d7dee3;
+    cursor: pointer;
+    user-select: none;
+  }
+
+  .show-password {
+    position: absolute;
+    top: 14px;
+    right: 25px;
+    font-size: 16px;
+    color: #d7dee3;
+    cursor: pointer;
+    user-select: none;
+  }
+
+  ::v-deep {
+    .el-form-item {
+      padding-right: 0;
+      margin: 20px 0;
+      color: #454545;
+      background: transparent;
+      border: 1px solid transparent;
+      border-radius: 2px;
+
+      &__content {
+        min-height: $base-input-height;
+        line-height: $base-input-height;
+      }
+
+      &__error {
+        position: absolute;
+        top: 100%;
+        left: 18px;
+        font-size: $base-font-size-small;
+        line-height: 18px;
+        color: $base-color-red;
+      }
+    }
+
+    .el-input {
+      box-sizing: border-box;
+
+      input {
+        height: 58px;
+        padding-left: 45px;
+        font-size: 14px;
+        line-height: 58px;
+        color: $base-font-color;
+        background: #f6f4fc;
+        border: 0;
+        caret-color: $base-font-color;
+      }
+    }
+  }
+}
+.code-img {
+  margin-left: 10px;
+  cursor: pointer;
+}
+</style>

+ 150 - 299
src/views/login.vue

@@ -1,103 +1,72 @@
 <template>
-  <div class="login-container">
-    <el-row>
-      <el-col :xs="24" :sm="24" :md="12" :lg="16" :xl="16">
-        <div style="color: transparent">占位符</div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
-        <el-form
-          ref="form"
-          :model="form"
-          :rules="rules"
-          class="login-form"
-          label-position="left"
+  <div class="login">
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+      <h3 class="title">
+        <!-- <svg-icon icon-class="logo" /> -->
+        {{ loginTitle }}</h3>
+      <el-form-item prop="username">
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
+          <i  slot="prefix" class="el-icon-user-solid input-icon"></i>
+          <!-- <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> -->
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
         >
-          <div class="title">hello !</div>
-          <div class="title-tips">欢迎来到{{ title }}!</div>
-          <el-form-item style="margin-top: 40px" prop="username">
-            <span class="svg-container svg-container-admin">
-              <i class="el-icon-user-solid"></i>
-            </span>
-            <el-input
-              v-model.trim="form.username"
-              v-focus
-              placeholder="请输入用户名"
-              tabindex="1"
-              type="text"
-            />
-          </el-form-item>
-          <el-form-item prop="password">
-            <span class="svg-container">
-              <i class="el-icon-more"></i>
-            </span>
-            <el-input
-              :key="passwordType"
-              ref="password"
-              v-model.trim="form.password"
-              :type="passwordType"
-              tabindex="2"
-              placeholder="请输入密码"
-              maxlength="16"
-              @keyup.enter.native="handleLogin"
-            />
-            <span
-              v-if="passwordType === 'password'"
-              class="show-password"
-              @click="handlePassword"
-            >
-              <i class="el-icon-view"></i>
-            </span>
-            <span v-else class="show-password" @click="handlePassword">
-              <i class="el-icon-edit"></i>
-            </span>
-          </el-form-item>
-          <el-form-item
-            style="
-              display: flex;
-              flex-wrap: nowrap;
-              flex-direction: column;
-              flejustify-content: space-between;
-            "
-            prop="code"
-          >
-            <span class="svg-container svg-container-admin">
-              <i class="el-icon-s-help"></i>
-            </span>
-            <el-input
-              style="width: 60%"
-              v-model.trim="form.code"
-              v-focus
-              placeholder="请输入验证码"
-              tabindex="1"
-              type="text"
-            />
-            <img
-              class="code-img middle-img"
-              :src="codeImg"
-              alt=""
-              @click="handelGetCaptcha"
-            />
-          </el-form-item>
-          <el-button
-            :loading="loading"
-            class="login-btn"
-            type="primary"
-            @click="handleLogin"
-          >
-            登录
-          </el-button>
-          <router-link to="/register">
-            <div style="margin-top: 20px">注册</div>
-          </router-link>
-        </el-form>
-      </el-col>
-    </el-row>
+        <i  slot="prefix" class="el-icon-lock input-icon"></i>
+          <!-- <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />0 -->
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="code">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+              style="width: 63%;"
+          @keyup.enter.native="handleLogin"
+        >
+        <i  slot="prefix" class="el-icon-mobile input-icon"></i>
+          <!-- <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> -->
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox> -->
+      <el-form-item style="width:100%;">
+        
+        <el-button
+          :loading="loading"
+          size="medium"
+          style="width:100%;background:#3d5d4c;color:#fff"
+              class="login-form-loginbtn"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading" >登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <!-- <div class="el-login-footer">
+      <span>Copyright © 2018-2021 ****** All Rights Reserved.</span>
+    </div>-->
   </div>
 </template>
 
 <script>
+// import { getCodeImg } from "@/api/login";
 import { getCaptcha, login } from "@/utils/api.js";
 
+// // import Cookies from "js-cookie";
+// import { encrypt, decrypt } from '@/utils/jsencrypt';
+// const loginAppProjectKey = process.env.VUE_APP_PROJECT_KEY + '-';
+
 export default {
   name: "Login",
   inject: ["reload"],
@@ -110,96 +79,60 @@ export default {
   },
   data() {
     return {
-      nodeEnv: process.env.NODE_ENV,
-      title: "",
-      form: {
-        username: "ry123456",
-        password: "asd123fsadf@$!~",
-        // username: "ceshi001",
-        // password: "Py6z99qNy8BKf4",
+      loginTitle: '',
+      codeUrl: "",
+      cookiePassword: "",
+      loginForm: {
+        username: "",
+        password: "",
+        rememberMe: false,
         code: "",
-        uuid: "",
+        uuid: ""
       },
-      rules: {
+      loginRules: {
         username: [
-          {
-            required: true,
-            pattern: /^[a-zA-Z][0-9a-zA-Z]{6,20}$/,
-            message: "请输入规则的用户名",
-            trigger: "blur",
-          },
+          { required: true, trigger: "blur", message: "用户名不能为空" }
         ],
         password: [
-          {
-            required: true,
-            pattern:
-              /((^(?=.*[a-z])(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[A-Z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*\W)[\da-zA-Z\W]{8,16}$)|(^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-Z\W]{8,16}$))/,
-            message:
-              "请输入8-16位字符、大小写字母、数字、特殊字符,任意三种组合密码",
-            trigger: "blur",
-          },
-        ],
-        code: [
-          {
-            required: true,
-            message: "请输入验证码",
-            trigger: "blur",
-          },
+          { required: true, trigger: "blur", message: "密码不能为空" }
         ],
+        code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
       },
       loading: false,
-      passwordType: "password",
-      redirect: undefined,
-      codeImg: "",
+      redirect: undefined
     };
   },
   watch: {
     $route: {
-      handler(route) {
-        // console.log("fromUrl", localStorage.getItem("fromUrl"));
-        this.redirect = localStorage.getItem("fromUrl");
-        // this.redirect = (route.query && route.query.redirect) || "/";
+      handler: function(route) {
+         this.redirect = localStorage.getItem("fromUrl");
       },
-      immediate: true,
-    },
+      immediate: true
+    }
   },
   created() {
-    this.title = this.webTitle;
-    this.handelGetCaptcha();
-    document.body.style.overflow = "hidden";
-  },
-  beforeDestroy() {
-    document.body.style.overflow = "auto";
+    this.loginTitle = this.webTitle;
+    if (process.env.NODE_ENV === 'development') {
+      this.loginForm.username = 'ry123456';
+      this.loginForm.password = 'asd123fsadf@$!~';
+    }
+    this.getCode();
   },
-  mounted() {},
   methods: {
-    handelGetCaptcha() {
-      getCaptcha()
-        .then((res) => {
-          this.codeImg = res.data.image;
-          this.form.uuid = res.data.key;
-          console.log("getCaptcha", res);
-        })
-        .catch((err) => {
-          console.log("getCaptcha err", err);
-        });
-    },
-    handlePassword() {
-      this.passwordType === "password"
-        ? (this.passwordType = "")
-        : (this.passwordType = "password");
-      this.$nextTick(() => {
-        this.$refs.password.focus();
+    getCode() {
+      getCaptcha().then(res => {
+        this.codeUrl =   res.data.image;
+        this.loginForm.uuid = res.data.key;
       });
     },
     handleLogin() {
       let that = this;
       let backUrl = "/";
-      this.$refs.form.validate((valid) => {
+      this.$refs.loginForm.validate((valid) => {
         if (valid) {
           this.loading = true;
-          console.log("this.form", this.form);
-          login(this.form)
+          console.log("this.loginForm", this.loginForm);
+          login(this.loginForm)
             .then((res) => {
               this.$mc.vuex("vuex_token", res.data.access_token);
               this.$message(res.msg);
@@ -229,156 +162,74 @@ export default {
           return false;
         }
       });
-    },
-  },
+    }
+  }
 };
 </script>
 
-<style lang="scss" scoped>
-$base-input-height: 32px;
-$base-font-size-small: 12px;
-$base-color-red: #f34d37;
-$base-font-color: #606266;
-.login-container {
-  height: 100vh;
-  background: url("../../static/images/background.jpg") center center fixed
-    no-repeat;
+<style rel="stylesheet/scss" lang="scss">
+#app{
+  min-height: 100vh;
+}
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  min-height: 100vh;
+  background-image: url("../../static/images/background.png");
   background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: center;
+  color: #707070;
+}
 
-  .title {
-    font-size: 54px;
-    font-weight: 500;
-    color: rgba(14, 18, 26, 1);
-  }
-
-  .title-tips {
-    margin-top: 29px;
-    font-size: 26px;
-    font-weight: 400;
-    color: rgba(14, 18, 26, 1);
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-
-  .login-btn {
-    display: inherit;
-    width: 220px;
-    height: 60px;
-    margin-top: 5px;
-    border: 0;
-
-    &:hover {
-      opacity: 0.9;
-    }
-  }
-
-  .login-form {
-    position: relative;
-    max-width: 100%;
-    margin: calc((100vh - 425px) / 2) 10% 10%;
-    overflow: hidden;
-
-    .forget-password {
-      width: 100%;
-      margin-top: 40px;
-      text-align: left;
-
-      .forget-pass {
-        width: 129px;
-        height: 19px;
-        font-size: 20px;
-        font-weight: 400;
-        color: rgba(92, 102, 240, 1);
-      }
-    }
-  }
-
-  .tips {
-    margin-bottom: 10px;
-    font-size: 14px;
-    color: #ddd;
-    span {
-      &:first-of-type {
-        margin-right: 16px;
-      }
-    }
-  }
-
-  .title-container {
-    position: relative;
-
-    .title {
-      margin: 0 auto 40px auto;
-      font-size: 34px;
-      font-weight: bold;
-      color: blue;
-      text-align: center;
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 400px;
+  padding: 25px 25px 5px 25px;
+  .el-input {
+    height: 38px;
+    input {
+      height: 38px;
     }
   }
-
-  .svg-container {
-    position: absolute;
-    top: 14px;
-    left: 15px;
-    z-index: 999;
-    font-size: 16px;
-    color: #d7dee3;
-    cursor: pointer;
-    user-select: none;
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
   }
-
-  .show-password {
-    position: absolute;
-    top: 14px;
-    right: 25px;
-    font-size: 16px;
-    color: #d7dee3;
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 38px;
+  float: right;
+  img {
     cursor: pointer;
-    user-select: none;
-  }
-
-  ::v-deep {
-    .el-form-item {
-      padding-right: 0;
-      margin: 20px 0;
-      color: #454545;
-      background: transparent;
-      border: 1px solid transparent;
-      border-radius: 2px;
-
-      &__content {
-        min-height: $base-input-height;
-        line-height: $base-input-height;
-      }
-
-      &__error {
-        position: absolute;
-        top: 100%;
-        left: 18px;
-        font-size: $base-font-size-small;
-        line-height: 18px;
-        color: $base-color-red;
-      }
-    }
-
-    .el-input {
-      box-sizing: border-box;
-
-      input {
-        height: 58px;
-        padding-left: 45px;
-        font-size: 14px;
-        line-height: 58px;
-        color: $base-font-color;
-        background: #f6f4fc;
-        border: 0;
-        caret-color: $base-font-color;
-      }
-    }
+    vertical-align: middle;
   }
 }
-.code-img {
-  margin-left: 10px;
-  cursor: pointer;
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+.login-code-img {
+  height: 38px;
 }
-</style>
+</style>

TEMPAT SAMPAH
static/images/background.png


+ 1 - 0
static/svg/logo.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M516.02678405 28.17645118l159.1463069 322.46479276 355.86137871 51.70878485-259.76722991 250.69635938 59.92826312 356.50675967-319.48674824-171.38208884-320.00542112 168.46329399 62.12510712-357.94427915L1.02001158 397.53338008l355.28983415-49.32507397z" fill="#F0D39B" /><path d="M798.96570429 969.65536198l-288.77286329-154.10906227-290.66251266 150.51662832 57.33215874-322.26242606-232.97029173-229.92479092 324.20677139-45.05808983 146.67898903-292.61779591 143.03824337 294.41355524 323.6233777 49.07713108-235.80431021 227.01784518z" fill="#EE100F" /><path d="M514.77795577 76.19982531v483.99663286l143.03824337-189.58216643z" fill="#940000" /><path d="M514.77795577 560.19554699l466.66070989-140.50503536-235.80339903 227.01693402zM798.96570429 969.65536198l-284.18774852-409.45890381-4.58511477 255.34984154zM219.53032834 966.06201689l295.24762743-405.8664699-237.91546869 83.60586613z" fill="#940000" /><path d="M43.89219535 413.87571105l470.88576042 146.31983594-146.67898903-191.37883897z" fill="#940000" /><path d="M444.84903971 602.54358881l-43.21310757-10.0079463 63.17795291-191.08258223 42.11924136 8.37900013-62.0840867 192.7115284z m154.25308634-0.93160677l-72.47761985-190.85013715 41.29884269-9.7755012 74.11841717 190.38433377-42.93964001 10.24130458zM407.65400852 701.69144293H635.47766975v32.5843918H407.65400852z" fill="#C94C3E" /><path d="M432.54124373 593.00053476l-43.21219441-10.00794629 63.17795089-191.08258225 42.11924134 8.37900013-62.08499782 192.71152841z m154.25308631-0.93069562l-72.47670867-190.85013716 41.29793154-9.77549917 74.11841717 190.38433176-42.93964004 10.24130457zM395.34621456 692.15021121h227.82457038v32.58348065h-227.82457038z" fill="#F5D7A2" /></svg>

+ 1 - 0
static/svg/password.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1575802846045" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2750" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M868.593046 403.832442c-30.081109-28.844955-70.037123-44.753273-112.624057-44.753273L265.949606 359.079168c-42.554188 0-82.510202 15.908318-112.469538 44.690852-30.236652 28.782533-46.857191 67.222007-46.857191 108.198258l0 294.079782c0 40.977273 16.619516 79.414701 46.702672 108.136859 29.959336 28.844955 70.069869 44.814672 112.624057 44.814672l490.019383 0c42.585911 0 82.696444-15.969717 112.624057-44.814672 30.082132-28.844955 46.579875-67.222007 46.579875-108.136859L915.172921 511.968278C915.171897 471.053426 898.675178 432.677397 868.593046 403.832442zM841.821309 806.049083c0 22.098297-8.882298 42.772152-25.099654 58.306964-16.154935 15.661701-37.81935 24.203238-60.752666 24.203238L265.949606 888.559285c-22.934339 0-44.567032-8.54256-60.877509-24.264637-16.186657-15.474436-25.067932-36.148291-25.067932-58.246589L180.004165 511.968278c0-22.035876 8.881274-42.772152 25.192775-58.307987 16.186657-15.536858 37.81935-24.139793 60.753689-24.139793l490.019383 0c22.933315 0 44.597731 8.602935 60.752666 24.139793 16.21838 15.535835 25.099654 36.272112 25.099654 58.307987L841.822332 806.049083zM510.974136 135.440715c114.914216 0 208.318536 89.75214 208.318536 200.055338l73.350588 0c0-149.113109-126.366036-270.496667-281.669124-270.496667-155.333788 0-281.699824 121.383558-281.699824 270.496667l73.350588 0C302.623877 225.193879 396.059919 135.440715 510.974136 135.440715zM474.299865 747.244792l73.350588 0L547.650453 629.576859l-73.350588 0L474.299865 747.244792z" p-id="2751"></path></svg>

+ 1 - 0
static/svg/user.svg

@@ -0,0 +1 @@
+<svg width="130" height="130" xmlns="http://www.w3.org/2000/svg"><path d="M63.444 64.996c20.633 0 37.359-14.308 37.359-31.953 0-17.649-16.726-31.952-37.359-31.952-20.631 0-37.36 14.303-37.358 31.952 0 17.645 16.727 31.953 37.359 31.953zM80.57 75.65H49.434c-26.652 0-48.26 18.477-48.26 41.27v2.664c0 9.316 21.608 9.325 48.26 9.325H80.57c26.649 0 48.256-.344 48.256-9.325v-2.663c0-22.794-21.605-41.271-48.256-41.271z" stroke="#979797"/></svg>

+ 1 - 0
static/svg/validCode.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569580729849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1939" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M513.3 958.5c-142.2 0-397.9-222.1-401.6-440.5V268c1.7-39.6 31.7-72.3 71.1-77.3 49-4.6 97.1-16.5 142.7-35.3 47.8-14 91.9-38.3 129.4-71.1 30.3-24.4 72.9-26.3 105.3-4.6 39.9 30.7 83.8 55.9 130.5 74.6 48.6 14.7 98.2 25.9 148.4 33.7 38.5 7.6 67.1 40.3 69.5 79.5 3.3 84.9 2.5 169.9-2.6 254.7-33.7 281.6-253.7 436.4-392.7 436.3z m-0.1-813.7c-7.2-0.2-14.3 2-20 6.4-39.7 35.2-86.8 61.1-137.7 75.7-46.8 19.2-96.2 31-146.6 35.2-11 3.2-18.8 13-19.5 24.4v230.1c3.5 180.3 223.3 361 323.9 361s287.3-120.2 317.6-360.5c7.3-142.7 0-228.6 0-229.6-1.3-13.3-11-24.3-24-27.3-49.6-7.7-98.6-19-146.5-33.7-46.3-19.5-89.7-45.3-129-76.7-5.8-3.8-12.7-5.5-19.5-4.9l1.3-0.1z" fill="#C6CCDA" p-id="1940"></path><path d="M750.1 428L490.7 673.2c-11.7 11.1-29.5 12.9-43.1 4.2l-6.8-5.8-141.2-149.4c-9.3-9.3-12.7-22.9-9-35.5 3.8-12.6 14.1-22.1 27-24.8 12.9-2.7 26.1 1.9 34.6 11.9L469 597.5l233.7-221c14.6-12.8 36.8-11.6 49.9 2.7 13.2 14.2 11.5 35.3-2.5 48.8" fill="#C6CCDA" p-id="1941"></path></svg>