更新组件,兼容MES PullRequest #924

This commit is contained in:
2025-04-29 15:58:53 +08:00
parent fa8b468c32
commit 18582016b2
11 changed files with 204 additions and 88 deletions

View File

@@ -1,6 +1,6 @@
import { defineComponent, nextTick, onMounted, ref, getCurrentInstance, isVue3, h } from 'vue-demi';
import { defineComponent, nextTick, onMounted, ref, getCurrentInstance, isVue3 } from 'vue-demi';
import { hh } from './DemiHelper';
import SlotTester from '../SlotTester.vue';
import { InvokerContext } from '../types/InvokerContext';
console.log('receiver-loaded');
@@ -95,23 +95,44 @@ export default defineComponent({
parentId: {
type: [Number, String],
default: () => 0
},
parentKey: {
type: String,
default: () => 'modInvoker'
}
},
setup(props) {
const instance = getCurrentInstance();
let invokerContext: any = null;
let invokerContext: InvokerContext = null!;
const renderVersion = ref(0);
if (window.parent != window) {
const invoker = window.parent['MES_MOD_INVOKERS'][props.parentId];
const invoker = window.parent[props.parentKey][props.parentId];
invokerContext = invoker;
}
else {
throw new Error("[Receiver] 组件必须在iframe中使用");
}
const renderItems = ref(invokerContext.getRenderContext() ?? []);
onMounted(() => {
nextTick().then(() => {
console.log('mounted-finish');
if (!invokerContext['modContext']) {
invokerContext.initFinish(instance?.proxy);
invokerContext.initFinish({
get renderVersion() {
return renderVersion.value;
},
Update: function (): void {
console.log('[Receiver] Force Update', renderVersion.value);
renderVersion.value += 1;
renderItems.value = invokerContext.getRenderContext() ?? [];
instance?.proxy?.$forceUpdate();
},
get refs() {
return instance?.proxy?.$refs;
}
});
}
});
});
@@ -120,7 +141,7 @@ export default defineComponent({
console.log('receiver-update', renderVersion.value);
if (renderVersion.value < 0) return;
if (invokerContext.getRenderContext) {
const itemList = invokerContext.getRenderContext();
const itemList = invokerContext.getRenderContext() ?? [];
// const list = renderContext(itemList);
// console.log('item-list', list);