cloud-web-corejs 1.0.54-dev.744 → 1.0.54-dev.746
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +192 -192
- package/src/App.vue +73 -71
- package/src/components/baseArea/index.vue +1628 -1628
- package/src/components/fileLibrary/categoryMoveDialog.vue +109 -109
- package/src/components/fileLibrary/fileObjAuthDialog.vue +297 -298
- package/src/components/fileLibrary/index.vue +1109 -1110
- package/src/components/fileLibrary/propertiesDialog.vue +190 -190
- package/src/components/fileLibrary/recycleBinDialog.vue +237 -236
- package/src/components/wf/mixins/setCandidateDialog.js +217 -217
- package/src/components/wf/mixins/setCandidateDialog2.js +252 -252
- package/src/components/xform/docs//345/257/271/346/257/224/345/212/237/350/203/275/350/220/275/345/234/260/346/226/271/346/241/210.md +986 -986
- package/src/components/xform/form-designer/form-widget/dialog/baseFormulaDialog copy.vue +971 -0
- package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +408 -0
- package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +272 -272
- package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +216 -216
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +928 -928
- package/src/components/xform/form-designer/index.vue +195 -195
- package/src/components/xform/form-designer/indexMixin.js +848 -848
- package/src/components/xform/form-designer/setting-panel/index.vue +313 -314
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/columnRenderDialog.vue +124 -124
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +369 -369
- package/src/components/xform/form-designer/widget-panel/index.vue +389 -389
- package/src/components/xform/form-designer/widget-panel/indexMixin.js +343 -343
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +4531 -4531
- package/src/components/xform/form-render/container-item/data-table-mixin.js +4748 -4576
- package/src/components/xform/form-render/container-item/tab-item.vue +125 -125
- package/src/components/xform/form-render/indexMixin.js +5061 -5078
- package/src/components/xform/lang/en-US.js +457 -457
- package/src/components/xform/lang/zh-CN.js +628 -628
- package/src/components/xform/utils/formHttp.js +162 -0
- package/src/components/xform/utils/util.js +1585 -1554
- package/src/index.js +344 -230
- package/src/layout/components/AppMain.vue +122 -122
- package/src/layout/components/extractedCode/viewDialog.vue +207 -207
- package/src/layout/components/langTool.vue +128 -123
- package/src/layout/defaultLayout.vue +164 -158
- package/src/permission.js +185 -135
- package/src/store/config/index.js +667 -669
- package/src/store/modules/micro.js +46 -0
- package/src/store/modules/permission.js +461 -373
- package/src/store/modules/user.js +419 -415
- package/src/utils/auth.js +27 -1
- package/src/utils/index.js +579 -6
- package/src/utils/keepAlive.js +4 -0
- package/src/utils/menuAdapter.js +183 -0
- package/src/utils/request.js +417 -28
- package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +483 -491
- package/src/views/bd/setting/form_script/form_list.vue +174 -174
- package/src/views/bd/setting/form_script/mixins/form_list.js +330 -330
- package/src/views/bd/setting/form_template/formDesignerDialog.vue +171 -171
- package/src/views/bd/setting/form_template/wfObjConfigDialog.vue +253 -254
- package/src/views/user/menuFallback/index.vue +123 -0
- package/src/views/user/wf/wfReport/index.vue +625 -619
|
@@ -1,373 +1,461 @@
|
|
|
1
|
-
import {
|
|
2
|
-
constantRoutes,
|
|
3
|
-
} from '@base/router';
|
|
4
|
-
import {
|
|
5
|
-
asyncRoutes,
|
|
6
|
-
sidebarRoutes
|
|
7
|
-
} from '@base/router/modules/system';
|
|
8
|
-
import Layout from '@/layout';
|
|
9
|
-
import {
|
|
10
|
-
getRouters
|
|
11
|
-
} from '../../api/menu'
|
|
12
|
-
import router from "@base/router";
|
|
13
|
-
import storeConfig from "../config/index";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
1
|
+
import {
|
|
2
|
+
constantRoutes,
|
|
3
|
+
} from '@base/router';
|
|
4
|
+
import {
|
|
5
|
+
asyncRoutes,
|
|
6
|
+
sidebarRoutes
|
|
7
|
+
} from '@base/router/modules/system';
|
|
8
|
+
import Layout from '@/layout';
|
|
9
|
+
import {
|
|
10
|
+
getRouters
|
|
11
|
+
} from '../../api/menu'
|
|
12
|
+
import router from "@base/router";
|
|
13
|
+
import storeConfig from "../config/index";
|
|
14
|
+
import settings from "@base/settings";
|
|
15
|
+
import { resolveComponentPath, resolveOwner, dispatchMenus } from "@base/utils/menuAdapter";
|
|
16
|
+
import { getAppRegistry, registerSubApps, buildSubAppRoutes } from "@base/microRouter";
|
|
17
|
+
import MenuFallback from "@base/views/user/menuFallback/index.vue";
|
|
18
|
+
|
|
19
|
+
// qiankun 宿主态(仅 settings.microMainEnabled 的主应用登录后填充)
|
|
20
|
+
let hostRegistryApps = [];
|
|
21
|
+
let hostMicroRoutes = [];
|
|
22
|
+
|
|
23
|
+
// 下发给子应用的登录信息快照(props.userInfo,协议第 5 节);注册时快照,非实时
|
|
24
|
+
function buildUserInfoSnapshot(userState = {}) {
|
|
25
|
+
return {
|
|
26
|
+
userId: userState.userId,
|
|
27
|
+
loginAccount: userState.loginAccount,
|
|
28
|
+
name: userState.name,
|
|
29
|
+
nickName: userState.nickName,
|
|
30
|
+
companyCode: userState.companyCode,
|
|
31
|
+
companyInfoId: userState.companyInfoId,
|
|
32
|
+
roles: userState.roles || [],
|
|
33
|
+
userFlag: userState.userFlag,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let modules = {};
|
|
38
|
+
|
|
39
|
+
// loadView 失败兜底:独立运行点到别家应用的菜单 / 菜单配置错误时展示提示页
|
|
40
|
+
function createFallbackComponent(view, error) {
|
|
41
|
+
return {
|
|
42
|
+
name: "menuLoadFallback",
|
|
43
|
+
render(h) {
|
|
44
|
+
return h(MenuFallback, {
|
|
45
|
+
props: {
|
|
46
|
+
componentPath: view || "",
|
|
47
|
+
loadError: (error && (error.message || String(error))) || "",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
let configUtl = {
|
|
55
|
+
asyncRoutes,
|
|
56
|
+
constantRoutes,
|
|
57
|
+
sidebarRoutes,
|
|
58
|
+
Layout,
|
|
59
|
+
getRouters,
|
|
60
|
+
loadView: function (view) {
|
|
61
|
+
return (resolve) => {
|
|
62
|
+
const fail = (e) => resolve(createFallbackComponent(view, e));
|
|
63
|
+
try {
|
|
64
|
+
if (view) {
|
|
65
|
+
let t = "@base/views"
|
|
66
|
+
// let t2 = "@/components"
|
|
67
|
+
if (view.startsWith(t)) {
|
|
68
|
+
let path = view.substr(t.length);
|
|
69
|
+
return require(['../../views' + path], resolve, fail);
|
|
70
|
+
}/* else if (view.startsWith(t2)) {
|
|
71
|
+
let path = view.substr(t2.length);
|
|
72
|
+
return require(['@/components' + path], resolve, fail);
|
|
73
|
+
} */
|
|
74
|
+
}
|
|
75
|
+
return require(['@/views' + view], resolve, fail)
|
|
76
|
+
} catch (e) {
|
|
77
|
+
fail(e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const loadView = (view) => { // 路由懒加载
|
|
84
|
+
if (view) {
|
|
85
|
+
let tIndex = view.lastIndexOf("?");
|
|
86
|
+
let newView = view;
|
|
87
|
+
if (tIndex >= 0) {
|
|
88
|
+
newView = view.substring(0, tIndex);
|
|
89
|
+
}
|
|
90
|
+
return configUtl.loadView(newView);
|
|
91
|
+
} else {
|
|
92
|
+
return () => {
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Use meta.role to determine if the current user has permission
|
|
100
|
+
* @param roles
|
|
101
|
+
* @param route
|
|
102
|
+
*/
|
|
103
|
+
function hasPermission(roles, route) {
|
|
104
|
+
if (route.meta && route.meta.roles) {
|
|
105
|
+
return roles.some(role => route.meta.roles.includes(role));
|
|
106
|
+
} else {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Filter asynchronous routing tables by recursion
|
|
113
|
+
* @param routes asyncRoutes
|
|
114
|
+
* @param roles
|
|
115
|
+
*/
|
|
116
|
+
function filterAsyncRoutes(routes, roles) {
|
|
117
|
+
const res = [];
|
|
118
|
+
|
|
119
|
+
routes.forEach(route => {
|
|
120
|
+
const tmp = {
|
|
121
|
+
...route
|
|
122
|
+
};
|
|
123
|
+
if (hasPermission(roles, tmp)) {
|
|
124
|
+
if (tmp.children) {
|
|
125
|
+
tmp.children = filterAsyncRoutes(tmp.children, roles);
|
|
126
|
+
}
|
|
127
|
+
res.push(tmp);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return res;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const state = {
|
|
134
|
+
routes: [],
|
|
135
|
+
addRoutes: [],
|
|
136
|
+
sidebarRouters: [],
|
|
137
|
+
// 注册表里的别家 appCode 列表(宿主/独立运行时填充),
|
|
138
|
+
// menuFallback 据此判定"归属别家应用",避免把普通组件加载失败误判成别家菜单
|
|
139
|
+
registryAppCodes: []
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const mutations = {
|
|
143
|
+
SET_ROUTES: (state, routes) => {
|
|
144
|
+
state.addRoutes = routes;
|
|
145
|
+
state.routes = configUtl.constantRoutes.concat(routes);
|
|
146
|
+
},
|
|
147
|
+
SET_SIDEBAR_ROUTERS: (state, routers) => {
|
|
148
|
+
state.sidebarRouters = routers;
|
|
149
|
+
},
|
|
150
|
+
SET_REGISTRY_APP_CODES: (state, appCodes) => {
|
|
151
|
+
state.registryAppCodes = appCodes || [];
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const actions = {
|
|
156
|
+
generateRoutes(opt, roles) {
|
|
157
|
+
let commit = opt.commit;
|
|
158
|
+
return new Promise(resolve => {
|
|
159
|
+
let accessedRoutes;
|
|
160
|
+
if (roles.includes('admin')) {
|
|
161
|
+
accessedRoutes = configUtl.asyncRoutes || [];
|
|
162
|
+
} else {
|
|
163
|
+
accessedRoutes = filterAsyncRoutes(configUtl.asyncRoutes, roles);
|
|
164
|
+
}
|
|
165
|
+
commit('SET_SIDEBAR_ROUTERS', configUtl.sidebarRoutes || []);
|
|
166
|
+
resolve(accessedRoutes);
|
|
167
|
+
});
|
|
168
|
+
},
|
|
169
|
+
generateRoutes2(opt, user) {
|
|
170
|
+
let commit = opt.commit;
|
|
171
|
+
let dispatch = opt.dispatch;
|
|
172
|
+
let isBdAdmin = opt.rootGetters.isBdAdmin;
|
|
173
|
+
return new Promise(resolve => {
|
|
174
|
+
if (!isBdAdmin) {
|
|
175
|
+
configUtl.getRouters({
|
|
176
|
+
success: res => {
|
|
177
|
+
var rows = res.objx || [];
|
|
178
|
+
dispatch('setupHostAndRoutes', rows).then((accessedRoutes) => {
|
|
179
|
+
resolve(accessedRoutes);
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
} else {
|
|
184
|
+
let flag = user?.flag ?? null;
|
|
185
|
+
let userFlagMenuMap = storeConfig?.userFlagMenuMap || {};
|
|
186
|
+
let rows = userFlagMenuMap[flag] || []
|
|
187
|
+
dispatch('setupHostAndRoutes', rows).then((accessedRoutes) => {
|
|
188
|
+
resolve(accessedRoutes);
|
|
189
|
+
})
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
// qiankun 宿主编排:拉注册表 → 按归属切分 → 注册子应用,再走常规路由生成。
|
|
194
|
+
// 非宿主(未开 microMainEnabled / 自身被 qiankun 挂载)直接透传。
|
|
195
|
+
setupHostAndRoutes({dispatch, commit, rootState}, rows = []) {
|
|
196
|
+
let isHost = settings.microMainEnabled === true && !window.__POWERED_BY_QIANKUN__;
|
|
197
|
+
if (!isHost) {
|
|
198
|
+
return dispatch('setSidebarRoute', rows);
|
|
199
|
+
}
|
|
200
|
+
return getAppRegistry().then((apps) => {
|
|
201
|
+
// 自排除:自身也在注册表时(子应用开宿主形态互访别家应用)不装载自己,
|
|
202
|
+
// 否则会自嵌套且自身菜单被误判为"派发给子应用"而跳过本地路由
|
|
203
|
+
let ownAppCode = settings.appCode || "";
|
|
204
|
+
hostRegistryApps = (apps || []).filter((app) => app.appCode !== ownAppCode);
|
|
205
|
+
commit('SET_REGISTRY_APP_CODES', hostRegistryApps.map((app) => app.appCode));
|
|
206
|
+
let { subAppMenus } = dispatchMenus(rows, hostRegistryApps);
|
|
207
|
+
hostMicroRoutes = buildSubAppRoutes(hostRegistryApps, subAppMenus);
|
|
208
|
+
if (hostRegistryApps.length) {
|
|
209
|
+
registerSubApps(hostRegistryApps, {
|
|
210
|
+
subAppMenus,
|
|
211
|
+
userInfo: buildUserInfoSnapshot(rootState.user),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return dispatch('setSidebarRoute', rows);
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
// qiankun 子应用模式:主应用经 props 下发菜单,替代 getRouters 自拉
|
|
218
|
+
generateRoutesFromProps({dispatch}, menus = []) {
|
|
219
|
+
return dispatch('setSidebarRoute', menus);
|
|
220
|
+
},
|
|
221
|
+
setSidebarRoute({commit, dispatch}, rows = []) {
|
|
222
|
+
return new Promise(resolve => {
|
|
223
|
+
let accessedRoutes = handleMenuRoutes(JSON.parse(JSON.stringify(
|
|
224
|
+
rows))) || [];
|
|
225
|
+
let nsidebarRoutes = handleSidebarRoutes(JSON.parse(JSON.stringify(
|
|
226
|
+
rows))) || [];
|
|
227
|
+
commit('SET_SIDEBAR_ROUTERS', nsidebarRoutes);
|
|
228
|
+
commit('SET_ROUTES', accessedRoutes);
|
|
229
|
+
router.addRoutes(accessedRoutes); // 动态添加可访问路由表
|
|
230
|
+
resolve(accessedRoutes)
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
function getUrlParams(url) {
|
|
237
|
+
let urlStr = url.split('?')[1];
|
|
238
|
+
const urlSearchParams = new URLSearchParams(urlStr);
|
|
239
|
+
const result = Object.fromEntries(urlSearchParams.entries());
|
|
240
|
+
return result;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// 宿主态下归属子应用的菜单不生成本地组件路由(否则会遮住 /appCode/* 通配路由),
|
|
244
|
+
// 由子应用经 qiankun 渲染;侧边栏 handleSidebarRoutes 仍保留全量
|
|
245
|
+
function isDelegatedToSubApp(route) {
|
|
246
|
+
return hostRegistryApps.length > 0 && !!resolveOwner(route, hostRegistryApps);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function handleMenuRoutes(routes) {
|
|
250
|
+
var sidebarRoutes = {
|
|
251
|
+
path: '',
|
|
252
|
+
component: configUtl.Layout,
|
|
253
|
+
};
|
|
254
|
+
var children = [];
|
|
255
|
+
routes.forEach((route1, index1) => {
|
|
256
|
+
let item1 = createRoute3(route1);
|
|
257
|
+
if (item1 && item1.path && !isDelegatedToSubApp(route1)) {
|
|
258
|
+
children.push(item1);
|
|
259
|
+
}
|
|
260
|
+
if (route1.children) {
|
|
261
|
+
route1.children.forEach((route2, index2) => {
|
|
262
|
+
let item2 = createRoute3(route2);
|
|
263
|
+
if (item2 && item2.path && !isDelegatedToSubApp(route2)) {
|
|
264
|
+
children.push(item2);
|
|
265
|
+
}
|
|
266
|
+
if (route2.children) {
|
|
267
|
+
route2.children.forEach((route3, index3) => {
|
|
268
|
+
let item = createRoute3(route3);
|
|
269
|
+
if (item && item.path && !isDelegatedToSubApp(route3)) {
|
|
270
|
+
children.push(item);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
// 每个子应用一条通配路由,位于全局 * 兜底之前
|
|
279
|
+
hostMicroRoutes.forEach((microRoute) => {
|
|
280
|
+
children.push(microRoute);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
sidebarRoutes.children = children;
|
|
284
|
+
var result = [sidebarRoutes];
|
|
285
|
+
result.push({
|
|
286
|
+
path: '*',
|
|
287
|
+
redirect: '/404',
|
|
288
|
+
hidden: true
|
|
289
|
+
});
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function createRoute3(route3, flag) {
|
|
294
|
+
let item = null;
|
|
295
|
+
if (route3.type == 0) {
|
|
296
|
+
//普通菜单
|
|
297
|
+
let componentPath;
|
|
298
|
+
let menuCode;
|
|
299
|
+
let param = null;
|
|
300
|
+
let url = "";
|
|
301
|
+
let path = "";
|
|
302
|
+
if (route3.url) {
|
|
303
|
+
url = route3.url;
|
|
304
|
+
path = route3.route || route3.url;
|
|
305
|
+
let str = "/report/vform/render/";
|
|
306
|
+
if (path.indexOf(str) == 0) {
|
|
307
|
+
componentPath = "/report/vform/render";
|
|
308
|
+
menuCode = "vform_render";
|
|
309
|
+
} else {
|
|
310
|
+
let pIndex = path.indexOf('?');
|
|
311
|
+
if (pIndex > 0) {
|
|
312
|
+
param = getUrlParams(path);
|
|
313
|
+
path = path.substring(0, pIndex);
|
|
314
|
+
}
|
|
315
|
+
// 三步解析第 3 步:/base/ 命名空间转 @base/views;url 首段为本应用 appCode 时剥掉
|
|
316
|
+
componentPath = resolveComponentPath(route3, settings.appCode || "");
|
|
317
|
+
menuCode = route3.menuCode;
|
|
318
|
+
}
|
|
319
|
+
} else {
|
|
320
|
+
componentPath = '';
|
|
321
|
+
menuCode = route3.menuCode;
|
|
322
|
+
}
|
|
323
|
+
if (path && path.startsWith("@")) {
|
|
324
|
+
// path = "/" + path;
|
|
325
|
+
path = null
|
|
326
|
+
componentPath = ""
|
|
327
|
+
}
|
|
328
|
+
item = {
|
|
329
|
+
id: route3.id,
|
|
330
|
+
menuName: route3.menuName,
|
|
331
|
+
menuEnName: route3.menuEnName || null,
|
|
332
|
+
menuCode: route3.menuCode,
|
|
333
|
+
menuImg: route3.menuImg,
|
|
334
|
+
treePathName: route3.treePathName,
|
|
335
|
+
type: route3.type,
|
|
336
|
+
url: path,
|
|
337
|
+
path: path,
|
|
338
|
+
linkType: route3.type,
|
|
339
|
+
component: loadView(componentPath),
|
|
340
|
+
name: menuCode,
|
|
341
|
+
meta: {
|
|
342
|
+
title: route3.menuName,
|
|
343
|
+
enTitle: route3.menuEnName || null,
|
|
344
|
+
treePathName: route3.treePathName,
|
|
345
|
+
param: param,
|
|
346
|
+
repeatOpen: route3.repeatOpen
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (flag !== 1) {
|
|
350
|
+
item.component = loadView(componentPath);
|
|
351
|
+
}
|
|
352
|
+
} else if (route3.type == 3) {
|
|
353
|
+
//外部菜单
|
|
354
|
+
let menuCode = route3.menuCode;
|
|
355
|
+
let componentPath = "@base/views/user/outLink/index";
|
|
356
|
+
let path = route3.route || ("/user/outLink/index" + "/" + menuCode);
|
|
357
|
+
item = {
|
|
358
|
+
id: route3.id,
|
|
359
|
+
menuName: route3.menuName,
|
|
360
|
+
menuEnName: route3.menuEnName || null,
|
|
361
|
+
menuCode: route3.menuCode,
|
|
362
|
+
menuImg: route3.menuImg,
|
|
363
|
+
treePathName: route3.treePathName,
|
|
364
|
+
type: route3.type,
|
|
365
|
+
url: path,
|
|
366
|
+
path: path,
|
|
367
|
+
outLink: route3.url || '',
|
|
368
|
+
linkType: route3.type,
|
|
369
|
+
route: route3.route,
|
|
370
|
+
name: "outLink",
|
|
371
|
+
meta: {
|
|
372
|
+
title: route3.menuName,
|
|
373
|
+
enTitle: route3.menuName || null,
|
|
374
|
+
treePathName: route3.treePathName
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
if (flag !== 1) {
|
|
378
|
+
item.component = loadView(componentPath);
|
|
379
|
+
}
|
|
380
|
+
} else if (route3.type == 4) {
|
|
381
|
+
//第三方地址
|
|
382
|
+
if (flag == 1) {
|
|
383
|
+
item = route3;
|
|
384
|
+
item.path = route3.url;
|
|
385
|
+
item.linkType = route3.type;
|
|
386
|
+
item.meta = {
|
|
387
|
+
title: route3.menuName,
|
|
388
|
+
enTitle: route3.menuEnName || null,
|
|
389
|
+
treePathName: route3.treePathName
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
} else if (route3.type == 5) {
|
|
393
|
+
//动态表单
|
|
394
|
+
let menuCode = route3.menuCode;
|
|
395
|
+
let componentPath = "@base/views/user/form/view/list";
|
|
396
|
+
let url = route3.route || route3.url;
|
|
397
|
+
item = {
|
|
398
|
+
id: route3.id,
|
|
399
|
+
menuName: route3.menuName,
|
|
400
|
+
menuEnName: route3.menuEnName || null,
|
|
401
|
+
menuCode: route3.menuCode,
|
|
402
|
+
menuImg: route3.menuImg,
|
|
403
|
+
treePathName: route3.treePathName,
|
|
404
|
+
type: route3.type,
|
|
405
|
+
url: url,
|
|
406
|
+
path: url,
|
|
407
|
+
linkType: route3.type,
|
|
408
|
+
name: "form_view:list",
|
|
409
|
+
meta: {
|
|
410
|
+
title: route3.menuName,
|
|
411
|
+
enTitle: route3.menuEnName || null,
|
|
412
|
+
treePathName: route3.treePathName,
|
|
413
|
+
repeatOpen: route3.repeatOpen
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
if (flag !== 1) {
|
|
417
|
+
item.component = loadView(componentPath);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
return item;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
function handleSidebarRoutes(routes) {
|
|
424
|
+
return routes.map(route1 => {
|
|
425
|
+
let item1 = createRoute3(route1, 1);
|
|
426
|
+
if (item1) {
|
|
427
|
+
let children1 = [];
|
|
428
|
+
if (route1.children) {
|
|
429
|
+
route1.children.forEach((route2, index2) => {
|
|
430
|
+
let item2 = createRoute3(route2, 1);
|
|
431
|
+
if (item2) {
|
|
432
|
+
let children2 = [];
|
|
433
|
+
if (route2.children) {
|
|
434
|
+
route2.children.forEach((route3, index3) => {
|
|
435
|
+
let item3 = createRoute3(route3, 1);
|
|
436
|
+
if (item3) {
|
|
437
|
+
children2.push(item3);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
item2.children = children2;
|
|
442
|
+
children1.push(item2)
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
item1.children = children1;
|
|
448
|
+
}
|
|
449
|
+
return item1;
|
|
450
|
+
}).filter(route => route != null);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
modules = {
|
|
454
|
+
namespaced: true,
|
|
455
|
+
state,
|
|
456
|
+
mutations,
|
|
457
|
+
actions,
|
|
458
|
+
filterAsyncRoutes
|
|
459
|
+
};
|
|
460
|
+
|
|
461
|
+
export default modules
|