user.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { defineStore } from 'pinia'
  2. import { ref, computed } from 'vue'
  3. // 定义用户信息接口类型
  4. export interface UserInfo {
  5. userId?: string | number;
  6. userName?: string;
  7. schoolId?: string | number;
  8. schoolName?: string;
  9. accountName?: string; // 登录账号名称
  10. phone?: string; // 手机号
  11. [key: string]: any; // 允许其他额外字段
  12. }
  13. //用户相关的状态管理
  14. export const useUserStore = defineStore('user', () => {
  15. // State
  16. const schoolLogo = ref<string>('')
  17. // 如果需要管理 userInfo,也可以放在这里,但通常 userInfo 存在 localStorage 中
  18. const userInfo = ref<UserInfo>(JSON.parse(localStorage.getItem('userInfo') || '{}'))
  19. // Getters (可选,如果需要计算属性)
  20. const hasLogo = computed(() => !!schoolLogo.value)
  21. //便捷获取用户具体信息的getters
  22. const userId = computed(() => userInfo.value.userId)
  23. const userName = computed(() => userInfo.value.userName)
  24. const schoolId = computed(() => userInfo.value.schoolId)
  25. const schoolName = computed(() => userInfo.value.schoolName)
  26. const accountName = computed(() => userInfo.value.accountName)
  27. const phone = computed(() => userInfo.value.phone)
  28. // Actions
  29. function setSchoolLogo(logo: string) {
  30. schoolLogo.value = logo
  31. }
  32. // 新增:设置用户信息
  33. function setUserInfo(info: UserInfo) {
  34. userInfo.value = info
  35. // 同步存储到 localStorage,确保持久化
  36. localStorage.setItem('userInfo', JSON.stringify(info))
  37. }
  38. // 新增:更新部分用户信息
  39. function updateUserInfo(partialInfo: Partial<UserInfo>) {
  40. userInfo.value = { ...userInfo.value, ...partialInfo }
  41. localStorage.setItem('userInfo', JSON.stringify(userInfo.value))
  42. }
  43. // 清除用户状态
  44. function clearUserState() {
  45. schoolLogo.value = ''
  46. userInfo.value = {}
  47. // 清除 localStorage 中的用户信息
  48. localStorage.removeItem('userInfo')
  49. }
  50. return {
  51. schoolLogo,
  52. hasLogo,
  53. setSchoolLogo,
  54. // 返回新增的用户相关状态和方法
  55. userInfo,
  56. userId,
  57. userName,
  58. schoolId,
  59. schoolName,
  60. accountName,
  61. phone,
  62. setUserInfo,
  63. updateUserInfo,
  64. clearUserState
  65. }
  66. })