Commit 5ddccf6ba28453b9a35355d53d0db65f1a8876bc

Authored by Netfan
Committed by GitHub
1 parent 644dbe31

feat(tabs): add setTabTitle method (#680)

添加设置标签页标题的方法和演示
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 });