user.ts typescript 定义类型例子

import { defineStore } from "pinia";

import { loginApi, logoutApi } from "@/api/auth";

import { getUserInfo } from "@/api/user";

import { resetRouter } from "@/router";

import { store } from "@/store";

import { LoginData } from "@/api/auth/types";

import { UserInfo } from "@/api/user/types";

import { useStorage } from "@vueuse/core";

export const useUserStore = defineStore("user", () => {

  const user: UserInfo = {

    roles: [],

    perms: [],

  };

  const token = useStorage("accessToken", "");

  /**

   * 登录

   *

   * @param {LoginData}

   * @returns

   */

  function login(loginData: LoginData) {

    return new Promise<void>((resolve, reject) => {

      loginApi(loginData)

        .then((response) => {

          const { tokenType, accessToken } = response.data;

          token.value = tokenType + " " + accessToken; // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx

          resolve();

        })

        .catch((error) => {

          reject(error);

        });

    });

  }

  // 获取信息(用户昵称、头像、角色集合、权限集合)

  function getInfo() {

    return new Promise<UserInfo>((resolve, reject) => {

      getUserInfo()

        .then(({ data }) => {

          if (!data) {

            reject("Verification failed, please Login again.");

            return;

          }

          if (!data.roles || data.roles.length <= 0) {

            reject("getUserInfo: roles must be a non-null array!");

            return;

          }

          Object.assign(user, { ...data });

          resolve(data);

        })

        .catch((error) => {

          reject(error);

        });

    });

  }

  // 注销

  function logout() {

    return new Promise<void>((resolve, reject) => {

      logoutApi()

        .then(() => {

          resetStore();

          location.reload(); // 清空路由

          resolve();

        })

        .catch((error) => {

          reject(error);

        });

    });

  }

  /** 清空缓存 */

  function resetStore() {

    resetRouter();

    token.value = "";

    Object.assign(user, { roles: [], perms: [] });

  }

  return {

    token,

    user,

    login,

    getInfo,

    logout,

    resetStore,

  };

});

// 非setup

export function useUserStoreHook() {

  return useUserStore(store);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值