Commit de1f00628479c4d31e6ed904d4b0fd7e312cc030

Authored by vben
1 parent 6da377da

fix(menu): fix the calculation error of the top menu width

CHANGELOG.zh_CN.md
@@ -20,12 +20,15 @@ @@ -20,12 +20,15 @@
20 20
21 - 首屏 loading 修改 21 - 首屏 loading 修改
22 - 升级`vue`到`3.0.4` 22 - 升级`vue`到`3.0.4`
  23 +- 升级`ant-design-vue`到`2.0.0-rc.3`
  24 +- 重新引入`vueuse`
23 - 移除 route meta 内的`afterCloseLoading`属性 25 - 移除 route meta 内的`afterCloseLoading`属性
24 26
25 ### 🐛 Bug Fixes 27 ### 🐛 Bug Fixes
26 28
27 - 修复表格 i18n 错误 29 - 修复表格 i18n 错误
28 - 修复菜单图标大小不一致 30 - 修复菜单图标大小不一致
  31 +- 修复顶部菜单宽度计算问题
29 32
30 ## 2.0.0-rc.12 (2020-11-30) 33 ## 2.0.0-rc.12 (2020-11-30)
31 34
package.json
@@ -22,7 +22,8 @@ @@ -22,7 +22,8 @@
22 }, 22 },
23 "dependencies": { 23 "dependencies": {
24 "@iconify/iconify": "^2.0.0-rc.2", 24 "@iconify/iconify": "^2.0.0-rc.2",
25 - "ant-design-vue": "^2.0.0-rc.2", 25 + "@vueuse/core": "^4.0.0-rc.6",
  26 + "ant-design-vue": "^2.0.0-rc.3",
26 "apexcharts": "3.22.0", 27 "apexcharts": "3.22.0",
27 "axios": "^0.21.0", 28 "axios": "^0.21.0",
28 "crypto-es": "^1.2.6", 29 "crypto-es": "^1.2.6",
src/layouts/default/header/LayoutHeader.tsx
@@ -8,6 +8,8 @@ import { @@ -8,6 +8,8 @@ import {
8 unref, 8 unref,
9 computed, 9 computed,
10 ref, 10 ref,
  11 + nextTick,
  12 + watchEffect,
11 // nextTick 13 // nextTick
12 } from 'vue'; 14 } from 'vue';
13 15
@@ -30,7 +32,7 @@ import { useModal } from '/@/components/Modal'; @@ -30,7 +32,7 @@ import { useModal } from '/@/components/Modal';
30 32
31 import { useFullscreen } from '/@/hooks/web/useFullScreen'; 33 import { useFullscreen } from '/@/hooks/web/useFullScreen';
32 import { useTabs } from '/@/hooks/web/useTabs'; 34 import { useTabs } from '/@/hooks/web/useTabs';
33 -// import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; 35 +import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn';
34 import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; 36 import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
35 import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; 37 import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
36 import { useRootSetting } from '/@/hooks/setting/useRootSetting'; 38 import { useRootSetting } from '/@/hooks/setting/useRootSetting';
@@ -68,9 +70,9 @@ export default defineComponent({ @@ -68,9 +70,9 @@ export default defineComponent({
68 fixed: propTypes.bool, 70 fixed: propTypes.bool,
69 }, 71 },
70 setup(props) { 72 setup(props) {
71 - // let logoEl: Element | null | undefined; 73 + let logoEl: Element | null | undefined;
72 74
73 - // const logoWidthRef = ref(200); 75 + const logoWidthRef = ref(200);
74 const logoRef = ref<ComponentRef>(null); 76 const logoRef = ref<ComponentRef>(null);
75 77
76 const injectValue = useLayoutContext(); 78 const injectValue = useLayoutContext();
@@ -78,7 +80,13 @@ export default defineComponent({ @@ -78,7 +80,13 @@ export default defineComponent({
78 const { refreshPage } = useTabs(); 80 const { refreshPage } = useTabs();
79 const { t } = useI18n(); 81 const { t } = useI18n();
80 82
81 - const { getShowTopMenu, getShowHeaderTrigger, getSplit, getTopMenuAlign } = useMenuSetting(); 83 + const {
  84 + getShowTopMenu,
  85 + getShowHeaderTrigger,
  86 + getSplit,
  87 + getTopMenuAlign,
  88 + getIsHorizontal,
  89 + } = useMenuSetting();
82 90
83 const { getShowLocale } = useLocaleSetting(); 91 const { getShowLocale } = useLocaleSetting();
84 const { getUseErrorHandle, getShowBreadCrumbIcon } = useRootSetting(); 92 const { getUseErrorHandle, getShowBreadCrumbIcon } = useRootSetting();
@@ -98,22 +106,13 @@ export default defineComponent({ @@ -98,22 +106,13 @@ export default defineComponent({
98 const [register, { openModal }] = useModal(); 106 const [register, { openModal }] = useModal();
99 const { toggleFullscreen, isFullscreenRef } = useFullscreen(); 107 const { toggleFullscreen, isFullscreenRef } = useFullscreen();
100 108
101 - // useWindowSizeFn(  
102 - // () => {  
103 - // nextTick(() => {  
104 - // if (!unref(getShowTopMenu)) return;  
105 - // let width = 0;  
106 - // if (!logoEl) {  
107 - // logoEl = unref(logoRef)?.$el;  
108 - // } else {  
109 - // width += logoEl.clientWidth;  
110 - // }  
111 - // logoWidthRef.value = width + 80;  
112 - // });  
113 - // },  
114 - // 200,  
115 - // { immediate: true }  
116 - // ); 109 + useWindowSizeFn(
  110 + () => {
  111 + calcTopMenuWidth();
  112 + },
  113 + 100,
  114 + { immediate: false }
  115 + );
117 116
118 const headerClass = computed(() => { 117 const headerClass = computed(() => {
119 const theme = unref(getHeaderTheme); 118 const theme = unref(getHeaderTheme);
@@ -132,6 +131,25 @@ export default defineComponent({ @@ -132,6 +131,25 @@ export default defineComponent({
132 return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null; 131 return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
133 }); 132 });
134 133
  134 + watchEffect(() => {
  135 + if (unref(getIsHorizontal)) {
  136 + calcTopMenuWidth();
  137 + }
  138 + });
  139 +
  140 + function calcTopMenuWidth() {
  141 + nextTick(() => {
  142 + if (!unref(getShowTopMenu)) return;
  143 + let width = 0;
  144 + if (!logoEl) {
  145 + logoEl = unref(logoRef)?.$el;
  146 + }
  147 + if (!logoEl) return;
  148 + width += logoEl.clientWidth;
  149 + logoWidthRef.value = width + 80;
  150 + });
  151 + }
  152 +
135 function handleToErrorList() { 153 function handleToErrorList() {
136 push(PageEnum.ERROR_LOG_PAGE).then(() => { 154 push(PageEnum.ERROR_LOG_PAGE).then(() => {
137 errorStore.commitErrorListCountState(0); 155 errorStore.commitErrorListCountState(0);
@@ -143,7 +161,7 @@ export default defineComponent({ @@ -143,7 +161,7 @@ export default defineComponent({
143 } 161 }
144 162
145 function renderHeaderContent() { 163 function renderHeaderContent() {
146 - // const width = unref(logoWidthRef); 164 + const width = unref(logoWidthRef);
147 return ( 165 return (
148 <div class="layout-header__content "> 166 <div class="layout-header__content ">
149 {unref(getShowHeaderLogo) && ( 167 {unref(getShowHeaderLogo) && (
@@ -162,8 +180,8 @@ export default defineComponent({ @@ -162,8 +180,8 @@ export default defineComponent({
162 )} 180 )}
163 181
164 {unref(getShowTopMenu) && unref(isPc) && ( 182 {unref(getShowTopMenu) && unref(isPc) && (
165 - // <div class={[`layout-header__menu `]} style={{ width: `calc(100% - ${width}px)` }}>  
166 - <div class={[`layout-header__menu `]}> 183 + <div class={[`layout-header__menu `]} style={{ width: `calc(100% - ${width}px)` }}>
  184 + {/* <div class={[`layout-header__menu `]}> */}
167 <LayoutMenu 185 <LayoutMenu
168 isHorizontal={true} 186 isHorizontal={true}
169 class={`justify-${unref(getTopMenuAlign)}`} 187 class={`justify-${unref(getTopMenuAlign)}`}
yarn.lock
@@ -1928,6 +1928,21 @@ @@ -1928,6 +1928,21 @@
1928 vscode-languageserver-textdocument "^1.0.1" 1928 vscode-languageserver-textdocument "^1.0.1"
1929 vscode-uri "^2.1.2" 1929 vscode-uri "^2.1.2"
1930 1930
  1931 +"@vueuse/core@^4.0.0-rc.6":
  1932 + version "4.0.0-rc.6"
  1933 + resolved "https://registry.npmjs.org/@vueuse/core/-/core-4.0.0-rc.6.tgz#510cbeb98123a179586aa9becd9f5f84639a1fa2"
  1934 + integrity sha512-06Evdrbi46DM+Pp1b4pyhFEx9/3LbHs36sYdehoth1FQdzFDrMHiBMlb/Qx2ePjPoQ796GTqC+COyk22mmkSyA==
  1935 + dependencies:
  1936 + "@vueuse/shared" "4.0.0-rc.6"
  1937 + vue-demi latest
  1938 +
  1939 +"@vueuse/shared@4.0.0-rc.6":
  1940 + version "4.0.0-rc.6"
  1941 + resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-4.0.0-rc.6.tgz#d707ffb291e481f2ce0aa4c7cfcb7756c82d718d"
  1942 + integrity sha512-GMaxHfskamFz+kziEYLWoOt7iqeFIq0KIKg+Vb3VS3lCXCzeGMvDZFYFK4HGB2blOcblUD4oZLa06za8pHgFzg==
  1943 + dependencies:
  1944 + vue-demi latest
  1945 +
1931 JSONStream@^1.0.4: 1946 JSONStream@^1.0.4:
1932 version "1.3.5" 1947 version "1.3.5"
1933 resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 1948 resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
@@ -2038,10 +2053,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: @@ -2038,10 +2053,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
2038 dependencies: 2053 dependencies:
2039 color-convert "^2.0.1" 2054 color-convert "^2.0.1"
2040 2055
2041 -ant-design-vue@^2.0.0-rc.2:  
2042 - version "2.0.0-rc.2"  
2043 - resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-rc.2.tgz#fd3b4a5a64fccbb53ed488a194317a040de2223e"  
2044 - integrity sha512-XA7X/7HHIveiTh41bZWGfoQ2Rys/rqWknK2zzdHwVnfw9ST3v+ciMKH0Uegyn7m14QL/EdUkC8zGsXpiSXqKNQ== 2056 +ant-design-vue@^2.0.0-rc.3:
  2057 + version "2.0.0-rc.3"
  2058 + resolved "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-2.0.0-rc.3.tgz#22f81d0fc495d2aeff343925d5750e0e34106f86"
  2059 + integrity sha512-dz7VOfxJZIHy7xCrMDBV8zYaVOyeuAFAxewWZy0StCWpbILqQWynb9sK4Nseh3N5ZMFPOD/e8FFiA9cXdNtEyw==
2045 dependencies: 2060 dependencies:
2046 "@ant-design-vue/use" "^0.0.1-0" 2061 "@ant-design-vue/use" "^0.0.1-0"
2047 "@ant-design/icons-vue" "^5.1.6" 2062 "@ant-design/icons-vue" "^5.1.6"
@@ -8397,6 +8412,11 @@ vscode-uri@^2.1.2: @@ -8397,6 +8412,11 @@ vscode-uri@^2.1.2:
8397 resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" 8412 resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
8398 integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== 8413 integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
8399 8414
  8415 +vue-demi@latest:
  8416 + version "0.4.5"
  8417 + resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.4.5.tgz#ea422a4468cb6321a746826a368a770607f87791"
  8418 + integrity sha512-51xf1B6hV2PfjnzYHO/yUForFCRQ49KS8ngQb5T6l1HDEmfghTFtsxtRa5tbx4eqQsH76ll/0gIxuf1gei0ubw==
  8419 +
8400 vue-eslint-parser@^7.2.0: 8420 vue-eslint-parser@^7.2.0:
8401 version "7.2.0" 8421 version "7.2.0"
8402 resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.2.0.tgz#1e17ae94ca71e617025e05143c8ac5593aacb6ef" 8422 resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.2.0.tgz#1e17ae94ca71e617025e05143c8ac5593aacb6ef"