|
@@ -4,11 +4,13 @@ import { useRouter } from "vue-router"
|
|
import { useUserStore } from "@/store/modules/user"
|
|
import { useUserStore } from "@/store/modules/user"
|
|
import { type FormInstance, type FormRules } from "element-plus"
|
|
import { type FormInstance, type FormRules } from "element-plus"
|
|
import { User, Lock, Key, Picture, Loading } from "@element-plus/icons-vue"
|
|
import { User, Lock, Key, Picture, Loading } from "@element-plus/icons-vue"
|
|
-import { getLoginCodeApi } from "@/api/login"
|
|
|
|
|
|
+// import { getLoginCodeApi } from "@/api/login"
|
|
import { type LoginRequestData } from "@/api/login/types/login"
|
|
import { type LoginRequestData } from "@/api/login/types/login"
|
|
import ThemeSwitch from "@/components/ThemeSwitch/index.vue"
|
|
import ThemeSwitch from "@/components/ThemeSwitch/index.vue"
|
|
|
|
+import identifyingCode from "./components/identifyingCode.vue"
|
|
import Owl from "./components/Owl.vue"
|
|
import Owl from "./components/Owl.vue"
|
|
import { useFocus } from "./hooks/useFocus"
|
|
import { useFocus } from "./hooks/useFocus"
|
|
|
|
+import { ElMessage } from 'element-plus'
|
|
|
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
const { isFocus, handleBlur, handleFocus } = useFocus()
|
|
const { isFocus, handleBlur, handleFocus } = useFocus()
|
|
@@ -22,16 +24,22 @@ const loading = ref(false)
|
|
const codeUrl = ref("")
|
|
const codeUrl = ref("")
|
|
/** 登录表单数据 */
|
|
/** 登录表单数据 */
|
|
const loginFormData: LoginRequestData = reactive({
|
|
const loginFormData: LoginRequestData = reactive({
|
|
- username: "admin",
|
|
|
|
- password: "12345678",
|
|
|
|
- code: ""
|
|
|
|
|
|
+ account: "yang",
|
|
|
|
+ password: "123456",
|
|
|
|
+ code: '',
|
|
})
|
|
})
|
|
|
|
+//获取子组件验证码的值
|
|
|
|
+const canvasCode = ref("");
|
|
|
|
+const getCode = (val) => {
|
|
|
|
+ canvasCode.value = val;
|
|
|
|
+};
|
|
|
|
+console.log(canvasCode.value.toUpperCase(), 888);
|
|
/** 登录表单校验规则 */
|
|
/** 登录表单校验规则 */
|
|
const loginFormRules: FormRules = {
|
|
const loginFormRules: FormRules = {
|
|
- username: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
|
|
|
|
|
+ account: [{ required: true, message: "请输入用户名", trigger: "blur" }],
|
|
password: [
|
|
password: [
|
|
{ required: true, message: "请输入密码", trigger: "blur" },
|
|
{ required: true, message: "请输入密码", trigger: "blur" },
|
|
- { min: 8, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" }
|
|
|
|
|
|
+ { min: 6, max: 16, message: "长度在 8 到 16 个字符", trigger: "blur" }
|
|
],
|
|
],
|
|
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
|
|
code: [{ required: true, message: "请输入验证码", trigger: "blur" }]
|
|
}
|
|
}
|
|
@@ -39,19 +47,27 @@ const loginFormRules: FormRules = {
|
|
const handleLogin = () => {
|
|
const handleLogin = () => {
|
|
loginFormRef.value?.validate((valid: boolean, fields) => {
|
|
loginFormRef.value?.validate((valid: boolean, fields) => {
|
|
if (valid) {
|
|
if (valid) {
|
|
- loading.value = true
|
|
|
|
- useUserStore()
|
|
|
|
- .login(loginFormData)
|
|
|
|
- .then(() => {
|
|
|
|
- router.push({ path: "/" })
|
|
|
|
- })
|
|
|
|
- .catch(() => {
|
|
|
|
- createCode()
|
|
|
|
- loginFormData.password = ""
|
|
|
|
- })
|
|
|
|
- .finally(() => {
|
|
|
|
- loading.value = false
|
|
|
|
|
|
+ if (loginFormData.code.toUpperCase() != canvasCode.value.toUpperCase()) {
|
|
|
|
+ loginFormData.code = "";
|
|
|
|
+ ElMessage({
|
|
|
|
+ message: '请输入正确的验证码',
|
|
|
|
+ type: 'warning',
|
|
})
|
|
})
|
|
|
|
+ } else {
|
|
|
|
+ loading.value = true
|
|
|
|
+ useUserStore()
|
|
|
|
+ .login(loginFormData)
|
|
|
|
+ .then(() => {
|
|
|
|
+ router.push({ path: "/" })
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {
|
|
|
|
+ createCode()
|
|
|
|
+ loginFormData.password = ""
|
|
|
|
+ })
|
|
|
|
+ .finally(() => {
|
|
|
|
+ loading.value = false
|
|
|
|
+ })
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
console.error("表单校验不通过", fields)
|
|
console.error("表单校验不通过", fields)
|
|
}
|
|
}
|
|
@@ -70,6 +86,7 @@ const createCode = () => {
|
|
|
|
|
|
/** 初始化验证码 */
|
|
/** 初始化验证码 */
|
|
createCode()
|
|
createCode()
|
|
|
|
+
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<template>
|
|
<template>
|
|
@@ -84,8 +101,8 @@ createCode()
|
|
</div>
|
|
</div>
|
|
<div class="content">
|
|
<div class="content">
|
|
<el-form ref="loginFormRef" :model="loginFormData" :rules="loginFormRules" @keyup.enter="handleLogin">
|
|
<el-form ref="loginFormRef" :model="loginFormData" :rules="loginFormRules" @keyup.enter="handleLogin">
|
|
- <el-form-item prop="username">
|
|
|
|
- <el-input v-model.trim="loginFormData.username" placeholder="用户名" type="text" tabindex="1" :prefix-icon="User"
|
|
|
|
|
|
+ <el-form-item prop="account">
|
|
|
|
+ <el-input v-model.trim="loginFormData.account" placeholder="用户名" type="text" tabindex="1" :prefix-icon="User"
|
|
size="large" />
|
|
size="large" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="password">
|
|
<el-form-item prop="password">
|
|
@@ -96,7 +113,7 @@ createCode()
|
|
<el-input v-model.trim="loginFormData.code" placeholder="验证码" type="text" tabindex="3" :prefix-icon="Key"
|
|
<el-input v-model.trim="loginFormData.code" placeholder="验证码" type="text" tabindex="3" :prefix-icon="Key"
|
|
maxlength="7" size="large">
|
|
maxlength="7" size="large">
|
|
<template #append>
|
|
<template #append>
|
|
- <el-image :src="codeUrl" @click="createCode" draggable="false">
|
|
|
|
|
|
+ <!-- <el-image :src="codeUrl" @click="createCode" draggable="false">
|
|
<template #placeholder>
|
|
<template #placeholder>
|
|
<el-icon>
|
|
<el-icon>
|
|
<Picture />
|
|
<Picture />
|
|
@@ -107,7 +124,8 @@ createCode()
|
|
<Loading />
|
|
<Loading />
|
|
</el-icon>
|
|
</el-icon>
|
|
</template>
|
|
</template>
|
|
- </el-image>
|
|
|
|
|
|
+ </el-image> -->
|
|
|
|
+ <identifyingCode ref="childCode" @get-code="getCode"></identifyingCode>
|
|
</template>
|
|
</template>
|
|
</el-input>
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|