import { UserInfo } from '@/types/store' import { LoginParams, GetRefreshTokenParamsModel, InitUserPasswordParamsModel, } from '@/api/common/model' import { UserModel, DemoUserModel } from '@/types/user' import { rbacLoginApi, logoutApi, getRefreshTokenApi, initUserPasswordApi, getAuthoritiesListApi, } from '@/api/common' import { defineStore } from 'pinia' import { TOKEN_KEY, USER_INFO_KEY, AUTHORITIES_LIST_KEY, ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, RBAC_REFRESH_TOKEN_KEY, RBAC_ACCESS_TOKEN_KEY, USER_APPLICATION_ID, USER_APPLICATION_TYPE, } from '@/global/cacheKey' import router from '@/router' import Storage from 'web-storage-cache' import { RequestResult } from '@/utils/request/model' import { validatenull } from '@/utils/tool/translateValue' // import moment from 'moment' // import { UserModel } from '@/types/user' // import { permissionStore } from './permission' // import { CommonConstant } from '@/utils/constant' const localStorage = new Storage() const env = import.meta.env interface UserState { token: string | null accessToken: string | null refreshToken: string | null authoritiesList: string[] userInfo: UserInfo | null } export const userStore = defineStore({ id: 'store-user', state: (): UserState => ({ token: null, accessToken: null, refreshToken: null, authoritiesList: [], userInfo: null, }), actions: { setToken(token: string) { this.token = token localStorage.set(TOKEN_KEY, token) }, setAccessToken(token: string) { this.accessToken = token localStorage.set(ACCESS_TOKEN_KEY, token) }, setRefreshToken(token: string) { this.refreshToken = token localStorage.set(REFRESH_TOKEN_KEY, token) }, setUserInfo(info: UserModel) { this.userInfo = info localStorage.set(USER_INFO_KEY, info) window.localStorage.setItem( USER_APPLICATION_ID, info.applicationId || '' ) }, setAuthoritiesList(authoritiesList: string[]) { this.authoritiesList = authoritiesList localStorage.set(AUTHORITIES_LIST_KEY, authoritiesList) }, removeToken() { this.token = null localStorage.delete(TOKEN_KEY) localStorage.delete(ACCESS_TOKEN_KEY) localStorage.delete(REFRESH_TOKEN_KEY) localStorage.delete(env.VITE_TOKEN_NAME) }, removeUserInfo() { this.userInfo = null localStorage.delete(USER_INFO_KEY) window.localStorage.removeItem(USER_APPLICATION_ID) window.localStorage.removeItem(USER_APPLICATION_TYPE) }, removeAuthoritiesList() { this.authoritiesList = [] localStorage.delete(AUTHORITIES_LIST_KEY) }, /** * @description: login * @creater: liupw * @date: 2021/06/24 20:02 */ async login( params: LoginParams ): Promise | null> { try { const loginApiRes: RequestResult = await rbacLoginApi(params) const { access_token, refresh_token, user, expires_in } = loginApiRes.data this.setToken(access_token) this.setAccessToken(access_token) this.setRefreshToken(refresh_token) window.localStorage.setItem( RBAC_REFRESH_TOKEN_KEY, refresh_token ) window.localStorage.setItem(RBAC_ACCESS_TOKEN_KEY, access_token) this.setUserInfo({ id: user.id, username: user.username, name: user.name, applicationId: user.appId, expiresIn: expires_in, datetime: new Date().getTime(), }) // this.getAuthoritiesList(user.appId) router.replace('/') } catch (err) { return Promise.reject(err) } return null }, /** * @description: logout * @creater: liupw * @date: 2021/06/25 08:46 */ async logout(): Promise { try { await logoutApi() this.removeToken() this.removeUserInfo() this.removeAuthoritiesList() localStorage.delete('processAppId') window.localStorage.removeItem(RBAC_ACCESS_TOKEN_KEY) window.localStorage.removeItem(RBAC_REFRESH_TOKEN_KEY) router.push('/user/login') } catch (err) { return Promise.reject(err) } return null }, /** * @description: 刷新token * @creater: chens * @date: 2023/04/06 */ async getRefreshToken( params: GetRefreshTokenParamsModel ): Promise { try { const result = await getRefreshTokenApi(params) const { access_token, refresh_token } = result.data this.setToken(access_token) this.setRefreshToken(refresh_token) window.localStorage.setItem( RBAC_REFRESH_TOKEN_KEY, refresh_token ) window.localStorage.setItem(RBAC_ACCESS_TOKEN_KEY, access_token) } catch (err) { return Promise.reject(err) } return null }, /** * @description: 第一次登录初始化密码 * @creater: chens * @date: 2023/04/06 */ async initUserPassword( params: InitUserPasswordParamsModel ): Promise { try { await initUserPasswordApi(params) } catch (err) { return Promise.reject(err) } return null }, /** * @description: 获取菜单权限key * @creater: chens * @date: 2023/04/06 */ async getAuthoritiesList(access_token): Promise { try { const res = await getAuthoritiesListApi() if (!validatenull(res.data)) { const _authoritiesArr = res.data.authorities .map(v => { return Object.values(v) }) .flat() this.setAuthoritiesList(_authoritiesArr) this.setToken(access_token) this.setAccessToken(access_token) this.setUserInfo({ id: res.data.id, username: res.data.username, name: res.data.name, applicationId: res.data.applicationId, datetime: new Date().getTime(), }) router.replace('/') } } catch (err) { return Promise.reject(err) } return null }, }, })