useTitle.ts 862 B

123456789101112131415161718192021222324252627282930313233
  1. import { watch, unref } from 'vue';
  2. import { useI18n } from '/@/hooks/web/useI18n';
  3. import { useTitle as usePageTitle } from '@vueuse/core';
  4. import { useGlobSetting } from '/@/hooks/setting';
  5. import { useRouter } from 'vue-router';
  6. import { REDIRECT_NAME } from '/@/router/constant';
  7. /**
  8. * Listening to page changes and dynamically changing site titles
  9. */
  10. export function useTitle() {
  11. const { title } = useGlobSetting();
  12. const { t } = useI18n();
  13. const { currentRoute } = useRouter();
  14. const pageTitle = usePageTitle();
  15. watch(
  16. () => currentRoute.value.path,
  17. () => {
  18. const route = unref(currentRoute);
  19. if (route.name === REDIRECT_NAME) {
  20. return;
  21. }
  22. const tTitle = t(route?.meta?.title as string);
  23. pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`;
  24. },
  25. { immediate: true },
  26. );
  27. }