This commit is contained in:
zk
2023-12-18 18:34:19 +08:00
parent 2cc8886c2d
commit 580a4fc5c6
50 changed files with 2343 additions and 223 deletions
+10
View File
@@ -0,0 +1,10 @@
import type { App } from 'vue';
import { createPinia } from 'pinia';
const store = createPinia();
export function setupStore(app: App<Element>) {
app.use(store);
}
export { store };
+99
View File
@@ -0,0 +1,99 @@
import { defineStore } from 'pinia';
import { loginApi, getUserInfo, doLogout } from '/@/api/user.ts';
import { TOKEN_KEY, USER_INFO_KEY } from '/@/enum/cacheEnum.ts';
import { PageEnum } from '/@/enum/pageEnum.ts';
import { getAuthCache, setAuthCache } from '/@/utils/auth.ts';
import { useRouter } from 'vue-router';
const router = useRouter();
export const useUserStore = defineStore({
id: 'app-user',
state: () => ({
token: '',
userInfo: null,
//登录返回信息
loginInfo: null,
}),
getters: {
getUserInfo() {
return (this.userInfo && Object.keys(this.userInfo).length > 0) || getAuthCache(USER_INFO_KEY) || {};
},
getLoginInfo() {
return this.loginInfo;
},
getToken() {
return this.token || getAuthCache(TOKEN_KEY);
},
},
actions: {
setToken(info) {
this.token = info;
setAuthCache(TOKEN_KEY, info);
},
setUserInfo(info) {
this.userInfo = info;
setAuthCache(USER_INFO_KEY, info);
},
setLoginInfo(info) {
this.loginInfo = info;
},
/**
* 登录事件
*/
async login(params) {
try {
const { goHome = true, mode, ...loginParams } = params;
const data = await loginApi(loginParams, mode);
const { token, userInfo } = data.result;
// save token
this.setToken(token, false);
this.setUserInfo(userInfo);
return { userInfo };
} catch (error) {
return Promise.reject(error);
}
},
/**
* 登录完成处理
* @param goHome
*/
async afterLoginAction(goHome?: boolean, data?: any): Promise<any | null> {
if (!this.getToken) return null;
//获取用户信息
const userInfo = await this.getUserInfoAction();
const { multi_depart, departs } = data;
await this.setLoginInfo({ multi_depart, departs, isLogin: true });
return data;
},
/**
* @desc 获取用户信息
*/
async getUserInfoAction() {
if (!this.getToken) {
return null;
}
// @ts-ignore
const { userInfo } = await getUserInfo();
if (userInfo) {
this.setUserInfo(userInfo);
}
return userInfo;
},
/**
* @desc 退出登录
*/
async logout(goLogin = false) {
if (this.getToken) {
try {
await doLogout();
} catch {
console.log('注销Token失败');
}
}
this.setToken('');
this.setUserInfo(null);
this.setLoginInfo(null);
goLogin && (await router.push({ path: PageEnum.BASE_LOGIN }));
},
},
});