Commit f69aaeab5e6e78a638601cc63c22072847b3204d

Authored by vben
1 parent bd7b53f1

chore: fix layout style

src/components/Application/src/AppLogo.vue
@@ -3,7 +3,11 @@ @@ -3,7 +3,11 @@
3 * @Description: logo component 3 * @Description: logo component
4 --> 4 -->
5 <template> 5 <template>
6 - <div class="anticon" :class="[prefixCls, theme]" @click="handleGoHome"> 6 + <div
  7 + class="anticon"
  8 + :class="[prefixCls, theme, { 'collapsed-show-title': getCollapsedShowTitle }]"
  9 + @click="handleGoHome"
  10 + >
7 <img src="/@/assets/images/logo.png" /> 11 <img src="/@/assets/images/logo.png" />
8 <div class="ml-2 ellipsis" :class="[`${prefixCls}__title`]" v-show="showTitle"> 12 <div class="ml-2 ellipsis" :class="[`${prefixCls}__title`]" v-show="showTitle">
9 {{ title }} 13 {{ title }}
@@ -35,6 +39,7 @@ @@ -35,6 +39,7 @@
35 }, 39 },
36 setup() { 40 setup() {
37 const { prefixCls } = useDesign('app-logo'); 41 const { prefixCls } = useDesign('app-logo');
  42 + const { getCollapsedShowTitle } = useMenuSetting();
38 43
39 const { title } = useGlobSetting(); 44 const { title } = useGlobSetting();
40 45
@@ -48,6 +53,7 @@ @@ -48,6 +53,7 @@
48 handleGoHome, 53 handleGoHome,
49 title, 54 title,
50 prefixCls, 55 prefixCls,
  56 + getCollapsedShowTitle,
51 }; 57 };
52 }, 58 },
53 }); 59 });
@@ -67,6 +73,10 @@ @@ -67,6 +73,10 @@
67 border-bottom: 1px solid @border-color-base; 73 border-bottom: 1px solid @border-color-base;
68 } 74 }
69 75
  76 + &.collapsed-show-title {
  77 + padding-left: 20px;
  78 + }
  79 +
70 &.light &__title { 80 &.light &__title {
71 color: @primary-color; 81 color: @primary-color;
72 } 82 }
src/components/Menu/src/BasicMenu.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 :item="item" 17 :item="item"
18 :theme="theme" 18 :theme="theme"
19 :level="1" 19 :level="1"
20 - :showTitle="!getCollapsed" 20 + :showTitle="showTitle"
21 :isHorizontal="isHorizontal" 21 :isHorizontal="isHorizontal"
22 /> 22 />
23 </template> 23 </template>
@@ -95,12 +95,16 @@ @@ -95,12 +95,16 @@
95 prefixCls, 95 prefixCls,
96 `justify-${align}`, 96 `justify-${align}`,
97 { 97 {
  98 + [`${prefixCls}--hide-title`]: !unref(showTitle),
  99 + [`${prefixCls}--collapsed-show-title`]: props.collapsedShowTitle,
98 [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit), 100 [`${prefixCls}__second`]: !props.isHorizontal && unref(getSplit),
99 [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu), 101 [`${prefixCls}__sidebar-hor`]: unref(getIsTopMenu),
100 }, 102 },
101 ]; 103 ];
102 }); 104 });
103 105
  106 + const showTitle = computed(() => props.collapsedShowTitle && unref(getCollapsed));
  107 +
104 const getInlineCollapseOptions = computed(() => { 108 const getInlineCollapseOptions = computed(() => {
105 const isInline = props.mode === MenuModeEnum.INLINE; 109 const isInline = props.mode === MenuModeEnum.INLINE;
106 110
@@ -164,7 +168,7 @@ @@ -164,7 +168,7 @@
164 getMenuClass, 168 getMenuClass,
165 handleOpenChange, 169 handleOpenChange,
166 getOpenKeys, 170 getOpenKeys,
167 - getCollapsed, 171 + showTitle,
168 ...toRefs(menuState), 172 ...toRefs(menuState),
169 }; 173 };
170 }, 174 },
src/components/Menu/src/index.less
@@ -48,6 +48,63 @@ @@ -48,6 +48,63 @@
48 opacity: 1 !important; 48 opacity: 1 !important;
49 } 49 }
50 50
  51 + &--hide-title {
  52 + &.ant-menu-inline-collapsed > .ant-menu-item,
  53 + &.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item,
  54 + &.ant-menu-inline-collapsed
  55 + > .ant-menu-item-group
  56 + > .ant-menu-item-group-list
  57 + > .ant-menu-submenu
  58 + > .ant-menu-submenu-title,
  59 + &.ant-menu-inline-collapsed .ant-menu-submenu-title {
  60 + padding-right: 16px !important;
  61 + padding-left: 16px !important;
  62 + }
  63 + }
  64 +
  65 + &--collapsed-show-title.ant-menu-inline-collapsed {
  66 + .@{basic-menu-prefix-cls}-item__level1 {
  67 + padding: 2px 0;
  68 + justify-content: center !important;
  69 +
  70 + &.ant-menu-item {
  71 + display: flex;
  72 + align-items: center;
  73 + height: 60px !important;
  74 + margin-top: 0 !important;
  75 + margin-bottom: 0 !important;
  76 + line-height: 60px !important;
  77 +
  78 + > span {
  79 + margin-top: 10px;
  80 + }
  81 + }
  82 + }
  83 +
  84 + & > li[role='menuitem']:not(.ant-menu-submenu),
  85 + & > li > .ant-menu-submenu-title {
  86 + display: flex;
  87 + margin-top: 10px;
  88 + font-size: 12px;
  89 + flex-direction: column;
  90 + align-items: center;
  91 + line-height: 24px;
  92 + }
  93 +
  94 + & > li > .ant-menu-submenu-title {
  95 + line-height: 24px;
  96 + }
  97 + .@{basic-menu-content-prefix-cls}-wrapper {
  98 + display: flex;
  99 + justify-content: center;
  100 + align-items: center;
  101 + flex-direction: column;
  102 + .@{basic-menu-content-prefix-cls}--show-title {
  103 + line-height: 30px;
  104 + }
  105 + }
  106 + }
  107 +
51 &.ant-menu-inline-collapsed > .ant-menu-item, 108 &.ant-menu-inline-collapsed > .ant-menu-item,
52 &.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item, 109 &.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item,
53 &.ant-menu-inline-collapsed 110 &.ant-menu-inline-collapsed
@@ -62,6 +119,7 @@ @@ -62,6 +119,7 @@
62 119
63 .@{basic-menu-content-prefix-cls}-wrapper { 120 .@{basic-menu-content-prefix-cls}-wrapper {
64 width: 100%; 121 width: 100%;
  122 + margin-top: 4px;
65 123
66 &__icon { 124 &__icon {
67 vertical-align: text-top; 125 vertical-align: text-top;
@@ -181,7 +239,20 @@ @@ -181,7 +239,20 @@
181 &.ant-menu-inline-collapsed { 239 &.ant-menu-inline-collapsed {
182 .ant-menu-submenu-selected, 240 .ant-menu-submenu-selected,
183 .ant-menu-item-selected { 241 .ant-menu-item-selected {
  242 + position: relative;
  243 + font-weight: 500;
  244 + color: @white;
184 background: @sider-dark-darken-bg-color !important; 245 background: @sider-dark-darken-bg-color !important;
  246 +
  247 + &::before {
  248 + position: absolute;
  249 + top: 0;
  250 + left: 0;
  251 + width: 3px;
  252 + height: 100%;
  253 + background: @primary-color;
  254 + content: '';
  255 + }
185 } 256 }
186 } 257 }
187 } 258 }
src/components/Menu/src/props.ts
@@ -9,7 +9,7 @@ export const basicProps = { @@ -9,7 +9,7 @@ export const basicProps = {
9 type: Array as PropType<Menu[]>, 9 type: Array as PropType<Menu[]>,
10 default: () => [], 10 default: () => [],
11 }, 11 },
12 - 12 + collapsedShowTitle: propTypes.bool,
13 // 最好是4 倍数 13 // 最好是4 倍数
14 inlineIndent: propTypes.number.def(20), 14 inlineIndent: propTypes.number.def(20),
15 // 菜单组件的mode属性 15 // 菜单组件的mode属性
src/hooks/setting/useMenuSetting.ts
@@ -45,6 +45,8 @@ const getIsSidebarType = computed(() =&gt; unref(getMenuType) === MenuTypeEnum.SIDE @@ -45,6 +45,8 @@ const getIsSidebarType = computed(() =&gt; unref(getMenuType) === MenuTypeEnum.SIDE
45 45
46 const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU); 46 const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU);
47 47
  48 +const getCollapsedShowTitle = computed(() => unref(getMenuSetting).collapsedShowTitle);
  49 +
48 const getShowTopMenu = computed(() => { 50 const getShowTopMenu = computed(() => {
49 return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit); 51 return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit);
50 }); 52 });
@@ -74,7 +76,8 @@ const getRealWidth = computed(() =&gt; { @@ -74,7 +76,8 @@ const getRealWidth = computed(() =&gt; {
74 }); 76 });
75 77
76 const getMiniWidthNumber = computed(() => { 78 const getMiniWidthNumber = computed(() => {
77 - return SIDE_BAR_MINI_WIDTH; 79 + const { collapsedShowTitle } = unref(getMenuSetting);
  80 + return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH;
78 }); 81 });
79 82
80 const getCalcContentWidth = computed(() => { 83 const getCalcContentWidth = computed(() => {
@@ -128,6 +131,7 @@ export function useMenuSetting() { @@ -128,6 +131,7 @@ export function useMenuSetting() {
128 getSplit, 131 getSplit,
129 getMenuTheme, 132 getMenuTheme,
130 getCanDrag, 133 getCanDrag,
  134 + getCollapsedShowTitle,
131 getIsHorizontal, 135 getIsHorizontal,
132 getIsSidebarType, 136 getIsSidebarType,
133 getAccordion, 137 getAccordion,
src/layouts/default/index.vue
@@ -2,7 +2,11 @@ @@ -2,7 +2,11 @@
2 <Layout :class="prefixCls"> 2 <Layout :class="prefixCls">
3 <LayoutFeatures /> 3 <LayoutFeatures />
4 <LayoutHeader fixed v-if="getShowFullHeaderRef" /> 4 <LayoutHeader fixed v-if="getShowFullHeaderRef" />
5 - <Layout class="ant-layout-has-sider"> 5 + <Layout
  6 + :class="{
  7 + 'ant-layout-has-sider': getIsMixSidebar,
  8 + }"
  9 + >
6 <LayoutSideBar v-if="getShowSidebar || getIsMobile" /> 10 <LayoutSideBar v-if="getShowSidebar || getIsMobile" />
7 <Layout :class="`${prefixCls}__main`"> 11 <Layout :class="`${prefixCls}__main`">
8 <LayoutMultipleHeader /> 12 <LayoutMultipleHeader />
src/layouts/default/menu/index.tsx
@@ -45,6 +45,7 @@ export default defineComponent({ @@ -45,6 +45,7 @@ export default defineComponent({
45 getMenuType, 45 getMenuType,
46 getMenuTheme, 46 getMenuTheme,
47 getCollapsed, 47 getCollapsed,
  48 + getCollapsedShowTitle,
48 getAccordion, 49 getAccordion,
49 getIsHorizontal, 50 getIsHorizontal,
50 getIsSidebarType, 51 getIsSidebarType,
@@ -130,6 +131,8 @@ export default defineComponent({ @@ -130,6 +131,8 @@ export default defineComponent({
130 beforeClickFn={beforeMenuClickFn} 131 beforeClickFn={beforeMenuClickFn}
131 isHorizontal={props.isHorizontal} 132 isHorizontal={props.isHorizontal}
132 type={unref(getMenuType)} 133 type={unref(getMenuType)}
  134 + collapsedShowTitle={unref(getCollapsedShowTitle)}
  135 + showLogo={unref(getIsShowLogo)}
133 mode={unref(getComputedMenuMode)} 136 mode={unref(getComputedMenuMode)}
134 theme={unref(getComputedMenuTheme)} 137 theme={unref(getComputedMenuTheme)}
135 items={unref(menusRef)} 138 items={unref(menusRef)}
src/layouts/default/setting/SettingDrawer.tsx
@@ -61,6 +61,7 @@ export default defineComponent({ @@ -61,6 +61,7 @@ export default defineComponent({
61 getShowMenu, 61 getShowMenu,
62 getMenuType, 62 getMenuType,
63 getTrigger, 63 getTrigger,
  64 + getCollapsedShowTitle,
64 getMenuFixed, 65 getMenuFixed,
65 getCollapsed, 66 getCollapsed,
66 getCanDrag, 67 getCanDrag,
@@ -176,6 +177,12 @@ export default defineComponent({ @@ -176,6 +177,12 @@ export default defineComponent({
176 def={unref(getCollapsed)} 177 def={unref(getCollapsed)}
177 disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)} 178 disabled={!unref(getShowMenuRef) || unref(getIsMixSidebar)}
178 /> 179 />
  180 + <SwitchItem
  181 + title={t('layout.setting.collapseMenuDisplayName')}
  182 + event={HandlerEnum.MENU_COLLAPSED_SHOW_TITLE}
  183 + def={unref(getCollapsedShowTitle)}
  184 + disabled={!unref(getShowMenuRef) || !unref(getCollapsed)}
  185 + />
179 186
180 <SwitchItem 187 <SwitchItem
181 title={t('layout.setting.fixedHeader')} 188 title={t('layout.setting.fixedHeader')}
src/layouts/default/setting/handler.ts
@@ -51,12 +51,16 @@ export function handler(event: HandlerEnum, value: any): DeepPartial&lt;ProjectConf @@ -51,12 +51,16 @@ export function handler(event: HandlerEnum, value: any): DeepPartial&lt;ProjectConf
51 case HandlerEnum.MENU_SHOW_SIDEBAR: 51 case HandlerEnum.MENU_SHOW_SIDEBAR:
52 return { menuSetting: { show: value } }; 52 return { menuSetting: { show: value } };
53 53
  54 + case HandlerEnum.MENU_COLLAPSED_SHOW_TITLE:
  55 + return { menuSetting: { collapsedShowTitle: value } };
  56 +
54 case HandlerEnum.MENU_THEME: 57 case HandlerEnum.MENU_THEME:
55 updateSidebarBgColor(value); 58 updateSidebarBgColor(value);
56 return { menuSetting: { bgColor: value } }; 59 return { menuSetting: { bgColor: value } };
57 60
58 case HandlerEnum.MENU_SPLIT: 61 case HandlerEnum.MENU_SPLIT:
59 - return { menuSetting: { split: value } }; 62 + return { menuSetting: { split: value, collapsedShowTitle: true } };
  63 +
60 case HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE: 64 case HandlerEnum.MENU_CLOSE_MIX_SIDEBAR_ON_CHANGE:
61 return { menuSetting: { closeMixSidebarOnChange: value } }; 65 return { menuSetting: { closeMixSidebarOnChange: value } };
62 66
src/layouts/default/sider/MixSider.vue
@@ -267,15 +267,16 @@ @@ -267,15 +267,16 @@
267 } 267 }
268 } 268 }
269 } 269 }
  270 + @border-color: @sider-dark-lighten-1-bg-color;
270 271
271 &.dark { 272 &.dark {
272 &.open { 273 &.open {
273 .@{prefix-cls}-logo { 274 .@{prefix-cls}-logo {
274 - border-bottom: 1px solid rgb(114 114 114); 275 + border-bottom: 1px solid @border-color;
275 } 276 }
276 277
277 > .scroll-container { 278 > .scroll-container {
278 - border-right: 1px solid rgb(114 114 114); 279 + border-right: 1px solid @border-color;
279 } 280 }
280 } 281 }
281 .@{prefix-cls}-menu-list { 282 .@{prefix-cls}-menu-list {
@@ -284,7 +285,7 @@ @@ -284,7 +285,7 @@
284 &__title { 285 &__title {
285 color: @white; 286 color: @white;
286 border-bottom: none; 287 border-bottom: none;
287 - border-bottom: 1px solid rgb(114 114 114); 288 + border-bottom: 1px solid @border-color;
288 } 289 }
289 } 290 }
290 } 291 }
src/locales/lang/en/layout/setting.ts
@@ -45,6 +45,7 @@ export default { @@ -45,6 +45,7 @@ export default {
45 menuSearch: 'Menu search', 45 menuSearch: 'Menu search',
46 menuAccordion: 'Sidebar accordion', 46 menuAccordion: 'Sidebar accordion',
47 menuCollapse: 'Collapse menu', 47 menuCollapse: 'Collapse menu',
  48 + collapseMenuDisplayName: 'Collapse menu display name',
48 topMenuLayout: 'Top menu layout', 49 topMenuLayout: 'Top menu layout',
49 menuCollapseButton: 'Menu collapse button', 50 menuCollapseButton: 'Menu collapse button',
50 contentMode: 'Content area width', 51 contentMode: 'Content area width',
src/locales/lang/zh_CN/layout/setting.ts
@@ -44,6 +44,7 @@ export default { @@ -44,6 +44,7 @@ export default {
44 menuSearch: '菜单搜索', 44 menuSearch: '菜单搜索',
45 menuAccordion: '侧边菜单手风琴模式', 45 menuAccordion: '侧边菜单手风琴模式',
46 menuCollapse: '折叠菜单', 46 menuCollapse: '折叠菜单',
  47 + collapseMenuDisplayName: '折叠菜单显示名称',
47 topMenuLayout: '顶部菜单布局', 48 topMenuLayout: '顶部菜单布局',
48 menuCollapseButton: '菜单折叠按钮', 49 menuCollapseButton: '菜单折叠按钮',
49 contentMode: '内容区域宽度', 50 contentMode: '内容区域宽度',
src/settings/projectSetting.ts
@@ -81,6 +81,8 @@ const setting: ProjectConfig = { @@ -81,6 +81,8 @@ const setting: ProjectConfig = {
81 fixed: true, 81 fixed: true,
82 // Menu collapse 82 // Menu collapse
83 collapsed: false, 83 collapsed: false,
  84 + // Whether to display the menu name when folding the menu
  85 + collapsedShowTitle: false,
84 // Whether it can be dragged 86 // Whether it can be dragged
85 // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu 87 // Only limited to the opening of the left menu, the mouse has a drag bar on the right side of the menu
86 canDrag: true, 88 canDrag: true,
src/types/config.d.ts
@@ -19,6 +19,7 @@ export interface MenuSetting { @@ -19,6 +19,7 @@ export interface MenuSetting {
19 trigger: TriggerEnum; 19 trigger: TriggerEnum;
20 accordion: boolean; 20 accordion: boolean;
21 closeMixSidebarOnChange: boolean; 21 closeMixSidebarOnChange: boolean;
  22 + collapsedShowTitle: boolean;
22 } 23 }
23 24
24 export interface MultiTabsSetting { 25 export interface MultiTabsSetting {