feat: 渲染器实现异端请求

This commit is contained in:
wangxuefeng 2025-03-04 15:01:54 +08:00
parent 6fc133bb7d
commit a78d892a57

View File

@ -1,68 +1,63 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, computed, watch } from 'vue'; // @ts-nocheck
import { ElLoading } from 'element-plus'; import { computed, watch, ref, getCurrentInstance } from 'vue'
import Postmate from 'postmate'; import { ElLoading } from 'element-plus'
import Postmate from 'postmate'
import { createRenderer, createProvider } from '@vtj/renderer' import { createRenderer, createProvider } from '@vtj/renderer'
import { useQuery } from '@tanstack/vue-query'; import { useQuery } from '@tanstack/vue-query'
import { LowCodeService } from './service' import { LowCodeService } from './service'
import { getFile } from './io'
import { getFile } from './io'; //
const renderer = ref()
const lowCodeService = new LowCodeService()
const lowCodeService = new LowCodeService(); // Postmate
const handshake = new Postmate.Model({})
const handshake = new Postmate.Model({});
//
const model = { const model = {
name: '', name: '',
applicationId: -1, applicationId: -1,
projectId: -1, projectId: -1,
fileId: '', fileId: '',
url: '', url: ''
} }
//
const { data: file, isFetching } = useQuery({ const { data: file, isFetching } = useQuery({
queryKey: ['getFile'], queryKey: ['getFile'],
queryFn: async () => { queryFn: async () => {
await handshake.then(parent => { await handshake.then((parent) => {
parent.emit('sync-context', 'Hello, World!'); parent.emit('sync-context', 'Hello, World!')
Object.assign(model, parent.model); Object.assign(model, parent.model)
console.log('model', model); console.log('model', model)
}); })
return getFile(model.fileId);
},
});
return getFile(model.fileId).then(() => {
const { provider, onReady } = createProvider({
service: lowCodeService,
project: { id: '4' }
})
onReady(async () => {
console.log('onReady')
const instance = getCurrentInstance()
instance?.appContext.app.use(provider)
renderer.value = await provider.getRenderComponent(model.fileId)
})
})
}
})
//
watch(isFetching, (newVal) => { watch(isFetching, (newVal) => {
if (newVal) { if (newVal) {
ElLoading.service({ ElLoading.service({ text: '低代码文件加载中...' })
text: '低代码文件加载中...',
});
} else { } else {
ElLoading.service().close(); ElLoading.service().close()
} }
}); })
const { provider, onReady } = createProvider({
// runtime: 'web',
service: lowCodeService,
project: {
id: '4'
},
});
onReady(() => {
console.log('onReady');
});
const renderer = computed(() => {
console.log(file?.value?.dsl.id);
if (file?.value?.dsl) {
return createRenderer({ dsl: file.value.dsl }).renderer;
}
return null;
});
</script> </script>
<template> <template>