|
|
@@ -2,35 +2,62 @@
|
|
|
<div style="position: absolute; width: 100%; height: 100%" class="modal-bg">
|
|
|
<a-spin class="loading-box" size="large" :spinning="loading" tip="正在加载,请稍等。。。" />
|
|
|
</div>
|
|
|
+ <MicroLoadError v-if="loadFailed" @retry="retryMount" />
|
|
|
<div id="micro-vent-3dModal"></div>
|
|
|
</template>
|
|
|
<script lang="ts">
|
|
|
import { ref, onMounted, onBeforeUnmount, defineComponent } from 'vue';
|
|
|
import { unmountMicroApps, mountMicroApp } from '/@/qiankun';
|
|
|
import { resetMicroContentWH } from '/@/utils/domUtils';
|
|
|
+ import MicroLoadError from './MicroLoadError.vue';
|
|
|
+ import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
|
|
|
+ import { ErrorTypeEnum } from '/@/enums/exceptionEnum';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'VentModel',
|
|
|
+ components: { MicroLoadError },
|
|
|
setup() {
|
|
|
const loading = ref(true);
|
|
|
- onMounted(() => {
|
|
|
+ // [SEC-20260913] 加载失败错误态:超时不再静默放行
|
|
|
+ const loadFailed = ref(false);
|
|
|
+ const startMount = () => {
|
|
|
// 判断子应用是否存在,不存在注册
|
|
|
// [fix-subapp-loading] mountMicroApp 同步抛错会让后续 resetMicroContentWH 不再执行 → 遮罩永久卡死;
|
|
|
// try/finally 保证就绪等待始终启动(配合 domUtils 的 60s 超时兜底)
|
|
|
try {
|
|
|
mountMicroApp('micro-vent-3dModal', true);
|
|
|
} finally {
|
|
|
- resetMicroContentWH('micro-vent-3dModal', () => {
|
|
|
- loading.value = false;
|
|
|
- });
|
|
|
+ resetMicroContentWH(
|
|
|
+ 'micro-vent-3dModal',
|
|
|
+ () => {
|
|
|
+ loading.value = false;
|
|
|
+ },
|
|
|
+ () => {
|
|
|
+ loadFailed.value = true;
|
|
|
+ // 失败埋点:复用既有 errorLog store
|
|
|
+ useErrorLogStoreWithOut().addErrorLogInfo({
|
|
|
+ type: ErrorTypeEnum.RESOURCE,
|
|
|
+ file: 'components/vent/micro/ventModal.vue',
|
|
|
+ name: 'MicroApp Load Timeout',
|
|
|
+ message: '子应用 micro-vent-3dModal 加载超时',
|
|
|
+ detail: 'resetMicroContentWH 等待容器内容超时',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
}
|
|
|
- });
|
|
|
+ };
|
|
|
+ const retryMount = () => {
|
|
|
+ loadFailed.value = false;
|
|
|
+ loading.value = true;
|
|
|
+ startMount();
|
|
|
+ };
|
|
|
+ onMounted(startMount);
|
|
|
|
|
|
onBeforeUnmount(async () => {
|
|
|
await unmountMicroApps(['micro-vent-3dModal']);
|
|
|
});
|
|
|
|
|
|
- return { loading };
|
|
|
+ return { loading, loadFailed, retryMount };
|
|
|
},
|
|
|
});
|
|
|
</script>
|