cloud-web-corejs 1.0.54-dev.771 → 1.0.54-dev.772
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
CHANGED
package/src/index.js
CHANGED
|
@@ -320,7 +320,13 @@ function resumeSubRouter() {
|
|
|
320
320
|
function syncSubRouter() {
|
|
321
321
|
const current = window.location.hash.replace(/^#/, "") || "/";
|
|
322
322
|
if (router.currentRoute.fullPath !== current) {
|
|
323
|
-
router.push
|
|
323
|
+
// vue-router 3.0.2 的 push 不返回 Promise(3.1.0 才加),直接 .catch 会读到
|
|
324
|
+
// undefined 抛错,且此调用发生在 qiankun update 生命周期内——异常会让 parcel 直接
|
|
325
|
+
// died、后续所有 update(含页签刷新转发)失效。仅当 push 返回 Promise 时才吞异常。
|
|
326
|
+
const nav = router.push(current);
|
|
327
|
+
if (nav && typeof nav.catch === "function") {
|
|
328
|
+
nav.catch(() => {});
|
|
329
|
+
}
|
|
324
330
|
}
|
|
325
331
|
}
|
|
326
332
|
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
<el-dropdown-item @click.native="refreshSelectedTag($route)" :disabled="getIsLock()">
|
|
38
38
|
<i class="el-icon-refresh"/><span>{{ $t1('刷新') }}</span>
|
|
39
39
|
</el-dropdown-item>
|
|
40
|
-
<el-dropdown-item @click.native="closeAllTags(
|
|
40
|
+
<el-dropdown-item @click.native="closeAllTags($route)">
|
|
41
41
|
<i class="el-icon-close"/><span>{{ $t1('全部关闭') }}</span>
|
|
42
42
|
</el-dropdown-item>
|
|
43
43
|
</el-dropdown-menu>
|
package/src/microRouter/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 由 permission store 在登录后菜单生成流程中调用(settings.microMainEnabled 门控)。
|
|
6
6
|
*/
|
|
7
7
|
import { loadMicroApp } from "qiankun";
|
|
8
|
+
import { Loading } from "element-ui";
|
|
8
9
|
import { getLogicParamValue } from "@base/api/user";
|
|
9
10
|
import {
|
|
10
11
|
getAccessPath,
|
|
@@ -248,6 +249,19 @@ function activateMicroApp(key) {
|
|
|
248
249
|
+ "/ 即回到正式环境)"
|
|
249
250
|
);
|
|
250
251
|
}
|
|
252
|
+
// 子应用是另一套系统,首次装载要下载其全量资源、耗时明显,期间容器空白。
|
|
253
|
+
// loading 只盖内容区,不遮页签,也不挂子应用容器 el(el 会被 qiankun 写 innerHTML
|
|
254
|
+
// 清掉,且空 #Appmicro 高度为 0):挂到有尺寸、qiankun 不碰的 .app-main,
|
|
255
|
+
// 再把遮罩顶边下移到 #Appmicro 的位置(offsetTop = 固定表头里页签的占位高度,
|
|
256
|
+
// 动态读取不写死),从而避开顶部的页签栏。挂载成功 / 失败都关闭。
|
|
257
|
+
const appMain = wrapper.closest(".app-main");
|
|
258
|
+
const loadingInstance = Loading.service({
|
|
259
|
+
target: appMain || wrapper,
|
|
260
|
+
text: "加载中…",
|
|
261
|
+
});
|
|
262
|
+
if (appMain && loadingInstance.$el && loadingInstance.$el.style) {
|
|
263
|
+
loadingInstance.$el.style.top = wrapper.offsetTop + "px";
|
|
264
|
+
}
|
|
251
265
|
let instance;
|
|
252
266
|
try {
|
|
253
267
|
instance = loadMicroApp({
|
|
@@ -257,6 +271,7 @@ function activateMicroApp(key) {
|
|
|
257
271
|
props: config.props,
|
|
258
272
|
});
|
|
259
273
|
} catch (error) {
|
|
274
|
+
loadingInstance.close();
|
|
260
275
|
if (el.parentNode) {
|
|
261
276
|
el.parentNode.removeChild(el);
|
|
262
277
|
}
|
|
@@ -268,11 +283,17 @@ function activateMicroApp(key) {
|
|
|
268
283
|
if (
|
|
269
284
|
instance
|
|
270
285
|
&& instance.mountPromise
|
|
271
|
-
&& typeof instance.mountPromise.
|
|
286
|
+
&& typeof instance.mountPromise.then === "function"
|
|
272
287
|
) {
|
|
273
|
-
instance.mountPromise
|
|
274
|
-
|
|
275
|
-
|
|
288
|
+
instance.mountPromise
|
|
289
|
+
.then(() => loadingInstance.close())
|
|
290
|
+
.catch((error) => {
|
|
291
|
+
loadingInstance.close();
|
|
292
|
+
cleanupFailedMicroApp(key, createdAlive, error);
|
|
293
|
+
});
|
|
294
|
+
} else {
|
|
295
|
+
// 理论不会走到(loadMicroApp 恒返回带 mountPromise 的实例),兜底避免遮罩悬挂
|
|
296
|
+
loadingInstance.close();
|
|
276
297
|
}
|
|
277
298
|
return;
|
|
278
299
|
}
|
|
@@ -398,7 +419,12 @@ function createDefaultMainAdapter() {
|
|
|
398
419
|
navigate(path) {
|
|
399
420
|
const vueRoot = window.$vueRoot;
|
|
400
421
|
if (vueRoot && vueRoot.$router) {
|
|
401
|
-
|
|
422
|
+
// vue-router 3.0.2 的 push 返回 undefined(3.1.0 才返回 Promise),
|
|
423
|
+
// 直接 .catch 会抛 "reading 'catch'",仅在返回 Promise 时才吞异常
|
|
424
|
+
const nav = vueRoot.$router.push(path);
|
|
425
|
+
if (nav && typeof nav.catch === "function") {
|
|
426
|
+
nav.catch(() => {});
|
|
427
|
+
}
|
|
402
428
|
}
|
|
403
429
|
},
|
|
404
430
|
openTab(path) {
|
package/src/public-path.js
CHANGED
|
@@ -6,3 +6,33 @@
|
|
|
6
6
|
if (window.__POWERED_BY_QIANKUN__) {
|
|
7
7
|
__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* API base 运行时解析:解决"被外部域名的主应用嵌入时,相对 baseURL 会误打主应用域名"。
|
|
12
|
+
* 消费应用的 vue.config.js 经 DefinePlugin 把每个 process.env.VUE_APP_BASE_API 编译成
|
|
13
|
+
* window.__resolveApiBase__("<原值>") 的调用,于是 request.js 及一切读该值的模块运行时按下述规则求值:
|
|
14
|
+
* 独立运行 → 原值(相对地址命中自身域名,行为不变)
|
|
15
|
+
* 子应用挂载:
|
|
16
|
+
* 原值是域名(绝对) → 原值(含协议相对 //host)
|
|
17
|
+
* 原值不是域名 → 子应用自身 origin + 原值("" → origin;"/gapi" → origin+"/gapi")
|
|
18
|
+
* 前提:API 与子应用静态资源同源部署(origin 即后端所在域名,路径前缀由原值补齐)。
|
|
19
|
+
* 该 helper 只接受调用点传入的原值作参数、绝不引用 process.env.VUE_APP_BASE_API,
|
|
20
|
+
* 以免被 DefinePlugin 递归改写成自我调用。
|
|
21
|
+
*/
|
|
22
|
+
if (!window.__resolveApiBase__) {
|
|
23
|
+
window.__resolveApiBase__ = function (raw) {
|
|
24
|
+
raw = raw || "";
|
|
25
|
+
if (!window.__POWERED_BY_QIANKUN__) return raw;
|
|
26
|
+
// http:// https:// 以及协议相对 //host 都算"是域名",原样返回
|
|
27
|
+
if (/^(https?:)?\/\//.test(raw)) return raw;
|
|
28
|
+
try {
|
|
29
|
+
var origin = new URL(
|
|
30
|
+
window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__,
|
|
31
|
+
window.location.href
|
|
32
|
+
).origin;
|
|
33
|
+
return origin + raw;
|
|
34
|
+
} catch (e) {
|
|
35
|
+
return raw;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|