vue2-client 1.8.310 → 1.8.312

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 (222) hide show
  1. package/.env +19 -19
  2. package/.eslintrc.js +90 -90
  3. package/CHANGELOG.md +824 -824
  4. package/Components.md +60 -60
  5. package/babel.config.js +21 -21
  6. package/docs/LowCode/lowcode.md +155 -155
  7. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  8. package/docs/index.md +30 -30
  9. package/index.js +31 -31
  10. package/jest-transform-stub.js +8 -8
  11. package/jest.config.js +21 -21
  12. package/jest.setup.js +7 -7
  13. package/package.json +97 -97
  14. package/public/index.html +27 -27
  15. package/src/App.vue +188 -188
  16. package/src/ReportView.js +19 -19
  17. package/src/assets/img/querySlotDemo.svg +15 -15
  18. package/src/assets/svg/badtwo.svg +1 -1
  19. package/src/assets/svg/goodtwo.svg +1 -1
  20. package/src/base-client/components/common/AMisRender/index.js +3 -3
  21. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  22. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +438 -416
  23. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  24. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  25. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  26. package/src/base-client/components/common/CitySelect/CitySelect.vue +342 -342
  27. package/src/base-client/components/common/CitySelect/index.js +3 -3
  28. package/src/base-client/components/common/CitySelect/index.md +109 -109
  29. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  30. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  31. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  32. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  33. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  34. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  35. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  36. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  37. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  38. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  39. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  40. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  41. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  42. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  43. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  44. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -350
  45. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  46. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -699
  47. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  48. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -162
  49. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  50. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  51. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  52. package/src/base-client/components/common/Tree/index.js +2 -2
  53. package/src/base-client/components/common/Upload/Upload.vue +239 -239
  54. package/src/base-client/components/common/Upload/index.js +3 -3
  55. package/src/base-client/components/common/XAddForm/XAddForm.vue +105 -105
  56. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +807 -807
  57. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  58. package/src/base-client/components/common/XAddNativeForm/lowcodeEditorRegister.js +16 -16
  59. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  60. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  61. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  62. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  63. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  64. package/src/base-client/components/common/XDataCard/XDataCard.vue +355 -0
  65. package/src/base-client/components/common/XDataCard/index.js +3 -0
  66. package/src/base-client/components/common/XDataCard/index.md +1 -0
  67. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  68. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  69. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  70. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +188 -187
  71. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +306 -306
  72. package/src/base-client/components/common/XDescriptions/demo.vue +50 -50
  73. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  74. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  75. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +214 -214
  76. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  77. package/src/base-client/components/common/XForm/XForm.vue +294 -294
  78. package/src/base-client/components/common/XForm/XFormItem.vue +911 -911
  79. package/src/base-client/components/common/XForm/XTreeSelect.vue +207 -207
  80. package/src/base-client/components/common/XForm/index.md +178 -178
  81. package/src/base-client/components/common/XFormCol/XFormCol.vue +36 -36
  82. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +241 -241
  83. package/src/base-client/components/common/XFormGroup/demo.vue +40 -40
  84. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  85. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  86. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  87. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  88. package/src/base-client/components/common/XFormTable/XFormTable.vue +545 -539
  89. package/src/base-client/components/common/XFormTable/demo.vue +72 -72
  90. package/src/base-client/components/common/XFormTable/index.md +98 -98
  91. package/src/base-client/components/common/XFormTable/lowcodeEditorRegister.js +30 -30
  92. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +147 -147
  93. package/src/base-client/components/common/XReport/XReport.vue +858 -858
  94. package/src/base-client/components/common/XReport/XReportDemo.vue +266 -266
  95. package/src/base-client/components/common/XReport/XReportDesign.vue +509 -509
  96. package/src/base-client/components/common/XReport/XReportJsonRender.vue +295 -295
  97. package/src/base-client/components/common/XReport/XReportTrGroup.vue +801 -801
  98. package/src/base-client/components/common/XReport/index.js +3 -3
  99. package/src/base-client/components/common/XReport/index.md +44 -44
  100. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  101. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  102. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +137 -0
  103. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -0
  104. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -0
  105. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  106. package/src/base-client/components/common/XStepView/index.js +3 -3
  107. package/src/base-client/components/common/XStepView/index.md +31 -31
  108. package/src/base-client/components/common/XTable/XTable.vue +715 -676
  109. package/src/base-client/components/common/XTable/index.md +255 -255
  110. package/src/base-client/components/common/XTree/XTree.vue +423 -423
  111. package/src/base-client/components/common/XTree/index.js +3 -3
  112. package/src/base-client/components/common/XTree/index.md +36 -36
  113. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +114 -114
  114. package/src/base-client/components/common/XTreeOne/lowcodeEditorRegister.js +11 -11
  115. package/src/base-client/components/index.js +51 -51
  116. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  117. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  118. package/src/base-client/plugins/AppData.js +121 -121
  119. package/src/base-client/plugins/Config.js +19 -19
  120. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  121. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  122. package/src/bootstrap.js +39 -39
  123. package/src/components/CodeMirror/inedx.vue +118 -118
  124. package/src/components/CodeMirror/setting.js +40 -40
  125. package/src/components/FilePreview/FilePreview.vue +166 -166
  126. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  127. package/src/components/STable/index.js +361 -361
  128. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  129. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  130. package/src/components/menu/SideMenu.vue +75 -75
  131. package/src/components/menu/menu.js +273 -273
  132. package/src/components/tool/AStepItem.vue +60 -60
  133. package/src/config/CreateQueryConfig.js +322 -322
  134. package/src/config/default/antd.config.js +89 -89
  135. package/src/config/default/setting.config.js +55 -55
  136. package/src/font-style/font.css +4 -4
  137. package/src/layouts/CommonLayout.vue +56 -56
  138. package/src/layouts/PageLayout.vue +151 -151
  139. package/src/layouts/SinglePageView.vue +138 -138
  140. package/src/layouts/header/AdminHeader.vue +132 -132
  141. package/src/layouts/header/HeaderNotice.vue +177 -177
  142. package/src/layouts/tabs/TabsHead.vue +189 -189
  143. package/src/layouts/tabs/TabsView.vue +387 -387
  144. package/src/lib.js +1 -1
  145. package/src/main.js +26 -26
  146. package/src/mock/extend/index.js +84 -84
  147. package/src/mock/goods/index.js +108 -108
  148. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  149. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  150. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  151. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  152. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  153. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  154. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  155. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  156. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  157. package/src/pages/DynamicStatistics/index.vue +282 -282
  158. package/src/pages/Example/index.vue +193 -33
  159. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  160. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  161. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  162. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  163. package/src/pages/NewDynamicStatistics/FavoriteList.vue +51 -51
  164. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  165. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  166. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  167. package/src/pages/ServiceReview/index.vue +284 -284
  168. package/src/pages/XReportView/index.vue +62 -62
  169. package/src/pages/login/Login.vue +378 -378
  170. package/src/pages/login/LoginV3.vue +389 -389
  171. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1030
  172. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  173. package/src/pages/resourceManage/orgListManage.vue +98 -98
  174. package/src/pages/system/dictionary/index.vue +44 -44
  175. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  176. package/src/pages/system/monitor/operLog/index.vue +37 -37
  177. package/src/pages/system/settings/modifyPassword.vue +117 -117
  178. package/src/pages/system/ticket/index.vue +480 -480
  179. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  180. package/src/router/async/config.async.js +34 -34
  181. package/src/router/async/router.map.js +104 -104
  182. package/src/router/guards.js +223 -223
  183. package/src/router/index.js +27 -27
  184. package/src/router.js +19 -19
  185. package/src/services/api/TicketDetailsViewApi.js +46 -46
  186. package/src/services/api/cas.js +79 -79
  187. package/src/services/api/common.js +307 -307
  188. package/src/services/api/entity.js +18 -18
  189. package/src/services/api/index.js +17 -17
  190. package/src/services/api/restTools.js +46 -46
  191. package/src/services/apiService.js +14 -14
  192. package/src/services/user.js +71 -71
  193. package/src/services/v3Api.js +81 -81
  194. package/src/store/modules/index.js +5 -5
  195. package/src/store/modules/lowCode.js +33 -33
  196. package/src/store/modules/setting.js +119 -119
  197. package/src/theme/default/style.less +58 -58
  198. package/src/theme/global.less +139 -139
  199. package/src/utils/authority-utils.js +85 -85
  200. package/src/utils/errorCode.js +6 -6
  201. package/src/utils/formatter.js +80 -80
  202. package/src/utils/htmlToPDF.js +108 -108
  203. package/src/utils/htmlToPDFApi.js +5 -5
  204. package/src/utils/indexedDB.js +258 -258
  205. package/src/utils/login.js +188 -188
  206. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  207. package/src/utils/lowcode/lowcodeLog.js +29 -29
  208. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  209. package/src/utils/lowcode/registerComponentForEditor.js +11 -11
  210. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  211. package/src/utils/map-utils.js +47 -47
  212. package/src/utils/reg.js +95 -95
  213. package/src/utils/request.js +347 -347
  214. package/src/utils/routerUtil.js +435 -435
  215. package/src/utils/runEvalFunction.js +6 -6
  216. package/src/utils/util.js +241 -241
  217. package/src/utils/waterMark.js +31 -31
  218. package/test/Amis.spec.js +163 -163
  219. package/test/Tree.spec.js +167 -167
  220. package/test/myDialog.spec.js +46 -46
  221. package/vue.config.js +181 -181
  222. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,223 +1,223 @@
1
- import { hasAuthority } from '@vue2-client/utils/authority-utils'
2
- import { loginIgnore } from '@vue2-client/router/index'
3
- import { checkAuthorization, METHOD, request } from '@vue2-client/utils/request'
4
- import NProgress from 'nprogress'
5
- import { logout } from '@vue2-client/services/user'
6
- import {
7
- startLogin,
8
- checkSingleAuthorization,
9
- } from '@vue2-client/utils/login'
10
- import AES from '@vue2-client/utils/EncryptUtil'
11
- import Vue from 'vue'
12
- import { funcToRouter, loadRoutes } from '@vue2-client/utils/routerUtil'
13
- import { indexedDB } from '@vue2-client/utils/indexedDB'
14
-
15
- NProgress.configure({ showSpinner: false })
16
-
17
- /**
18
- * 进度条开始
19
- * @param to
20
- * @param form
21
- * @param next
22
- */
23
- const progressStart = (to, from, next) => {
24
- // start progress bar
25
- if (!NProgress.isStarted()) {
26
- NProgress.start()
27
- }
28
- next()
29
- }
30
-
31
- /**
32
- * 登录守卫
33
- * @param to
34
- * @param form
35
- * @param next
36
- * @param options
37
- */
38
- const loginGuard = (to, from, next, options) => {
39
- if (window.__MICRO_APP_ENVIRONMENT__) {
40
- window.microApp.dispatch({ type: '子应用发送给主应用的数据', to: to.path })
41
- }
42
- const urlParams = new URLSearchParams(window.location.search)
43
- // 如果是需要我们自己登陆的项目
44
- const token = urlParams.get('token')
45
- // 如果是v2 的项目 资源管理和营收分开库的那种项目 传递用户信息进来
46
- const tokenV2 = urlParams.get('tokenV2')
47
- // 如果是 v4 的父项目,通过localStorage传递信息
48
- const V4_LOGIN_DATA_KEY = localStorage.getItem('v4LoginData')
49
- if (token) {
50
- const { AESDecrypt } = AES
51
- const info = AESDecrypt(token, '3KMKqvgwR8ULbR8Z')
52
- const { store, message, router } = options
53
- // 单页面通常是嵌入到v3的项目中,没有单独的清除按钮,所以需要清除indexedDB
54
- indexedDB.clear()
55
- if (
56
- (!loginIgnore.includes(to) || to.name === '404') &&
57
- !checkSingleAuthorization('SinglePage', token)
58
- ) {
59
- localStorage.setItem('SinglePage_TOKEN', token)
60
- startLogin({
61
- ...info,
62
- pathname: window.location.pathname.replace(process.env.VUE_APP_PUBLIC_PATH, ''),
63
- store,
64
- router,
65
- })
66
- } else {
67
- const roles = store.getters['account/roles']
68
- let user = {}
69
- try {
70
- user = JSON.parse(localStorage.getItem(process.env.VUE_APP_USER_KEY))
71
- } catch (e) {
72
- user = localStorage.getItem(process.env.VUE_APP_USER_KEY)
73
- }
74
- const setUser = store._mutations['account/setUser'][0]
75
- setUser(user)
76
- if (roles.length === 0 && !loginIgnore.includes(to)) {
77
- message.warning('登录已失效,请重新登录')
78
- logout().finally((res) => {
79
- next({ path: '/login' })
80
- })
81
- } else {
82
- next()
83
- }
84
- }
85
- } else if (tokenV2) {
86
- const { AESDecrypt } = AES
87
- const info = AESDecrypt(tokenV2, '3KMKqvgwR8ULbR8Z')
88
- request(`/rs/user/${info.name}/${info.password}/智慧燃气`, METHOD.GET).then(
89
- res => {
90
- const curUser = {
91
- name: res.name,
92
- username: res.name,
93
- orgid: res.name,
94
- avatar: '',
95
- ename: res.ename,
96
- id: res.id,
97
- orgName: res.f_fengongsi,
98
- contact: '',
99
- phone: '',
100
- orgs: res.orgs
101
- }
102
- Vue.$store.commit('account/setUser', Object.assign(curUser, res))
103
- const login = {
104
- f: res,
105
- jwt: res.id,
106
- r: res.roles
107
- }
108
- Vue.$store.commit('account/setLogin', login)
109
- loadRoutes(funcToRouter(res.functions))
110
- next()
111
- }
112
- )
113
- } else if (V4_LOGIN_DATA_KEY) {
114
- const v4LoginData = JSON.parse(localStorage.getItem('userInfo'))
115
- const curUser = {
116
- name: v4LoginData.name,
117
- username: v4LoginData.name,
118
- orgid: v4LoginData.name,
119
- avatar: '',
120
- ename: v4LoginData.ename,
121
- id: v4LoginData.id,
122
- orgName: v4LoginData.orgs,
123
- contact: '',
124
- phone: '',
125
- orgs: v4LoginData.orgs
126
- }
127
- Vue.$store.commit('account/setUser', Object.assign(curUser, v4LoginData))
128
- const login = {
129
- f: v4LoginData,
130
- jwt: v4LoginData.id,
131
- r: v4LoginData.r
132
- }
133
- Vue.$store.commit('account/setLogin', login)
134
- loadRoutes(funcToRouter(v4LoginData.functions))
135
- next()
136
- } else {
137
- const { store, message } = options
138
- if (
139
- (!loginIgnore.includes(to) || to.name === '404') &&
140
- !checkAuthorization()
141
- ) {
142
- message.warning('登录已失效,请重新登录')
143
- next({ path: '/login' })
144
- } else {
145
- const roles = store.getters['account/roles']
146
- if (roles.length === 0 && !loginIgnore.includes(to)) {
147
- message.warning('登录已失效,请重新登录')
148
- logout().finally((res) => {
149
- next({ path: '/login' })
150
- })
151
- } else {
152
- next()
153
- }
154
- }
155
- }
156
- }
157
-
158
- /**
159
- * 权限守卫
160
- * @param to
161
- * @param form
162
- * @param next
163
- * @param options
164
- */
165
- const authorityGuard = (to, from, next, options) => {
166
- const { store, message } = options
167
- const permissions = store.getters['account/permissions']
168
- const roles = store.getters['account/roles']
169
- if (!hasAuthority(to, permissions, roles)) {
170
- message.warning(`对不起,您无权访问页面: ${to.fullPath},请联系管理员`)
171
- next({ path: '/403' })
172
- // NProgress.done()
173
- } else {
174
- next()
175
- }
176
- }
177
-
178
- /**
179
- * 混合导航模式下一级菜单跳转重定向
180
- * @param to
181
- * @param from
182
- * @param next
183
- * @param options
184
- * @returns {*}
185
- */
186
- const redirectGuard = (to, from, next, options) => {
187
- const { store } = options
188
- const getFirstChild = (routes) => {
189
- const route = routes[0]
190
- if (!route.children || route.children.length === 0) {
191
- return route
192
- }
193
- return getFirstChild(route.children)
194
- }
195
- if (store.state.setting.layout === 'mix') {
196
- const firstMenu = store.getters['setting/firstMenu']
197
- if (firstMenu.find((item) => item.fullPath === to.fullPath)) {
198
- store.commit('setting/setActivatedFirst', to.fullPath)
199
- const subMenu = store.getters['setting/subMenu']
200
- if (subMenu.length > 0) {
201
- const redirect = getFirstChild(subMenu)
202
- return next({ path: redirect.fullPath })
203
- }
204
- }
205
- }
206
- next()
207
- }
208
-
209
- /**
210
- * 进度条结束
211
- * @param to
212
- * @param form
213
- * @param options
214
- */
215
- const progressDone = () => {
216
- // finish progress bar
217
- NProgress.done()
218
- }
219
-
220
- export default {
221
- beforeEach: [progressStart, loginGuard, authorityGuard, redirectGuard],
222
- afterEach: [progressDone],
223
- }
1
+ import { hasAuthority } from '@vue2-client/utils/authority-utils'
2
+ import { loginIgnore } from '@vue2-client/router/index'
3
+ import { checkAuthorization, METHOD, request } from '@vue2-client/utils/request'
4
+ import NProgress from 'nprogress'
5
+ import { logout } from '@vue2-client/services/user'
6
+ import {
7
+ startLogin,
8
+ checkSingleAuthorization,
9
+ } from '@vue2-client/utils/login'
10
+ import AES from '@vue2-client/utils/EncryptUtil'
11
+ import Vue from 'vue'
12
+ import { funcToRouter, loadRoutes } from '@vue2-client/utils/routerUtil'
13
+ import { indexedDB } from '@vue2-client/utils/indexedDB'
14
+
15
+ NProgress.configure({ showSpinner: false })
16
+
17
+ /**
18
+ * 进度条开始
19
+ * @param to
20
+ * @param form
21
+ * @param next
22
+ */
23
+ const progressStart = (to, from, next) => {
24
+ // start progress bar
25
+ if (!NProgress.isStarted()) {
26
+ NProgress.start()
27
+ }
28
+ next()
29
+ }
30
+
31
+ /**
32
+ * 登录守卫
33
+ * @param to
34
+ * @param form
35
+ * @param next
36
+ * @param options
37
+ */
38
+ const loginGuard = (to, from, next, options) => {
39
+ if (window.__MICRO_APP_ENVIRONMENT__) {
40
+ window.microApp.dispatch({ type: '子应用发送给主应用的数据', to: to.path })
41
+ }
42
+ const urlParams = new URLSearchParams(window.location.search)
43
+ // 如果是需要我们自己登陆的项目
44
+ const token = urlParams.get('token')
45
+ // 如果是v2 的项目 资源管理和营收分开库的那种项目 传递用户信息进来
46
+ const tokenV2 = urlParams.get('tokenV2')
47
+ // 如果是 v4 的父项目,通过localStorage传递信息
48
+ const V4_LOGIN_DATA_KEY = localStorage.getItem('v4LoginData')
49
+ if (token) {
50
+ const { AESDecrypt } = AES
51
+ const info = AESDecrypt(token, '3KMKqvgwR8ULbR8Z')
52
+ const { store, message, router } = options
53
+ // 单页面通常是嵌入到v3的项目中,没有单独的清除按钮,所以需要清除indexedDB
54
+ indexedDB.clear()
55
+ if (
56
+ (!loginIgnore.includes(to) || to.name === '404') &&
57
+ !checkSingleAuthorization('SinglePage', token)
58
+ ) {
59
+ localStorage.setItem('SinglePage_TOKEN', token)
60
+ startLogin({
61
+ ...info,
62
+ pathname: window.location.pathname.replace(process.env.VUE_APP_PUBLIC_PATH, ''),
63
+ store,
64
+ router,
65
+ })
66
+ } else {
67
+ const roles = store.getters['account/roles']
68
+ let user = {}
69
+ try {
70
+ user = JSON.parse(localStorage.getItem(process.env.VUE_APP_USER_KEY))
71
+ } catch (e) {
72
+ user = localStorage.getItem(process.env.VUE_APP_USER_KEY)
73
+ }
74
+ const setUser = store._mutations['account/setUser'][0]
75
+ setUser(user)
76
+ if (roles.length === 0 && !loginIgnore.includes(to)) {
77
+ message.warning('登录已失效,请重新登录')
78
+ logout().finally((res) => {
79
+ next({ path: '/login' })
80
+ })
81
+ } else {
82
+ next()
83
+ }
84
+ }
85
+ } else if (tokenV2) {
86
+ const { AESDecrypt } = AES
87
+ const info = AESDecrypt(tokenV2, '3KMKqvgwR8ULbR8Z')
88
+ request(`/rs/user/${info.name}/${info.password}/智慧燃气`, METHOD.GET).then(
89
+ res => {
90
+ const curUser = {
91
+ name: res.name,
92
+ username: res.name,
93
+ orgid: res.name,
94
+ avatar: '',
95
+ ename: res.ename,
96
+ id: res.id,
97
+ orgName: res.f_fengongsi,
98
+ contact: '',
99
+ phone: '',
100
+ orgs: res.orgs
101
+ }
102
+ Vue.$store.commit('account/setUser', Object.assign(curUser, res))
103
+ const login = {
104
+ f: res,
105
+ jwt: res.id,
106
+ r: res.roles
107
+ }
108
+ Vue.$store.commit('account/setLogin', login)
109
+ loadRoutes(funcToRouter(res.functions))
110
+ next()
111
+ }
112
+ )
113
+ } else if (V4_LOGIN_DATA_KEY) {
114
+ const v4LoginData = JSON.parse(localStorage.getItem('userInfo'))
115
+ const curUser = {
116
+ name: v4LoginData.name,
117
+ username: v4LoginData.name,
118
+ orgid: v4LoginData.name,
119
+ avatar: '',
120
+ ename: v4LoginData.ename,
121
+ id: v4LoginData.id,
122
+ orgName: v4LoginData.orgs,
123
+ contact: '',
124
+ phone: '',
125
+ orgs: v4LoginData.orgs
126
+ }
127
+ Vue.$store.commit('account/setUser', Object.assign(curUser, v4LoginData))
128
+ const login = {
129
+ f: v4LoginData,
130
+ jwt: v4LoginData.id,
131
+ r: v4LoginData.r
132
+ }
133
+ Vue.$store.commit('account/setLogin', login)
134
+ loadRoutes(funcToRouter(v4LoginData.functions))
135
+ next()
136
+ } else {
137
+ const { store, message } = options
138
+ if (
139
+ (!loginIgnore.includes(to) || to.name === '404') &&
140
+ !checkAuthorization()
141
+ ) {
142
+ message.warning('登录已失效,请重新登录')
143
+ next({ path: '/login' })
144
+ } else {
145
+ const roles = store.getters['account/roles']
146
+ if (roles.length === 0 && !loginIgnore.includes(to)) {
147
+ message.warning('登录已失效,请重新登录')
148
+ logout().finally((res) => {
149
+ next({ path: '/login' })
150
+ })
151
+ } else {
152
+ next()
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ /**
159
+ * 权限守卫
160
+ * @param to
161
+ * @param form
162
+ * @param next
163
+ * @param options
164
+ */
165
+ const authorityGuard = (to, from, next, options) => {
166
+ const { store, message } = options
167
+ const permissions = store.getters['account/permissions']
168
+ const roles = store.getters['account/roles']
169
+ if (!hasAuthority(to, permissions, roles)) {
170
+ message.warning(`对不起,您无权访问页面: ${to.fullPath},请联系管理员`)
171
+ next({ path: '/403' })
172
+ // NProgress.done()
173
+ } else {
174
+ next()
175
+ }
176
+ }
177
+
178
+ /**
179
+ * 混合导航模式下一级菜单跳转重定向
180
+ * @param to
181
+ * @param from
182
+ * @param next
183
+ * @param options
184
+ * @returns {*}
185
+ */
186
+ const redirectGuard = (to, from, next, options) => {
187
+ const { store } = options
188
+ const getFirstChild = (routes) => {
189
+ const route = routes[0]
190
+ if (!route.children || route.children.length === 0) {
191
+ return route
192
+ }
193
+ return getFirstChild(route.children)
194
+ }
195
+ if (store.state.setting.layout === 'mix') {
196
+ const firstMenu = store.getters['setting/firstMenu']
197
+ if (firstMenu.find((item) => item.fullPath === to.fullPath)) {
198
+ store.commit('setting/setActivatedFirst', to.fullPath)
199
+ const subMenu = store.getters['setting/subMenu']
200
+ if (subMenu.length > 0) {
201
+ const redirect = getFirstChild(subMenu)
202
+ return next({ path: redirect.fullPath })
203
+ }
204
+ }
205
+ }
206
+ next()
207
+ }
208
+
209
+ /**
210
+ * 进度条结束
211
+ * @param to
212
+ * @param form
213
+ * @param options
214
+ */
215
+ const progressDone = () => {
216
+ // finish progress bar
217
+ NProgress.done()
218
+ }
219
+
220
+ export default {
221
+ beforeEach: [progressStart, loginGuard, authorityGuard, redirectGuard],
222
+ afterEach: [progressDone],
223
+ }
@@ -1,27 +1,27 @@
1
- import { formatRoutes } from '@vue2-client/utils/routerUtil'
2
-
3
- // 不需要登录拦截的路由配置
4
- const loginIgnore = {
5
- names: ['404', '403'], // 根据路由名称匹配
6
- paths: ['/login', '/submitTicket', '/submitTicket/', '/ServiceReview', '/DynamicStatistics', '/NewDynamicStatistics'], // 根据路由fullPath匹配
7
- /**
8
- * 判断路由是否包含在该配置中
9
- * @param route vue-router 的 route 对象
10
- * @returns {boolean}
11
- */
12
- includes (route) {
13
- return this.names.includes(route.name) || this.paths.includes(route.path)
14
- }
15
- }
16
-
17
- /**
18
- * 初始化路由实例
19
- * @param isAsync 是否异步路由模式
20
- * @returns {RouterOptions}
21
- */
22
- function initRouter (isAsync) {
23
- const options = require('./async/config.async').default
24
- formatRoutes(options.routes)
25
- return options
26
- }
27
- export { loginIgnore, initRouter }
1
+ import { formatRoutes } from '@vue2-client/utils/routerUtil'
2
+
3
+ // 不需要登录拦截的路由配置
4
+ const loginIgnore = {
5
+ names: ['404', '403'], // 根据路由名称匹配
6
+ paths: ['/login', '/submitTicket', '/submitTicket/', '/ServiceReview', '/DynamicStatistics', '/NewDynamicStatistics'], // 根据路由fullPath匹配
7
+ /**
8
+ * 判断路由是否包含在该配置中
9
+ * @param route vue-router 的 route 对象
10
+ * @returns {boolean}
11
+ */
12
+ includes (route) {
13
+ return this.names.includes(route.name) || this.paths.includes(route.path)
14
+ }
15
+ }
16
+
17
+ /**
18
+ * 初始化路由实例
19
+ * @param isAsync 是否异步路由模式
20
+ * @returns {RouterOptions}
21
+ */
22
+ function initRouter (isAsync) {
23
+ const options = require('./async/config.async').default
24
+ formatRoutes(options.routes)
25
+ return options
26
+ }
27
+ export { loginIgnore, initRouter }
package/src/router.js CHANGED
@@ -1,19 +1,19 @@
1
- // 动态导入你的组件
2
- function loadView (view) {
3
- console.log('view', view)
4
- return () => import(/* webpackChunkName: "view-[request]" */ `@vue2-client/base-client/components/common/${view}`)
5
- }
6
-
7
- const routes = [
8
- // 对于每个路由,你都可以使用 'loadView' 方法动态加载对应的组件
9
- { path: '/Tree', component: loadView('Tree') },
10
- { path: '/XStepView', component: loadView('XStepView') },
11
- { path: '/Amis', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo') },
12
- { path: '/Amis2', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo2') },
13
- { path: '/DynamicStatistics', component: () => import('@vue2-client/pages/DynamicStatistics/index') },
14
- { path: '/NewDynamicStatistics', component: () => import('@vue2-client/pages/NewDynamicStatistics/index') },
15
- { path: '/submitTicket', component: () => import('@vue2-client/pages/system/ticket') },
16
- { path: '/submitTicket/', component: () => import('@vue2-client/pages/system/ticket') }
17
- // ... 其他路由
18
- ]
19
- export default routes
1
+ // 动态导入你的组件
2
+ function loadView (view) {
3
+ console.log('view', view)
4
+ return () => import(/* webpackChunkName: "view-[request]" */ `@vue2-client/base-client/components/common/${view}`)
5
+ }
6
+
7
+ const routes = [
8
+ // 对于每个路由,你都可以使用 'loadView' 方法动态加载对应的组件
9
+ { path: '/Tree', component: loadView('Tree') },
10
+ { path: '/XStepView', component: loadView('XStepView') },
11
+ { path: '/Amis', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo') },
12
+ { path: '/Amis2', component: () => import('@vue2-client/pages/AMisDemo/AMisDemo2') },
13
+ { path: '/DynamicStatistics', component: () => import('@vue2-client/pages/DynamicStatistics/index') },
14
+ { path: '/NewDynamicStatistics', component: () => import('@vue2-client/pages/NewDynamicStatistics/index') },
15
+ { path: '/submitTicket', component: () => import('@vue2-client/pages/system/ticket') },
16
+ { path: '/submitTicket/', component: () => import('@vue2-client/pages/system/ticket') }
17
+ // ... 其他路由
18
+ ]
19
+ export default routes
@@ -1,46 +1,46 @@
1
- const TicketDetailsViewApi = {
2
- // 查询:获取工单流转详情
3
- getTicketWorkFlowDetails: '/api/af-system/logic/getTicketWorkFlowDetails',
4
- // 查询:获取工单详情
5
- getTicketDetails: '/api/af-system/logic/getTicketDetails',
6
- // 手动关闭工单
7
- manualCloseTicket: '/api/af-system/logic/manualCloseTicket',
8
- // 转交工单给其他人
9
- transferTicketToOthers: '/api/af-system/logic/transferTicketToOthers',
10
- // 确认工单,开始处理
11
- confirmTicket: '/api/af-system/logic/confirmTicket',
12
- // 查询:获取订单详情用于订单追踪
13
- getTicketDetailsForUploader: '/api/af-system/logic/getTicketDetailsForUploader',
14
- // 更新:将工单优先级增加
15
- rushTicket: '/api/af-system/logic/rushTicket',
16
- // 客户手动关闭工单
17
- manualCloseTicketByCustomer: '/api/af-system/logic/manualCloseTicketByCustomer',
18
- // 在工单提交页面删除照片
19
- revocationImage: '/api/af-system/logic/revocationImage',
20
- // 在工单提交页面删除照片
21
- getTicketImages: '/api/af-system/logic/getTicketImages',
22
- // 用户填写附加信息时取消了操作,将已上传的照片清空
23
- removeAllImages: '/api/af-system/logic/removeAllImages',
24
- // 提交用户填写附加信息
25
- AddonDescriptionToTicket: '/api/af-system/logic/AddonDescriptionToTicket',
26
- // 获取用户填写附加信息
27
- getAddonDescription: '/api/af-system/logic/getAddonDescription',
28
- // 发起售后工单流程
29
- createTicket: '/api/af-system/logic/createTicket',
30
- // 查询:获取所有员工名,供前端展示备选项
31
- getAllEmployeeName: '/api/af-system/logic/getAllEmployeeName',
32
- // 改变报装进度
33
- updateApplySubState: '/api/af-system/logic/updateApplySubState',
34
- // 保存工作流日志
35
- saveApplyWorkflowLog: '/api/af-system/logic/saveApplyWorkflowLog',
36
- // 完工确认后更改报装状态
37
- afterApplyFinalStepSubmit: '/api/af-system/logic/afterApplyFinalStepSubmit',
38
- // 保存用户每一步输入的表单内容
39
- saveApplyStepFormData: '/api/af-system/logic/saveApplyStepFormData',
40
- // 用户点击 回退/提交 修改工单状态
41
- clientSubmit: '/api/af-system/logic/clientSubmit',
42
- // 获取已经完成步骤的用户填写数据
43
- getApplyCompletedStepData: '/api/af-system/logic/getApplyCompletedStepData',
44
- }
45
-
46
- export { TicketDetailsViewApi }
1
+ const TicketDetailsViewApi = {
2
+ // 查询:获取工单流转详情
3
+ getTicketWorkFlowDetails: '/api/af-system/logic/getTicketWorkFlowDetails',
4
+ // 查询:获取工单详情
5
+ getTicketDetails: '/api/af-system/logic/getTicketDetails',
6
+ // 手动关闭工单
7
+ manualCloseTicket: '/api/af-system/logic/manualCloseTicket',
8
+ // 转交工单给其他人
9
+ transferTicketToOthers: '/api/af-system/logic/transferTicketToOthers',
10
+ // 确认工单,开始处理
11
+ confirmTicket: '/api/af-system/logic/confirmTicket',
12
+ // 查询:获取订单详情用于订单追踪
13
+ getTicketDetailsForUploader: '/api/af-system/logic/getTicketDetailsForUploader',
14
+ // 更新:将工单优先级增加
15
+ rushTicket: '/api/af-system/logic/rushTicket',
16
+ // 客户手动关闭工单
17
+ manualCloseTicketByCustomer: '/api/af-system/logic/manualCloseTicketByCustomer',
18
+ // 在工单提交页面删除照片
19
+ revocationImage: '/api/af-system/logic/revocationImage',
20
+ // 在工单提交页面删除照片
21
+ getTicketImages: '/api/af-system/logic/getTicketImages',
22
+ // 用户填写附加信息时取消了操作,将已上传的照片清空
23
+ removeAllImages: '/api/af-system/logic/removeAllImages',
24
+ // 提交用户填写附加信息
25
+ AddonDescriptionToTicket: '/api/af-system/logic/AddonDescriptionToTicket',
26
+ // 获取用户填写附加信息
27
+ getAddonDescription: '/api/af-system/logic/getAddonDescription',
28
+ // 发起售后工单流程
29
+ createTicket: '/api/af-system/logic/createTicket',
30
+ // 查询:获取所有员工名,供前端展示备选项
31
+ getAllEmployeeName: '/api/af-system/logic/getAllEmployeeName',
32
+ // 改变报装进度
33
+ updateApplySubState: '/api/af-system/logic/updateApplySubState',
34
+ // 保存工作流日志
35
+ saveApplyWorkflowLog: '/api/af-system/logic/saveApplyWorkflowLog',
36
+ // 完工确认后更改报装状态
37
+ afterApplyFinalStepSubmit: '/api/af-system/logic/afterApplyFinalStepSubmit',
38
+ // 保存用户每一步输入的表单内容
39
+ saveApplyStepFormData: '/api/af-system/logic/saveApplyStepFormData',
40
+ // 用户点击 回退/提交 修改工单状态
41
+ clientSubmit: '/api/af-system/logic/clientSubmit',
42
+ // 获取已经完成步骤的用户填写数据
43
+ getApplyCompletedStepData: '/api/af-system/logic/getApplyCompletedStepData',
44
+ }
45
+
46
+ export { TicketDetailsViewApi }