import { defineStore } from 'pinia';
|
import { store } from '@/store';
|
import {
|
getToken,
|
setToken,
|
removeToken,
|
removeUserInfo,
|
setUserInfo,
|
getUserInfo,
|
md5Encrypt,
|
} from '@/utils';
|
import { resetRouter, router } from '@/router';
|
import { useTagsViewStoreHook } from './tagsView';
|
import { usePermissionStoreHook } from './permission';
|
import { useClearSubModule } from '@/hooks';
|
import { myClient } from '@/constants/query';
|
import * as authServices from '@/services/api/auth';
|
|
export interface UserState {
|
token: string;
|
userInfo: API.PasswordLoginCommandCallback;
|
}
|
|
function getDefaultState() {
|
const accessToken = getToken();
|
const userInfo = getUserInfo();
|
|
return {
|
token: accessToken,
|
userInfo: userInfo || {},
|
} as UserState;
|
}
|
|
export const useUserStore = defineStore({
|
id: 'user',
|
state: getDefaultState,
|
getters: {
|
accessToken(state) {
|
return state.token;
|
},
|
user(state) {
|
return state.userInfo;
|
},
|
|
// userId(state) {
|
// return state.accountInfo.sub;
|
// },
|
},
|
actions: {
|
setToken(token: string) {
|
this.token = token;
|
setToken(token);
|
},
|
setUserInfo(userInfo: API.PasswordLoginCommandCallback) {
|
this.userInfo = userInfo;
|
setUserInfo(userInfo);
|
},
|
|
// 用户登入
|
async loginByUsername(params: API.PasswordLoginCommand) {
|
let res = await authServices.passwordLogin(
|
{
|
...params,
|
password: md5Encrypt(params.password),
|
type: EnumUserType.Operation,
|
clientType: EnumClientType.PcWeb,
|
},
|
{
|
showLoading: false,
|
}
|
);
|
if (res) {
|
this.setToken(res.accessToken);
|
this.setUserInfo(res);
|
}
|
},
|
|
// 登出 清空缓存
|
logout(redirectPath = '/') {
|
return new Promise(async (resolve) => {
|
removeToken();
|
removeUserInfo();
|
this.resetState();
|
resetRouter();
|
myClient.removeQueries();
|
|
await router.push(`/login?redirect=${redirectPath}`);
|
|
const tagsViewStore = useTagsViewStoreHook();
|
tagsViewStore.delAllViews();
|
const { clearSubModule } = useClearSubModule();
|
clearSubModule();
|
|
const permissionStore = usePermissionStoreHook();
|
permissionStore.resetModuleList();
|
resolve(1);
|
});
|
},
|
|
resetToken() {
|
this.token = '';
|
removeToken();
|
this.resetState();
|
},
|
|
resetState() {
|
Object.assign(this, getDefaultState());
|
},
|
|
async refreshToken(params: any) {
|
return Promise.resolve({
|
accessToken: '1222',
|
expiresIn: 1000 * 60 * 24 * 60,
|
creationTime: '2025-08-04 00:00:00',
|
refreshToken: '1222',
|
});
|
// return new Promise<API.IdentityModelTokenCacheItem>(
|
// // eslint-disable-next-line no-async-promise-executor
|
// async (resolve, reject) => {
|
// try {
|
// const res = await accountServices.getTokenByRefreshToken(params, {
|
// showLoading: false,
|
// });
|
// if (res) {
|
// this.setToken(res.accessToken);
|
// this.setUserInfo(res);
|
// resolve(res);
|
// return;
|
// }
|
// reject('出错了');
|
// } catch (error) {
|
// reject(error);
|
// }
|
// }
|
// );
|
},
|
},
|
});
|
|
export function useUserStoreHook() {
|
return useUserStore(store);
|
}
|