Commit 5ddccf6ba28453b9a35355d53d0db65f1a8876bc
Committed by
GitHub
1 parent
644dbe31
feat(tabs): add setTabTitle method (#680)
添加设置标签页标题的方法和演示
Showing
3 changed files
with
43 additions
and
6 deletions
src/hooks/web/useTabs.ts
@@ -37,6 +37,15 @@ export function useTabs(_router?: Router) { | @@ -37,6 +37,15 @@ export function useTabs(_router?: Router) { | ||
37 | return tabStore.getTabList.find((item) => item.path === route.path)!; | 37 | return tabStore.getTabList.find((item) => item.path === route.path)!; |
38 | } | 38 | } |
39 | 39 | ||
40 | + async function updateTabTitle(title: string, tab?: RouteLocationNormalized) { | ||
41 | + const canIUse = canIUseTabs; | ||
42 | + if (!canIUse) { | ||
43 | + return; | ||
44 | + } | ||
45 | + const targetTab = tab || getCurrentTab(); | ||
46 | + await tabStore.setTabTitle(title, targetTab); | ||
47 | + } | ||
48 | + | ||
40 | async function handleTabAction(action: TableActionEnum, tab?: RouteLocationNormalized) { | 49 | async function handleTabAction(action: TableActionEnum, tab?: RouteLocationNormalized) { |
41 | const canIUse = canIUseTabs; | 50 | const canIUse = canIUseTabs; |
42 | if (!canIUse) { | 51 | if (!canIUse) { |
@@ -81,5 +90,6 @@ export function useTabs(_router?: Router) { | @@ -81,5 +90,6 @@ export function useTabs(_router?: Router) { | ||
81 | close: (tab?: RouteLocationNormalized) => { | 90 | close: (tab?: RouteLocationNormalized) => { |
82 | handleTabAction(TableActionEnum.CLOSE, tab); | 91 | handleTabAction(TableActionEnum.CLOSE, tab); |
83 | }, | 92 | }, |
93 | + setTitle: (title: string, tab?: RouteLocationNormalized) => updateTabTitle(title, tab), | ||
84 | }; | 94 | }; |
85 | } | 95 | } |
src/store/modules/multipleTab.ts
@@ -286,6 +286,17 @@ export const useMultipleTabStore = defineStore({ | @@ -286,6 +286,17 @@ export const useMultipleTabStore = defineStore({ | ||
286 | async bulkCloseTabs(pathList: string[]) { | 286 | async bulkCloseTabs(pathList: string[]) { |
287 | this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath)); | 287 | this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath)); |
288 | }, | 288 | }, |
289 | + | ||
290 | + /** | ||
291 | + * Set tab's title | ||
292 | + */ | ||
293 | + async setTabTitle(title: string, route: RouteLocationNormalized) { | ||
294 | + const findTab = this.getTabList.find((item) => item === route); | ||
295 | + if (findTab) { | ||
296 | + findTab.meta.title = title; | ||
297 | + await this.updateCacheTab(); | ||
298 | + } | ||
299 | + }, | ||
289 | }, | 300 | }, |
290 | }); | 301 | }); |
291 | 302 |
src/views/demo/feat/tabs/index.vue
1 | <template> | 1 | <template> |
2 | <PageWrapper title="标签页操作示例"> | 2 | <PageWrapper title="标签页操作示例"> |
3 | <CollapseContainer title="在下面输入框输入文本,切换后回来内容会保存"> | 3 | <CollapseContainer title="在下面输入框输入文本,切换后回来内容会保存"> |
4 | - <a-input placeholder="请输入" /> | 4 | + <a-alert banner message="该操作不会影响页面标题,仅修改Tab标题" /> |
5 | + <template class="mt-2 flex flex-grow-0"> | ||
6 | + <a-button class="mr-2" @click="setTabTitle" type="primary"> 设置Tab标题 </a-button> | ||
7 | + <a-input placeholder="请输入" v-model:value="title" class="mr-4 w-12" /> | ||
8 | + </template> | ||
5 | </CollapseContainer> | 9 | </CollapseContainer> |
6 | 10 | ||
7 | <CollapseContainer class="mt-4" title="标签页操作"> | 11 | <CollapseContainer class="mt-4" title="标签页操作"> |
@@ -15,18 +19,28 @@ | @@ -15,18 +19,28 @@ | ||
15 | </PageWrapper> | 19 | </PageWrapper> |
16 | </template> | 20 | </template> |
17 | <script lang="ts"> | 21 | <script lang="ts"> |
18 | - import { defineComponent } from 'vue'; | 22 | + import { defineComponent, ref } from 'vue'; |
19 | import { CollapseContainer } from '/@/components/Container/index'; | 23 | import { CollapseContainer } from '/@/components/Container/index'; |
20 | import { useTabs } from '/@/hooks/web/useTabs'; | 24 | import { useTabs } from '/@/hooks/web/useTabs'; |
21 | import { PageWrapper } from '/@/components/Page'; | 25 | import { PageWrapper } from '/@/components/Page'; |
22 | - import { Input } from 'ant-design-vue'; | 26 | + import { Input, Alert } from 'ant-design-vue'; |
27 | + import { useMessage } from '/@/hooks/web/useMessage'; | ||
23 | 28 | ||
24 | export default defineComponent({ | 29 | export default defineComponent({ |
25 | name: 'TabsDemo', | 30 | name: 'TabsDemo', |
26 | - components: { CollapseContainer, PageWrapper, [Input.name]: Input }, | 31 | + components: { CollapseContainer, PageWrapper, [Input.name]: Input, [Alert.name]: Alert }, |
27 | setup() { | 32 | setup() { |
28 | - const { closeAll, closeLeft, closeRight, closeOther, closeCurrent, refreshPage } = useTabs(); | ||
29 | - | 33 | + const title = ref<string>(''); |
34 | + const { closeAll, closeLeft, closeRight, closeOther, closeCurrent, refreshPage, setTitle } = | ||
35 | + useTabs(); | ||
36 | + const { createMessage } = useMessage(); | ||
37 | + function setTabTitle() { | ||
38 | + if (title.value) { | ||
39 | + setTitle(title.value); | ||
40 | + } else { | ||
41 | + createMessage.error('请输入要设置的Tab标题!'); | ||
42 | + } | ||
43 | + } | ||
30 | return { | 44 | return { |
31 | closeAll, | 45 | closeAll, |
32 | closeLeft, | 46 | closeLeft, |
@@ -34,6 +48,8 @@ | @@ -34,6 +48,8 @@ | ||
34 | closeOther, | 48 | closeOther, |
35 | closeCurrent, | 49 | closeCurrent, |
36 | refreshPage, | 50 | refreshPage, |
51 | + setTabTitle, | ||
52 | + title, | ||
37 | }; | 53 | }; |
38 | }, | 54 | }, |
39 | }); | 55 | }); |