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 | 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 | 49 | async function handleTabAction(action: TableActionEnum, tab?: RouteLocationNormalized) { |
41 | 50 | const canIUse = canIUseTabs; |
42 | 51 | if (!canIUse) { |
... | ... | @@ -81,5 +90,6 @@ export function useTabs(_router?: Router) { |
81 | 90 | close: (tab?: RouteLocationNormalized) => { |
82 | 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 | 286 | async bulkCloseTabs(pathList: string[]) { |
287 | 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 | 1 | <template> |
2 | 2 | <PageWrapper title="标签页操作示例"> |
3 | 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 | 9 | </CollapseContainer> |
6 | 10 | |
7 | 11 | <CollapseContainer class="mt-4" title="标签页操作"> |
... | ... | @@ -15,18 +19,28 @@ |
15 | 19 | </PageWrapper> |
16 | 20 | </template> |
17 | 21 | <script lang="ts"> |
18 | - import { defineComponent } from 'vue'; | |
22 | + import { defineComponent, ref } from 'vue'; | |
19 | 23 | import { CollapseContainer } from '/@/components/Container/index'; |
20 | 24 | import { useTabs } from '/@/hooks/web/useTabs'; |
21 | 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 | 29 | export default defineComponent({ |
25 | 30 | name: 'TabsDemo', |
26 | - components: { CollapseContainer, PageWrapper, [Input.name]: Input }, | |
31 | + components: { CollapseContainer, PageWrapper, [Input.name]: Input, [Alert.name]: Alert }, | |
27 | 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 | 44 | return { |
31 | 45 | closeAll, |
32 | 46 | closeLeft, |
... | ... | @@ -34,6 +48,8 @@ |
34 | 48 | closeOther, |
35 | 49 | closeCurrent, |
36 | 50 | refreshPage, |
51 | + setTabTitle, | |
52 | + title, | |
37 | 53 | }; |
38 | 54 | }, |
39 | 55 | }); | ... | ... |