From 3140eaca99566193a2cadf6184dc62bfa26924e7 Mon Sep 17 00:00:00 2001 From: landaiqing <3517283258@qq.com> Date: Thu, 15 Aug 2024 23:57:12 +0800 Subject: [PATCH] :sparkles: scan the QR code to log in on the WeChat public account --- src/api/oauth/index.ts | 37 +++++++ src/api/user/index.ts | 37 ++++++- src/assets/svgs/logo-schisandra.svg | 77 ++++++++++++++ src/locales/language/en.ts | 3 + src/locales/language/zh.ts | 4 + src/utils/axios/request.ts | 2 +- src/views/Forget/ForgetPage.vue | 151 +++++++++++++++++++++++----- src/views/Forget/index.scss | 19 ++++ src/views/Login/LoginPage.vue | 101 +++++++++++++++---- src/views/QRLogin/QRLogin.vue | 44 +++++++- src/views/QRLogin/QRLoginFooter.vue | 2 +- 11 files changed, 432 insertions(+), 45 deletions(-) create mode 100644 src/api/oauth/index.ts create mode 100644 src/assets/svgs/logo-schisandra.svg diff --git a/src/api/oauth/index.ts b/src/api/oauth/index.ts new file mode 100644 index 0000000..ee38cd0 --- /dev/null +++ b/src/api/oauth/index.ts @@ -0,0 +1,37 @@ +import {service} from "@/utils/alova/service.ts"; + +/** + * 生成客户端id + */ +export const generateClientId = () => { + return service.Get('/api/oauth/generate_client_id', + { + meta: { + ignoreToken: true, + } + } + ); +}; +/** + * 获取临时二维码 + * @param clientId + */ +export const generateQrCode = (clientId: string) => { + return service.Get('/api/oauth/get_temp_qrcode', + { + params: { + client_id: clientId + }, + meta: { + ignoreToken: true, + }, + cacheFor: { + // 设置缓存模式为持久化模式 + mode: 'restore', + // 缓存时间 + expire: 30 * 24 * 60 * 60 * 1000, + tag: 'v1' + } + } + ); +}; diff --git a/src/api/user/index.ts b/src/api/user/index.ts index 6576347..a1853a8 100644 --- a/src/api/user/index.ts +++ b/src/api/user/index.ts @@ -1,5 +1,5 @@ import {service} from "@/utils/alova/service.ts"; -import {PhoneLogin} from "@/types/user"; +import {AccountLogin, PhoneLogin, ResetPassword} from "@/types/user"; /** * 获取用户信息 @@ -64,3 +64,38 @@ export const phoneLoginApi = (param: PhoneLogin) => { } ); }; +/** + * 账号登录 + * @param param + */ +export const accountLoginApi = (param: AccountLogin) => { + return service.Post('/api/user/login', { + account: param.account, + password: param.password, + }, + { + meta: { + ignoreToken: true, + authRole: 'login' + } + } + ); +}; +/** + * 重置密码 + * @param param + */ +export const resetPasswordApi = (param: ResetPassword) => { + return service.Post('/api/user/reset_password', { + phone: param.phone, + captcha: param.captcha, + password: param.password, + repassword: param.repassword + }, + { + meta: { + ignoreToken: true, + } + } + ); +}; diff --git a/src/assets/svgs/logo-schisandra.svg b/src/assets/svgs/logo-schisandra.svg new file mode 100644 index 0000000..089d7a9 --- /dev/null +++ b/src/assets/svgs/logo-schisandra.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/locales/language/en.ts b/src/locales/language/en.ts index 4465885..f090fad 100644 --- a/src/locales/language/en.ts +++ b/src/locales/language/en.ts @@ -38,6 +38,9 @@ export default { sendCaptchaError: "captcha sending failed, please try again later", loginSuccess: "login success!", loginError: "login failed!", + twoPasswordNotSame: "two passwords are not the same, please try again!", + resetPasswordSuccess: "reset password success!", + resetPasswordError: "reset password failed!", }, error: { diff --git a/src/locales/language/zh.ts b/src/locales/language/zh.ts index 19bd91b..035b4d5 100644 --- a/src/locales/language/zh.ts +++ b/src/locales/language/zh.ts @@ -38,6 +38,10 @@ export default { sendCaptchaError: "验证码发送失败,请稍后再试!", loginSuccess: "登录成功!", loginError: "登录失败!", + twoPasswordNotSame: "两次密码输入不一致!", + resetPasswordSuccess: "密码重置成功!", + resetPasswordError: "密码重置失败!", + }, diff --git a/src/utils/axios/request.ts b/src/utils/axios/request.ts index bd35115..4092258 100644 --- a/src/utils/axios/request.ts +++ b/src/utils/axios/request.ts @@ -14,7 +14,7 @@ class Request { this.instance.interceptors.request.use( (config) => { const user = useStore().user; - const token: string | undefined = user.getUser()?.accessToken; + const token: string | undefined = user.user.accessToken; if (token) { config.headers.Authorization = `${import.meta.env.VITE_APP_TOKEN_KEY} ${token}`; } diff --git a/src/views/Forget/ForgetPage.vue b/src/views/Forget/ForgetPage.vue index 5668baf..e1a7291 100644 --- a/src/views/Forget/ForgetPage.vue +++ b/src/views/Forget/ForgetPage.vue @@ -15,7 +15,8 @@ > {{ t("login.phone") }} - + @@ -26,7 +27,7 @@ {{ t("login.phoneCaptcha") }} + allow-clear autocomplete="off"> @@ -44,20 +45,21 @@ {{ t("login.password") }} - + - + {{ t("login.repassword") }} - + - + {{ @@ -77,6 +79,18 @@ +
+ + +