89 lines
2.3 KiB
TypeScript
Raw Normal View History

2023-04-02 01:01:56 +08:00
import { to } from 'await-to-js';
import defAva from '@/assets/images/profile.jpg';
import store from '@/store';
import { getToken, removeToken, setToken } from '@/utils/auth';
import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '@/api/login';
import { LoginData } from '@/api/types';
export const useUserStore = defineStore('user', () => {
2023-04-03 00:05:09 +08:00
const token = ref(getToken());
const name = ref('');
const nickname = ref('');
const userId = ref<string | number>('');
const avatar = ref('');
const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
const permissions = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
/**
*
* @param userInfo
* @returns
*/
const login = async (userInfo: LoginData): Promise<void> => {
const [err, res] = await to(loginApi(userInfo));
if (res) {
const data = res.data;
setToken(data.access_token);
token.value = data.access_token;
2023-04-03 00:05:09 +08:00
return Promise.resolve();
}
return Promise.reject(err);
};
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
// 获取用户信息
const getInfo = async (): Promise<void> => {
const [err, res] = await to(getUserInfo());
if (res) {
const data = res.data;
const user = data.user;
const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar;
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
if (data.roles && data.roles.length > 0) {
// 验证返回的roles是否是一个非空数组
roles.value = data.roles;
permissions.value = data.permissions;
} else {
roles.value = ['ROLE_DEFAULT'];
}
name.value = user.userName;
nickname.value = user.nickName;
avatar.value = profile;
userId.value = user.userId;
return Promise.resolve();
}
return Promise.reject(err);
};
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
// 注销
const logout = async (): Promise<void> => {
await logoutApi();
token.value = '';
roles.value = [];
permissions.value = [];
removeToken();
};
2023-04-02 01:01:56 +08:00
2023-11-30 11:13:29 +08:00
const setAvatar = (value: string) => {
avatar.value = value;
};
2023-04-03 00:05:09 +08:00
return {
userId,
token,
nickname,
avatar,
roles,
permissions,
login,
getInfo,
2023-11-30 11:13:29 +08:00
logout,
setAvatar
2023-04-03 00:05:09 +08:00
};
2023-04-02 01:01:56 +08:00
});
export default useUserStore;
// 非setup
export function useUserStoreHook() {
2023-04-03 00:05:09 +08:00
return useUserStore(store);
2023-04-02 01:01:56 +08:00
}