user.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /** @format */
  2. import { ref } from 'vue'
  3. import { defineStore } from 'pinia'
  4. import { useCommonStore } from './common'
  5. import { loginApi, logoutApi } from '~/api/model/user'
  6. interface LoginRequestData {
  7. email: string
  8. password: string
  9. type: 'google' | 'email'
  10. }
  11. export const useUserStore = defineStore(
  12. 'user',
  13. () => {
  14. const userInfo = shallowRef<any>()
  15. const token = shallowRef<any>()
  16. const isLogin = computed(() => !!token.value)
  17. const avatar = computed(() => userInfo.value?.avatar)
  18. const nickname = computed(() => userInfo.value?.email)
  19. // 是否提交过的信息
  20. const isCompletedInfo = computed(() => {
  21. return !!(+userInfo.value?.infoState)
  22. })
  23. /** 登录操作 */
  24. const login = async (params: LoginRequestData) => {
  25. try {
  26. const data: any = await loginApi(params)
  27. const { token: userToken, userInfo: userDataInfo } = data
  28. userInfo.value = userDataInfo
  29. token.value = userToken
  30. ElMessage({
  31. message: 'Login success',
  32. type: 'success',
  33. plain: true,
  34. })
  35. const commonStore = useCommonStore()
  36. commonStore.pushAccount({ email: userDataInfo.email, name: userDataInfo.annualPurchaseAmount, type: params.type })
  37. }
  38. catch (error) {
  39. return Promise.reject(error)
  40. }
  41. }
  42. const updateUserInfo = (data: any) => {
  43. userInfo.value = { ...userInfo.value, ...data }
  44. }
  45. /** 退出登录操作 */
  46. const logout = async () => {
  47. try {
  48. if (token.value) {
  49. await logoutApi()
  50. document.cookie
  51. = 'user=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/'
  52. ElMessage({
  53. message: 'Exit successful',
  54. type: 'success',
  55. plain: true,
  56. })
  57. }
  58. }
  59. finally {
  60. token.value = null
  61. userInfo.value = undefined
  62. const router = useRouter()
  63. router.push('/')
  64. }
  65. }
  66. return { userInfo, isCompletedInfo, updateUserInfo, token, login, logout, isLogin, avatar, nickname }
  67. },
  68. {
  69. persist: true,
  70. },
  71. )