user.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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.firstName} ${userDataInfo.lastName}`, 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. window.location.reload()
  58. }
  59. }
  60. finally {
  61. token.value = null
  62. userInfo.value = undefined
  63. const router = useRouter()
  64. router.push('/')
  65. }
  66. }
  67. return { userInfo, isCompletedInfo, updateUserInfo, token, login, logout, isLogin, avatar, nickname }
  68. },
  69. {
  70. persist: true,
  71. },
  72. )