From 9223b88a723a6f4c99e6091814fc872a3a0a8e51 Mon Sep 17 00:00:00 2001 From: Jason <5340635+wen-jason@user.noreply.gitee.com> Date: Wed, 18 Jan 2023 11:30:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/api/user.ts | 5 ++++ admin/src/enums/requestEnums.ts | 1 + admin/src/stores/modules/user.ts | 6 ++-- admin/src/utils/request/index.ts | 1 + admin/src/views/account/login.vue | 48 +++++++++++++++++++++++++++++-- 5 files changed, 57 insertions(+), 4 deletions(-) diff --git a/admin/src/api/user.ts b/admin/src/api/user.ts index ce54b585..19babf06 100644 --- a/admin/src/api/user.ts +++ b/admin/src/api/user.ts @@ -6,6 +6,11 @@ export function login(params: Record) { return request.post({ url: '/system/login', params: { ...params, terminal: config.terminal } }) } +// 登录 +export function loginCaptcha() { + return request.get({ url: '/system/captcha' }) +} + // 退出登录 export function logout() { return request.post({ url: '/system/logout' }) diff --git a/admin/src/enums/requestEnums.ts b/admin/src/enums/requestEnums.ts index 67d30b21..8ed7d3da 100644 --- a/admin/src/enums/requestEnums.ts +++ b/admin/src/enums/requestEnums.ts @@ -22,6 +22,7 @@ export enum RequestCodeEnum { LOGIN_DISABLE_ERROR = 331, //登陆账号已被禁用 TOKEN_EMPTY = 332, // TOKEN参数为空 TOKEN_INVALID = 333, // TOKEN参数无效 + VERIFICATION_CODE_ERROR = 334, // 验证码错误 NO_PERMISSTION = 403, //无相关权限 REQUEST_404_ERROR = 404, //请求接口不存在 SYSTEM_ERROR = 500 //系统错误 diff --git a/admin/src/stores/modules/user.ts b/admin/src/stores/modules/user.ts index d5248d6b..16872857 100644 --- a/admin/src/stores/modules/user.ts +++ b/admin/src/stores/modules/user.ts @@ -34,11 +34,13 @@ const useUserStore = defineStore({ this.perms = [] }, login(playload: any) { - const { account, password } = playload + const { account, password, code, uuid } = playload return new Promise((resolve, reject) => { login({ username: account, - password: password + password, + code, + uuid }) .then((data) => { this.token = data.token diff --git a/admin/src/utils/request/index.ts b/admin/src/utils/request/index.ts index 7fa37b3f..48a8120f 100644 --- a/admin/src/utils/request/index.ts +++ b/admin/src/utils/request/index.ts @@ -69,6 +69,7 @@ const axiosHooks: AxiosHooks = { case RequestCodeEnum.NO_PERMISSTION: case RequestCodeEnum.FAILED: case RequestCodeEnum.SYSTEM_ERROR: + case RequestCodeEnum.VERIFICATION_CODE_ERROR: msg && feedback.msgError(msg) return Promise.reject(data) diff --git a/admin/src/views/account/login.vue b/admin/src/views/account/login.vue index 8f813be8..2ca5d9bf 100644 --- a/admin/src/views/account/login.vue +++ b/admin/src/views/account/login.vue @@ -34,6 +34,25 @@ + +
+ + + +
+ +
+
+
@@ -58,6 +77,7 @@ import cache from '@/utils/cache' import { ACCOUNT_KEY } from '@/enums/cacheEnums' import { PageEnum } from '@/enums/pageEnum' import { useLockFn } from '@/hooks/useLockFn' +import { loginCaptcha } from '@/api/user' const passwordRef = shallowRef() const formRef = shallowRef() const appStore = useAppStore() @@ -66,9 +86,12 @@ const route = useRoute() const router = useRouter() const remAccount = ref(false) const config = computed(() => appStore.config) +const codeImg = ref() const formData = reactive({ account: '', - password: '' + password: '', + code: '', + uuid: '' }) const rules = { account: [ @@ -84,8 +107,21 @@ const rules = { message: '请输入密码', trigger: ['blur'] } + ], + code: [ + { + required: true, + message: '请输入验证码', + trigger: ['blur'] + } ] } + +const getLoginCaptcha = async () => { + const data = await loginCaptcha() + formData.uuid = data.uuid + codeImg.value = data.img +} // 回车按键监听 const handleEnter = () => { if (!formData.password) { @@ -101,7 +137,11 @@ const handleLogin = async () => { remember: remAccount.value, account: remAccount.value ? formData.account : '' }) - await userStore.login(formData) + try { + await userStore.login(formData) + } catch (error) { + getLoginCaptcha() + } const { query: { redirect } } = route @@ -112,6 +152,7 @@ const { isLock, lockFn: lockLogin } = useLockFn(handleLogin) onMounted(() => { const value = cache.get(ACCOUNT_KEY) + getLoginCaptcha() if (value?.remember) { remAccount.value = value.remember formData.account = value.account @@ -125,6 +166,9 @@ onMounted(() => { @apply min-h-screen bg-no-repeat bg-center bg-cover; .login-card { height: 400px; + :deep(.el-input-group__prepend) { + padding: 0 15px; + } } }