index.ts 1.1 KB
import { defineStore } from 'pinia';
import { clearToken } from '@/utils/auth';
import useAuthApi from '@/api/auth';
// eslint-disable-next-line import/no-cycle
import { useAppStore } from '@/store';
import { AuthorizedState } from './type';

const useAuthorizedStore = defineStore('authorized', {
  state: (): AuthorizedState => ({
    id: undefined,
    nick_name: undefined,
    real_name: undefined,
    avatar: undefined,
    email: undefined,
    phone: undefined,
    permissions: [],
  }),
  getters: {
    authorizedInfo(state: AuthorizedState): AuthorizedState {
      return { ...state };
    },
  },
  actions: {
    setInfo(partial: Partial<AuthorizedState>) {
      this.$patch(partial);
    },
    async syncInfo() {
      const { user, permissions, menus } = await useAuthApi.info();
      this.setInfo({ ...user, permissions });
      useAppStore().setPermissions(menus);
    },
    async logout() {
      this.$reset();
      clearToken();
    },
    async syncToken() {
      // const { data } = await refreshToken();
      // setToken(data.access_token);
    },
  },
});

export default useAuthorizedStore;