no message

This commit is contained in:
kuaifan 2025-05-06 09:08:07 +08:00
parent 5581d1431b
commit cd494b52a4
2 changed files with 54 additions and 38 deletions

View File

@ -1,9 +1,9 @@
<template> <template>
<micro-app <micro-app
v-if="details.mode=='page'" v-if="appConfig.displayMode=='page'"
v-show="details.show" v-show="appConfig.isVisible"
:name="details.name" :name="appConfig.appName"
:url="details.url" :url="appConfig.appUrl"
:data="appData" :data="appData"
@created="created" @created="created"
@beforemount="beforemount" @beforemount="beforemount"
@ -11,17 +11,17 @@
@unmount="unmount" @unmount="unmount"
@error="error"/> @error="error"/>
<DrawerOverlay <DrawerOverlay
v-else-if="details.mode=='drawer'" v-else-if="appConfig.displayMode=='drawer'"
v-model="details.show" v-model="appConfig.isVisible"
ref="drawer" ref="drawer"
placement="right" placement="right"
modal-class="micro-apps-modal" modal-class="micro-apps-modal"
drawer-class="micro-apps-drawer" drawer-class="micro-apps-drawer"
:size="1200"> :size="1200">
<div v-if="details.show" class="page-microapp"> <div v-if="appConfig.isVisible" class="page-microapp">
<micro-app <micro-app
:name="details.name" :name="appConfig.appName"
:url="details.url" :url="appConfig.appUrl"
:data="appData" :data="appData"
@created="created" @created="created"
@beforemount="beforemount" @beforemount="beforemount"
@ -52,7 +52,7 @@
import Vue from 'vue' import Vue from 'vue'
import store from '../store/index' import store from '../store/index'
import {mapState} from "vuex"; import {mapState} from "vuex";
import {unmountAllApps} from '@micro-zoe/micro-app' import {unmountApp, unmountAllApps} from '@micro-zoe/micro-app'
import DialogWrapper from '../pages/manage/components/DialogWrapper.vue' import DialogWrapper from '../pages/manage/components/DialogWrapper.vue'
import UserSelect from "./UserSelect.vue"; import UserSelect from "./UserSelect.vue";
import {languageList, languageName} from "../language"; import {languageList, languageName} from "../language";
@ -60,7 +60,7 @@ import {DatePicker} from 'view-design-hi';
import DrawerOverlay from "./DrawerOverlay/index.vue"; import DrawerOverlay from "./DrawerOverlay/index.vue";
import emitter from "../store/events"; import emitter from "../store/events";
const mountApps = new Map(); const microApps = new Map();
export default { export default {
name: "MicroApps", name: "MicroApps",
@ -69,7 +69,7 @@ export default {
data() { data() {
return { return {
loadIng: 0, loadIng: 0,
details: {}, appConfig: {},
} }
}, },
@ -108,7 +108,7 @@ export default {
}, },
datas: { datas: {
...this.details.params, ...this.appConfig.initialData,
// theme: this.themeName, // theme: this.themeName,
themeName: this.themeName, themeName: this.themeName,
@ -152,15 +152,16 @@ export default {
methods: { methods: {
// //
created(e) { created(e) {
if (!mountApps.has(e.detail.name)) { const item = microApps.get(e.detail.name)
if (item?.isLoading) {
this.loadIng++ this.loadIng++
} }
}, },
// //
beforemount(e) { beforemount(e) {
if (!mountApps.has(e.detail.name)) { const item = microApps.get(e.detail.name)
mountApps.set(e.detail.name, e.detail.name); if (item?.isLoading) {
this.loadIng-- this.loadIng--
} }
}, },
@ -179,16 +180,31 @@ export default {
/** /**
* 打开微应用 * 打开微应用
* @param data * @param config
*/ */
openMicroApp(data) { openMicroApp(config) {
this.details = Object.assign({ //
mode: 'drawer', // page, drawer config = Object.assign({
name: 'drawer-app', // appName: 'micro-app', //
show: true, // displayMode: 'drawer', // : 'page'-, 'drawer'-
url: null, // isVisible: true, // (true/false)
params: {}, // appUrl: null, // URL
}, data) initialData: {}, //
isLoading: true, // (true/false)
}, config);
//
const item = microApps.get(config.appName)
if (item) {
if (item.displayMode != config.displayMode || item.appUrl != config.appUrl) {
unmountApp(config.appName, {destroy: true})
} else {
config.isLoading = false;
}
}
//
microApps.set(config.appName, this.appConfig = config);
} }
} }
} }

View File

@ -4664,30 +4664,30 @@ export default {
* 打开OKR * 打开OKR
* @param state * @param state
* @param dispatch * @param dispatch
* @param path * @param value
*/ */
openOkr({state}, path) { openOkr({state}, value) {
if (/^\d+$/.test(path)) { if (/^\d+$/.test(value)) {
// 打开详情页 // 打开详情页
emitter.emit('openMicroApp', { emitter.emit('openMicroApp', {
mode: 'page', appName: 'okr-details',
show: false, displayMode: 'page',
name: 'app-okr-details', isVisible: false,
url: $A.mainUrl(`apps/okr/okrDetails?data=${path}`), appUrl: $A.mainUrl(`apps/okr/okrDetails?data=${value}`),
params: { initialData: {
model: 'details', model: 'details',
}, },
}); });
} else { } else {
// 打开列表、统计 // 打开列表、统计
emitter.emit('openMicroApp', { emitter.emit('openMicroApp', {
mode: 'drawer', appName: `okr-${value}`,
show: true, displayMode: 'drawer',
name: `app-okr-${path}`, isVisible: true,
url: $A.mainUrl(`apps/okr/${path}`), appUrl: $A.mainUrl(`apps/okr/${value}`),
params: {}, initialData: {},
}); });
} }
}, },