107 lines
2.7 KiB
TypeScript
107 lines
2.7 KiB
TypeScript
import { defineStore } from 'pinia';
|
|
import { LoginFormData } from '@/types/api/login';
|
|
import { UserState } from '@/types/store/user';
|
|
|
|
import { localStorage } from '@/utils/storage';
|
|
import { login, logout } from '@/api/login';
|
|
import { getUserInfo } from '@/api/user';
|
|
import { resetRouter } from '@/router';
|
|
|
|
const useUserStore = defineStore({
|
|
id: 'user',
|
|
state: (): UserState => ({
|
|
token: localStorage.get('token') || '',
|
|
nickname: '',
|
|
avatar: '',
|
|
roles: [],
|
|
perms: []
|
|
}),
|
|
actions: {
|
|
async RESET_STATE() {
|
|
this.$reset();
|
|
},
|
|
/**
|
|
* 登录
|
|
*/
|
|
login(loginData: LoginFormData) {
|
|
const { username, password, code, uuid } = loginData;
|
|
return new Promise((resolve, reject) => {
|
|
login({
|
|
username: username.trim(),
|
|
password: password,
|
|
grant_type: 'captcha',
|
|
code: code,
|
|
uuid: uuid
|
|
})
|
|
.then(response => {
|
|
const { access_token, token_type } = response.data;
|
|
const accessToken = token_type + ' ' + access_token;
|
|
localStorage.set('token', accessToken);
|
|
this.token = accessToken;
|
|
resolve(access_token);
|
|
})
|
|
.catch(error => {
|
|
reject(error);
|
|
});
|
|
});
|
|
},
|
|
/**
|
|
* 获取用户信息(昵称、头像、角色集合、权限集合)
|
|
*/
|
|
getUserInfo() {
|
|
return new Promise((resolve, reject) => {
|
|
getUserInfo()
|
|
.then(({ data }) => {
|
|
if (!data) {
|
|
return reject('Verification failed, please Login again.');
|
|
}
|
|
const { nickname, avatar, roles, perms } = data;
|
|
if (!roles || roles.length <= 0) {
|
|
reject('getUserInfo: roles must be a non-null array!');
|
|
}
|
|
this.nickname = nickname;
|
|
this.avatar = avatar;
|
|
this.roles = roles;
|
|
this.perms = perms;
|
|
resolve(data);
|
|
})
|
|
.catch(error => {
|
|
console.log('error', error);
|
|
reject(error);
|
|
});
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 注销
|
|
*/
|
|
logout() {
|
|
return new Promise((resolve, reject) => {
|
|
logout()
|
|
.then(() => {
|
|
localStorage.remove('token');
|
|
this.RESET_STATE();
|
|
resetRouter();
|
|
resolve(null);
|
|
})
|
|
.catch(error => {
|
|
reject(error);
|
|
});
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 清除 Token
|
|
*/
|
|
resetToken() {
|
|
return new Promise(resolve => {
|
|
localStorage.remove('token');
|
|
this.RESET_STATE();
|
|
resolve(null);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
export default useUserStore;
|