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.
@@ -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
- // 存放 webConfig 中的 setting 配置
17
- export const useSettingStore = defineStore('setting', () => {
18
- const setting = ref<WebConfig>(undefined)
19
- const isInitialized = ref(false)
20
-
21
- const setSetting = (newSetting: WebConfig) => {
22
- setting.value = newSetting
23
- }
24
-
25
- const getSetting = () => {
26
- return setting.value
27
- }
28
-
29
- // 将 init 作为 store 的方法导出
30
- const init = async () => {
31
- if (isInitialized.value)
32
- return
33
-
34
- const useStore = createStorage()
35
- const catchWebConfig = useStore.get(APP_WEB_CONFIG_KEY)
36
- if (catchWebConfig) {
37
- setSetting(catchWebConfig)
38
- }
39
- else {
40
- const res = await getConfigByNameAsync('webMobileConfig')
41
- if (res.setting) {
42
- useStore.set(APP_WEB_CONFIG_KEY, res)
43
- setSetting(res.setting)
44
- }
45
- }
46
-
47
- isInitialized.value = true
48
- }
49
-
50
- return {
51
- setSetting,
52
- getSetting,
53
- init, // 导出 init 方法
54
- isInitialized,
55
- }
56
- })
57
-
58
- export default useSettingStore
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
- return {
210
- Login,
211
- loginUnified,
212
- getToken,
213
- getLastUpdateTime,
214
- logout,
215
- setUserInfo,
216
- getUserInfo,
217
- getLogin,
218
- getPermissions,
219
- getRoles,
220
- getRoutesConfig,
221
- setLogin,
222
- setSingle,
223
- setPermissions,
224
- setRoles,
225
- setRoutesConfig,
226
- setTenantName,
227
- getTenantName,
228
- }
229
- })
230
-
231
- export default useUserStore
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