| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { defineStore } from 'pinia'
- import { computed, reactive } from 'vue'
- export const useUserStore = defineStore('user', () => {
- const state = reactive({
- userId: null as number | null,
- nickname: '',
- avatarUrl: '',
- role: '',
- authStatus: '',
- isLoggedIn: false,
- })
- const isAuthenticated = computed(() => state.authStatus === 'AUTHENTICATED')
- const isAdmin = computed(() => state.role === 'ADMIN')
- function login(user: {
- id: number
- nickname: string
- avatarUrl?: string
- role: string
- authStatus: string
- }) {
- state.userId = user.id
- state.nickname = user.nickname
- state.avatarUrl = user.avatarUrl ?? ''
- state.role = user.role
- state.authStatus = user.authStatus
- state.isLoggedIn = true
- }
- function logout() {
- state.userId = null
- state.nickname = ''
- state.avatarUrl = ''
- state.role = ''
- state.authStatus = ''
- state.isLoggedIn = false
- }
- function updateProfile(profile: { nickname?: string; avatarUrl?: string }) {
- if (profile.nickname !== undefined) state.nickname = profile.nickname
- if (profile.avatarUrl !== undefined) state.avatarUrl = profile.avatarUrl
- }
- return {
- state,
- isAuthenticated,
- isAdmin,
- login,
- logout,
- updateProfile,
- }
- })
|