| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import { defineStore } from 'pinia';
- import { createStorage } from '@/utils/Storage';
- import { store } from '@/store';
- import { ACCESS_TOKEN, CURRENT_USER, IS_LOCKSCREEN, TENANT_TOKEN } from '@/store/mutation-types';
- import { ResultEnum } from '@/enums/httpEnum';
- const Storage = createStorage({ storage: localStorage });
- import { getUserInfo, login } from '@/api/system/user';
- import { storage } from '@/utils/Storage';
- import { useGlobSetting } from '@/hooks/setting';
- const { tenantCode } = useGlobSetting();
- export interface IUserState {
- token: string;
- username: string;
- welcome: string;
- avatar: string;
- permissions: any[];
- info: any;
- tenantId: number;
- }
- export const useUserStore = defineStore({
- id: 'app-user',
- state: (): IUserState => ({
- token: Storage.get(ACCESS_TOKEN, ''),
- tenantId: Storage.get(TENANT_TOKEN, ''),
- username: '',
- welcome: '',
- avatar: '',
- permissions: [],
- info: Storage.get(CURRENT_USER, {}),
- }),
- getters: {
- getToken(): string {
- return this.token;
- },
- getTenantId(): number {
- return this.tenantId;
- },
- getAvatar(): string {
- return this.avatar;
- },
- getNickname(): string {
- return this.username;
- },
- getPermissions(): [any][] {
- return this.permissions;
- },
- getUserInfo(): any {
- return this.info;
- },
- /** 获取角色类型,可能为多个 */
- getRoleTypes(): string[] {
- return this.info.roleType.split(',');
- },
- },
- actions: {
- setTenantId(tenantId: number) {
- this.tenantId = tenantId;
- },
- setToken(token: string) {
- this.token = token;
- },
- setAvatar(avatar: string) {
- this.avatar = avatar;
- },
- setPermissions(permissions) {
- this.permissions = permissions;
- },
- setUserInfo(info) {
- this.info = info;
- },
- // 登录
- async login(userInfo) {
- try {
- const response = await login(userInfo);
- const { data: result, code } = response;
- if (parseInt(code) === ResultEnum.SUCCESS) {
- const ex = 7 * 24 * 60 * 60 * 1000;
- const token = result.satoken;
- const tenantId = result.tenantId;
- storage.set(ACCESS_TOKEN, token, ex);
- storage.set(TENANT_TOKEN, tenantId, ex);
- storage.set(CURRENT_USER, result, ex);
- storage.set(IS_LOCKSCREEN, false);
- storage.setCookie('satoken', token);
- storage.setCookie('tenantId', tenantId);
- this.setToken(token);
- this.setTenantId(tenantId);
- this.setUserInfo(result);
- }
- return Promise.resolve(response);
- } catch (e) {
- return Promise.reject(e);
- }
- },
- // 获取用户信息
- GetInfo() {
- return new Promise((resolve, reject) => {
- getUserInfo({ tenantCode })
- .then((res) => {
- const result = res;
- if (result.permissions && result.permissions.length) {
- const permissionsList = result.permissions;
- this.setPermissions(permissionsList);
- }
- this.setUserInfo(result);
- this.setAvatar(result.avatar);
- resolve(res);
- })
- .catch((error) => {
- reject(error);
- });
- });
- },
- // 登出
- async logout() {
- this.setPermissions([]);
- this.setUserInfo('');
- storage.remove(ACCESS_TOKEN);
- storage.remove(CURRENT_USER);
- return Promise.resolve('');
- },
- },
- });
- // Need to be used outside the setup
- export function useUserStoreWidthOut() {
- return useUserStore(store);
- }
|