index.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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.png'
  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. // 登出
  30. logout() {
  31. this.userInfo = null
  32. this.token = ''
  33. this.isLogin = false
  34. uni.removeStorageSync('token')
  35. },
  36. // 从本地存储恢复状态
  37. restoreState() {
  38. const token = uni.getStorageSync('token')
  39. if (token) {
  40. this.token = token
  41. // 这里可以调用 API 获取用户信息
  42. }
  43. }
  44. }
  45. })
  46. /**
  47. * 应用全局 Store
  48. */
  49. export const useAppStore = defineStore('app', {
  50. state: () => ({
  51. theme: 'light',
  52. loading: false,
  53. networkStatus: true
  54. }),
  55. getters: {
  56. isDark: (state) => state.theme === 'dark'
  57. },
  58. actions: {
  59. // 切换主题
  60. toggleTheme() {
  61. this.theme = this.theme === 'light' ? 'dark' : 'light'
  62. uni.setStorageSync('theme', this.theme)
  63. },
  64. // 设置加载状态
  65. setLoading(loading) {
  66. this.loading = loading
  67. },
  68. // 设置网络状态
  69. setNetworkStatus(status) {
  70. this.networkStatus = status
  71. }
  72. }
  73. })