| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- import type { UserInfo, UserUpdateInfo } from '/#/store';
- import type { ErrorMessageMode } from '/#/axios';
- import { defineStore } from 'pinia';
- import { store } from '/@/store';
- import { RoleEnum } from '/@/enums/roleEnum';
- import { PageEnum } from '/@/enums/pageEnum';
- import { JWT_TOKEN_KEY, REFRESH_TOKEN_KEY, ROLES_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum';
- import { getAuthCache, setAuthCache } from '/@/utils/auth';
- import { getAppEnvConfig } from '/@/utils/env';
- const { VITE_GLOB_BIG_SCREEN } = getAppEnvConfig();
- import {
- LoginParams,
- LoginResultModel,
- RefreshTokenParams,
- SmsLoginParams,
- } from '/@/api/sys/model/userModel';
- import { doRefreshToken, getMyInfo, loginApi, smsCodeLoginApi, kidloginApi, LoginOut } from '/@/api/sys/user';
- import { gisLoginApi } from '/@/api/sys/gis';
- import { useI18n } from '/@/hooks/web/useI18n';
- import { useMessage } from '/@/hooks/web/useMessage';
- import { router } from '/@/router';
- import { usePermissionStore } from '/@/store/modules/permission';
- import { RouteRecordRaw } from 'vue-router';
- import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
- import { createLocalStorage } from '/@/utils/cache/index';
- import { getEntitiesId } from '/@/api/dashboard/index';
- interface UserState {
- platInfo: any;
- enterPriseInfo: any;
- userInfo: Nullable<UserInfo>;
- userUpdateInfo?: Nullable<UserUpdateInfo>;
- token?: string;
- roleList: RoleEnum[];
- sessionTimeout?: boolean;
- lastUpdateTime: number;
- jwtToken?: string;
- gisToken?: string;
- refreshToken?: string;
- outTarget?: string;
- }
- const storage = createLocalStorage();
- export const useUserStore = defineStore({
- id: 'app-user',
- state: (): UserState => ({
- //平台信息
- platInfo: storage.get('platformInfo') || null,
- enterPriseInfo: storage.get('enterPriseInfo') || null,
- // user info
- userInfo: null,
- userUpdateInfo: null,
- // token
- jwtToken: undefined,
- //refresh Token
- refreshToken: undefined,
- // roleList
- roleList: [],
- // Whether the login expired
- sessionTimeout: false,
- // Last fetch time
- lastUpdateTime: 0,
- // gis的token
- gisToken: undefined,
- }),
- getters: {
- getPlatInfo(): any {
- return this.platInfo;
- },
- getUserInfo(): UserInfo {
- return this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {};
- },
- getUserUpdateInfo(): UserUpdateInfo {
- return this.userUpdateInfo || {};
- },
- getJwtToken(): string {
- return this.jwtToken || getAuthCache<string>(JWT_TOKEN_KEY);
- },
- getGisToken(): string {
- return this.gisToken;
- },
- getRefreshToken(): string {
- return this.refreshToken || getAuthCache<string>(REFRESH_TOKEN_KEY);
- },
- getRoleList(): RoleEnum[] {
- return this.roleList.length > 0 ? this.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY);
- },
- getSessionTimeout(): boolean {
- return !!this.sessionTimeout;
- },
- getLastUpdateTime(): number {
- return this.lastUpdateTime;
- },
- },
- actions: {
- setPlatInfo(platInfo: any) {
- this.platInfo = platInfo;
- },
- setEnterPriseInfo(enterPriseInfo: any) {
- this.enterPriseInfo = enterPriseInfo;
- },
- storeToken(jwtToken: string, refreshToken: string) {
- sessionStorage.setItem('token', jwtToken);
- // sessionStorage.setItem('refreshToken', JSON.stringify(refreshToken));
- this.jwtToken = jwtToken;
- this.refreshToken = refreshToken;
- setAuthCache(JWT_TOKEN_KEY, jwtToken);
- setAuthCache(REFRESH_TOKEN_KEY, refreshToken);
- },
- setToken(info: string | undefined) {
- sessionStorage.setItem('token', info);
- this.jwtToken = info;
- setAuthCache(JWT_TOKEN_KEY, info);
- },
- setGisToken(info: any) {
- sessionStorage.setItem('gisInfo', JSON.stringify(info.EMPLOYEE));
- sessionStorage.setItem('gisToken', info.tokenV2);
- this.gisToken = info.tokenV2;
- },
- setRoleList(roleList: RoleEnum[]) {
- this.roleList = roleList;
- setAuthCache(ROLES_KEY, roleList);
- },
- setUserInfo(info: UserInfo | null) {
- sessionStorage.setItem('user', JSON.stringify(info));
- this.userInfo = info;
- this.lastUpdateTime = new Date().getTime();
- setAuthCache(USER_INFO_KEY, info);
- },
- setUserUpdateInfo(info: UserUpdateInfo) {
- this.userUpdateInfo = info;
- },
- setSessionTimeout(flag: boolean) {
- this.sessionTimeout = flag;
- },
- resetState() {
- this.userInfo = null;
- this.token = '';
- this.roleList = [];
- this.sessionTimeout = false;
- },
- /**
- * @description: login
- */
- async login
- (
- params: LoginParams & {
- goHome?: boolean;
- mode?: ErrorMessageMode;
- }
- ): Promise<UserInfo | null> {
- try {
- const { goHome = true, mode, ...loginParams } = params;
- // 进行gis系统的模拟登录
- const gsiFormData = new FormData();
- gsiFormData.append('interfaceName', 'atp-provider.controller.AtpController');
- gsiFormData.append('methodName', 'misLogin');
- gsiFormData.append('args[]', "[space, ADMIN2, c4ca4238a0b923820dcc509a6f75849b, ' ']");
- await this.GisLogin(gsiFormData);
- // 本系统的登录
- const data = await loginApi(loginParams, mode);
- return this.process(data, goHome);
- } catch (error) {
- return Promise.reject(error);
- }
- },
- async GisLogin(loginParams): Promise<UserInfo | null> {
- try {
- const data = {
- status: 0,
- result: '2w3r2fewvdsv',
- }; //await gisLoginApi(loginParams);
- console.log('gis接口返回1:', data);
- if (data.status == 0) {
- // const resultData = JSON.parse(data.result);
- const resultData = data.result;
- console.log('gis接口返回2:', resultData);
- this.setGisToken(resultData);
- return resultData;
- }
- } catch (error) {
- console.log(error);
- return Promise.reject(error);
- }
- },
- async singlesignon(data) {
- if (!data.token) data.token = data.refreshToken;
- if (!data.refreshToken) data.refreshToken = data.token;
- return this.process(data, true);
- },
- async process(data: LoginResultModel, goHome?: boolean): Promise<UserInfo | null> {
- const { token, refreshToken } = data;
- this.storeToken(token, refreshToken);
- // get user info
- const userInfo = await this.getMyUserInfoAction();
- const sessionTimeout = this.sessionTimeout;
- if (sessionTimeout) {
- this.setSessionTimeout(false);
- } else if (goHome) {
- const permissionStore = usePermissionStore();
- if (!permissionStore.isDynamicAddedRoute) {
- const routes = await permissionStore.buildRoutesAction();
- routes.forEach((route) => {
- router.addRoute(route as unknown as RouteRecordRaw);
- });
- router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
- permissionStore.setDynamicAddedRoute(true);
- }
- // console.log(`${VITE_GLOB_BIG_SCREEN}refreshToken=${refreshToken.replace(/['"]/g, '')}`);
- // 跳转到门户页面
- // sessionStorage.setItem('token', refreshToken);
- // setTimeout(() => {
- // window.location.href = `${VITE_GLOB_BIG_SCREEN}refreshToken=${refreshToken.replace(
- // /['"]/g,
- // ''
- // )}`;
- // }, 1000);
- // await router.replace(userInfo.homePath || PageEnum.BASE_HOME_NAV);
- }
- return userInfo;
- },
- async smsCodelogin(
- params: SmsLoginParams & {
- goHome?: boolean;
- mode?: ErrorMessageMode;
- }
- ): Promise<UserInfo | null> {
- try {
- const { goHome = true, mode, ...loginParams } = params;
- const data = await smsCodeLoginApi(loginParams, mode);
- return this.process(data, goHome);
- } catch (error) {
- const { createMessage } = useMessage();
- createMessage.error(error?.message || '');
- // return Promise.reject(error);
- }
- },
- async getMyUserInfoAction(): Promise<UserInfo> {
- const userInfo = await getMyInfo();
- this.setUserInfo(userInfo);
- const { roles } = userInfo;
- const roleList = roles.map((item) => item) as RoleEnum[];
- this.setRoleList(roleList);
- try {
- if (roleList[0] !== 'SYS_ADMIN') {
- const res = []; //await getEntitiesId();sujunling
- // const entityId = res.data[0]?.entityId;
- // window.localStorage.setItem('entityId', JSON.stringify(entityId));
- // window.sessionStorage.setItem('entityId', JSON.stringify(entityId));
- }
- } catch { }
- return userInfo;
- },
- /**
- * @description: logout
- */
- async logout(goLogin = false) {
- // try {
- // await doLogout();
- // } catch {
- // console.log('注销Token失败');
- // }
- // this.resetState();
- // setAuthCache(JWT_TOKEN_KEY, undefined);
- // setAuthCache(REFRESH_TOKEN_KEY, undefined);
- // this.setSessionTimeout(false);
- // // goLogin && router.push(PageEnum.BASE_LOGIN);
- const { VITE_GLOB_IS_IDC } = getAppEnvConfig();
- if (VITE_GLOB_IS_IDC && VITE_GLOB_IS_IDC.length) {
- await LoginOut()
- }
- this.setToken(undefined);
- this.setSessionTimeout(false);
- setAuthCache(REFRESH_TOKEN_KEY, undefined);
- this.setUserInfo(null);
- goLogin && router.push(PageEnum.BASE_LOGIN);
- window.localStorage.clear();
- window.localStorage.removeItem('updateUserInfo');
- },
- async doRefresh() {
- try {
- const req = { refreshToken: this.refreshToken } as RefreshTokenParams;
- const data = await doRefreshToken(req);
- const { token, refreshToken } = data;
- this.storeToken(token, refreshToken);
- } catch (error) {
- this.logout();
- }
- },
- /**
- * @description: Confirm before logging out
- */
- confirmLoginOut() {
- const { createConfirm } = useMessage();
- const { t } = useI18n();
- createConfirm({
- iconType: 'warning',
- title: t('sys.app.logoutTip'),
- content: t('sys.app.logoutMessage'),
- onOk: async () => {
- await this.logout(true);
- },
- });
- },
- /**
- * @description: 导航页的返回登录页
- */
- async backLogin() {
- await this.logout(true);
- },
- /**
- * @description: 导航页的返回登录页
- */
- async wlwLogin() {
- const { notification } = useMessage();
- setTimeout(() => {
- notification.warn({
- message: '警告',
- description: 'Token 失效请重新登录!',
- duration: 3,
- });
- }, 1000);
- await this.logout(true);
- },
- /**
- * @description: 有response_type后
- */
- async kidlogin(
- params: LoginParams & {
- goHome?: boolean;
- mode?: ErrorMessageMode;
- }
- ): Promise<UserInfo | null> {
- try {
- const { goHome = true, mode, ...loginParams } = params;
- // // 进行gis系统的模拟登录
- // let gsiFormData = new FormData();
- // gsiFormData.append('interfaceName', 'atp-provider.controller.AtpController');
- // gsiFormData.append('methodName', 'misLogin');
- // gsiFormData.append('args[]', "[space, ADMIN2, c4ca4238a0b923820dcc509a6f75849b, ' ']");
- // await this.GisLogin(gsiFormData);
- // 本系统的登录
- const data = await kidloginApi(loginParams, mode);
- console.log('luozhi1', data);
- return this.process(data.data, goHome);
- } catch (error) {
- return Promise.reject(error);
- }
- },
- },
- });
- // Need to be used outside the setup
- export function useUserStoreWithOut() {
- return useUserStore(store);
- }
|