cloud-web-corejs 1.0.54-dev.745 → 1.0.54-dev.747

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