| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- import Vue from 'vue'
- import Vuex from 'vuex'
- Vue.use(Vuex)
- const store = new Vuex.Store({
- state: {
- token: '',
- userId: '',
- role: 'student',
- alumniVerify: 'pending',
- classId: '',
- name: '',
- nickname: '',
- phone: '',
- newUser: false
- },
- getters: {
- // 单一可信源:优先 store,store 空时兜底读 storage(热启动/HBuilderX 热更新场景 store 可能未恢复)
- isLoggedIn: function(state) {
- if (state.token) return true
- return !!uni.getStorageSync('token')
- },
- isVerified: function(state) {
- return state.alumniVerify === 'accepted'
- },
- hasClass: function(state) {
- return state.classId !== '' && state.classId !== null
- }
- },
- mutations: {
- setToken(state, token) {
- state.token = token
- uni.setStorageSync('token', token)
- },
- setUserInfo(state, userInfo) {
- state.userId = userInfo.userId
- state.role = userInfo.role || 'student'
- state.alumniVerify = userInfo.alumniVerify || 'pending'
- state.classId = userInfo.classId || ''
- state.name = userInfo.name || ''
- state.nickname = userInfo.nickname || ''
- state.phone = userInfo.phone || ''
- state.newUser = userInfo.newUser || false
- uni.setStorageSync('userId', userInfo.userId)
- uni.setStorageSync('role', state.role)
- uni.setStorageSync('alumniVerify', state.alumniVerify)
- uni.setStorageSync('classId', state.classId)
- uni.setStorageSync('userInfo', {
- userId: userInfo.userId,
- role: state.role,
- alumniVerify: state.alumniVerify,
- classId: state.classId,
- name: state.name,
- nickname: state.nickname,
- phone: state.phone
- })
- },
- setClassId(state, classId) {
- state.classId = classId
- uni.setStorageSync('classId', classId)
- },
- setAlumniVerify(state, status) {
- state.alumniVerify = status
- uni.setStorageSync('alumniVerify', status)
- var userInfo = uni.getStorageSync('userInfo') || {}
- userInfo.alumniVerify = status
- uni.setStorageSync('userInfo', userInfo)
- },
- logout(state) {
- state.token = ''
- state.userId = ''
- state.role = 'student'
- state.alumniVerify = 'pending'
- state.classId = ''
- state.name = ''
- state.nickname = ''
- state.phone = ''
- state.newUser = false
- uni.removeStorageSync('token')
- uni.removeStorageSync('userId')
- uni.removeStorageSync('role')
- uni.removeStorageSync('alumniVerify')
- uni.removeStorageSync('classId')
- uni.removeStorageSync('userInfo')
- }
- },
- actions: {
- login({ commit }, data) {
- commit('setToken', data.token)
- commit('setUserInfo', {
- userId: data.userId,
- role: data.role,
- alumniVerify: data.alumniVerify,
- classId: data.classId,
- name: data.name,
- nickname: data.nickname,
- phone: data.phone,
- newUser: data.newUser
- })
- },
- // 冷启动/热更新后从 storage 恢复登录态到 store,保证 state 与 storage 一致
- restore({ commit }) {
- var token = uni.getStorageSync('token')
- if (!token) return
- commit('setToken', token)
- var userInfo = uni.getStorageSync('userInfo')
- if (userInfo) {
- commit('setUserInfo', userInfo)
- }
- var classId = uni.getStorageSync('classId')
- if (classId) {
- commit('setClassId', classId)
- }
- }
- }
- })
- export default store
|