Files
school2/web/components/AntdProvider/index.tsx
T
2026-07-13 15:23:29 +08:00

63 lines
1.9 KiB
TypeScript

import {App, ConfigProvider, type ThemeConfig} from 'antd';
import {type PropsWithChildren, useMemo} from 'react';
import algorithm from "@/layout/algorithm.ts";
import useGlobalStore from "@/stores/global";
import useLanguage from '@/hooks/useLanguage';
function ContextHolder() {
const { message, modal, notification } = App.useApp();
window.$message = message;
window.$modal = modal;
window.$notification = notification;
return null;
}
const AppProvider = ({ children }: PropsWithChildren) => {
const themeConfig = useGlobalStore(state => state.themeConfig);
const { antdLocale } = useLanguage();
const theme: ThemeConfig = useMemo(() => ({
components: {
Layout: {
headerPadding: "0 " + themeConfig.headerPadding + "px",
headerHeight: themeConfig.headerHeight,
bodyBg: themeConfig.bodyBg,
footerBg: themeConfig.footerBg,
headerBg: themeConfig.headerBg,
headerColor: themeConfig.headerColor,
siderBg: themeConfig.siderBg,
footerPadding: 0
},
Menu: {
activeBarBorderWidth: 0,
itemBg: 'transparent',
subMenuItemBg: 'transparent',
}
},
token: {
colorPrimary: themeConfig.colorPrimary,
colorBgBase: themeConfig.colorBg,
colorTextBase: themeConfig.colorText,
colorError: themeConfig.colorError,
colorInfo: themeConfig.colorPrimary,
colorLink: themeConfig.colorPrimary,
colorSuccess: themeConfig.colorSuccess,
colorWarning: themeConfig.colorWarning,
borderRadius: themeConfig.borderRadius,
controlHeight: themeConfig.controlHeight,
},
algorithm: themeConfig.algorithm ? algorithm[themeConfig.algorithm] : undefined
}), [themeConfig])
return (
<ConfigProvider theme={theme} locale={antdLocale}>
<App>
<ContextHolder />
{children}
</App>
</ConfigProvider>
);
};
export default AppProvider;