Commit de1f00628479c4d31e6ed904d4b0fd7e312cc030
1 parent
6da377da
fix(menu): fix the calculation error of the top menu width
Showing
4 changed files
with
70 additions
and
28 deletions
CHANGELOG.zh_CN.md
... | ... | @@ -20,12 +20,15 @@ |
20 | 20 | |
21 | 21 | - 首屏 loading 修改 |
22 | 22 | - 升级`vue`到`3.0.4` |
23 | +- 升级`ant-design-vue`到`2.0.0-rc.3` | |
24 | +- 重新引入`vueuse` | |
23 | 25 | - 移除 route meta 内的`afterCloseLoading`属性 |
24 | 26 | |
25 | 27 | ### 🐛 Bug Fixes |
26 | 28 | |
27 | 29 | - 修复表格 i18n 错误 |
28 | 30 | - 修复菜单图标大小不一致 |
31 | +- 修复顶部菜单宽度计算问题 | |
29 | 32 | |
30 | 33 | ## 2.0.0-rc.12 (2020-11-30) |
31 | 34 | ... | ... |
package.json
... | ... | @@ -22,7 +22,8 @@ |
22 | 22 | }, |
23 | 23 | "dependencies": { |
24 | 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 | 27 | "apexcharts": "3.22.0", |
27 | 28 | "axios": "^0.21.0", |
28 | 29 | "crypto-es": "^1.2.6", | ... | ... |
src/layouts/default/header/LayoutHeader.tsx
... | ... | @@ -8,6 +8,8 @@ import { |
8 | 8 | unref, |
9 | 9 | computed, |
10 | 10 | ref, |
11 | + nextTick, | |
12 | + watchEffect, | |
11 | 13 | // nextTick |
12 | 14 | } from 'vue'; |
13 | 15 | |
... | ... | @@ -30,7 +32,7 @@ import { useModal } from '/@/components/Modal'; |
30 | 32 | |
31 | 33 | import { useFullscreen } from '/@/hooks/web/useFullScreen'; |
32 | 34 | import { useTabs } from '/@/hooks/web/useTabs'; |
33 | -// import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; | |
35 | +import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; | |
34 | 36 | import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting'; |
35 | 37 | import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; |
36 | 38 | import { useRootSetting } from '/@/hooks/setting/useRootSetting'; |
... | ... | @@ -68,9 +70,9 @@ export default defineComponent({ |
68 | 70 | fixed: propTypes.bool, |
69 | 71 | }, |
70 | 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 | 76 | const logoRef = ref<ComponentRef>(null); |
75 | 77 | |
76 | 78 | const injectValue = useLayoutContext(); |
... | ... | @@ -78,7 +80,13 @@ export default defineComponent({ |
78 | 80 | const { refreshPage } = useTabs(); |
79 | 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 | 91 | const { getShowLocale } = useLocaleSetting(); |
84 | 92 | const { getUseErrorHandle, getShowBreadCrumbIcon } = useRootSetting(); |
... | ... | @@ -98,22 +106,13 @@ export default defineComponent({ |
98 | 106 | const [register, { openModal }] = useModal(); |
99 | 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 | 117 | const headerClass = computed(() => { |
119 | 118 | const theme = unref(getHeaderTheme); |
... | ... | @@ -132,6 +131,25 @@ export default defineComponent({ |
132 | 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 | 153 | function handleToErrorList() { |
136 | 154 | push(PageEnum.ERROR_LOG_PAGE).then(() => { |
137 | 155 | errorStore.commitErrorListCountState(0); |
... | ... | @@ -143,7 +161,7 @@ export default defineComponent({ |
143 | 161 | } |
144 | 162 | |
145 | 163 | function renderHeaderContent() { |
146 | - // const width = unref(logoWidthRef); | |
164 | + const width = unref(logoWidthRef); | |
147 | 165 | return ( |
148 | 166 | <div class="layout-header__content "> |
149 | 167 | {unref(getShowHeaderLogo) && ( |
... | ... | @@ -162,8 +180,8 @@ export default defineComponent({ |
162 | 180 | )} |
163 | 181 | |
164 | 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 | 185 | <LayoutMenu |
168 | 186 | isHorizontal={true} |
169 | 187 | class={`justify-${unref(getTopMenuAlign)}`} | ... | ... |
yarn.lock
... | ... | @@ -1928,6 +1928,21 @@ |
1928 | 1928 | vscode-languageserver-textdocument "^1.0.1" |
1929 | 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 | 1946 | JSONStream@^1.0.4: |
1932 | 1947 | version "1.3.5" |
1933 | 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 | 2053 | dependencies: |
2039 | 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 | 2060 | dependencies: |
2046 | 2061 | "@ant-design-vue/use" "^0.0.1-0" |
2047 | 2062 | "@ant-design/icons-vue" "^5.1.6" |
... | ... | @@ -8397,6 +8412,11 @@ vscode-uri@^2.1.2: |
8397 | 8412 | resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" |
8398 | 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 | 8420 | vue-eslint-parser@^7.2.0: |
8401 | 8421 | version "7.2.0" |
8402 | 8422 | resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.2.0.tgz#1e17ae94ca71e617025e05143c8ac5593aacb6ef" | ... | ... |