index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { defineStore } from 'pinia'
  2. /**
  3. * 用户信息 Store
  4. */
  5. export const useUserStore = defineStore('user', {
  6. state: () => ({
  7. userInfo: null,
  8. token: '',
  9. isLogin: false
  10. }),
  11. getters: {
  12. // 获取用户昵称
  13. nickname: (state) => state.userInfo?.nickname || '未登录',
  14. // 获取用户头像
  15. avatar: (state) => state.userInfo?.avatar || '/static/default-avatar.svg'
  16. },
  17. actions: {
  18. // 设置用户信息
  19. setUserInfo(userInfo) {
  20. this.userInfo = userInfo
  21. this.isLogin = true
  22. },
  23. // 设置 token
  24. setToken(token) {
  25. this.token = token
  26. // 持久化存储
  27. uni.setStorageSync('token', token)
  28. },
  29. // 登出(仅清除本地数据,不调用API)
  30. logout() {
  31. // 清除 store 中的用户信息
  32. this.userInfo = null
  33. this.token = ''
  34. this.isLogin = false
  35. // 清除本地存储的 token
  36. uni.removeStorageSync('token')
  37. },
  38. // 从本地存储恢复状态
  39. restoreState() {
  40. const token = uni.getStorageSync('token')
  41. if (token) {
  42. this.token = token
  43. // 这里可以调用 API 获取用户信息
  44. }
  45. }
  46. }
  47. })
  48. /**
  49. * 应用全局 Store
  50. */
  51. export const useAppStore = defineStore('app', {
  52. state: () => ({
  53. theme: 'light',
  54. loading: false,
  55. networkStatus: true
  56. }),
  57. getters: {
  58. isDark: (state) => state.theme === 'dark'
  59. },
  60. actions: {
  61. // 切换主题
  62. toggleTheme() {
  63. this.theme = this.theme === 'light' ? 'dark' : 'light'
  64. uni.setStorageSync('theme', this.theme)
  65. },
  66. // 设置加载状态
  67. setLoading(loading) {
  68. this.loading = loading
  69. },
  70. // 设置网络状态
  71. setNetworkStatus(status) {
  72. this.networkStatus = status
  73. }
  74. }
  75. })