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
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();
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|