| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { defineStore } from 'pinia'
- import { ref, computed } from 'vue'
- import { getToken, setToken, removeToken } from '@/utils/auth'
- import { login, logout, getUserInfo } from '@/api/auth'
- import type { LoginData, User } from '@/types/system'
- export const useUserStore = defineStore('user', () => {
- const token = ref<string | undefined>(getToken())
- const userInfo = ref<User | null>(null)
- const roles = ref<string[]>([])
- const isLoggedIn = computed(() => !!token.value)
- async function loginAction(data: LoginData) {
- const res = await login(data)
- token.value = res.token
- setToken(res.token)
- return res
- }
- async function fetchUserInfo() {
- const res = await getUserInfo()
- userInfo.value = res
- roles.value = res.roleIds?.map(String) || []
- return res
- }
- async function logoutAction() {
- try {
- await logout()
- } catch {
- // ignore
- }
- token.value = undefined
- userInfo.value = null
- roles.value = []
- removeToken()
- }
- return {
- token,
- userInfo,
- roles,
- isLoggedIn,
- loginAction,
- fetchUserInfo,
- logoutAction
- }
- })
|