member.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { defineStore } from 'pinia'
  2. import { getMemberInfo } from '@/app/api/member'
  3. import { logout } from '@/app/api/auth'
  4. import useCartStore from '@/addon/mall/stores/cart'
  5. interface Member {
  6. token: string | null
  7. info: Record<string, any> | null,
  8. loginPopup:boolean
  9. }
  10. const useMemberStore = defineStore('member', {
  11. state: (): Member => {
  12. return {
  13. token: useCookie('token').value,
  14. info: null,
  15. loginPopup:false
  16. }
  17. },
  18. actions: {
  19. async setToken(token: string) {
  20. this.token = token
  21. useCookie('token').value = token
  22. await this.getMemberInfo()
  23. },
  24. async getMemberInfo() {
  25. if (!this.token) return
  26. await getMemberInfo()
  27. .then((res: any) => {
  28. this.info = res.data
  29. // 购物车数量
  30. const cartStore = useCartStore();
  31. cartStore.getList()
  32. })
  33. .catch((err) => {
  34. this.logout()
  35. })
  36. },
  37. logout() {
  38. if (!this.token) return
  39. this.token = ''
  40. this.info = null
  41. useCookie('token').value = null
  42. const cartStore = useCartStore();
  43. cartStore.totalNum = 0
  44. logout().then().catch()
  45. },
  46. logOpen(){
  47. this.loginPopup = true
  48. },
  49. logClose(){
  50. this.loginPopup = false
  51. }
  52. }
  53. })
  54. export default useMemberStore