diff --git a/apps/aorta/core/infra/api/Request.ts b/apps/aorta/core/infra/api/Request.ts index 5b83404..e171bcf 100644 --- a/apps/aorta/core/infra/api/Request.ts +++ b/apps/aorta/core/infra/api/Request.ts @@ -1,4 +1,4 @@ -import { message } from "antd"; +import { antdUtils } from "@/AntdUtils"; import { getFingerprint, SymmetricCrypto } from "@tavi/util"; import axios, { AxiosError, @@ -65,7 +65,8 @@ class AxiosRequestInstance { (error: AxiosError) => { if (error.response && error.response.status === 403) { const { msg } = error.response.data as ResponseException; - message.error(msg); + console.log(antdUtils); + antdUtils.message?.error(msg); } return Promise.reject(error); } diff --git a/apps/aorta/src/AntdUtils.ts b/apps/aorta/src/AntdUtils.ts new file mode 100644 index 0000000..3f49cb9 --- /dev/null +++ b/apps/aorta/src/AntdUtils.ts @@ -0,0 +1,29 @@ +import { MessageInstance } from "antd/es/message/interface"; +import { ModalStaticFunctions } from "antd/es/modal/confirm"; +import { NotificationInstance } from "antd/es/notification/interface"; + +type ModalInstance = Omit; + +class AntdUtils { + message: MessageInstance | null = null; + notification: NotificationInstance | null = null; + modal: ModalInstance | null = null; + + setMessageInstance(message: MessageInstance) { + this.message = message; + this.message.success; + return this; + } + + setNotificationInstance(notification: NotificationInstance) { + this.notification = notification; + return this; + } + + setModalInstance(modal: ModalInstance) { + this.modal = modal; + return this; + } +} + +export const antdUtils = new AntdUtils(); diff --git a/apps/aorta/src/App.tsx b/apps/aorta/src/App.tsx index d722f6c..8d94833 100644 --- a/apps/aorta/src/App.tsx +++ b/apps/aorta/src/App.tsx @@ -2,9 +2,11 @@ import { DomainServiceProvider } from "./context/domainService"; import { defaultLang, theme } from "./constant"; import { useTracker } from "./hook/useTracker"; import { RouterElements } from "./router"; -import { ConfigProvider } from "antd"; +import { ConfigProvider, App as AntApp } from "antd"; import { useI18n } from "@tavi/i18n"; import "./styles/app.less"; +import { useEffect } from "react"; +import { antdUtils } from "./AntdUtils"; /** * 国际化 @@ -17,6 +19,13 @@ export const { i18n } = useI18n({ export const App = () => { useTracker(); + const { notification, message, modal } = AntApp.useApp(); + useEffect(() => { + antdUtils + .setMessageInstance(message) + .setModalInstance(modal) + .setNotificationInstance(notification); + }, []); return ( diff --git a/apps/aorta/src/index.tsx b/apps/aorta/src/index.tsx index febe4d5..8567ee4 100644 --- a/apps/aorta/src/index.tsx +++ b/apps/aorta/src/index.tsx @@ -1,11 +1,15 @@ import { createRoot } from "react-dom/client"; import { BrowserRouter } from "react-router-dom"; -const root = document.querySelector("#root"); +import { App as AntApp } from "antd"; import { App } from "./App"; +const root = document.querySelector("#root"); + if (root) createRoot(root).render( - + + + ); diff --git a/apps/services/aorta/gateway/src/filter/forbid.filter.ts b/apps/services/aorta/gateway/src/filter/forbid.filter.ts index a5675d1..df7d81a 100644 --- a/apps/services/aorta/gateway/src/filter/forbid.filter.ts +++ b/apps/services/aorta/gateway/src/filter/forbid.filter.ts @@ -17,6 +17,7 @@ export class ForbiddenExceptionFilter implements ExceptionFilter { statusCode: status, timestamp: new Date().toISOString(), path: request.url, + msg: exception.message, }); // 你可以设置一个重定向地址 // response.redirect('/');