af-mobile-client-vue3 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +115 -115
- package/src/api/user/index.ts +45 -45
- package/src/components/data/XCellList/index.vue +8 -0
- package/src/components/data/XCellListFilter/index.vue +8 -0
- package/src/components/data/XFormItem/index.vue +1601 -1581
- package/src/router/guards.ts +131 -131
- package/src/router/routes.ts +1 -1
- package/src/services/api/Login.ts +6 -6
- package/src/services/v3Api.ts +170 -170
- package/src/stores/modules/user.ts +362 -362
- package/src/styles/login.less +109 -109
- package/src/types/platform.ts +194 -194
- package/src/utils/platform-auth.ts +150 -150
- package/src/utils/queryFormDefaultRangePicker.ts +57 -57
- package/src/utils/wechat.ts +297 -297
- package/src/views/component/XCellListView/index.vue +138 -107
- package/src/views/component/XFormGroupView/index.vue +82 -78
- package/src/views/component/XFormView/index.vue +46 -41
- package/src/views/external/index.vue +158 -158
- package/src/views/loading/AuthLoading.vue +395 -395
- package/src/views/user/register/index.vue +958 -958
- package/vite.config.ts +115 -115
- package/certs/127.0.0.1+2-key.pem +0 -28
- package/certs/127.0.0.1+2.pem +0 -27
- package/mock/modules/prose.mock.ts.timestamp-1758877157774.mjs +0 -53
- package/mock/modules/user.mock.ts.timestamp-1758877157774.mjs +0 -97
|
@@ -1,362 +1,362 @@
|
|
|
1
|
-
import type { UserType } from '@af-mobile-client-vue3/types/auth'
|
|
2
|
-
import type { RouteRecordRaw } from 'vue-router'
|
|
3
|
-
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
4
|
-
import router from '@af-mobile-client-vue3/router/index'
|
|
5
|
-
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
6
|
-
import {
|
|
7
|
-
ACCESS_TOKEN,
|
|
8
|
-
APP_LOGIN_KEY,
|
|
9
|
-
APP_PERMISSIONS_KEY,
|
|
10
|
-
APP_ROLES_KEY,
|
|
11
|
-
APP_ROUTES_KEY,
|
|
12
|
-
APP_WEB_CONFIG_KEY,
|
|
13
|
-
CURRENT_USER,
|
|
14
|
-
EXTERNAL_USER_INFO,
|
|
15
|
-
PLATFORM_TYPE,
|
|
16
|
-
USER_TYPE,
|
|
17
|
-
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
18
|
-
import { getPlatformRoutePrefix } from '@af-mobile-client-vue3/types/platform'
|
|
19
|
-
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
20
|
-
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
21
|
-
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
22
|
-
import { defineStore } from 'pinia'
|
|
23
|
-
import { ref } from 'vue'
|
|
24
|
-
|
|
25
|
-
const Storage = createStorage({ storage: localStorage })
|
|
26
|
-
|
|
27
|
-
export interface UserInfo {
|
|
28
|
-
id: number
|
|
29
|
-
username: string
|
|
30
|
-
password: string
|
|
31
|
-
name: string
|
|
32
|
-
avatar: string
|
|
33
|
-
functions: Array<any>
|
|
34
|
-
rolestr: string
|
|
35
|
-
f_operator: string
|
|
36
|
-
f_operatorid: string
|
|
37
|
-
f_orgid: string
|
|
38
|
-
f_orgname: string
|
|
39
|
-
f_depid: string
|
|
40
|
-
f_depname: string
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
interface IUserState {
|
|
44
|
-
token?: string
|
|
45
|
-
userInfo: any
|
|
46
|
-
lastUpdateTime: number
|
|
47
|
-
permissions: string[]
|
|
48
|
-
roles: [{ id: string, operation: string[] }]
|
|
49
|
-
routesConfig: Array<any>
|
|
50
|
-
single: Array<ExtraRouteRecordRaw>
|
|
51
|
-
login: any
|
|
52
|
-
tenantName: string
|
|
53
|
-
// 用户类型相关字段
|
|
54
|
-
userType?: UserType | null
|
|
55
|
-
platformType?: string | null
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
59
|
-
delete: boolean
|
|
60
|
-
fullPath: string
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
interface LoginParams {
|
|
64
|
-
username: string
|
|
65
|
-
password: string
|
|
66
|
-
resourceName: string
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
interface WxParams {
|
|
70
|
-
unifiedCode: string
|
|
71
|
-
tenantName: string
|
|
72
|
-
loginMode: string
|
|
73
|
-
resourceName: string
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
interface ExternalLoginParams {
|
|
77
|
-
platformType: string
|
|
78
|
-
platformUserId: string
|
|
79
|
-
tenantName: string
|
|
80
|
-
resourceName?: string
|
|
81
|
-
isMobile?: boolean
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export const useUserStore = defineStore('app-user', () => {
|
|
85
|
-
const userState = ref<IUserState>({
|
|
86
|
-
userInfo: null,
|
|
87
|
-
token: undefined,
|
|
88
|
-
lastUpdateTime: 0,
|
|
89
|
-
// 旧营收产品$login对象
|
|
90
|
-
login: undefined,
|
|
91
|
-
permissions: null,
|
|
92
|
-
roles: null,
|
|
93
|
-
routesConfig: null,
|
|
94
|
-
single: [],
|
|
95
|
-
tenantName: '',
|
|
96
|
-
// 用户类型相关字段
|
|
97
|
-
userType: null,
|
|
98
|
-
platformType: null,
|
|
99
|
-
} as IUserState)
|
|
100
|
-
const getUserInfo = () => {
|
|
101
|
-
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
102
|
-
}
|
|
103
|
-
const getLogin = () => {
|
|
104
|
-
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
105
|
-
}
|
|
106
|
-
const getPermissions = () => {
|
|
107
|
-
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
108
|
-
}
|
|
109
|
-
const getRoles = () => {
|
|
110
|
-
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
111
|
-
}
|
|
112
|
-
const getRoutesConfig = () => {
|
|
113
|
-
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
114
|
-
}
|
|
115
|
-
const getToken = () => {
|
|
116
|
-
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
117
|
-
}
|
|
118
|
-
const getLastUpdateTime = () => {
|
|
119
|
-
return userState.value.lastUpdateTime
|
|
120
|
-
}
|
|
121
|
-
const setToken = (token: string | undefined) => {
|
|
122
|
-
Storage.set(ACCESS_TOKEN, token)
|
|
123
|
-
}
|
|
124
|
-
const setUserInfo = (info: any | null) => {
|
|
125
|
-
userState.value.userInfo = info
|
|
126
|
-
userState.value.lastUpdateTime = new Date().getTime()
|
|
127
|
-
Storage.set(CURRENT_USER, info)
|
|
128
|
-
}
|
|
129
|
-
const setLogin = (login: any) => {
|
|
130
|
-
userState.value.login = login
|
|
131
|
-
Storage.set(APP_LOGIN_KEY, login)
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
const setTenantName = (tenantName: string) => {
|
|
135
|
-
userState.value.tenantName = tenantName
|
|
136
|
-
}
|
|
137
|
-
const getTenantName = () => {
|
|
138
|
-
return userState.value.tenantName
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// 用户类型相关方法
|
|
142
|
-
const getUserType = (): UserType | null => {
|
|
143
|
-
return userState.value.userType || Storage.get(USER_TYPE, null)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const setUserType = (userType: UserType | null) => {
|
|
147
|
-
userState.value.userType = userType
|
|
148
|
-
Storage.set(USER_TYPE, userType)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const isSystemUser = (): boolean => {
|
|
152
|
-
const userType = getUserType()
|
|
153
|
-
return userType === 'SYSTEM' || userType === null // null 默认为系统用户
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const isExternalUser = (): boolean => {
|
|
157
|
-
return getUserType() === 'EXTERNAL'
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// 平台类型相关方法
|
|
161
|
-
const getPlatformType = (): string | null => {
|
|
162
|
-
return userState.value.platformType || Storage.get(PLATFORM_TYPE, null)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const setPlatformType = (platformType: string | null) => {
|
|
166
|
-
userState.value.platformType = platformType
|
|
167
|
-
Storage.set(PLATFORM_TYPE, platformType)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const getDefaultRoute = (): string => {
|
|
171
|
-
if (isExternalUser()) {
|
|
172
|
-
const platformType = getPlatformType()
|
|
173
|
-
return getPlatformRoutePrefix(platformType)
|
|
174
|
-
}
|
|
175
|
-
return '/'
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
179
|
-
if (page.path && page.delete) {
|
|
180
|
-
// 删除
|
|
181
|
-
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
182
|
-
}
|
|
183
|
-
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
184
|
-
// 添加
|
|
185
|
-
userState.value.single.push(page)
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
const setPermissions = (permissions: []) => {
|
|
189
|
-
userState.value.permissions = permissions
|
|
190
|
-
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
191
|
-
}
|
|
192
|
-
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
193
|
-
userState.value.roles = roles
|
|
194
|
-
Storage.set(APP_ROLES_KEY, roles)
|
|
195
|
-
}
|
|
196
|
-
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
197
|
-
userState.value.routesConfig = routesConfig
|
|
198
|
-
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
199
|
-
}
|
|
200
|
-
const Login = async (params: LoginParams) => {
|
|
201
|
-
try {
|
|
202
|
-
let data: any
|
|
203
|
-
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
204
|
-
if (compatible === 'OA') {
|
|
205
|
-
data = await OALogin(params)
|
|
206
|
-
// save token
|
|
207
|
-
setToken(params.password)
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
data = await login(params)
|
|
211
|
-
// save token
|
|
212
|
-
setToken(data.access_token)
|
|
213
|
-
// 第三方教培系统鉴权兼容
|
|
214
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
215
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
216
|
-
}
|
|
217
|
-
return Promise.resolve(data)
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
return Promise.reject(error)
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
const loginUnified = async (params: WxParams) => {
|
|
224
|
-
try {
|
|
225
|
-
const data: any = await login(params)
|
|
226
|
-
setToken(data.access_token)
|
|
227
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
228
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
229
|
-
return Promise.resolve(data)
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
return Promise.reject(error)
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
const loginExternal = async (params: ExternalLoginParams) => {
|
|
237
|
-
try {
|
|
238
|
-
const data: any = await login(params)
|
|
239
|
-
|
|
240
|
-
// 设置Token
|
|
241
|
-
setToken(data.access_token)
|
|
242
|
-
|
|
243
|
-
// 加密存储登录票据
|
|
244
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
245
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
246
|
-
|
|
247
|
-
return Promise.resolve(data)
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
return Promise.reject(error)
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
const loginExternalMini = async (data: any) => {
|
|
254
|
-
try {
|
|
255
|
-
// 设置Token
|
|
256
|
-
setToken(data.access_token)
|
|
257
|
-
|
|
258
|
-
// 加密存储登录票据
|
|
259
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(data), '3KMKqvgwR8ULbR8Z')
|
|
260
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
261
|
-
|
|
262
|
-
return Promise.resolve(data)
|
|
263
|
-
}
|
|
264
|
-
catch (error) {
|
|
265
|
-
return Promise.reject(error)
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
const logout = async () => {
|
|
270
|
-
if (getToken()) {
|
|
271
|
-
try {
|
|
272
|
-
await doLogout()
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
console.error('注销Token失败')
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
setToken(undefined)
|
|
279
|
-
setUserInfo(null)
|
|
280
|
-
setUserType(null)
|
|
281
|
-
setPlatformType(null)
|
|
282
|
-
Storage.remove(CURRENT_USER)
|
|
283
|
-
Storage.remove(ACCESS_TOKEN)
|
|
284
|
-
Storage.remove(APP_LOGIN_KEY)
|
|
285
|
-
Storage.remove(APP_PERMISSIONS_KEY)
|
|
286
|
-
Storage.remove(APP_ROLES_KEY)
|
|
287
|
-
Storage.remove(APP_ROUTES_KEY)
|
|
288
|
-
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
289
|
-
Storage.remove(USER_TYPE)
|
|
290
|
-
Storage.remove(PLATFORM_TYPE)
|
|
291
|
-
Storage.remove(EXTERNAL_USER_INFO)
|
|
292
|
-
Storage.remove('LoginTicket')
|
|
293
|
-
await indexedDB.clearDB()
|
|
294
|
-
await useSettingStore().init()
|
|
295
|
-
try {
|
|
296
|
-
// 添加页面刷新
|
|
297
|
-
await router.replace('/login')
|
|
298
|
-
window.location.reload()
|
|
299
|
-
}
|
|
300
|
-
catch (e) {
|
|
301
|
-
console.error(e)
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
const registerClean = async () => {
|
|
305
|
-
setToken(undefined)
|
|
306
|
-
setUserInfo(null)
|
|
307
|
-
setUserType(null)
|
|
308
|
-
setPlatformType(null)
|
|
309
|
-
Storage.remove(CURRENT_USER)
|
|
310
|
-
Storage.remove(ACCESS_TOKEN)
|
|
311
|
-
Storage.remove(APP_LOGIN_KEY)
|
|
312
|
-
Storage.remove(APP_PERMISSIONS_KEY)
|
|
313
|
-
Storage.remove(APP_ROLES_KEY)
|
|
314
|
-
Storage.remove(APP_ROUTES_KEY)
|
|
315
|
-
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
316
|
-
Storage.remove(USER_TYPE)
|
|
317
|
-
Storage.remove(PLATFORM_TYPE)
|
|
318
|
-
Storage.remove(EXTERNAL_USER_INFO)
|
|
319
|
-
Storage.remove('LoginTicket')
|
|
320
|
-
await indexedDB.clearDB()
|
|
321
|
-
await useSettingStore().init()
|
|
322
|
-
}
|
|
323
|
-
const getCode = (tenantName: string) => {
|
|
324
|
-
window.location.replace(`api/af-system/user/getcode?state=${tenantName}`)
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
return {
|
|
328
|
-
Login,
|
|
329
|
-
loginUnified,
|
|
330
|
-
loginExternal,
|
|
331
|
-
loginExternalMini,
|
|
332
|
-
getToken,
|
|
333
|
-
getLastUpdateTime,
|
|
334
|
-
logout,
|
|
335
|
-
registerClean,
|
|
336
|
-
setUserInfo,
|
|
337
|
-
getUserInfo,
|
|
338
|
-
getLogin,
|
|
339
|
-
getPermissions,
|
|
340
|
-
getRoles,
|
|
341
|
-
getRoutesConfig,
|
|
342
|
-
setLogin,
|
|
343
|
-
setSingle,
|
|
344
|
-
setPermissions,
|
|
345
|
-
setRoles,
|
|
346
|
-
setRoutesConfig,
|
|
347
|
-
setTenantName,
|
|
348
|
-
getTenantName,
|
|
349
|
-
getCode,
|
|
350
|
-
// 用户类型相关方法
|
|
351
|
-
getUserType,
|
|
352
|
-
setUserType,
|
|
353
|
-
isSystemUser,
|
|
354
|
-
isExternalUser,
|
|
355
|
-
getDefaultRoute,
|
|
356
|
-
// 平台类型相关方法
|
|
357
|
-
getPlatformType,
|
|
358
|
-
setPlatformType,
|
|
359
|
-
}
|
|
360
|
-
})
|
|
361
|
-
|
|
362
|
-
export default useUserStore
|
|
1
|
+
import type { UserType } from '@af-mobile-client-vue3/types/auth'
|
|
2
|
+
import type { RouteRecordRaw } from 'vue-router'
|
|
3
|
+
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
4
|
+
import router from '@af-mobile-client-vue3/router/index'
|
|
5
|
+
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
6
|
+
import {
|
|
7
|
+
ACCESS_TOKEN,
|
|
8
|
+
APP_LOGIN_KEY,
|
|
9
|
+
APP_PERMISSIONS_KEY,
|
|
10
|
+
APP_ROLES_KEY,
|
|
11
|
+
APP_ROUTES_KEY,
|
|
12
|
+
APP_WEB_CONFIG_KEY,
|
|
13
|
+
CURRENT_USER,
|
|
14
|
+
EXTERNAL_USER_INFO,
|
|
15
|
+
PLATFORM_TYPE,
|
|
16
|
+
USER_TYPE,
|
|
17
|
+
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
18
|
+
import { getPlatformRoutePrefix } from '@af-mobile-client-vue3/types/platform'
|
|
19
|
+
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
20
|
+
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
21
|
+
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
22
|
+
import { defineStore } from 'pinia'
|
|
23
|
+
import { ref } from 'vue'
|
|
24
|
+
|
|
25
|
+
const Storage = createStorage({ storage: localStorage })
|
|
26
|
+
|
|
27
|
+
export interface UserInfo {
|
|
28
|
+
id: number
|
|
29
|
+
username: string
|
|
30
|
+
password: string
|
|
31
|
+
name: string
|
|
32
|
+
avatar: string
|
|
33
|
+
functions: Array<any>
|
|
34
|
+
rolestr: string
|
|
35
|
+
f_operator: string
|
|
36
|
+
f_operatorid: string
|
|
37
|
+
f_orgid: string
|
|
38
|
+
f_orgname: string
|
|
39
|
+
f_depid: string
|
|
40
|
+
f_depname: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface IUserState {
|
|
44
|
+
token?: string
|
|
45
|
+
userInfo: any
|
|
46
|
+
lastUpdateTime: number
|
|
47
|
+
permissions: string[]
|
|
48
|
+
roles: [{ id: string, operation: string[] }]
|
|
49
|
+
routesConfig: Array<any>
|
|
50
|
+
single: Array<ExtraRouteRecordRaw>
|
|
51
|
+
login: any
|
|
52
|
+
tenantName: string
|
|
53
|
+
// 用户类型相关字段
|
|
54
|
+
userType?: UserType | null
|
|
55
|
+
platformType?: string | null
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
59
|
+
delete: boolean
|
|
60
|
+
fullPath: string
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
interface LoginParams {
|
|
64
|
+
username: string
|
|
65
|
+
password: string
|
|
66
|
+
resourceName: string
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
interface WxParams {
|
|
70
|
+
unifiedCode: string
|
|
71
|
+
tenantName: string
|
|
72
|
+
loginMode: string
|
|
73
|
+
resourceName: string
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
interface ExternalLoginParams {
|
|
77
|
+
platformType: string
|
|
78
|
+
platformUserId: string
|
|
79
|
+
tenantName: string
|
|
80
|
+
resourceName?: string
|
|
81
|
+
isMobile?: boolean
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export const useUserStore = defineStore('app-user', () => {
|
|
85
|
+
const userState = ref<IUserState>({
|
|
86
|
+
userInfo: null,
|
|
87
|
+
token: undefined,
|
|
88
|
+
lastUpdateTime: 0,
|
|
89
|
+
// 旧营收产品$login对象
|
|
90
|
+
login: undefined,
|
|
91
|
+
permissions: null,
|
|
92
|
+
roles: null,
|
|
93
|
+
routesConfig: null,
|
|
94
|
+
single: [],
|
|
95
|
+
tenantName: '',
|
|
96
|
+
// 用户类型相关字段
|
|
97
|
+
userType: null,
|
|
98
|
+
platformType: null,
|
|
99
|
+
} as IUserState)
|
|
100
|
+
const getUserInfo = () => {
|
|
101
|
+
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
102
|
+
}
|
|
103
|
+
const getLogin = () => {
|
|
104
|
+
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
105
|
+
}
|
|
106
|
+
const getPermissions = () => {
|
|
107
|
+
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
108
|
+
}
|
|
109
|
+
const getRoles = () => {
|
|
110
|
+
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
111
|
+
}
|
|
112
|
+
const getRoutesConfig = () => {
|
|
113
|
+
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
114
|
+
}
|
|
115
|
+
const getToken = () => {
|
|
116
|
+
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
117
|
+
}
|
|
118
|
+
const getLastUpdateTime = () => {
|
|
119
|
+
return userState.value.lastUpdateTime
|
|
120
|
+
}
|
|
121
|
+
const setToken = (token: string | undefined) => {
|
|
122
|
+
Storage.set(ACCESS_TOKEN, token)
|
|
123
|
+
}
|
|
124
|
+
const setUserInfo = (info: any | null) => {
|
|
125
|
+
userState.value.userInfo = info
|
|
126
|
+
userState.value.lastUpdateTime = new Date().getTime()
|
|
127
|
+
Storage.set(CURRENT_USER, info)
|
|
128
|
+
}
|
|
129
|
+
const setLogin = (login: any) => {
|
|
130
|
+
userState.value.login = login
|
|
131
|
+
Storage.set(APP_LOGIN_KEY, login)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const setTenantName = (tenantName: string) => {
|
|
135
|
+
userState.value.tenantName = tenantName
|
|
136
|
+
}
|
|
137
|
+
const getTenantName = () => {
|
|
138
|
+
return userState.value.tenantName
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// 用户类型相关方法
|
|
142
|
+
const getUserType = (): UserType | null => {
|
|
143
|
+
return userState.value.userType || Storage.get(USER_TYPE, null)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const setUserType = (userType: UserType | null) => {
|
|
147
|
+
userState.value.userType = userType
|
|
148
|
+
Storage.set(USER_TYPE, userType)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const isSystemUser = (): boolean => {
|
|
152
|
+
const userType = getUserType()
|
|
153
|
+
return userType === 'SYSTEM' || userType === null // null 默认为系统用户
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const isExternalUser = (): boolean => {
|
|
157
|
+
return getUserType() === 'EXTERNAL'
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 平台类型相关方法
|
|
161
|
+
const getPlatformType = (): string | null => {
|
|
162
|
+
return userState.value.platformType || Storage.get(PLATFORM_TYPE, null)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const setPlatformType = (platformType: string | null) => {
|
|
166
|
+
userState.value.platformType = platformType
|
|
167
|
+
Storage.set(PLATFORM_TYPE, platformType)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const getDefaultRoute = (): string => {
|
|
171
|
+
if (isExternalUser()) {
|
|
172
|
+
const platformType = getPlatformType()
|
|
173
|
+
return getPlatformRoutePrefix(platformType)
|
|
174
|
+
}
|
|
175
|
+
return '/'
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
179
|
+
if (page.path && page.delete) {
|
|
180
|
+
// 删除
|
|
181
|
+
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
182
|
+
}
|
|
183
|
+
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
184
|
+
// 添加
|
|
185
|
+
userState.value.single.push(page)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const setPermissions = (permissions: []) => {
|
|
189
|
+
userState.value.permissions = permissions
|
|
190
|
+
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
191
|
+
}
|
|
192
|
+
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
193
|
+
userState.value.roles = roles
|
|
194
|
+
Storage.set(APP_ROLES_KEY, roles)
|
|
195
|
+
}
|
|
196
|
+
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
197
|
+
userState.value.routesConfig = routesConfig
|
|
198
|
+
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
199
|
+
}
|
|
200
|
+
const Login = async (params: LoginParams) => {
|
|
201
|
+
try {
|
|
202
|
+
let data: any
|
|
203
|
+
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
204
|
+
if (compatible === 'OA') {
|
|
205
|
+
data = await OALogin(params)
|
|
206
|
+
// save token
|
|
207
|
+
setToken(params.password)
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
data = await login(params)
|
|
211
|
+
// save token
|
|
212
|
+
setToken(data.access_token)
|
|
213
|
+
// 第三方教培系统鉴权兼容
|
|
214
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
215
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
216
|
+
}
|
|
217
|
+
return Promise.resolve(data)
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
return Promise.reject(error)
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const loginUnified = async (params: WxParams) => {
|
|
224
|
+
try {
|
|
225
|
+
const data: any = await login(params)
|
|
226
|
+
setToken(data.access_token)
|
|
227
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
228
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
229
|
+
return Promise.resolve(data)
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
return Promise.reject(error)
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const loginExternal = async (params: ExternalLoginParams) => {
|
|
237
|
+
try {
|
|
238
|
+
const data: any = await login(params)
|
|
239
|
+
|
|
240
|
+
// 设置Token
|
|
241
|
+
setToken(data.access_token)
|
|
242
|
+
|
|
243
|
+
// 加密存储登录票据
|
|
244
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
245
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
246
|
+
|
|
247
|
+
return Promise.resolve(data)
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
return Promise.reject(error)
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const loginExternalMini = async (data: any) => {
|
|
254
|
+
try {
|
|
255
|
+
// 设置Token
|
|
256
|
+
setToken(data.access_token)
|
|
257
|
+
|
|
258
|
+
// 加密存储登录票据
|
|
259
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(data), '3KMKqvgwR8ULbR8Z')
|
|
260
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
261
|
+
|
|
262
|
+
return Promise.resolve(data)
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
return Promise.reject(error)
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const logout = async () => {
|
|
270
|
+
if (getToken()) {
|
|
271
|
+
try {
|
|
272
|
+
await doLogout()
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
console.error('注销Token失败')
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
setToken(undefined)
|
|
279
|
+
setUserInfo(null)
|
|
280
|
+
setUserType(null)
|
|
281
|
+
setPlatformType(null)
|
|
282
|
+
Storage.remove(CURRENT_USER)
|
|
283
|
+
Storage.remove(ACCESS_TOKEN)
|
|
284
|
+
Storage.remove(APP_LOGIN_KEY)
|
|
285
|
+
Storage.remove(APP_PERMISSIONS_KEY)
|
|
286
|
+
Storage.remove(APP_ROLES_KEY)
|
|
287
|
+
Storage.remove(APP_ROUTES_KEY)
|
|
288
|
+
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
289
|
+
Storage.remove(USER_TYPE)
|
|
290
|
+
Storage.remove(PLATFORM_TYPE)
|
|
291
|
+
Storage.remove(EXTERNAL_USER_INFO)
|
|
292
|
+
Storage.remove('LoginTicket')
|
|
293
|
+
await indexedDB.clearDB()
|
|
294
|
+
await useSettingStore().init()
|
|
295
|
+
try {
|
|
296
|
+
// 添加页面刷新
|
|
297
|
+
await router.replace('/login')
|
|
298
|
+
window.location.reload()
|
|
299
|
+
}
|
|
300
|
+
catch (e) {
|
|
301
|
+
console.error(e)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const registerClean = async () => {
|
|
305
|
+
setToken(undefined)
|
|
306
|
+
setUserInfo(null)
|
|
307
|
+
setUserType(null)
|
|
308
|
+
setPlatformType(null)
|
|
309
|
+
Storage.remove(CURRENT_USER)
|
|
310
|
+
Storage.remove(ACCESS_TOKEN)
|
|
311
|
+
Storage.remove(APP_LOGIN_KEY)
|
|
312
|
+
Storage.remove(APP_PERMISSIONS_KEY)
|
|
313
|
+
Storage.remove(APP_ROLES_KEY)
|
|
314
|
+
Storage.remove(APP_ROUTES_KEY)
|
|
315
|
+
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
316
|
+
Storage.remove(USER_TYPE)
|
|
317
|
+
Storage.remove(PLATFORM_TYPE)
|
|
318
|
+
Storage.remove(EXTERNAL_USER_INFO)
|
|
319
|
+
Storage.remove('LoginTicket')
|
|
320
|
+
await indexedDB.clearDB()
|
|
321
|
+
await useSettingStore().init()
|
|
322
|
+
}
|
|
323
|
+
const getCode = (tenantName: string) => {
|
|
324
|
+
window.location.replace(`api/af-system/user/getcode?state=${tenantName}`)
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
return {
|
|
328
|
+
Login,
|
|
329
|
+
loginUnified,
|
|
330
|
+
loginExternal,
|
|
331
|
+
loginExternalMini,
|
|
332
|
+
getToken,
|
|
333
|
+
getLastUpdateTime,
|
|
334
|
+
logout,
|
|
335
|
+
registerClean,
|
|
336
|
+
setUserInfo,
|
|
337
|
+
getUserInfo,
|
|
338
|
+
getLogin,
|
|
339
|
+
getPermissions,
|
|
340
|
+
getRoles,
|
|
341
|
+
getRoutesConfig,
|
|
342
|
+
setLogin,
|
|
343
|
+
setSingle,
|
|
344
|
+
setPermissions,
|
|
345
|
+
setRoles,
|
|
346
|
+
setRoutesConfig,
|
|
347
|
+
setTenantName,
|
|
348
|
+
getTenantName,
|
|
349
|
+
getCode,
|
|
350
|
+
// 用户类型相关方法
|
|
351
|
+
getUserType,
|
|
352
|
+
setUserType,
|
|
353
|
+
isSystemUser,
|
|
354
|
+
isExternalUser,
|
|
355
|
+
getDefaultRoute,
|
|
356
|
+
// 平台类型相关方法
|
|
357
|
+
getPlatformType,
|
|
358
|
+
setPlatformType,
|
|
359
|
+
}
|
|
360
|
+
})
|
|
361
|
+
|
|
362
|
+
export default useUserStore
|