Commit d8b25b488ba4c6626d3b94ed84270e96f403d859

Authored by ZhaoBin
Committed by GitHub
1 parent 28392c3d

feat(breadcrumb): support showIcon (#48)

Co-authored-by: FuckDoctors <zhbchwin@163.com>
src/layouts/default/LayoutBreadcrumb.tsx
@@ -10,10 +10,17 @@ import { PageEnum } from &#39;/@/enums/pageEnum&#39;; @@ -10,10 +10,17 @@ import { PageEnum } from &#39;/@/enums/pageEnum&#39;;
10 import { isBoolean } from '/@/utils/is'; 10 import { isBoolean } from '/@/utils/is';
11 11
12 import { compile } from 'path-to-regexp'; 12 import { compile } from 'path-to-regexp';
  13 +import Icon from '/@/components/Icon';
13 14
14 export default defineComponent({ 15 export default defineComponent({
15 name: 'BasicBreadcrumb', 16 name: 'BasicBreadcrumb',
16 - setup() { 17 + props: {
  18 + showIcon: {
  19 + type: Boolean,
  20 + default: false,
  21 + },
  22 + },
  23 + setup(props) {
17 const itemList = ref<AppRouteRecordRaw[]>([]); 24 const itemList = ref<AppRouteRecordRaw[]>([]);
18 const { currentRoute, push } = useRouter(); 25 const { currentRoute, push } = useRouter();
19 26
@@ -78,7 +85,14 @@ export default defineComponent({ @@ -78,7 +85,14 @@ export default defineComponent({
78 isLink={isLink} 85 isLink={isLink}
79 onClick={handleItemClick.bind(null, item)} 86 onClick={handleItemClick.bind(null, item)}
80 > 87 >
81 - {() => item.meta.title} 88 + {() => (
  89 + <>
  90 + {props.showIcon && item.meta.icon && item.meta.icon.trim() !== '' && (
  91 + <Icon icon={item.meta.icon} class="icon mr-1 mb-1" />
  92 + )}
  93 + {item.meta.title}
  94 + </>
  95 + )}
82 </BreadcrumbItem> 96 </BreadcrumbItem>
83 ); 97 );
84 }); 98 });
src/layouts/default/LayoutHeader.tsx
@@ -94,6 +94,7 @@ export default defineComponent({ @@ -94,6 +94,7 @@ export default defineComponent({
94 }, 94 },
95 menuSetting: { mode, type: menuType, split: splitMenu, topMenuAlign }, 95 menuSetting: { mode, type: menuType, split: splitMenu, topMenuAlign },
96 showBreadCrumb, 96 showBreadCrumb,
  97 + showBreadCrumbIcon,
97 } = getProjectConfig; 98 } = getProjectConfig;
98 99
99 const isSidebarType = menuType === MenuTypeEnum.SIDEBAR; 100 const isSidebarType = menuType === MenuTypeEnum.SIDEBAR;
@@ -106,7 +107,7 @@ export default defineComponent({ @@ -106,7 +107,7 @@ export default defineComponent({
106 {showLogo && !isSidebarType && <Logo class={`layout-header__logo`} />} 107 {showLogo && !isSidebarType && <Logo class={`layout-header__logo`} />}
107 108
108 {mode !== MenuModeEnum.HORIZONTAL && showBreadCrumb && !splitMenu && ( 109 {mode !== MenuModeEnum.HORIZONTAL && showBreadCrumb && !splitMenu && (
109 - <LayoutBreadcrumb /> 110 + <LayoutBreadcrumb showIcon={showBreadCrumbIcon} />
110 )} 111 )}
111 {unref(showTopMenu) && ( 112 {unref(showTopMenu) && (
112 <div 113 <div
src/layouts/default/setting/SettingDrawer.tsx
@@ -343,6 +343,7 @@ export default defineComponent({ @@ -343,6 +343,7 @@ export default defineComponent({
343 menuSetting: { show: showMenu }, 343 menuSetting: { show: showMenu },
344 multiTabsSetting: { show: showMultiple, showQuick, showIcon: showTabIcon }, 344 multiTabsSetting: { show: showMultiple, showQuick, showIcon: showTabIcon },
345 showBreadCrumb, 345 showBreadCrumb,
  346 + showBreadCrumbIcon,
346 } = unref(getProjectConfigRef); 347 } = unref(getProjectConfigRef);
347 return [ 348 return [
348 renderSwitchItem('面包屑', { 349 renderSwitchItem('面包屑', {
@@ -352,6 +353,13 @@ export default defineComponent({ @@ -352,6 +353,13 @@ export default defineComponent({
352 def: showBreadCrumb, 353 def: showBreadCrumb,
353 disabled: !unref(getShowHeaderRef), 354 disabled: !unref(getShowHeaderRef),
354 }), 355 }),
  356 + renderSwitchItem('面包屑图标', {
  357 + handler: (e) => {
  358 + baseHandler('showBreadCrumbIcon', e);
  359 + },
  360 + def: showBreadCrumbIcon,
  361 + disabled: !unref(getShowHeaderRef),
  362 + }),
355 renderSwitchItem('标签页', { 363 renderSwitchItem('标签页', {
356 handler: (e) => { 364 handler: (e) => {
357 baseHandler('showMultiple', e); 365 baseHandler('showMultiple', e);
@@ -449,6 +457,11 @@ export default defineComponent({ @@ -449,6 +457,11 @@ export default defineComponent({
449 showBreadCrumb: value, 457 showBreadCrumb: value,
450 }; 458 };
451 } 459 }
  460 + if (event === 'showBreadCrumbIcon') {
  461 + config = {
  462 + showBreadCrumbIcon: value,
  463 + };
  464 + }
452 if (event === 'collapsed') { 465 if (event === 'collapsed') {
453 config = { 466 config = {
454 menuSetting: { 467 menuSetting: {
src/settings/projectSetting.ts
@@ -94,6 +94,8 @@ const setting: ProjectConfig = { @@ -94,6 +94,8 @@ const setting: ProjectConfig = {
94 lockTime: 0, 94 lockTime: 0,
95 // 显示面包屑 95 // 显示面包屑
96 showBreadCrumb: true, 96 showBreadCrumb: true,
  97 + // 显示面包屑图标
  98 + showBreadCrumbIcon: false,
97 99
98 // 使用error-handler-plugin 100 // 使用error-handler-plugin
99 useErrorHandle: isProdMode(), 101 useErrorHandle: isProdMode(),
src/types/config.d.ts
@@ -84,6 +84,8 @@ export interface ProjectConfig { @@ -84,6 +84,8 @@ export interface ProjectConfig {
84 lockTime: number; 84 lockTime: number;
85 // 显示面包屑 85 // 显示面包屑
86 showBreadCrumb: boolean; 86 showBreadCrumb: boolean;
  87 + // 显示面包屑图标
  88 + showBreadCrumbIcon: boolean;
87 // 使用error-handler-plugin 89 // 使用error-handler-plugin
88 useErrorHandle: boolean; 90 useErrorHandle: boolean;
89 91