import { defineStore } from 'pinia'; import { getToken, setToken, removeToken } from '@/utils/auth'; import { loginApi, logoutApi } from '@/api/auth'; import { getUserInfo } from '@/api/user'; import { resetRouter } from '@/router'; import { store } from '@/store'; import { LoginData } from '@/api/auth/types'; import { ref } from 'vue'; import { UserInfo } from '@/api/user/types'; export const useUserStore = defineStore('user', () => { // state const Token = ref(getToken() || ''); const nickname = ref(''); const avatar = ref(''); const roles = ref>([]); // 用户角色编码集合 → 判断路由权限 const perms = ref>([]); // 用户权限编码集合 → 判断按钮权限 const badgeval = ref('') // actions // 登录 function login(loginData: LoginData) { return new Promise((resolve, reject) => { loginApi(loginData) .then(response => { const { token } = response.data; Token.value = token; setToken(token); resolve(); }) .catch(error => { reject(error); }); }); } // 获取信息(用户昵称、头像、角色集合、权限集合) function getInfo() { return new Promise((resolve, reject) => { getUserInfo() .then(({ data }) => { if (!data) { return reject('Verification failed, please Login again.'); } if (!data.roles || data.roles.length <= 0) { reject('getUserInfo: roles must be a non-null array!'); } nickname.value = data.userInfo.nickname; avatar.value = data.userInfo.avatar; roles.value = data.roles; perms.value = data.permissions; resolve(data); }) .catch(error => { reject(error); }); }); } // 注销 function logout() { return new Promise((resolve, reject) => { logoutApi() .then(() => { resetRouter(); resetToken(); resolve(); }) .catch(error => { reject(error); }); }); } // 重置 function resetToken() { removeToken(); Token.value = ''; nickname.value = ''; avatar.value = ''; roles.value = []; perms.value = []; } return { Token, nickname, avatar, roles, perms, login, getInfo, logout, resetToken, badgeval }; }); // 非setup export function useUserStoreHook() { return useUserStore(store); }