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,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" |