You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

83 lines
2.4 KiB

// import { message } from 'ant-design-vue';
import { defineStore } from 'pinia';
// import { router } from '/nerv-lib/paas/router';
import { http } from '/nerv-lib/util/http';
import Cookies from 'js-cookie';
import { appConfigStore } from '/nerv-base/store/modules/app-config';
import { isArray } from 'lodash-es';
export const loginService = defineStore({
id: 'loginService',
/**
* module 测试用
* @returns
*/
state(): { currentUser: string; currentUserTenant: string; userName: string; isAdmin: boolean } {
return { currentUser: '', currentUserTenant: '', userName: '', isAdmin: false };
},
getters: {},
actions: {
isLogin(): boolean {
const authToken = appConfigStore()?.headers?.extraAuth;
if (authToken && authToken.includes('nervsid')) {
const tokenArr = authToken.split('=');
return !!(isArray(tokenArr) && tokenArr.length > 0 && tokenArr[1]);
}
return !!Cookies.get('nervsid');
},
/**
* Get userInfo from nginx
*/
asyncFetchUserInfo(): Promise<any> {
return http
.get('/api/webui/webui/objs/PassportUserInfo')
.then((body) => {
const { name, tenant, tenantAlias, isAdmin } = body;
this.currentUser = name;
this.currentUserTenant = tenant;
this.isAdmin = isAdmin;
http.setHeaders({
'NERV-TENANT': tenant,
});
if (tenantAlias) {
this.userName = `${name}@${tenantAlias}`;
} else {
if (tenant && tenant !== 'nerv') {
this.userName = `${name}@${tenant}`;
} else {
this.userName = name;
}
}
return body;
})
.catch((err) => {
console.log(err);
});
},
/**
* Get logoutUrl from nginx, then redirect to passport
*
* @returns {Promise<string>}
*/
logout(): Promise<any> {
if (appConfigStore().layout) {
return appConfigStore().layout();
} else {
return http.get('/api/webui/webui/objs/PassportLogout').then((body) => {
Cookies.remove('nervsid');
window.location.href = body.url;
const user = this.currentUser;
this.currentUser = '';
return user;
});
}
},
async checkUserInfo() {
if (this.currentUser === '') {
await this.asyncFetchUserInfo();
}
},
},
});