Commit b350098f442be1b8143b44e09e735179676f755c
1 parent
bfac425d
perf: adjust the logic of
Showing
5 changed files
with
50 additions
and
43 deletions
CHANGELOG.zh_CN.md
@@ -12,6 +12,10 @@ | @@ -12,6 +12,10 @@ | ||
12 | - 依赖更新 | 12 | - 依赖更新 |
13 | - 文档更新 | 13 | - 文档更新 |
14 | 14 | ||
15 | +### ⚡ Performance Improvements | ||
16 | + | ||
17 | +- `setTitle`逻辑调整 | ||
18 | + | ||
15 | ### ✨ Refactor | 19 | ### ✨ Refactor |
16 | 20 | ||
17 | - 独立出`vite-plugin-html`,并修改相关插入 html 的逻辑 | 21 | - 独立出`vite-plugin-html`,并修改相关插入 html 的逻辑 |
@@ -19,6 +23,7 @@ | @@ -19,6 +23,7 @@ | ||
19 | ### 🐛 Bug Fixes | 23 | ### 🐛 Bug Fixes |
20 | 24 | ||
21 | - 修复热更新时多次注册组件警告问题 | 25 | - 修复热更新时多次注册组件警告问题 |
26 | +- 修复登录后出现登录标签页 | ||
22 | 27 | ||
23 | ## 2.0.0-rc.5 (2020-10-26) | 28 | ## 2.0.0-rc.5 (2020-10-26) |
24 | 29 |
src/router/guard/index.ts
@@ -2,14 +2,14 @@ import type { Router } from 'vue-router'; | @@ -2,14 +2,14 @@ import type { Router } from 'vue-router'; | ||
2 | 2 | ||
3 | import { Modal, notification } from 'ant-design-vue'; | 3 | import { Modal, notification } from 'ant-design-vue'; |
4 | import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'; | 4 | import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'; |
5 | -import { createPageTitleGuard } from './pageTitleGuard'; | ||
6 | import { createProgressGuard } from './progressGuard'; | 5 | import { createProgressGuard } from './progressGuard'; |
7 | import { createPermissionGuard } from './permissionGuard'; | 6 | import { createPermissionGuard } from './permissionGuard'; |
8 | import { createPageLoadingGuard } from './pageLoadingGuard'; | 7 | import { createPageLoadingGuard } from './pageLoadingGuard'; |
9 | import { useSetting } from '/@/hooks/core/useSetting'; | 8 | import { useSetting } from '/@/hooks/core/useSetting'; |
10 | import { getIsOpenTab, setCurrentTo } from '/@/utils/helper/routeHelper'; | 9 | import { getIsOpenTab, setCurrentTo } from '/@/utils/helper/routeHelper'; |
10 | +import { setTitle } from '/@/utils/browser'; | ||
11 | 11 | ||
12 | -const { projectSetting } = useSetting(); | 12 | +const { projectSetting, globSetting } = useSetting(); |
13 | export function createGuard(router: Router) { | 13 | export function createGuard(router: Router) { |
14 | const { openNProgress, closeMessageOnSwitch, removeAllHttpPending } = projectSetting; | 14 | const { openNProgress, closeMessageOnSwitch, removeAllHttpPending } = projectSetting; |
15 | let axiosCanceler: AxiosCanceler | null; | 15 | let axiosCanceler: AxiosCanceler | null; |
@@ -33,8 +33,16 @@ export function createGuard(router: Router) { | @@ -33,8 +33,16 @@ export function createGuard(router: Router) { | ||
33 | setCurrentTo(to); | 33 | setCurrentTo(to); |
34 | return true; | 34 | return true; |
35 | }); | 35 | }); |
36 | + | ||
37 | + router.afterEach((to) => { | ||
38 | + // change html title | ||
39 | + | ||
40 | + setTimeout(() => { | ||
41 | + setTitle(to.meta.title, globSetting.title); | ||
42 | + }, 0); | ||
43 | + }); | ||
44 | + | ||
36 | openNProgress && createProgressGuard(router); | 45 | openNProgress && createProgressGuard(router); |
37 | createPermissionGuard(router); | 46 | createPermissionGuard(router); |
38 | - createPageTitleGuard(router); | ||
39 | createPageLoadingGuard(router); | 47 | createPageLoadingGuard(router); |
40 | } | 48 | } |
src/router/guard/pageTitleGuard.ts deleted
100644 → 0
1 | -import type { Router } from 'vue-router'; | ||
2 | - | ||
3 | -import { useSetting } from '/@/hooks/core/useSetting'; | ||
4 | - | ||
5 | -/** | ||
6 | - * 设置页面标题 | ||
7 | - * @param {*} title :页面标题 | ||
8 | - */ | ||
9 | -const setDocumentTitle = (title: string) => { | ||
10 | - document.title = title; | ||
11 | - const ua = navigator.userAgent; | ||
12 | - const regex = /\bMicroMessenger\/([\d.]+)/; | ||
13 | - // 兼容 | ||
14 | - if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { | ||
15 | - const i = document.createElement('iframe'); | ||
16 | - i.src = '/favicon.ico'; | ||
17 | - i.style.display = 'none'; | ||
18 | - i.onload = function () { | ||
19 | - setTimeout(function () { | ||
20 | - i.remove(); | ||
21 | - }, 9); | ||
22 | - }; | ||
23 | - document.body.appendChild(i); | ||
24 | - } | ||
25 | -}; | ||
26 | -export const createPageTitleGuard = (router: Router) => { | ||
27 | - router.beforeEach(async (to) => { | ||
28 | - // This operation does not require synchronization | ||
29 | - setTimeout(() => { | ||
30 | - const { globSetting } = useSetting(); | ||
31 | - if (to.meta.title) { | ||
32 | - const { title } = globSetting; | ||
33 | - const _title = to.meta.title ? ` ${to.meta.title}-${title} ` : `${title}`; | ||
34 | - setDocumentTitle(_title); | ||
35 | - } | ||
36 | - }, 30); | ||
37 | - return true; | ||
38 | - }); | ||
39 | -}; |
src/utils/browser.ts
@@ -70,3 +70,32 @@ export function isFirefoxFn() { | @@ -70,3 +70,32 @@ export function isFirefoxFn() { | ||
70 | export function isOperaFn() { | 70 | export function isOperaFn() { |
71 | return type === 'Opera'; | 71 | return type === 'Opera'; |
72 | } | 72 | } |
73 | + | ||
74 | +/** | ||
75 | + * set page Title | ||
76 | + * @param {*} title :page Title | ||
77 | + */ | ||
78 | +const setDocumentTitle = (title: string) => { | ||
79 | + document.title = title; | ||
80 | + const ua = navigator.userAgent; | ||
81 | + const regex = /\bMicroMessenger\/([\d.]+)/; | ||
82 | + // 兼容 | ||
83 | + if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { | ||
84 | + const i = document.createElement('iframe'); | ||
85 | + i.src = '/favicon.ico'; | ||
86 | + i.style.display = 'none'; | ||
87 | + i.onload = function () { | ||
88 | + setTimeout(function () { | ||
89 | + i.remove(); | ||
90 | + }, 9); | ||
91 | + }; | ||
92 | + document.body.appendChild(i); | ||
93 | + } | ||
94 | +}; | ||
95 | + | ||
96 | +export function setTitle(title: string, appTitle?: string) { | ||
97 | + if (title) { | ||
98 | + const _title = title ? ` ${title}-${appTitle} ` : `${appTitle}`; | ||
99 | + setDocumentTitle(_title); | ||
100 | + } | ||
101 | +} |
src/views/demo/feat/tab-params/index.vue
1 | <template> | 1 | <template> |
2 | - <div class="p-4"> Current Param : {{ params }} </div> | 2 | + <div class="p-4"> |
3 | + Current Param : {{ params }} | ||
4 | + <input /> | ||
5 | + </div> | ||
3 | </template> | 6 | </template> |
4 | <script lang="ts"> | 7 | <script lang="ts"> |
5 | import { computed, defineComponent, unref } from 'vue'; | 8 | import { computed, defineComponent, unref } from 'vue'; |
6 | import { useRouter } from 'vue-router'; | 9 | import { useRouter } from 'vue-router'; |
7 | export default defineComponent({ | 10 | export default defineComponent({ |
11 | + name: 'TestTab', | ||
8 | setup() { | 12 | setup() { |
9 | const { currentRoute } = useRouter(); | 13 | const { currentRoute } = useRouter(); |
10 | return { | 14 | return { |