From 48aef25b3f6499d674ca4e4ef16f4c62399fb735 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Thu, 17 Apr 2025 22:34:21 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=99=BB=E5=BD=95=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8F=8C=E9=87=8D=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/basic/exception/auth-exception.ts | 7 ++-- .../src/basic/exception/base-exception.ts | 4 +- .../src/basic/exception/common-exception.ts | 15 ++++++-- packages/libs/lib-server/src/basic/result.ts | 5 ++- packages/ui/certd-client/src/api/service.ts | 18 +++++++-- packages/ui/certd-client/src/api/tools.ts | 5 ++- .../src/router/source/modules/certd.ts | 2 +- .../certd-client/src/store/user/api.user.ts | 8 ++++ .../ui/certd-client/src/store/user/index.ts | 35 +++++++++-------- .../src/views/certd/mine/security/index.vue | 16 +++++++- .../src/views/framework/login/index.vue | 38 ++++++++++++++++++- .../src/views/sys/settings/tabs/safe.vue | 3 +- .../settings/sys-safe-settings-controller.ts | 12 ++---- .../controller/user/login/login-controller.ts | 2 +- .../src/middleware/global-exception.ts | 7 +++- .../modules/login/service/login-service.ts | 10 ++--- 16 files changed, 132 insertions(+), 55 deletions(-) diff --git a/packages/libs/lib-server/src/basic/exception/auth-exception.ts b/packages/libs/lib-server/src/basic/exception/auth-exception.ts index 6523a0ee..299abdff 100644 --- a/packages/libs/lib-server/src/basic/exception/auth-exception.ts +++ b/packages/libs/lib-server/src/basic/exception/auth-exception.ts @@ -1,5 +1,6 @@ import { Constants } from '../constants.js'; import { BaseException } from './base-exception.js'; +import { TextException } from "./common-exception.js"; /** * 授权异常 */ @@ -10,9 +11,9 @@ export class AuthException extends BaseException { } -export class Need2FAException extends BaseException { - constructor(message?:string) { - super('Need2FAException', Constants.res.need2fa.code, message ? message : Constants.res.need2fa.message); +export class Need2FAException extends TextException { + constructor(message:string,data:any) { + super('Need2FAException', Constants.res.need2fa.code, message ? message : Constants.res.need2fa.message,data); } } diff --git a/packages/libs/lib-server/src/basic/exception/base-exception.ts b/packages/libs/lib-server/src/basic/exception/base-exception.ts index c74b4167..3ee44d78 100644 --- a/packages/libs/lib-server/src/basic/exception/base-exception.ts +++ b/packages/libs/lib-server/src/basic/exception/base-exception.ts @@ -3,9 +3,11 @@ */ export class BaseException extends Error { code: number; - constructor(name, code, message) { + data?:any + constructor(name, code, message,data?:any) { super(message); this.name = name; this.code = code; + this.data = data; } } diff --git a/packages/libs/lib-server/src/basic/exception/common-exception.ts b/packages/libs/lib-server/src/basic/exception/common-exception.ts index 1873d545..5e97743a 100644 --- a/packages/libs/lib-server/src/basic/exception/common-exception.ts +++ b/packages/libs/lib-server/src/basic/exception/common-exception.ts @@ -1,16 +1,23 @@ -import { Constants } from '../constants.js'; -import { BaseException } from './base-exception.js'; +import { Constants } from "../constants.js"; +import { BaseException } from "./base-exception.js"; + /** * 通用异常 */ export class CommonException extends BaseException { constructor(message) { - super('CommonException', Constants.res.error.code, message ? message : Constants.res.error.message); + super("CommonException", Constants.res.error.code, message ? message : Constants.res.error.message); } } export class CodeException extends BaseException { constructor(res: { code: number; message: string }) { - super('CodeException', res.code, res.message); + super("CodeException", res.code, res.message); + } +} + +export class TextException extends BaseException { + constructor(name, code,message, data?) { + super(name, code, message, data); } } diff --git a/packages/libs/lib-server/src/basic/result.ts b/packages/libs/lib-server/src/basic/result.ts index e5909a33..ca42e8d1 100644 --- a/packages/libs/lib-server/src/basic/result.ts +++ b/packages/libs/lib-server/src/basic/result.ts @@ -2,14 +2,15 @@ export class Result { code: number; msg: string; data: T; + constructor(code, msg, data?) { this.code = code; this.msg = msg; this.data = data; } - static error(code = 1, msg) { - return new Result(code, msg); + static error(code = 1, msg, data?: any) { + return new Result(code, msg, data); } static success(msg, data?) { diff --git a/packages/ui/certd-client/src/api/service.ts b/packages/ui/certd-client/src/api/service.ts index 0378cce7..fd108aa0 100644 --- a/packages/ui/certd-client/src/api/service.ts +++ b/packages/ui/certd-client/src/api/service.ts @@ -3,6 +3,17 @@ import { get } from "lodash-es"; import { errorLog, errorCreate } from "./tools"; import { env } from "/src/utils/util.env"; import { useUserStore } from "/@/store/user"; + +export class CodeError extends Error { + code: number; + data?: any; + constructor(message: string, code: number, data?: any) { + super(message); + this.code = code; + this.data = data; + } +} + /** * @description 创建请求实例 */ @@ -56,12 +67,13 @@ function createService() { const errorMessage = dataAxios.msg || dataAxios.message || "未知错误"; // @ts-ignore if (response?.config?.onError) { - // @ts-ignore - response.config.onError(new Error(errorMessage)); + const err = new CodeError(errorMessage, dataAxios.code, dataAxios.data); + response.config.onError(err); + return; } //@ts-ignore const showErrorNotify = response?.config?.showErrorNotify; - errorCreate(`${errorMessage}: ${response.config.url}`, showErrorNotify); + errorCreate(`${errorMessage}: ${response.config.url}`, showErrorNotify, dataAxios); return dataAxios; } } diff --git a/packages/ui/certd-client/src/api/tools.ts b/packages/ui/certd-client/src/api/tools.ts index 08d80890..a7d949f7 100644 --- a/packages/ui/certd-client/src/api/tools.ts +++ b/packages/ui/certd-client/src/api/tools.ts @@ -4,6 +4,7 @@ * @param {String} defaultValue 默认值 */ import { uiContext } from "@fast-crud/fast-crud"; +import { CodeError } from "/@/api/service"; export function parse(jsonString = "{}", defaultValue = {}) { let result = defaultValue; @@ -68,8 +69,8 @@ export function errorLog(error: any, notify = true) { * @description 创建一个错误 * @param {String} msg 错误信息 */ -export function errorCreate(msg: string, notify = true) { - const err = new Error(msg); +export function errorCreate(msg: string, notify = true, data?: any) { + const err = new CodeError(msg, data.code, data.data); console.error("errorCreate", err); if (notify) { uiContext.get().notification.error({ message: err.message }); diff --git a/packages/ui/certd-client/src/router/source/modules/certd.ts b/packages/ui/certd-client/src/router/source/modules/certd.ts index 2c487474..a9c992be 100644 --- a/packages/ui/certd-client/src/router/source/modules/certd.ts +++ b/packages/ui/certd-client/src/router/source/modules/certd.ts @@ -149,7 +149,7 @@ export const certdResources = [ path: "/certd/mine/security", component: "/certd/mine/security/index.vue", meta: { - icon: "ion:locked-outline", + icon: "fluent:shield-keyhole-16-regular", auth: true, isMenu: true, }, diff --git a/packages/ui/certd-client/src/store/user/api.user.ts b/packages/ui/certd-client/src/store/user/api.user.ts index 670f9118..12c92517 100644 --- a/packages/ui/certd-client/src/store/user/api.user.ts +++ b/packages/ui/certd-client/src/store/user/api.user.ts @@ -66,3 +66,11 @@ export async function mine(): Promise { method: "post", }); } + +export async function loginByTwoFactor(data: any) { + return await request({ + url: "/loginByTwoFactor", + method: "post", + data, + }); +} diff --git a/packages/ui/certd-client/src/store/user/index.ts b/packages/ui/certd-client/src/store/user/index.ts index 74632966..e6f354ed 100644 --- a/packages/ui/certd-client/src/store/user/index.ts +++ b/packages/ui/certd-client/src/store/user/index.ts @@ -51,7 +51,7 @@ export const useUserStore = defineStore({ setUserInfo(info: UserInfoRes) { this.userInfo = info; const userStore = vbenUserStore(); - userStore.setUserInfo(info); + userStore.setUserInfo(info as any); LocalStorage.set(USER_INFO_KEY, info); }, resetState() { @@ -71,23 +71,18 @@ export const useUserStore = defineStore({ * @description: login */ async login(loginType: string, params: LoginReq | SmsLoginReq): Promise { - try { - let loginRes: any = null; - if (loginType === "sms") { - loginRes = await UserApi.loginBySms(params as SmsLoginReq); - } else { - loginRes = await UserApi.login(params as LoginReq); - } - - const { token, expire } = loginRes; - // save token - this.setToken(token, expire); - // get user info - return await this.onLoginSuccess(loginRes); - } catch (error) { - console.error(error); - return null; + let loginRes: any = null; + if (loginType === "sms") { + loginRes = await UserApi.loginBySms(params as SmsLoginReq); + } else { + loginRes = await UserApi.login(params as LoginReq); } + return await this.onLoginSuccess(loginRes); + }, + + async loginByTwoFactor(form: any) { + const loginRes = await UserApi.loginByTwoFactor(form); + return await this.onLoginSuccess(loginRes); }, async getUserInfoAction(): Promise { const userInfo = await UserApi.mine(); @@ -100,9 +95,13 @@ export const useUserStore = defineStore({ }, async onLoginSuccess(loginData: any) { + const { token, expire } = loginData; + // save token + this.setToken(token, expire); + // get user info // await this.getUserInfoAction(); // const userInfo = await this.getUserInfoAction(); - mitter.emit("app.login", { token: loginData }); + mitter.emit("app.login", { ...loginData }); await router.replace("/"); }, diff --git a/packages/ui/certd-client/src/views/certd/mine/security/index.vue b/packages/ui/certd-client/src/views/certd/mine/security/index.vue index 2f44f14c..7b7bc095 100644 --- a/packages/ui/certd-client/src/views/certd/mine/security/index.vue +++ b/packages/ui/certd-client/src/views/certd/mine/security/index.vue @@ -9,7 +9,14 @@
- + 重新绑定 @@ -53,7 +60,12 @@ defineOptions({ name: "UserSecurity", }); -const formState = reactive>({}); +const formState = reactive>({ + authenticator: { + enabled: false, + verified: false, + }, +}); const authenticatorForm = reactive({ qrcodeSrc: "", diff --git a/packages/ui/certd-client/src/views/framework/login/index.vue b/packages/ui/certd-client/src/views/framework/login/index.vue index b993812e..c31b9a67 100644 --- a/packages/ui/certd-client/src/views/framework/login/index.vue +++ b/packages/ui/certd-client/src/views/framework/login/index.vue @@ -1,6 +1,6 @@