From f4b5fe0d605936819e662525449a6af92e2196c8 Mon Sep 17 00:00:00 2001 From: xxm Date: Sun, 6 Nov 2022 01:05:18 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=BC=80=E6=94=BE=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96,=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B3=A8=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/sys/login.ts | 47 +++++++ src/api/sys/user.ts | 31 +++-- src/components/CountDown/src/CountButton.vue | 2 +- src/router/guard/permissionGuard.ts | 3 +- src/router/index.ts | 4 +- src/store/modules/dict.ts | 2 +- src/store/modules/user.ts | 9 +- src/views/account/accountModel.ts | 14 -- src/views/account/bind/AccountBind.vue | 30 ++++- src/views/account/bind/WeChatQrBind.vue | 100 +++++++++++++- src/views/account/security/EmailBind.vue | 22 +-- src/views/account/security/EmailEdit.vue | 98 +++++--------- src/views/account/security/PasswordEdit.vue | 1 + src/views/account/security/PhoneBind.vue | 51 ++----- src/views/account/security/PhoneEdit.vue | 99 +++++--------- src/views/account/setting/data.ts | 32 ----- src/views/login/Login.vue | 8 +- src/views/login/LoginForm.vue | 4 +- src/views/login/LoginFormTitle.vue | 13 +- src/views/login/RegisterForm.vue | 78 ----------- .../login/{ => user}/ForgetPasswordForm.vue | 10 +- src/views/login/user/RegisterForm.vue | 126 ++++++++++++++++++ .../monitor/redis/RedisInfoMonitor.vue | 7 +- .../monitor/system/SystemInfoMonitor.vue | 4 +- 24 files changed, 443 insertions(+), 352 deletions(-) create mode 100644 src/api/sys/login.ts delete mode 100644 src/views/login/RegisterForm.vue rename src/views/login/{ => user}/ForgetPasswordForm.vue (89%) create mode 100644 src/views/login/user/RegisterForm.vue diff --git a/src/api/sys/login.ts b/src/api/sys/login.ts new file mode 100644 index 00000000..235a9bb9 --- /dev/null +++ b/src/api/sys/login.ts @@ -0,0 +1,47 @@ +import { defHttp } from '/@/utils/http/axios' +import { LoginParams } from './model/userModel' +import { Result } from '/#/axios' + +/** + * 登录接口 返回token + */ +export function login(params: LoginParams) { + return defHttp.post>({ + url: '/token/login', + params, + }) +} + +/** + * 获取微信扫码登录二维码 + */ +export function applyQrCode() { + return defHttp.get>({ + url: `/token/wechat/qr/applyQrCode`, + }) +} + +/** + * 获取扫码状态 + */ +export function getQrStatus(qrCodeKey) { + return defHttp.get>({ + url: `/token/wechat/qr/getStatus`, + params: { qrCodeKey }, + }) +} + +/** + * 退出 + */ +export function doLogout() { + return defHttp.post({ url: '/token/logout' }) +} + +/** + * 登录二维码 + */ +export interface WeChatLoginQrCode { + qrCodeKey: string + qrCodeUrl: string +} diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts index 66816cb6..b6d29d2a 100644 --- a/src/api/sys/user.ts +++ b/src/api/sys/user.ts @@ -1,17 +1,7 @@ import { defHttp } from '/@/utils/http/axios' -import { LoginParams, GetUserInfoModel } from './model/userModel' +import { GetUserInfoModel } from './model/userModel' import { Result } from '/#/axios' -/** - * 登录接口 返回token - */ -export function loginApi(params: LoginParams) { - return defHttp.post>({ - url: '/token/login', - params, - }) -} - /** * 登录后获取用户信息 */ @@ -20,8 +10,21 @@ export function getUserInfo() { } /** - * 退出 + * 注册 */ -export function doLogout() { - return defHttp.post({ url: '/token/logout' }) +export function register(obj) { + return defHttp.post({ + url: `/user/register`, + data: obj, + }) +} + +/** + * 重置密码 + */ +export function forgetPasswordByPhone(obj) { + return defHttp.post({ + url: `/user/forgetPasswordByPhone`, + data: obj, + }) } diff --git a/src/components/CountDown/src/CountButton.vue b/src/components/CountDown/src/CountButton.vue index 712091fb..5a319d2f 100644 --- a/src/components/CountDown/src/CountButton.vue +++ b/src/components/CountDown/src/CountButton.vue @@ -28,7 +28,7 @@ const { currentCount, isStart, start, reset } = useCountdown(props.count) const { t } = useI18n() - + // 优化 const getButtonText = computed(() => { return !unref(isStart) ? t('component.countdown.normalText') : t('component.countdown.sendText', [unref(currentCount)]) }) diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index 74c8e607..652aa300 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -98,12 +98,13 @@ export function createPermissionGuard(router: Router) { return } //TODO 添加 websocket连接. - console.log(`路由守卫`) // 重载菜单 + console.log('重载菜单') const routes = await permissionStore.buildRoutesAction() // 初始化字典 + console.log('初始化字典') await useDictStore.initDict() routes.forEach((route) => { diff --git a/src/router/index.ts b/src/router/index.ts index 510ed9f7..ab7d5967 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,7 +1,7 @@ import type { RouteRecordRaw } from 'vue-router' import type { App } from 'vue' -import { createRouter, createWebHashHistory } from 'vue-router' +import { createRouter, createWebHashHistory, createWebHistory } from "vue-router"; import { basicRoutes } from './routes' // 白名单应该包含基本静态路由 @@ -17,7 +17,7 @@ getRouteNames(basicRoutes) // 创建一个可以被 Vue 应用程序使用的路由实例 export const router = createRouter({ // 创建一个 hash 历史记录。 - history: createWebHashHistory(import.meta.env.VITE_PUBLIC_PATH), + history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), // 应该添加到路由的初始路由列表。 routes: basicRoutes as unknown as RouteRecordRaw[], // 是否应该禁止尾部斜杠。默认为假 diff --git a/src/store/modules/dict.ts b/src/store/modules/dict.ts index 57f43558..719c3cd3 100644 --- a/src/store/modules/dict.ts +++ b/src/store/modules/dict.ts @@ -17,7 +17,7 @@ export const useDictStore = defineStore({ }, }, actions: { - async initDict() { + initDict() { findAll().then(({ data }) => { this.dict = data.map((o) => { return { diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 2ed33020..9deb0ddc 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -6,9 +6,8 @@ import { RoleEnum } from '/@/enums/roleEnum' import { PageEnum } from '/@/enums/pageEnum' import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum' import { getAuthCache, setAuthCache } from '/@/utils/auth' -import { GetUserInfoModel, LoginParams } from '/@/api/sys/model/userModel' -import { doLogout, getUserInfo, loginApi } from '/@/api/sys/user' -import { useI18n } from '/@/hooks/web/useI18n' +import { LoginParams } from '/@/api/sys/model/userModel' +import { doLogout, login } from '/@/api/sys/login' import { useMessage } from '/@/hooks/web/useMessage' import { router } from '/@/router' import { usePermissionStore } from '/@/store/modules/permission' @@ -16,6 +15,8 @@ import { RouteRecordRaw } from 'vue-router' import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic' import { h } from 'vue' import { getFilePreviewUrlPrefix } from '/@/api/common/FileUpload' +// @ts-ignore +import { getUserInfo } from '/@/api/sys/user' interface UserState { userInfo: Nullable @@ -89,7 +90,7 @@ export const useUserStore = defineStore({ */ async login(params: LoginParams) { try { - const { data: token } = await loginApi(params) + const { data: token } = await login(params) // 保存token this.setToken(token) await this.afterLoginAction(true) diff --git a/src/views/account/accountModel.ts b/src/views/account/accountModel.ts index 4f0872f0..cb8c617a 100644 --- a/src/views/account/accountModel.ts +++ b/src/views/account/accountModel.ts @@ -18,20 +18,6 @@ export interface UserDetails { clientIdList?: string[] } -/** - * 登录后用户信息 - */ -export interface GetUserInfoModel { - // 用户id - userId: number - // 名称 - name: string - // 账号 - username: string - // 头像 - avatar: string -} - /** * 用户基础消息 */ diff --git a/src/views/account/bind/AccountBind.vue b/src/views/account/bind/AccountBind.vue index 2cafa2dd..4c9322a9 100644 --- a/src/views/account/bind/AccountBind.vue +++ b/src/views/account/bind/AccountBind.vue @@ -56,24 +56,25 @@ + + diff --git a/src/views/account/security/EmailBind.vue b/src/views/account/security/EmailBind.vue index 2b0871bd..9bbaf2fe 100644 --- a/src/views/account/security/EmailBind.vue +++ b/src/views/account/security/EmailBind.vue @@ -1,9 +1,9 @@