Unverified Commit 2ac44da0 authored by Sendya's avatar Sendya

fix: locale inject route-context

parent 069f3f58
...@@ -3,7 +3,7 @@ import { createApp, defineComponent, watch, ref, watchEffect, onMounted } from ' ...@@ -3,7 +3,7 @@ import { createApp, defineComponent, watch, ref, watchEffect, onMounted } from '
import { createRouter, createWebHashHistory, useRoute, useRouter, RouteRecord } from 'vue-router'; import { createRouter, createWebHashHistory, useRoute, useRouter, RouteRecord } from 'vue-router';
import { Avatar, Button, Space, Select, Switch } from 'ant-design-vue'; import { Avatar, Button, Space, Select, Switch } from 'ant-design-vue';
import { UserOutlined } from '@ant-design/icons-vue'; import { UserOutlined } from '@ant-design/icons-vue';
import { default as ProLayout, FooterToolbar, WaterMark } from '../src/'; import { default as ProLayout, FooterToolbar, WaterMark, FormatMessage } from '../src/';
import { globalState as state } from './state'; import { globalState as state } from './state';
import './demo.less'; import './demo.less';
...@@ -18,6 +18,15 @@ import ChildPage from './demo/child/child-page'; ...@@ -18,6 +18,15 @@ import ChildPage from './demo/child/child-page';
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const noop = () => {}; const noop = () => {};
const locales: Record<string, string> = {
home: '首页',
'views.dashboard.title': '页面1',
};
const i18n = (key: string): string => {
return locales[key] || key;
};
const getMenuData = (routes: RouteRecord[]) => { const getMenuData = (routes: RouteRecord[]) => {
const childrenRoute = routes.find(route => route.path === '/'); const childrenRoute = routes.find(route => route.path === '/');
return childrenRoute?.children || []; return childrenRoute?.children || [];
...@@ -63,7 +72,7 @@ const BasicLayout = defineComponent({ ...@@ -63,7 +72,7 @@ const BasicLayout = defineComponent({
<ProLayout <ProLayout
layout={state.layout} layout={state.layout}
navTheme={state.navTheme} navTheme={state.navTheme}
i18n={(key: string) => key} locale={i18n}
isMobile={state.isMobile} isMobile={state.isMobile}
fixSiderbar={state.fixSiderbar} fixSiderbar={state.fixSiderbar}
fixedHeader={state.fixedHeader} fixedHeader={state.fixedHeader}
...@@ -186,7 +195,7 @@ const routes = [ ...@@ -186,7 +195,7 @@ const routes = [
{ {
path: '/dashboard', path: '/dashboard',
name: 'dashboard', name: 'dashboard',
meta: { title: 'dashboard', icon: 'SmileOutlined' }, meta: { title: 'views.dashboard.title', icon: 'SmileOutlined' },
redirect: '/dashboard/analysis', redirect: '/dashboard/analysis',
component: RouteView, component: RouteView,
children: [ children: [
......
...@@ -254,7 +254,7 @@ ProLayout.props = { ...@@ -254,7 +254,7 @@ ProLayout.props = {
/* 使用 IconFont 的图标配置 */ /* 使用 IconFont 的图标配置 */
iconfontUrl: PropTypes.string, iconfontUrl: PropTypes.string,
/* 当前 layout 的语言设置 */ /* 当前 layout 的语言设置 */
locale: PropTypes.func.def((key: string) => key), locale: PropTypes.func,
// settings // settings
/* 侧边菜单宽度 */ /* 侧边菜单宽度 */
siderWidth: PropTypes.number.def(208), siderWidth: PropTypes.number.def(208),
......
...@@ -6,6 +6,7 @@ import { PageHeaderProps } from './interfaces/PageHeader'; ...@@ -6,6 +6,7 @@ import { PageHeaderProps } from './interfaces/PageHeader';
import { AffixProps } from './interfaces/Affix'; import { AffixProps } from './interfaces/Affix';
/* replace antd ts define end */ /* replace antd ts define end */
import { useRouteContext, RouteContextProps } from '../RouteContext'; import { useRouteContext, RouteContextProps } from '../RouteContext';
import { withInstall } from 'ant-design-vue/es/_util/type';
import 'ant-design-vue/es/affix/style'; import 'ant-design-vue/es/affix/style';
import Affix from 'ant-design-vue/es/affix'; import Affix from 'ant-design-vue/es/affix';
import 'ant-design-vue/es/page-header/style'; import 'ant-design-vue/es/page-header/style';
...@@ -164,7 +165,7 @@ const defaultPageHeaderRender = ( ...@@ -164,7 +165,7 @@ const defaultPageHeaderRender = (
); );
}; };
export const PageContainer: FunctionalComponent<PageContainerProps> = (props, { slots }) => { const PageContainer: FunctionalComponent<PageContainerProps> = (props, { slots }) => {
const { loading, footer, affixProps, ghost, fixedHeader } = props; // toRefs(props); const { loading, footer, affixProps, ghost, fixedHeader } = props; // toRefs(props);
const value = useRouteContext(); const value = useRouteContext();
const { getPrefixCls } = value; const { getPrefixCls } = value;
...@@ -217,3 +218,5 @@ export const PageContainer: FunctionalComponent<PageContainerProps> = (props, { ...@@ -217,3 +218,5 @@ export const PageContainer: FunctionalComponent<PageContainerProps> = (props, {
</div> </div>
); );
}; };
export default withInstall(PageContainer);
...@@ -4,7 +4,7 @@ import Layout from 'ant-design-vue/es/layout'; ...@@ -4,7 +4,7 @@ import Layout from 'ant-design-vue/es/layout';
import 'ant-design-vue/es/menu/style'; import 'ant-design-vue/es/menu/style';
import Menu from 'ant-design-vue/es/menu'; import Menu from 'ant-design-vue/es/menu';
import BaseMenu, { BaseMenuProps } from './BaseMenu'; import BaseMenu, { BaseMenuProps } from './BaseMenu';
import { WithFalse, CustomRender } from '../typings'; import { FormatMessage, WithFalse, CustomRender } from '../typings';
import { SiderProps } from './typings'; import { SiderProps } from './typings';
import { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue'; import { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue';
import { useRouteContext } from '../RouteContext'; import { useRouteContext } from '../RouteContext';
...@@ -101,7 +101,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) = ...@@ -101,7 +101,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) =
onSelect, onSelect,
} = props; } = props;
const context = useRouteContext(); const context = useRouteContext();
const { getPrefixCls } = context; const { getPrefixCls, i18n } = context;
const baseClassName = getPrefixCls('sider'); const baseClassName = getPrefixCls('sider');
// const isMix = computed(() => props.layout === 'mix'); // const isMix = computed(() => props.layout === 'mix');
// const fixed = computed(() => context.fixSiderbar); // const fixed = computed(() => context.fixSiderbar);
...@@ -130,6 +130,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) = ...@@ -130,6 +130,7 @@ const SiderMenu: FunctionalComponent<SiderMenuProps> = (props: SiderMenuProps) =
const defaultMenuDom = ( const defaultMenuDom = (
<BaseMenu <BaseMenu
prefixCls={getPrefixCls()} prefixCls={getPrefixCls()}
i18n={i18n as FormatMessage}
theme={runtimeTheme.value === 'realDark' ? 'dark' : runtimeTheme.value} theme={runtimeTheme.value === 'realDark' ? 'dark' : runtimeTheme.value}
mode="inline" mode="inline"
menuData={hasSide.value ? flatMenuData.value : context.menuData} menuData={hasSide.value ? flatMenuData.value : context.menuData}
......
...@@ -7,6 +7,7 @@ import { ...@@ -7,6 +7,7 @@ import {
import BaseMenu from '../SiderMenu/BaseMenu'; import BaseMenu from '../SiderMenu/BaseMenu';
import { GlobalHeaderProps } from '../GlobalHeader'; import { GlobalHeaderProps } from '../GlobalHeader';
import { default as ResizeObserver } from 'ant-design-vue/es/vc-resize-observer'; import { default as ResizeObserver } from 'ant-design-vue/es/vc-resize-observer';
import { FormatMessage } from '../typings';
import './index.less'; import './index.less';
import { useRouteContext } from '../RouteContext'; import { useRouteContext } from '../RouteContext';
...@@ -86,6 +87,7 @@ export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = props => { ...@@ -86,6 +87,7 @@ export const TopNavHeader: FunctionalComponent<TopNavHeaderProps> = props => {
<div style={{ flex: 1 }} class={`${prefixCls}-menu`}> <div style={{ flex: 1 }} class={`${prefixCls}-menu`}>
<BaseMenu <BaseMenu
prefixCls={propPrefixCls} prefixCls={propPrefixCls}
i18n={context.i18n as FormatMessage}
theme={props.theme === 'realDark' ? 'dark' : props.theme} theme={props.theme === 'realDark' ? 'dark' : props.theme}
mode={props.mode} mode={props.mode}
collapsed={props.collapsed} collapsed={props.collapsed}
......
export * from './RouteContext'; export * from './RouteContext';
export * from './typings';
export { createContext, useContext, ContextType, CreateContext } from './hooks/context'; export { createContext, useContext, ContextType, CreateContext } from './hooks/context';
export { default as FooterToolbar } from './FooterToolbar'; export { default as FooterToolbar } from './FooterToolbar';
export { default as GlobalFooter } from './GlobalFooter'; export { default as GlobalFooter } from './GlobalFooter';
...@@ -10,7 +11,7 @@ export { WrapContent } from './WrapContent'; ...@@ -10,7 +11,7 @@ export { WrapContent } from './WrapContent';
// useProProvider, // useProProvider,
// ProProviderData, // ProProviderData,
// } from './ProProvider'; // } from './ProProvider';
export { PageContainer } from './PageContainer'; export { default as PageContainer } from './PageContainer';
export { default as SiderMenuWrapper, SiderMenuWrapperProps } from './SiderMenu/index'; export { default as SiderMenuWrapper, SiderMenuWrapperProps } from './SiderMenu/index';
export { export {
default as BaseMenu, default as BaseMenu,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment