af-mobile-client-vue3 1.2.13 → 1.2.15
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/certs/127.0.0.1+2-key.pem +28 -0
- package/certs/127.0.0.1+2.pem +27 -0
- package/package.json +113 -113
- package/src/api/user/index.ts +40 -40
- package/src/components/data/XCellList/index.vue +1000 -1000
- package/src/components/data/XForm/index.vue +138 -12
- package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
- package/src/components/data/XReportGrid/print.js +184 -184
- package/src/services/api/Login.ts +6 -6
- package/src/stores/modules/setting.ts +62 -58
- package/src/stores/modules/user.ts +235 -231
- package/src/styles/login.less +112 -95
- package/src/views/component/XCellListView/index.vue +91 -37
- package/src/views/user/login/LoginForm.vue +308 -250
- package/vite.config.ts +118 -108
|
@@ -1,58 +1,62 @@
|
|
|
1
|
-
import { getConfigByNameAsync } from '@af-mobile-client-vue3/services/api/common'
|
|
2
|
-
import { APP_WEB_CONFIG_KEY } from '@af-mobile-client-vue3/stores/mutation-type'
|
|
3
|
-
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
4
|
-
import { defineStore } from 'pinia'
|
|
5
|
-
import { ref } from 'vue'
|
|
6
|
-
|
|
7
|
-
export interface WebConfig {
|
|
8
|
-
systemName: string
|
|
9
|
-
routerName: string
|
|
10
|
-
systemDesc: string
|
|
11
|
-
homePage: string
|
|
12
|
-
defaultAvatarUrl: string
|
|
13
|
-
wechatLogin: boolean
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
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
|
-
|
|
1
|
+
import { getConfigByNameAsync } from '@af-mobile-client-vue3/services/api/common'
|
|
2
|
+
import { APP_WEB_CONFIG_KEY } from '@af-mobile-client-vue3/stores/mutation-type'
|
|
3
|
+
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
4
|
+
import { defineStore } from 'pinia'
|
|
5
|
+
import { ref } from 'vue'
|
|
6
|
+
|
|
7
|
+
export interface WebConfig {
|
|
8
|
+
systemName: string
|
|
9
|
+
routerName: string
|
|
10
|
+
systemDesc: string
|
|
11
|
+
homePage: string
|
|
12
|
+
defaultAvatarUrl: string
|
|
13
|
+
wechatLogin: boolean
|
|
14
|
+
wxLoginAge: boolean
|
|
15
|
+
wxAutoLogin: string
|
|
16
|
+
tenantName: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// 存放 webConfig 中的 setting 配置
|
|
20
|
+
export const useSettingStore = defineStore('setting', () => {
|
|
21
|
+
const setting = ref<WebConfig>(undefined)
|
|
22
|
+
const isInitialized = ref(false)
|
|
23
|
+
|
|
24
|
+
const setSetting = (newSetting: WebConfig) => {
|
|
25
|
+
setting.value = newSetting
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const getSetting = () => {
|
|
29
|
+
return setting.value
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// 将 init 作为 store 的方法导出
|
|
33
|
+
const init = async () => {
|
|
34
|
+
if (isInitialized.value)
|
|
35
|
+
return
|
|
36
|
+
|
|
37
|
+
const useStore = createStorage()
|
|
38
|
+
const catchWebConfig = useStore.get(APP_WEB_CONFIG_KEY)
|
|
39
|
+
if (catchWebConfig?.setting) {
|
|
40
|
+
setSetting(catchWebConfig?.setting)
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const res = await getConfigByNameAsync('webMobileConfig')
|
|
44
|
+
if (res.setting) {
|
|
45
|
+
useStore.set(APP_WEB_CONFIG_KEY, res)
|
|
46
|
+
console.log('res.setting', res.setting)
|
|
47
|
+
setSetting(res.setting)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
isInitialized.value = true
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
setSetting,
|
|
56
|
+
getSetting,
|
|
57
|
+
init, // 导出 init 方法
|
|
58
|
+
isInitialized,
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
export default useSettingStore
|
|
@@ -1,231 +1,235 @@
|
|
|
1
|
-
import type { RouteRecordRaw } from 'vue-router'
|
|
2
|
-
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
3
|
-
import router from '@af-mobile-client-vue3/router/index'
|
|
4
|
-
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
5
|
-
import {
|
|
6
|
-
ACCESS_TOKEN,
|
|
7
|
-
APP_LOGIN_KEY,
|
|
8
|
-
APP_PERMISSIONS_KEY,
|
|
9
|
-
APP_ROLES_KEY,
|
|
10
|
-
APP_ROUTES_KEY,
|
|
11
|
-
APP_WEB_CONFIG_KEY,
|
|
12
|
-
CURRENT_USER,
|
|
13
|
-
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
14
|
-
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
15
|
-
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
16
|
-
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
17
|
-
import { defineStore } from 'pinia'
|
|
18
|
-
import { ref } from 'vue'
|
|
19
|
-
|
|
20
|
-
const Storage = createStorage({ storage: localStorage })
|
|
21
|
-
|
|
22
|
-
export interface UserInfo {
|
|
23
|
-
id: number
|
|
24
|
-
username: string
|
|
25
|
-
password: string
|
|
26
|
-
name: string
|
|
27
|
-
avatar: string
|
|
28
|
-
functions: Array<any>
|
|
29
|
-
rolestr: string
|
|
30
|
-
f_operator: string
|
|
31
|
-
f_operatorid: string
|
|
32
|
-
f_orgid: string
|
|
33
|
-
f_orgname: string
|
|
34
|
-
f_depid: string
|
|
35
|
-
f_depname: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
interface IUserState {
|
|
39
|
-
token?: string
|
|
40
|
-
userInfo: UserInfo
|
|
41
|
-
lastUpdateTime: number
|
|
42
|
-
permissions: string[]
|
|
43
|
-
roles: [{ id: string, operation: string[] }]
|
|
44
|
-
routesConfig: Array<any>
|
|
45
|
-
single: Array<ExtraRouteRecordRaw>
|
|
46
|
-
login: any
|
|
47
|
-
tenantName: string
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
51
|
-
delete: boolean
|
|
52
|
-
fullPath: string
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
interface LoginParams {
|
|
56
|
-
username: string
|
|
57
|
-
password: string
|
|
58
|
-
resourceName: string
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
interface WxParams {
|
|
62
|
-
unifiedCode: string
|
|
63
|
-
tenantName: string
|
|
64
|
-
loginMode: string
|
|
65
|
-
resourceName: string
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export const useUserStore = defineStore('app-user', () => {
|
|
69
|
-
const userState = ref<IUserState>({
|
|
70
|
-
userInfo: null,
|
|
71
|
-
token: undefined,
|
|
72
|
-
lastUpdateTime: 0,
|
|
73
|
-
// 旧营收产品$login对象
|
|
74
|
-
login: undefined,
|
|
75
|
-
permissions: null,
|
|
76
|
-
roles: null,
|
|
77
|
-
routesConfig: null,
|
|
78
|
-
single: [],
|
|
79
|
-
tenantName: '',
|
|
80
|
-
} as IUserState)
|
|
81
|
-
const getUserInfo = () => {
|
|
82
|
-
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
83
|
-
}
|
|
84
|
-
const getLogin = () => {
|
|
85
|
-
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
86
|
-
}
|
|
87
|
-
const getPermissions = () => {
|
|
88
|
-
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
89
|
-
}
|
|
90
|
-
const getRoles = () => {
|
|
91
|
-
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
92
|
-
}
|
|
93
|
-
const getRoutesConfig = () => {
|
|
94
|
-
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
95
|
-
}
|
|
96
|
-
const getToken = () => {
|
|
97
|
-
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
98
|
-
}
|
|
99
|
-
const getLastUpdateTime = () => {
|
|
100
|
-
return userState.value.lastUpdateTime
|
|
101
|
-
}
|
|
102
|
-
const setToken = (token: string | undefined) => {
|
|
103
|
-
Storage.set(ACCESS_TOKEN, token)
|
|
104
|
-
}
|
|
105
|
-
const setUserInfo = (info: UserInfo | null) => {
|
|
106
|
-
userState.value.userInfo = info
|
|
107
|
-
userState.value.lastUpdateTime = new Date().getTime()
|
|
108
|
-
Storage.set(CURRENT_USER, info)
|
|
109
|
-
}
|
|
110
|
-
const setLogin = (login) => {
|
|
111
|
-
userState.value.login = login
|
|
112
|
-
Storage.set(APP_LOGIN_KEY, login)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const setTenantName = (setTenantName) => {
|
|
116
|
-
userState.value.tenantName = setTenantName
|
|
117
|
-
}
|
|
118
|
-
const getTenantName = () => {
|
|
119
|
-
return userState.value.tenantName
|
|
120
|
-
}
|
|
121
|
-
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
122
|
-
if (page.path && page.delete) {
|
|
123
|
-
// 删除
|
|
124
|
-
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
125
|
-
}
|
|
126
|
-
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
127
|
-
// 添加
|
|
128
|
-
userState.value.single.push(page)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
const setPermissions = (permissions: []) => {
|
|
132
|
-
userState.value.permissions = permissions
|
|
133
|
-
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
134
|
-
}
|
|
135
|
-
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
136
|
-
userState.value.roles = roles
|
|
137
|
-
Storage.set(APP_ROLES_KEY, roles)
|
|
138
|
-
}
|
|
139
|
-
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
140
|
-
userState.value.routesConfig = routesConfig
|
|
141
|
-
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
142
|
-
}
|
|
143
|
-
const Login = async (params: LoginParams) => {
|
|
144
|
-
try {
|
|
145
|
-
let data: any
|
|
146
|
-
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
147
|
-
if (compatible === 'OA') {
|
|
148
|
-
data = await OALogin(params)
|
|
149
|
-
// save token
|
|
150
|
-
setToken(params.password)
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
data = await login(params)
|
|
154
|
-
// save token
|
|
155
|
-
setToken(data.access_token)
|
|
156
|
-
// 第三方教培系统鉴权兼容
|
|
157
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
158
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
159
|
-
}
|
|
160
|
-
return Promise.resolve(data)
|
|
161
|
-
}
|
|
162
|
-
catch (error) {
|
|
163
|
-
return Promise.reject(error)
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const loginUnified = async (params: WxParams) => {
|
|
167
|
-
try {
|
|
168
|
-
const data: any = await login(params)
|
|
169
|
-
setToken(data.access_token)
|
|
170
|
-
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
171
|
-
Storage.set('LoginTicket', LoginTicket)
|
|
172
|
-
return Promise.resolve(data)
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
return Promise.reject(error)
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const logout = async () => {
|
|
179
|
-
if (getToken) {
|
|
180
|
-
try {
|
|
181
|
-
await doLogout()
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
console.error('注销Token失败')
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
setToken(undefined)
|
|
188
|
-
setUserInfo(null)
|
|
189
|
-
Storage.remove(CURRENT_USER)
|
|
190
|
-
Storage.remove(ACCESS_TOKEN)
|
|
191
|
-
Storage.remove(APP_LOGIN_KEY)
|
|
192
|
-
Storage.remove(APP_PERMISSIONS_KEY)
|
|
193
|
-
Storage.remove(APP_ROLES_KEY)
|
|
194
|
-
Storage.remove(APP_ROUTES_KEY)
|
|
195
|
-
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
196
|
-
Storage.remove('LoginTicket')
|
|
197
|
-
await indexedDB.clearDB()
|
|
198
|
-
await useSettingStore().init()
|
|
199
|
-
try {
|
|
200
|
-
// 添加页面刷新
|
|
201
|
-
await router.replace('/login')
|
|
202
|
-
window.location.reload()
|
|
203
|
-
}
|
|
204
|
-
catch (e) {
|
|
205
|
-
console.error(e)
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
1
|
+
import type { RouteRecordRaw } from 'vue-router'
|
|
2
|
+
import { doLogout, login, OALogin } from '@af-mobile-client-vue3/api/user'
|
|
3
|
+
import router from '@af-mobile-client-vue3/router/index'
|
|
4
|
+
import { useSettingStore } from '@af-mobile-client-vue3/stores/modules/setting'
|
|
5
|
+
import {
|
|
6
|
+
ACCESS_TOKEN,
|
|
7
|
+
APP_LOGIN_KEY,
|
|
8
|
+
APP_PERMISSIONS_KEY,
|
|
9
|
+
APP_ROLES_KEY,
|
|
10
|
+
APP_ROUTES_KEY,
|
|
11
|
+
APP_WEB_CONFIG_KEY,
|
|
12
|
+
CURRENT_USER,
|
|
13
|
+
} from '@af-mobile-client-vue3/stores/mutation-type'
|
|
14
|
+
import crypto from '@af-mobile-client-vue3/utils/crypto'
|
|
15
|
+
import { indexedDB } from '@af-mobile-client-vue3/utils/indexedDB'
|
|
16
|
+
import { createStorage } from '@af-mobile-client-vue3/utils/Storage'
|
|
17
|
+
import { defineStore } from 'pinia'
|
|
18
|
+
import { ref } from 'vue'
|
|
19
|
+
|
|
20
|
+
const Storage = createStorage({ storage: localStorage })
|
|
21
|
+
|
|
22
|
+
export interface UserInfo {
|
|
23
|
+
id: number
|
|
24
|
+
username: string
|
|
25
|
+
password: string
|
|
26
|
+
name: string
|
|
27
|
+
avatar: string
|
|
28
|
+
functions: Array<any>
|
|
29
|
+
rolestr: string
|
|
30
|
+
f_operator: string
|
|
31
|
+
f_operatorid: string
|
|
32
|
+
f_orgid: string
|
|
33
|
+
f_orgname: string
|
|
34
|
+
f_depid: string
|
|
35
|
+
f_depname: string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface IUserState {
|
|
39
|
+
token?: string
|
|
40
|
+
userInfo: UserInfo
|
|
41
|
+
lastUpdateTime: number
|
|
42
|
+
permissions: string[]
|
|
43
|
+
roles: [{ id: string, operation: string[] }]
|
|
44
|
+
routesConfig: Array<any>
|
|
45
|
+
single: Array<ExtraRouteRecordRaw>
|
|
46
|
+
login: any
|
|
47
|
+
tenantName: string
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type ExtraRouteRecordRaw = RouteRecordRaw & {
|
|
51
|
+
delete: boolean
|
|
52
|
+
fullPath: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface LoginParams {
|
|
56
|
+
username: string
|
|
57
|
+
password: string
|
|
58
|
+
resourceName: string
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface WxParams {
|
|
62
|
+
unifiedCode: string
|
|
63
|
+
tenantName: string
|
|
64
|
+
loginMode: string
|
|
65
|
+
resourceName: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const useUserStore = defineStore('app-user', () => {
|
|
69
|
+
const userState = ref<IUserState>({
|
|
70
|
+
userInfo: null,
|
|
71
|
+
token: undefined,
|
|
72
|
+
lastUpdateTime: 0,
|
|
73
|
+
// 旧营收产品$login对象
|
|
74
|
+
login: undefined,
|
|
75
|
+
permissions: null,
|
|
76
|
+
roles: null,
|
|
77
|
+
routesConfig: null,
|
|
78
|
+
single: [],
|
|
79
|
+
tenantName: '',
|
|
80
|
+
} as IUserState)
|
|
81
|
+
const getUserInfo = () => {
|
|
82
|
+
return userState.value.userInfo || Storage.get(CURRENT_USER, {}) || {}
|
|
83
|
+
}
|
|
84
|
+
const getLogin = () => {
|
|
85
|
+
return userState.value.login || Storage.get(APP_LOGIN_KEY, []) || {}
|
|
86
|
+
}
|
|
87
|
+
const getPermissions = () => {
|
|
88
|
+
return userState.value.permissions || Storage.get(APP_PERMISSIONS_KEY, []) || []
|
|
89
|
+
}
|
|
90
|
+
const getRoles = () => {
|
|
91
|
+
return userState.value.roles || Storage.get(APP_ROLES_KEY, []) || []
|
|
92
|
+
}
|
|
93
|
+
const getRoutesConfig = () => {
|
|
94
|
+
return userState.value.routesConfig || Storage.get(APP_ROUTES_KEY, []) || []
|
|
95
|
+
}
|
|
96
|
+
const getToken = () => {
|
|
97
|
+
return userState.value.token || Storage.get(ACCESS_TOKEN, '') as string
|
|
98
|
+
}
|
|
99
|
+
const getLastUpdateTime = () => {
|
|
100
|
+
return userState.value.lastUpdateTime
|
|
101
|
+
}
|
|
102
|
+
const setToken = (token: string | undefined) => {
|
|
103
|
+
Storage.set(ACCESS_TOKEN, token)
|
|
104
|
+
}
|
|
105
|
+
const setUserInfo = (info: UserInfo | null) => {
|
|
106
|
+
userState.value.userInfo = info
|
|
107
|
+
userState.value.lastUpdateTime = new Date().getTime()
|
|
108
|
+
Storage.set(CURRENT_USER, info)
|
|
109
|
+
}
|
|
110
|
+
const setLogin = (login) => {
|
|
111
|
+
userState.value.login = login
|
|
112
|
+
Storage.set(APP_LOGIN_KEY, login)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const setTenantName = (setTenantName) => {
|
|
116
|
+
userState.value.tenantName = setTenantName
|
|
117
|
+
}
|
|
118
|
+
const getTenantName = () => {
|
|
119
|
+
return userState.value.tenantName
|
|
120
|
+
}
|
|
121
|
+
const setSingle = (page: ExtraRouteRecordRaw) => {
|
|
122
|
+
if (page.path && page.delete) {
|
|
123
|
+
// 删除
|
|
124
|
+
userState.value.single = userState.value.single.filter(item => item.fullPath !== page.path)
|
|
125
|
+
}
|
|
126
|
+
else if (userState.value.single.filter(item => item.meta.singlePage === page.meta.singlePage).length === 0) {
|
|
127
|
+
// 添加
|
|
128
|
+
userState.value.single.push(page)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const setPermissions = (permissions: []) => {
|
|
132
|
+
userState.value.permissions = permissions
|
|
133
|
+
Storage.set(APP_PERMISSIONS_KEY, permissions)
|
|
134
|
+
}
|
|
135
|
+
const setRoles = (roles: [{ id: string, operation: string[] }]) => {
|
|
136
|
+
userState.value.roles = roles
|
|
137
|
+
Storage.set(APP_ROLES_KEY, roles)
|
|
138
|
+
}
|
|
139
|
+
const setRoutesConfig = (routesConfig: Array<any>) => {
|
|
140
|
+
userState.value.routesConfig = routesConfig
|
|
141
|
+
Storage.set(APP_ROUTES_KEY, routesConfig)
|
|
142
|
+
}
|
|
143
|
+
const Login = async (params: LoginParams) => {
|
|
144
|
+
try {
|
|
145
|
+
let data: any
|
|
146
|
+
const compatible = import.meta.env.VITE_APP_COMPATIBLE
|
|
147
|
+
if (compatible === 'OA') {
|
|
148
|
+
data = await OALogin(params)
|
|
149
|
+
// save token
|
|
150
|
+
setToken(params.password)
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
data = await login(params)
|
|
154
|
+
// save token
|
|
155
|
+
setToken(data.access_token)
|
|
156
|
+
// 第三方教培系统鉴权兼容
|
|
157
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
158
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
159
|
+
}
|
|
160
|
+
return Promise.resolve(data)
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return Promise.reject(error)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const loginUnified = async (params: WxParams) => {
|
|
167
|
+
try {
|
|
168
|
+
const data: any = await login(params)
|
|
169
|
+
setToken(data.access_token)
|
|
170
|
+
const LoginTicket = crypto.AESEncrypt(JSON.stringify(params), '3KMKqvgwR8ULbR8Z')
|
|
171
|
+
Storage.set('LoginTicket', LoginTicket)
|
|
172
|
+
return Promise.resolve(data)
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return Promise.reject(error)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const logout = async () => {
|
|
179
|
+
if (getToken) {
|
|
180
|
+
try {
|
|
181
|
+
await doLogout()
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
console.error('注销Token失败')
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
setToken(undefined)
|
|
188
|
+
setUserInfo(null)
|
|
189
|
+
Storage.remove(CURRENT_USER)
|
|
190
|
+
Storage.remove(ACCESS_TOKEN)
|
|
191
|
+
Storage.remove(APP_LOGIN_KEY)
|
|
192
|
+
Storage.remove(APP_PERMISSIONS_KEY)
|
|
193
|
+
Storage.remove(APP_ROLES_KEY)
|
|
194
|
+
Storage.remove(APP_ROUTES_KEY)
|
|
195
|
+
Storage.remove(APP_WEB_CONFIG_KEY)
|
|
196
|
+
Storage.remove('LoginTicket')
|
|
197
|
+
await indexedDB.clearDB()
|
|
198
|
+
await useSettingStore().init()
|
|
199
|
+
try {
|
|
200
|
+
// 添加页面刷新
|
|
201
|
+
await router.replace('/login')
|
|
202
|
+
window.location.reload()
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
console.error(e)
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const getCode = (tenantName: string) => {
|
|
209
|
+
window.location.replace(`api/af-system/user/getcode?state=${tenantName}`)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
Login,
|
|
214
|
+
loginUnified,
|
|
215
|
+
getToken,
|
|
216
|
+
getLastUpdateTime,
|
|
217
|
+
logout,
|
|
218
|
+
setUserInfo,
|
|
219
|
+
getUserInfo,
|
|
220
|
+
getLogin,
|
|
221
|
+
getPermissions,
|
|
222
|
+
getRoles,
|
|
223
|
+
getRoutesConfig,
|
|
224
|
+
setLogin,
|
|
225
|
+
setSingle,
|
|
226
|
+
setPermissions,
|
|
227
|
+
setRoles,
|
|
228
|
+
setRoutesConfig,
|
|
229
|
+
setTenantName,
|
|
230
|
+
getTenantName,
|
|
231
|
+
getCode,
|
|
232
|
+
}
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
export default useUserStore
|