index.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. const store = new Vuex.Store({
  5. state: {
  6. token: '',
  7. userId: '',
  8. role: 'student',
  9. alumniVerify: 'pending',
  10. classId: '',
  11. name: '',
  12. nickname: '',
  13. phone: '',
  14. newUser: false
  15. },
  16. getters: {
  17. // 单一可信源:优先 store,store 空时兜底读 storage(热启动/HBuilderX 热更新场景 store 可能未恢复)
  18. isLoggedIn: function(state) {
  19. if (state.token) return true
  20. return !!uni.getStorageSync('token')
  21. },
  22. isVerified: function(state) {
  23. return state.alumniVerify === 'accepted'
  24. },
  25. hasClass: function(state) {
  26. return state.classId !== '' && state.classId !== null
  27. }
  28. },
  29. mutations: {
  30. setToken(state, token) {
  31. state.token = token
  32. uni.setStorageSync('token', token)
  33. },
  34. setUserInfo(state, userInfo) {
  35. state.userId = userInfo.userId
  36. state.role = userInfo.role || 'student'
  37. state.alumniVerify = userInfo.alumniVerify || 'pending'
  38. state.classId = userInfo.classId || ''
  39. state.name = userInfo.name || ''
  40. state.nickname = userInfo.nickname || ''
  41. state.phone = userInfo.phone || ''
  42. state.newUser = userInfo.newUser || false
  43. uni.setStorageSync('userId', userInfo.userId)
  44. uni.setStorageSync('role', state.role)
  45. uni.setStorageSync('alumniVerify', state.alumniVerify)
  46. uni.setStorageSync('classId', state.classId)
  47. uni.setStorageSync('userInfo', {
  48. userId: userInfo.userId,
  49. role: state.role,
  50. alumniVerify: state.alumniVerify,
  51. classId: state.classId,
  52. name: state.name,
  53. nickname: state.nickname,
  54. phone: state.phone
  55. })
  56. },
  57. setClassId(state, classId) {
  58. state.classId = classId
  59. uni.setStorageSync('classId', classId)
  60. },
  61. setAlumniVerify(state, status) {
  62. state.alumniVerify = status
  63. uni.setStorageSync('alumniVerify', status)
  64. var userInfo = uni.getStorageSync('userInfo') || {}
  65. userInfo.alumniVerify = status
  66. uni.setStorageSync('userInfo', userInfo)
  67. },
  68. logout(state) {
  69. state.token = ''
  70. state.userId = ''
  71. state.role = 'student'
  72. state.alumniVerify = 'pending'
  73. state.classId = ''
  74. state.name = ''
  75. state.nickname = ''
  76. state.phone = ''
  77. state.newUser = false
  78. uni.removeStorageSync('token')
  79. uni.removeStorageSync('userId')
  80. uni.removeStorageSync('role')
  81. uni.removeStorageSync('alumniVerify')
  82. uni.removeStorageSync('classId')
  83. uni.removeStorageSync('userInfo')
  84. }
  85. },
  86. actions: {
  87. login({ commit }, data) {
  88. commit('setToken', data.token)
  89. commit('setUserInfo', {
  90. userId: data.userId,
  91. role: data.role,
  92. alumniVerify: data.alumniVerify,
  93. classId: data.classId,
  94. name: data.name,
  95. nickname: data.nickname,
  96. phone: data.phone,
  97. newUser: data.newUser
  98. })
  99. },
  100. // 冷启动/热更新后从 storage 恢复登录态到 store,保证 state 与 storage 一致
  101. restore({ commit }) {
  102. var token = uni.getStorageSync('token')
  103. if (!token) return
  104. commit('setToken', token)
  105. var userInfo = uni.getStorageSync('userInfo')
  106. if (userInfo) {
  107. commit('setUserInfo', userInfo)
  108. }
  109. var classId = uni.getStorageSync('classId')
  110. if (classId) {
  111. commit('setClassId', classId)
  112. }
  113. }
  114. }
  115. })
  116. export default store