123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // stores/user.js
- import { defineStore } from 'pinia'
- import { ref } from 'vue'
- import USER from '@/api/user.js'
- export const useUserStore = defineStore('user', () => {
- const token = ref(uni.getStorageSync('token') || null)
- const userInfo = ref(uni.getStorageSync('userInfo') || null)
- const isLogging = ref(false)
- const login = async () => {
- // if (isLogging.value) {
- // throw new Error('登录正在进行中')
- // }
- isLogging.value = true
-
- try {
- let loginData = null
- // #ifdef MP-WEIXIN
- loginData = await new Promise((resolve, reject) => {
- uni.login({
- success: async ({ code }) => {
- try {
- const { data } = await USER.fetchLogin({ code })
- resolve(data)
- } catch (error) {
- reject(error)
- }
- },
- fail: reject
- })
- })
- // #endif
- // #ifdef H5
- const { data } = await USER.userInfo()
- loginData = data
- // #endif
- uni.setStorageSync('userInfo', loginData);
- if (loginData) {
- const { token: newToken, ...userData } = loginData
-
- if (newToken) {
- token.value = newToken
- uni.setStorageSync('token', newToken)
- }
-
- userInfo.value = userData
- // uni.setStorageSync('userInfo', userData)
-
- return loginData
- } else {
- throw new Error('登录失败:未获取到数据')
- }
- } catch (error) {
- token.value = null
- userInfo.value = null
- uni.removeStorageSync('token')
- uni.removeStorageSync('userInfo')
- throw error
- } finally {
- isLogging.value = false
- }
- }
- const getTokenSafe = async () => {
- if (token.value) {
- return token.value
- }
-
- try {
- const result = await login()
- return result.token || token.value
- } catch (error) {
- console.error('自动登录失败', error)
- throw error
- }
- }
- return {
- token,
- userInfo,
- isLogging,
- login,
- getTokenSafe
- }
- })
|