123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <template>
- <div id="userLayout" class="user-layout-wrapper">
- <div class="container">
- <div class="top">
- <div class="desc">
- <img class="logo_login" src="@/assets/logo_login.png" alt="" />
- </div>
- <div class="header">
- <a href="/">
- <!-- <img src="~@/assets/logo.png" class="logo" alt="logo" /> -->
- <span class="title">Gin-Vue-Admin</span>
- </a>
- </div>
- </div>
- <div class="main">
- <el-form
- :model="loginForm"
- :rules="rules"
- ref="loginForm"
- @keyup.enter.native="submitForm"
- >
- <el-form-item prop="username">
- <el-input placeholder="请输入用户名" v-model="loginForm.username">
- <i class="el-input__icon el-icon-user" slot="suffix"></i
- ></el-input>
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- :type="lock === 'lock' ? 'password' : 'text'"
- placeholder="请输入密码"
- v-model="loginForm.password"
- >
- <i
- :class="'el-input__icon el-icon-' + lock"
- @click="changeLock"
- slot="suffix"
- ></i>
- </el-input>
- </el-form-item>
- <el-form-item style="position: relative">
- <el-input
- v-model="loginForm.captcha"
- name="logVerify"
- placeholder="请输入验证码"
- style="width: 60%"
- />
- <div class="vPic">
- <img
- v-if="picPath"
- :src="picPath"
- width="100%"
- height="100%"
- alt="请输入验证码"
- @click="loginVefify()"
- />
- </div>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm" style="width: 100%"
- >登 录</el-button
- >
- </el-form-item>
- </el-form>
- </div>
- <div class="footer">
- <div class="links">
- <a href="http://doc.henrongyi.top/"
- ><img src="@/assets/docs.png" class="link-icon"
- /></a>
- <a href="https://www.yuque.com/flipped-aurora/"
- ><img src="@/assets/yuque.png" class="link-icon"
- /></a>
- <a href="https://github.com/flipped-aurora/gin-vue-admin"
- ><img src="@/assets/github.png" class="link-icon"
- /></a>
- <a href="https://space.bilibili.com/322210472"
- ><img src="@/assets/video.png" class="link-icon"
- /></a>
- </div>
- <div class="copyright">Copyright © {{ curYear }} 💖flipped-aurora</div>
- </div>
- </div>
- </div>
- </template>
- <script>
- import { mapActions } from "vuex";
- import { captcha } from "@/api/user";
- export default {
- name: "Login",
- data() {
- const checkUsername = (rule, value, callback) => {
- if (value.length < 5 || value.length > 12) {
- return callback(new Error("请输入正确的用户名"));
- } else {
- callback();
- }
- };
- const checkPassword = (rule, value, callback) => {
- if (value.length < 6 || value.length > 12) {
- return callback(new Error("请输入正确的密码"));
- } else {
- callback();
- }
- };
- return {
- curYear: 0,
- lock: "lock",
- loginForm: {
- username: "admin",
- password: "123456",
- captcha: "",
- captchaId: "",
- },
- rules: {
- username: [{ validator: checkUsername, trigger: "blur" }],
- password: [{ validator: checkPassword, trigger: "blur" }],
- },
- logVerify: "",
- picPath: "",
- };
- },
- created() {
- this.loginVefify();
- this.curYear = new Date().getFullYear();
- },
- methods: {
- ...mapActions("user", ["LoginIn"]),
- async login() {
- return await this.LoginIn(this.loginForm);
- },
- async submitForm() {
- this.$refs.loginForm.validate(async (v) => {
- if (v) {
- const flag = await this.login();
- if (!flag) {
- this.loginVefify();
- }
- } else {
- this.$message({
- type: "error",
- message: "请正确填写登录信息",
- showClose: true,
- });
- this.loginVefify();
- return false;
- }
- });
- },
- changeLock() {
- this.lock === "lock" ? (this.lock = "unlock") : (this.lock = "lock");
- },
- loginVefify() {
- captcha({}).then((ele) => {
- this.picPath = ele.data.picPath;
- this.loginForm.captchaId = ele.data.captchaId;
- });
- },
- },
- };
- </script>
- <style scoped lang="scss">
- @import "@/style/login.scss";
- </style>
|