af-mobile-client-vue3 1.3.11 → 1.3.13

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.
Files changed (268) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.cursorrules +60 -60
  3. package/.editorconfig +9 -9
  4. package/.env +10 -10
  5. package/.env.development +1 -1
  6. package/.env.production +1 -1
  7. package/.node-version +1 -1
  8. package/.vscode/extensions.json +12 -12
  9. package/.vscode/settings.json +66 -66
  10. package/CLAUDE.md +189 -184
  11. package/README.md +182 -181
  12. package/af-example-mobile-vue-web.iml +9 -9
  13. package/build/vite/index.ts +98 -98
  14. package/build/vite/optimize.ts +34 -34
  15. package/build/vite/vconsole.ts +47 -47
  16. package/commitlint.config.ts +32 -32
  17. package/compress.js +36 -36
  18. package/eslint.config.ts +30 -30
  19. package/index.html +23 -23
  20. package/mock/data.ts +20 -20
  21. package/mock/index.ts +7 -7
  22. package/mock/modules/prose.mock.ts +13 -13
  23. package/mock/modules/user.mock.ts +152 -152
  24. package/mock/util.ts +19 -19
  25. package/netlify.toml +12 -12
  26. package/package.json +114 -114
  27. package/postcss.config.ts +27 -27
  28. package/public/favicon.svg +4 -4
  29. package/public/safari-pinned-tab.svg +4 -4
  30. package/scripts/verifyCommit.js +19 -19
  31. package/src/App.vue +79 -79
  32. package/src/api/mock/index.ts +30 -30
  33. package/src/api/user/index.ts +40 -40
  34. package/src/assets/img/user/login/background-shadow-1.svg +20 -20
  35. package/src/assets/img/user/login/logo-background.svg +20 -20
  36. package/src/bootstrap.ts +26 -26
  37. package/src/components/core/BeautifulLoading/index.vue +52 -52
  38. package/src/components/core/ImageUploader/index.vue +244 -244
  39. package/src/components/core/NavBar/index.vue +53 -53
  40. package/src/components/core/Tabbar/index.vue +32 -32
  41. package/src/components/core/Uploader/index.vue +124 -124
  42. package/src/components/core/XGridDropOption/index.vue +154 -156
  43. package/src/components/core/XMultiSelect/index.vue +183 -183
  44. package/src/components/core/XSelect/index.vue +149 -149
  45. package/src/components/data/InfoDisplay/index.vue +132 -0
  46. package/src/components/data/UserDetail/api.ts +24 -0
  47. package/src/components/data/UserDetail/index.vue +539 -0
  48. package/src/components/data/UserDetail/recordEntries.ts +159 -0
  49. package/src/components/data/UserDetail/types.ts +26 -0
  50. package/src/components/data/XBadge/index.vue +82 -82
  51. package/src/components/data/XCellDetail/index.vue +105 -105
  52. package/src/components/data/XCellList/XCellList.md +313 -313
  53. package/src/components/data/XCellList/index.vue +1075 -1075
  54. package/src/components/data/XCellListFilter/QrScanner/index.vue +207 -207
  55. package/src/components/data/XCellListFilter/QrScanner/startScanAnimation.ts +53 -53
  56. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +119 -119
  57. package/src/components/data/XCellListFilter/index.vue +705 -705
  58. package/src/components/data/XForm/index.vue +659 -659
  59. package/src/components/data/XFormGroup/doc/DeviceForm.vue +121 -121
  60. package/src/components/data/XFormGroup/doc/FormGroupDemo.vue +56 -56
  61. package/src/components/data/XFormGroup/doc/README.md +286 -273
  62. package/src/components/data/XFormGroup/doc/UserForm.vue +101 -101
  63. package/src/components/data/XFormGroup/index.vue +240 -240
  64. package/src/components/data/XFormItem/index.vue +1310 -1310
  65. package/src/components/data/XOlMap/README.md +227 -227
  66. package/src/components/data/XOlMap/XLocationPicker/index.vue +226 -225
  67. package/src/components/data/XOlMap/index.vue +1490 -1490
  68. package/src/components/data/XOlMap/types.ts +149 -149
  69. package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
  70. package/src/components/data/XReportForm/DateTimeSecondsPicker.vue +208 -208
  71. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  72. package/src/components/data/XReportForm/index.vue +1393 -1393
  73. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +198 -198
  74. package/src/components/data/XReportGrid/XAddReport/index.js +3 -3
  75. package/src/components/data/XReportGrid/XAddReport/index.md +53 -52
  76. package/src/components/data/XReportGrid/XAddReport/index.ts +10 -10
  77. package/src/components/data/XReportGrid/XReport.vue +960 -960
  78. package/src/components/data/XReportGrid/XReportDesign.vue +597 -597
  79. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +148 -148
  80. package/src/components/data/XReportGrid/XReportDrawer/index.js +3 -3
  81. package/src/components/data/XReportGrid/XReportDrawer/index.ts +10 -10
  82. package/src/components/data/XReportGrid/XReportJsonRender.vue +399 -399
  83. package/src/components/data/XReportGrid/XReportTrGroup.vue +592 -592
  84. package/src/components/data/XReportGrid/index.md +46 -42
  85. package/src/components/data/XSignature/index.vue +284 -285
  86. package/src/components/data/XTag/index.vue +10 -10
  87. package/src/components/layout/NormalDataLayout/index.vue +69 -69
  88. package/src/components/layout/TabBarLayout/index.vue +40 -40
  89. package/src/composables/dark.ts +5 -5
  90. package/src/config/routes.ts +9 -9
  91. package/src/constants/index.ts +2 -2
  92. package/src/enums/requestEnum.ts +25 -25
  93. package/src/expression/ExpressionRunner.ts +28 -28
  94. package/src/expression/TestExpression.ts +510 -510
  95. package/src/expression/core/Delegate.ts +116 -116
  96. package/src/expression/core/Expression.ts +1359 -1359
  97. package/src/expression/core/Program.ts +985 -985
  98. package/src/expression/core/Token.ts +29 -29
  99. package/src/expression/enums/ExpressionType.ts +81 -81
  100. package/src/expression/enums/TokenType.ts +11 -11
  101. package/src/expression/exception/BreakWayException.ts +2 -2
  102. package/src/expression/exception/ContinueWayException.ts +2 -2
  103. package/src/expression/exception/ExpressionException.ts +29 -29
  104. package/src/expression/exception/ReturnWayException.ts +14 -14
  105. package/src/expression/exception/ServiceException.ts +22 -22
  106. package/src/expression/instances/JSONArray.ts +52 -52
  107. package/src/expression/instances/JSONObject.ts +118 -118
  108. package/src/expression/instances/LogicConsole.ts +31 -31
  109. package/src/font-style/font.css +4 -4
  110. package/src/hooks/useBoolean.ts +26 -0
  111. package/src/hooks/useCommon.ts +9 -9
  112. package/src/hooks/useLogin.ts +97 -97
  113. package/src/icons/svg/check-in.svg +32 -32
  114. package/src/icons/svg/dark.svg +4 -4
  115. package/src/icons/svg/github.svg +4 -4
  116. package/src/icons/svg/light.svg +4 -4
  117. package/src/icons/svg/link.svg +4 -4
  118. package/src/icons/svgo.yml +22 -22
  119. package/src/layout/GridView/index.vue +16 -16
  120. package/src/layout/PageLayout.vue +9 -9
  121. package/src/layout/SingleLayout.vue +9 -9
  122. package/src/locales/en-US.json +128 -128
  123. package/src/locales/zh-CN.json +128 -128
  124. package/src/logic/LogicRunner.ts +67 -67
  125. package/src/logic/TestLogic.ts +13 -13
  126. package/src/logic/plugins/common/DateTools.ts +35 -35
  127. package/src/logic/plugins/common/VueTools.ts +30 -30
  128. package/src/logic/plugins/index.ts +7 -7
  129. package/src/main.ts +44 -44
  130. package/src/plugins/AppData.ts +38 -38
  131. package/src/plugins/GetLoginInfoService.ts +10 -10
  132. package/src/plugins/collectIcons.ts +10 -0
  133. package/src/plugins/index.ts +11 -11
  134. package/src/router/README.md +8 -8
  135. package/src/router/guards.ts +59 -59
  136. package/src/router/index.ts +35 -35
  137. package/src/router/invoiceRoutes.ts +33 -33
  138. package/src/router/routes.ts +341 -171
  139. package/src/router/types.ts +7 -7
  140. package/src/services/api/Login.ts +6 -6
  141. package/src/services/api/common.ts +109 -109
  142. package/src/services/api/index.ts +7 -7
  143. package/src/services/api/manage.ts +8 -8
  144. package/src/services/api/search.ts +16 -16
  145. package/src/services/api/user.ts +17 -17
  146. package/src/services/restTools.ts +56 -56
  147. package/src/services/v3Api.ts +147 -147
  148. package/src/stores/index.ts +11 -11
  149. package/src/stores/modules/counter.ts +19 -19
  150. package/src/stores/modules/routeCache.ts +23 -23
  151. package/src/stores/modules/setting.ts +76 -76
  152. package/src/stores/modules/user.ts +235 -235
  153. package/src/stores/mutation-type.ts +7 -7
  154. package/src/styles/app.less +36 -36
  155. package/src/styles/login.less +109 -109
  156. package/src/styles/var.less +16 -16
  157. package/src/types/env.d.ts +16 -16
  158. package/src/types/settings.ts +1 -1
  159. package/src/types/vue-router.d.ts +9 -9
  160. package/src/utils/Storage.ts +124 -124
  161. package/src/utils/authority-utils.ts +84 -84
  162. package/src/utils/common.ts +41 -41
  163. package/src/utils/crypto.ts +39 -39
  164. package/src/utils/dataUtil.ts +42 -42
  165. package/src/utils/dictUtil.ts +52 -52
  166. package/src/utils/http/index.ts +199 -199
  167. package/src/utils/i18n.ts +72 -72
  168. package/src/utils/indexedDB.ts +195 -195
  169. package/src/utils/inline-px-to-vw.ts +28 -28
  170. package/src/utils/mobileUtil.ts +34 -34
  171. package/src/utils/progress.ts +19 -19
  172. package/src/utils/queryFormDefaultRangePicker.ts +57 -57
  173. package/src/utils/routerUtil.ts +271 -271
  174. package/src/utils/runEvalFunction.ts +13 -13
  175. package/src/utils/secureStorage.ts +71 -71
  176. package/src/utils/set-page-title.ts +5 -5
  177. package/src/utils/validate.ts +6 -6
  178. package/src/utils/wechatUtil.ts +9 -9
  179. package/src/views/chat/index.vue +153 -153
  180. package/src/views/common/LoadError.vue +63 -63
  181. package/src/views/common/NotFound.vue +67 -67
  182. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  183. package/src/views/component/IconifyView/index.vue +504 -507
  184. package/src/views/component/UserDetailView/UserDetailPage.vue +77 -0
  185. package/src/views/component/UserDetailView/index.vue +224 -0
  186. package/src/views/component/XCellDetailView/index.vue +217 -217
  187. package/src/views/component/XCellListView/index.vue +108 -147
  188. package/src/views/component/XFormAppraiseView/index.vue +174 -174
  189. package/src/views/component/XFormGroupView/index.vue +78 -91
  190. package/src/views/component/XFormView/index.vue +27 -107
  191. package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
  192. package/src/views/component/XOlMapView/index.vue +434 -434
  193. package/src/views/component/XOlMapView/testData.ts +64 -64
  194. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  195. package/src/views/component/XReportFormView/index.vue +13 -13
  196. package/src/views/component/XReportGridView/index.vue +17 -17
  197. package/src/views/component/XRequestView/index.vue +234 -234
  198. package/src/views/component/XSignatureView/index.vue +50 -50
  199. package/src/views/component/index.vue +181 -177
  200. package/src/views/component/menu.vue +117 -117
  201. package/src/views/component/notice.vue +46 -46
  202. package/src/views/component/topNav.vue +36 -36
  203. package/src/views/invoiceShow/index.vue +61 -61
  204. package/src/views/user/login/ForgetPasswordForm.vue +94 -94
  205. package/src/views/user/login/LoginForm.vue +346 -346
  206. package/src/views/user/login/LoginTitle.vue +76 -76
  207. package/src/views/user/login/LoginWave.vue +109 -109
  208. package/src/views/user/login/index.vue +22 -22
  209. package/src/views/user/my/comm/ModifyPassword.vue +346 -346
  210. package/src/views/user/my/index.vue +340 -340
  211. package/src/views/userRecords/AbnormalAlarmRecords.vue +21 -0
  212. package/src/views/userRecords/CardReplacementRecords.vue +21 -0
  213. package/src/views/userRecords/ChangeRecords.vue +19 -0
  214. package/src/views/userRecords/CommandViewRecords.vue +20 -0
  215. package/src/views/userRecords/GasCompensationRecords.vue +20 -0
  216. package/src/views/userRecords/InstrumentCollectionRecords.vue +21 -0
  217. package/src/views/userRecords/MeterRecords.vue +20 -0
  218. package/src/views/userRecords/OperateRecords.vue +51 -0
  219. package/src/views/userRecords/OtherChargeRecords.vue +19 -0
  220. package/src/views/userRecords/PaymentRecords.vue +28 -0
  221. package/src/views/userRecords/PriceAdjustmentRecords.vue +19 -0
  222. package/src/views/userRecords/ReplacementRecords.vue +19 -0
  223. package/src/views/userRecords/SafetyRecords.vue +19 -0
  224. package/src/views/userRecords/TransactionRecords.vue +21 -0
  225. package/src/views/userRecords/TransferRecords.vue +19 -0
  226. package/src/views/userRecords/operateRecordDetail/index.vue +316 -0
  227. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AddUserDetail.vue +124 -0
  228. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AdvanceDeliveryDetail.vue +88 -0
  229. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsCancelDetail.vue +205 -0
  230. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/AutoAccountsDetail.vue +192 -0
  231. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankDkDetail.vue +192 -0
  232. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BankPayDetail.vue +192 -0
  233. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/BlacklistDetail.vue +153 -0
  234. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CancellationDetail.vue +101 -0
  235. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterCancelDetail.vue +127 -0
  236. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardMeterCenterDetail.vue +153 -0
  237. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/CardOverUserDetail.vue +153 -0
  238. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterCancelDetail.vue +166 -0
  239. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ChangeMeterDetail.vue +205 -0
  240. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/DisableManageDetail.vue +127 -0
  241. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/EnableManageDetail.vue +114 -0
  242. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FaZheChangeDetail.vue +124 -0
  243. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/FeeDeductionDetail.vue +153 -0
  244. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/GasPriceChangeDetail.vue +126 -0
  245. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/InputtorChangeDetail.vue +126 -0
  246. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterCancelDetail.vue +114 -0
  247. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotMeterCenterDetail.vue +127 -0
  248. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/IotOpenDetail.vue +88 -0
  249. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineCardDetail.vue +101 -0
  250. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterCancelDetail.vue +218 -0
  251. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/MachineMeterCenterDetail.vue +153 -0
  252. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OffGasAddGasDetail.vue +140 -0
  253. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeCancelDetail.vue +127 -0
  254. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OtherChargeDetail.vue +114 -0
  255. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/OverUserChangeDetail.vue +127 -0
  256. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReBillDetail.vue +127 -0
  257. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/RefundDetail.vue +114 -0
  258. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageCancelDetail.vue +127 -0
  259. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/ReplaceCardManageDetail.vue +114 -0
  260. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/SaleCardGasDetail.vue +140 -0
  261. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageCancelDetail.vue +152 -0
  262. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/TransferManageDetail.vue +178 -0
  263. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/UserChangeDetail.vue +123 -0
  264. package/src/views/userRecords/operateRecordDetail/operateRecordDetails/WechatPayDetail.vue +192 -0
  265. package/src/views/userRecords/types.ts +66 -0
  266. package/tsconfig.json +39 -39
  267. package/uno.config.ts +82 -78
  268. package/vite.config.ts +118 -118
@@ -1,235 +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: any
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: any | 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
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: any
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: any | 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
@@ -1,7 +1,7 @@
1
- export const CURRENT_USER = 'CURRENT-USER'
2
- export const ACCESS_TOKEN = 'Authorization'
3
- export const APP_LOGIN_KEY = 'admin.login'
4
- export const APP_PERMISSIONS_KEY = 'admin.permissions'
5
- export const APP_ROLES_KEY = 'admin.roles'
6
- export const APP_ROUTES_KEY = 'admin.routes'
7
- export const APP_WEB_CONFIG_KEY = 'admin.webconfig'
1
+ export const CURRENT_USER = 'CURRENT-USER'
2
+ export const ACCESS_TOKEN = 'Authorization'
3
+ export const APP_LOGIN_KEY = 'admin.login'
4
+ export const APP_PERMISSIONS_KEY = 'admin.permissions'
5
+ export const APP_ROLES_KEY = 'admin.roles'
6
+ export const APP_ROUTES_KEY = 'admin.routes'
7
+ export const APP_WEB_CONFIG_KEY = 'admin.webconfig'
@@ -1,36 +1,36 @@
1
- *,
2
- *::before,
3
- *::after {
4
- box-sizing: border-box;
5
- }
6
-
7
- html {
8
- background: var(--van-gray-1);
9
- font-size: var(--van-font-size-lg);
10
- color-scheme: light;
11
- }
12
-
13
- html.dark {
14
- background: #222;
15
- color-scheme: dark;
16
- }
17
-
18
- #system-app {
19
- height: 100%;
20
- position: relative;
21
- }
22
-
23
- ::-webkit-scrollbar {
24
- width: 0;
25
- background: transparent;
26
- }
27
-
28
- // 解决Tabbar的固定定位被覆盖的问题
29
- .van-tabbar--fixed {
30
- position: fixed !important;
31
- }
32
-
33
- // 所有按钮 添加圆角
34
- .van-button {
35
- border-radius: 10px !important;
36
- }
1
+ *,
2
+ *::before,
3
+ *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html {
8
+ background: var(--van-gray-1);
9
+ font-size: var(--van-font-size-lg);
10
+ color-scheme: light;
11
+ }
12
+
13
+ html.dark {
14
+ background: #222;
15
+ color-scheme: dark;
16
+ }
17
+
18
+ #system-app {
19
+ height: 100%;
20
+ position: relative;
21
+ }
22
+
23
+ ::-webkit-scrollbar {
24
+ width: 0;
25
+ background: transparent;
26
+ }
27
+
28
+ // 解决Tabbar的固定定位被覆盖的问题
29
+ .van-tabbar--fixed {
30
+ position: fixed !important;
31
+ }
32
+
33
+ // 所有按钮 添加圆角
34
+ .van-button {
35
+ border-radius: 10px !important;
36
+ }