152 lines
3.0 KiB
TypeScript
Raw Normal View History

2022-12-05 23:01:12 +08:00
import { defineStore } from 'pinia'
import http from '/admin/support/http'
import { rememberAuthToken, removeAuthToken } from '/admin/support/helper'
import Message from '/admin/support/message'
import router from '/admin/router'
2023-05-18 11:42:07 +08:00
import { User } from '/admin/types/User'
import { Permission } from '/admin/types/Permission'
2022-12-05 23:01:12 +08:00
export const useUserStore = defineStore('UserStore', {
state: (): User => {
return {
id: 0,
2022-12-18 22:44:58 +08:00
username: '',
2022-12-05 23:01:12 +08:00
avatar: '',
email: '',
remember_token: '',
status: 0,
permissions: [] as Permission[],
roles: [] as string[],
}
},
getters: {
getId(): number {
return this.id
},
getNickname(): string {
2022-12-18 22:44:58 +08:00
return this.username
2022-12-05 23:01:12 +08:00
},
getAvatar(): string {
return this.avatar
},
getRoles(): string[] | undefined {
return this.roles
},
getPermissions(): Permission[] | undefined {
return this.permissions
},
},
actions: {
isSuperAdmin(): boolean {
return this.id === 1
},
2022-12-18 22:44:58 +08:00
setUsername(username: string) {
this.username = username
2022-12-05 23:01:12 +08:00
},
setId(id: number) {
this.id = id
},
setRememberToken(token: string) {
this.remember_token = token
},
setAvatar(avatar: string) {
this.avatar = avatar
},
setRoles(roles: string[]) {
this.roles = roles
},
setPermissions(permissions: Permission[]) {
this.permissions = permissions
},
setEmail(email: string) {
this.email = email
},
setStatus(status: number) {
this.status = status
},
/**
* login
*
* @param params
* @returns
*/
login(params: Object) {
return new Promise<void>((resolve, reject) => {
http
.post('/login', params)
.then(response => {
const { token } = response.data.data
rememberAuthToken(token)
this.setRememberToken(token)
resolve()
})
.catch(e => {
reject(e)
})
})
},
/**
* logout
*/
logout() {
http
.post('/logout')
.then(() => {
removeAuthToken()
this.$reset()
router.push({ path: '/login' })
})
.catch(e => {
Message.error(e.message)
})
},
/**
* user info
*/
getUserInfo() {
return new Promise((resolve, reject) => {
http
2022-12-10 18:29:42 +08:00
.get('/user/online')
2022-12-05 23:01:12 +08:00
.then(response => {
2022-12-18 22:44:58 +08:00
const { id, username, email, avatar, permissions, roles, rememberToken, status } = response.data.data
2022-12-05 23:01:12 +08:00
// set user info
this.setId(id)
2022-12-18 22:44:58 +08:00
this.setUsername(username)
2022-12-05 23:01:12 +08:00
this.setEmail(email)
this.setRoles(roles)
this.setRememberToken(rememberToken)
this.setStatus(status)
this.setAvatar(avatar)
this.setPermissions(permissions)
resolve(response.data.data)
})
.catch(e => {
reject(e)
})
})
},
},
})