From 40e56047f784b2d9dcc42f03d0a08f623520d0af Mon Sep 17 00:00:00 2001 From: pany <939630029@qq.com> Date: Fri, 19 Aug 2022 15:25:07 +0800 Subject: [PATCH] refactor: login view --- src/views/login/index.vue | 124 ++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 64 deletions(-) diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 522b94b3..e1b23cfc 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -4,10 +4,11 @@ import { useRouter } from "vue-router" import { useUserStore } from "@/store/modules/user" import { User, Lock, Key } from "@element-plus/icons-vue" import ThemeSwitch from "@/components/ThemeSwitch/index.vue" +import type { FormInstance, FormRules } from "element-plus" interface ILoginForm { /** admin 或 editor */ - username: string + username: "admin" | "editor" /** 密码 */ password: string /** 验证码 */ @@ -15,65 +16,62 @@ interface ILoginForm { } const router = useRouter() -const loginFormDom = ref() +const loginFormRef = ref(null) -const state = reactive({ - /** 登录按钮 Loading */ - loading: false, - /** 验证码图片 URL */ - codeUrl: "", - /** 登录表单 */ - loginForm: { - username: "admin", - password: "12345678", - code: "abcd" - } as ILoginForm, - /** 登录表单校验规则 */ - loginRules: { - username: [{ required: true, message: "请输入用户名", trigger: "blur" }], - password: [ - { required: true, message: "请输入密码", trigger: "blur" }, - { min: 8, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" } - ], - code: [{ required: true, message: "请输入验证码", trigger: "blur" }] - }, - /** 登录逻辑 */ - handleLogin: () => { - loginFormDom.value.validate((valid: boolean) => { - if (valid) { - state.loading = true - useUserStore() - .login({ - username: state.loginForm.username, - password: state.loginForm.password - }) - .then(() => { - state.loading = false - router.push({ path: "/" }).catch((err) => { - console.warn(err) - }) - }) - .catch(() => { - state.loading = false - state.createCode() - state.loginForm.password = "" - }) - } else { - return false - } - }) - }, - /** 创建验证码 */ - createCode: () => { - // 先清空验证码的输入 - state.loginForm.code = "" - // 实际开发中,可替换成自己的地址,这里只是提供一个参考 - state.codeUrl = `/api/v1/login/code?${Math.random() * 1000}` - } +/** 登录按钮 Loading */ +const loading = ref(false) +/** 验证码图片 URL */ +const codeUrl = ref("") +/** 登录表单数据 */ +const loginForm: ILoginForm = reactive({ + username: "admin", + password: "12345678", + code: "abcd" }) +/** 登录表单校验规则 */ +const loginFormRules: FormRules = { + username: [{ required: true, message: "请输入用户名", trigger: "blur" }], + password: [ + { required: true, message: "请输入密码", trigger: "blur" }, + { min: 8, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" } + ], + code: [{ required: true, message: "请输入验证码", trigger: "blur" }] +} +/** 登录逻辑 */ +const handleLogin = () => { + loginFormRef.value?.validate((valid: boolean) => { + if (valid) { + loading.value = true + useUserStore() + .login({ + username: loginForm.username, + password: loginForm.password + }) + .then(() => { + router.push({ path: "/" }) + }) + .catch(() => { + createCode() + loginForm.password = "" + }) + .finally(() => { + loading.value = false + }) + } else { + return false + } + }) +} +/** 创建验证码 */ +const createCode = () => { + // 先清空验证码的输入 + loginForm.code = "" + // 实际开发中,可替换成自己的地址,这里只是提供一个参考 + codeUrl.value = `/api/v1/login/code?${Math.random() * 1000}` +} /** 初始化验证码 */ -// state.createCode() +// createCode()