shuishen
2025-09-29 b9a26af5b08d3d92a6c38fd90e023bc4706f19eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 * @Author       : yuan
 * @Date         : 2025-09-28 09:31:16
 * @LastEditors  : yuan
 * @LastEditTime : 2025-09-28 10:02:26
 * @FilePath     : \src\store\modules\user\index.ts
 * @Description  : 
 * Copyright 2025 OBKoro1, All Rights Reserved. 
 * 2025-09-28 09:31:16
 */
import { defineStore } from 'pinia'
import { UserApi } from '@/api'
import { clearToken, setToken } from '@/utils/auth'
 
const useUserStore = defineStore('user', {
  state: () => ({
    user_id: '',
    user_name: '江阳小道',
    avatar: '',
    token: ''
  }),
  getters: {
    userInfo (state) {
      return { ...state }
    }
  },
  actions: {
    // 设置用户的信息
    setInfo (partial) {
      this.$patch(partial)
    },
    // 重置用户信息
    resetInfo () {
      this.$reset()
    },
    // 获取用户信息
    async info () {
      const result = await UserApi.profile()
      this.setInfo(result)
    },
    // 异步登录并存储token
    login (loginForm) {
      return new Promise((resolve, reject) => {
        UserApi.login(loginForm)
          .then((res) => {
            const token = res.token
            if (token) {
              setToken(token)
            }
            resolve(res)
          })
          .catch((error) => {
            reject(error)
          })
      })
    },
    // Logout
    async logout () {
      await UserApi.logout()
      this.resetInfo()
      clearToken()
    },
    // 小程序授权登录
    authLogin (provider = 'weixin') {
      return new Promise((resolve, reject) => {
        uni.login({
          provider,
          success: async (result) => {
            if (result.code) {
              const res = await UserApi.loginByCode({ code: result.code })
              resolve(res)
            } else {
              reject(new Error(result.errMsg))
            }
          },
          fail: (err) => {
            console.error(`login error: ${err}`)
            reject(err)
          }
        })
      })
    }
  },
  persist: true
})
 
export default useUserStore