智慧园区前端大屏
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// src/stores/useUserStore.js
import {
  loginByUsername,
  logout
} from '@/api/user'
import { defineStore } from 'pinia'
import md5 from 'js-md5'
import {
  ElMessage
} from 'element-plus'
 
export const useLogin = defineStore('login', {
  // 存储状态的地方,相当于 Vuex 的 state
  state: () => ({
    token: '',
    refreshToken: '',
    tenantId: '',
    userInfo: ''
  }),
 
  // 相当于 Vuex 的 getters,用于计算状态
  getters: {
 
  },
 
  // 相当于 Vuex 的 mutations 和 actions,用于同步或异步地修改状态
  actions: {
    //根据用户名登录
    LoginByUsername (userInfo = {}) {
      return new Promise((resolve, reject) => {
        loginByUsername(
          userInfo.tenantId,
          userInfo.deptId,
          userInfo.roleId,
          userInfo.username,
          md5(userInfo.password),
          userInfo.type,
          userInfo.key,
          userInfo.code
        )
          .then(res => {
            const data = res.data
            if (data.error_description) {
              ElMessage({
                message: data.error_description,
                type: 'error',
              })
            } else {
              this.SET_TOKEN(data.access_token)
              this.SET_REFRESH_TOKEN(data.refresh_token)
              this.SET_TENANT_ID(data.tenant_id)
              this.SET_USER_INFO(data)
            }
            resolve()
          })
          .catch(err => {
            reject(err)
          })
      })
    },
 
    SET_TOKEN (token) {
      this.token = token
    },
 
    SET_REFRESH_TOKEN (refreshToken) {
      this.refreshToken = refreshToken
    },
 
    SET_TENANT_ID (tenantId) {
      this.tenantId = tenantId
    },
 
    SET_USER_INFO (userInfo) {
      this.userInfo = userInfo
    },
 
    // 登出
    LogOut () {
      return new Promise((resolve, reject) => {
        logout()
          .then(() => {
            this.SET_TOKEN('')
            this.SET_REFRESH_TOKEN('')
            this.SET_TENANT_ID('')
            this.SET_USER_INFO('')
            resolve()
          })
          .catch((error) => {
            reject(error)
          })
      })
    },
  },
 
  persist: {
    enabled: true,
    strategies: [
      {
        key: 'token',
        paths: ['token'],
        storage: localStorage,
      },
      {
        key: 'refreshToken',
        paths: ['refreshToken'],
        storage: localStorage,
      },
      {
        key: 'tenantId',
        paths: ['tenantId'],
        storage: localStorage,
      },
      {
        key: 'userInfo',
        paths: ['userInfo'],
        storage: localStorage,
      },
    ]
  }
})