user-profile.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { ref } from 'vue';
  2. import { getTimezone, setDefaultTimezone } from '@vben/utils';
  3. import { acceptHMRUpdate, defineStore } from 'pinia';
  4. import { getUserTimezoneApi, setUserTimezoneApi } from '#/api';
  5. const useUserProfileStore = defineStore('user-profile', () => {
  6. const timezoneRef = ref(
  7. getTimezone() || new Intl.DateTimeFormat().resolvedOptions().timeZone,
  8. );
  9. /**
  10. * 设置用户时区
  11. * Set the user's timezone
  12. * @param timezone 时区字符串
  13. */
  14. async function setTimezone(timezone: string) {
  15. // 保存用户的时区设置
  16. await setUserTimezoneApi(timezone);
  17. timezoneRef.value = timezone;
  18. // 设置dayjs默认时区
  19. setDefaultTimezone(timezone);
  20. }
  21. /**
  22. * 初始化用户时区
  23. * Initialize the user's timezone
  24. */
  25. async function initTimezone() {
  26. // 从服务器获取用户时区
  27. const timezone = await getUserTimezoneApi();
  28. if (timezone) {
  29. timezoneRef.value = timezone;
  30. // 设置dayjs默认时区
  31. setDefaultTimezone(timezone);
  32. }
  33. }
  34. initTimezone();
  35. return {
  36. timezone: timezoneRef,
  37. setTimezone,
  38. initTimezone,
  39. };
  40. });
  41. export { useUserProfileStore };
  42. // 解决热更新问题
  43. const hot = import.meta.hot;
  44. if (hot) {
  45. hot.accept(acceptHMRUpdate(useUserProfileStore, hot));
  46. }