index.ts 1.92 KB
import { defineStore } from 'pinia';
import { clearToken } from '@/utils/auth';
import useAuthApi from '@/http/auth';
import { AuthorizedState } from './type';
// eslint-disable-next-line import/no-cycle
import { useAppStore } from '@/store';
import { useCertifyApi } from '@/http/user';
import { useApplyApi } from '@/http/activity';

const useAuthorizedStore = defineStore('authorized', {
  state: (): AuthorizedState => ({
    id: undefined,
    nick_name: undefined,
    avatar: undefined,
    permissions: [],
    auditUserCount: 0,
    auditActivityCount: 0,
    activityApplyFailCount: 0,
  }),
  getters: {
    authorizedInfo(state: AuthorizedState): AuthorizedState {
      return { ...state };
    },
    getKey(state: AuthorizedState): number {
      return state.id || 0;
    },
  },
  actions: {
    setInfo(partial: Partial<AuthorizedState>) {
      // @ts-ignore
      this.$patch(partial);
    },
    syncAuditUser() {
      useCertifyApi.get({ status: 0, page: 1, pageSize: 1 }).then(({ meta }) => this.setInfo({ auditUserCount: meta.total }));
    },
    syncAuditActivity() {
      useApplyApi
        .get({ auditStatus: 0, songType: 1, page: 1, pageSize: 1 })
        .then(({ meta }) => this.setInfo({ auditActivityCount: meta.total }));

      useApplyApi
        .get({ auditStatus: 2, songType: 1, createdForm: 1, page: 1, pageSize: 1 })
        .then(({ meta }) => this.setInfo({ activityApplyFailCount: meta.total }));
    },
    async syncInfo() {
      const { user, permissions } = await useAuthApi.info();
      this.setInfo({ ...user, permissions });
      useAppStore().queryPermissionList();
      this.syncAuditUser();
      this.syncAuditActivity();
    },
    logout() {
      clearToken();
      this.$reset();
      window.location.reload();
    },

    async syncToken() {
      // TODO
      // const { data } = await refreshToken();
      // setToken(data.access_token);
    },
  },
});

export default useAuthorizedStore;