index.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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: 'parent', // 用户的实际角色(数据库中的角色)
  9. currentRole: 'parent', // 当前视图模式(用于切换查看家长/孩子界面)
  10. familyId: '',
  11. nickname: '',
  12. currentChildId: '',
  13. currentMemberId: '', // 当前切换到的家庭成员ID(family_members表)
  14. currentMemberRole: '', // 当前切换到的家庭成员effectiveRole
  15. children: [],
  16. isSwitchedChild: false, // 家长切换到孩子状态的标记
  17. isSwitchedMember: false // 通过family_members切换的标记
  18. },
  19. mutations: {
  20. setToken(state, token) {
  21. state.token = token
  22. uni.setStorageSync('token', token)
  23. },
  24. setUserInfo(state, userInfo) {
  25. state.userId = userInfo.userId
  26. state.role = userInfo.role
  27. state.currentRole = userInfo.role // 初始化当前角色为实际角色
  28. state.familyId = userInfo.familyId
  29. state.nickname = userInfo.nickname
  30. // 保存到本地存储
  31. uni.setStorageSync('userId', userInfo.userId)
  32. uni.setStorageSync('role', userInfo.role)
  33. uni.setStorageSync('currentRole', userInfo.role)
  34. uni.setStorageSync('familyId', userInfo.familyId)
  35. // 登录时清除切换标记
  36. state.isSwitchedChild = false
  37. uni.setStorageSync('isSwitchedChild', false)
  38. },
  39. setChildren(state, children) {
  40. state.children = children
  41. if (children.length > 0 && !state.currentChildId) {
  42. state.currentChildId = children[0].id
  43. }
  44. },
  45. setCurrentChild(state, childId) {
  46. state.currentChildId = childId
  47. uni.setStorageSync('currentChildId', childId)
  48. },
  49. // 切换到孩子模式(家长切换)
  50. switchToChild(state, childId) {
  51. state.currentRole = 'child'
  52. state.currentChildId = childId
  53. state.isSwitchedChild = true
  54. uni.setStorageSync('currentRole', 'child')
  55. uni.setStorageSync('currentChildId', childId)
  56. uni.setStorageSync('isSwitchedChild', true)
  57. },
  58. // 切换回家长模式
  59. switchBackToParent(state) {
  60. state.currentRole = 'parent'
  61. state.currentChildId = ''
  62. state.isSwitchedChild = false
  63. uni.setStorageSync('currentRole', 'parent')
  64. uni.removeStorageSync('currentChildId')
  65. uni.setStorageSync('isSwitchedChild', false)
  66. },
  67. // 通过family_members切换到某个成员
  68. switchToMember(state, payload) {
  69. state.currentRole = payload.effectiveRole
  70. state.currentMemberId = payload.memberId
  71. state.currentMemberRole = payload.effectiveRole
  72. state.isSwitchedMember = true
  73. if (payload.effectiveRole === 'child') {
  74. state.isSwitchedChild = true
  75. state.currentChildId = payload.memberId
  76. }
  77. uni.setStorageSync('currentRole', payload.effectiveRole)
  78. uni.setStorageSync('currentMemberId', payload.memberId)
  79. uni.setStorageSync('currentMemberRole', payload.effectiveRole)
  80. uni.setStorageSync('isSwitchedMember', true)
  81. if (payload.effectiveRole === 'child') {
  82. uni.setStorageSync('currentChildId', payload.memberId)
  83. uni.setStorageSync('isSwitchedChild', true)
  84. }
  85. },
  86. // 从family_members切换回自己
  87. switchBackFromMember(state) {
  88. var originalRole = uni.getStorageSync('role') || 'parent'
  89. state.currentRole = originalRole
  90. state.currentMemberId = ''
  91. state.currentMemberRole = ''
  92. state.isSwitchedMember = false
  93. state.isSwitchedChild = false
  94. state.currentChildId = ''
  95. uni.setStorageSync('currentRole', originalRole)
  96. uni.removeStorageSync('currentMemberId')
  97. uni.removeStorageSync('currentMemberRole')
  98. uni.setStorageSync('isSwitchedMember', false)
  99. uni.removeStorageSync('currentChildId')
  100. uni.setStorageSync('isSwitchedChild', false)
  101. },
  102. // 切换视图模式(不修改数据库中的实际角色)
  103. switchViewMode(state, role) {
  104. state.currentRole = role
  105. uni.setStorageSync('currentRole', role)
  106. },
  107. // 兼容旧的方法名
  108. switchRole(state, role) {
  109. state.currentRole = role
  110. uni.setStorageSync('currentRole', role)
  111. },
  112. logout(state) {
  113. state.token = ''
  114. state.userId = ''
  115. state.role = 'parent'
  116. state.currentRole = 'parent'
  117. state.familyId = ''
  118. state.nickname = ''
  119. state.currentChildId = ''
  120. state.currentMemberId = ''
  121. state.currentMemberRole = ''
  122. state.children = []
  123. state.isSwitchedChild = false
  124. state.isSwitchedMember = false
  125. state.isSwitchedTeacher = false
  126. // 清除全部登录态存储
  127. uni.removeStorageSync('token')
  128. uni.removeStorageSync('currentRole')
  129. uni.removeStorageSync('isSwitchedChild')
  130. uni.removeStorageSync('isSwitchedTeacher')
  131. uni.removeStorageSync('userId')
  132. uni.removeStorageSync('role')
  133. uni.removeStorageSync('familyId')
  134. uni.removeStorageSync('openid')
  135. uni.removeStorageSync('userInfo')
  136. uni.removeStorageSync('nickname')
  137. uni.removeStorageSync('currentChildId')
  138. uni.removeStorageSync('currentMemberId')
  139. uni.removeStorageSync('currentMemberRole')
  140. uni.removeStorageSync('isSwitchedMember')
  141. }
  142. },
  143. actions: {
  144. login({ commit }, userInfo) {
  145. commit('setToken', userInfo.token)
  146. commit('setUserInfo', userInfo)
  147. },
  148. updateChildren({ commit }, children) {
  149. commit('setChildren', children)
  150. }
  151. }
  152. })
  153. export default store