test: 低代码依赖升级尝试

This commit is contained in:
wangxuefeng 2025-03-18 14:32:33 +08:00
parent 1019afc24c
commit d1cbb3f1f7
7 changed files with 1076 additions and 656 deletions

View File

@ -15,17 +15,17 @@
"typecheck": "vue-tsc --noEmit --skipLibCheck" "typecheck": "vue-tsc --noEmit --skipLibCheck"
}, },
"dependencies": { "dependencies": {
"@vtj/core": "^0.10.15", "@vtj/core": "^0.11.1",
"@vtj/designer": "0.10.15", "@vtj/designer": "0.11.1",
"@vtj/icons": "0.10.15", "@vtj/icons": "0.11.1",
"@vtj/local": "^0.10.15", "@vtj/local": "^0.11.1",
"@vtj/materials": "^0.10.15", "@vtj/materials": "^0.11.1",
"@vtj/node": "0.10.3", "@vtj/node": "0.11.1",
"@vtj/pro": "^0.10.15", "@vtj/pro": "^0.11.1",
"@vtj/renderer": "^0.10.15", "@vtj/renderer": "^0.11.1",
"@vtj/ui": "^0.10.15", "@vtj/ui": "^0.11.1",
"@vtj/utils": "0.10.15", "@vtj/utils": "0.11.1",
"@vtj/web": "^0.10.15", "@vtj/web": "^0.11.1",
"axios": "^1.8.1", "axios": "^1.8.1",
"element-plus": "^2.9.4", "element-plus": "^2.9.4",
"licia-es": "^1.46.0", "licia-es": "^1.46.0",
@ -38,7 +38,7 @@
}, },
"devDependencies": { "devDependencies": {
"@types/postmate": "catalog:", "@types/postmate": "catalog:",
"@vtj/cli": "^0.10.4", "@vtj/cli": "^0.11.1",
"vite": "catalog:", "vite": "catalog:",
"vite-plugin-mkcert": "catalog:", "vite-plugin-mkcert": "catalog:",
"vitest": "catalog:" "vitest": "catalog:"

View File

@ -17,21 +17,16 @@ const routes: RouteRecordRaw[] = [
{ {
path: '/static-file/list', path: '/static-file/list',
name: 'StaticFileList', name: 'StaticFileList',
// component: RendererAdapter,
component: WujieVueRendererAdapter, component: WujieVueRendererAdapter,
meta: { meta: {
icon: 'ant-design:file-text', icon: 'ant-design:file-text',
title: '静态文件列表', title: '静态文件列表',
}, },
props: { props: {
// url: 'https://y-code-renderer.shiyue.com/',
// url: `${VITE_RENDERER_URL}?fileId=7pfr394d6&projectId=4`,
url: `${VITE_RENDERER_URL}`, url: `${VITE_RENDERER_URL}`,
// accessToken: localStorage.getItem('y-code-access-token'), fileId: '7pfr394d6',
// fileId: '7pfr394d6',
fileId: '7pg2k840j',
projectId: 4, projectId: 4,
name: 'StaticFileList', name: '7pfr394d6',
sync: true, sync: true,
}, },
}, },

View File

@ -17,14 +17,14 @@
"@sentry/vue": "^9.5.0", "@sentry/vue": "^9.5.0",
"@sy/web-vitals": "workspace:*", "@sy/web-vitals": "workspace:*",
"@tanstack/vue-query": "^5.66.9", "@tanstack/vue-query": "^5.66.9",
"@vtj/core": "^0.10.15", "@vtj/core": "^0.11.1",
"@vtj/icons": "0.10.15", "@vtj/icons": "0.11.1",
"@vtj/materials": "^0.10.15", "@vtj/materials": "^0.11.1",
"@vtj/pro": "^0.10.15", "@vtj/pro": "^0.11.1",
"@vtj/renderer": "^0.10.15", "@vtj/renderer": "^0.11.1",
"@vtj/ui": "^0.10.15", "@vtj/ui": "^0.11.1",
"@vtj/utils": "^0.10.15", "@vtj/utils": "^0.11.1",
"@vtj/web": "^0.10.15", "@vtj/web": "^0.11.1",
"axios": "catalog:", "axios": "catalog:",
"core-js": "^3.40.0", "core-js": "^3.40.0",
"element-plus": "catalog:", "element-plus": "catalog:",
@ -38,7 +38,7 @@
"@farmfe/core": "catalog:", "@farmfe/core": "catalog:",
"@types/postmate": "catalog:", "@types/postmate": "catalog:",
"@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue": "^5.2.1",
"@vtj/cli": "^0.10.4", "@vtj/cli": "^0.11.1",
"vite": "catalog:", "vite": "catalog:",
"vite-plugin-mkcert": "catalog:" "vite-plugin-mkcert": "catalog:"
} }

View File

@ -11,7 +11,9 @@ import { LowCodeService } from './service';
// url // url
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
const fileId = urlParams.get('fileId'); const fileId = urlParams.get('fileId');
console.log('urlParams-fileId', fileId);
const projectId = urlParams.get('projectId'); const projectId = urlParams.get('projectId');
console.log('urlParams-projectId', projectId);
// wujie props // wujie props
interface WujieProps { interface WujieProps {
@ -65,33 +67,11 @@ const hideLoading = () => {
} }
}; };
//
const validateProps = () => {
const { fileId, projectId } = wujieProps;
if (!fileId) {
ElMessage.error('缺少必要参数fileId');
return false;
}
if (!projectId) {
ElMessage.error('缺少必要参数projectId');
return false;
}
return true;
};
// - // -
const initLowCodeEngine = async () => { const initLowCodeEngine = async () => {
// //
if (provider.value) return provider.value; if (provider.value) return provider.value;
//
if (!validateProps()) {
throw new Error('参数校验失败');
}
// //
initRequestConfig(wujieProps.accessToken); initRequestConfig(wujieProps.accessToken);
@ -99,7 +79,7 @@ const initLowCodeEngine = async () => {
const { provider: lowCodeProvider, onReady } = createProvider({ const { provider: lowCodeProvider, onReady } = createProvider({
nodeEnv: import.meta.env.NODE_ENV, nodeEnv: import.meta.env.NODE_ENV,
service: lowCodeService, service: lowCodeService,
project: { id: Number(wujieProps.projectId) || -1 }, project: { id: Number(wujieProps.projectId) },
adapter: { adapter: {
request, request,
jsonp, jsonp,
@ -117,8 +97,6 @@ const initLowCodeEngine = async () => {
// //
const getRenderComponent = async () => { const getRenderComponent = async () => {
if (!validateProps()) return null;
isLoading.value = true; isLoading.value = true;
showLoading(); showLoading();

View File

@ -0,0 +1,206 @@
<script setup lang="ts">
import { getCurrentInstance, onMounted, ref, watch } from 'vue';
import { useQuery } from '@tanstack/vue-query';
import { jsonp, request } from '@vtj/utils';
import { createProvider } from '@vtj/web';
import { ElLoading, ElMessage } from 'element-plus';
import { LowCodeService } from './service';
// url
const urlParams = new URLSearchParams(window.location.search);
const fileId = urlParams.get('fileId');
console.log('urlParams-fileId', fileId);
const projectId = urlParams.get('projectId');
console.log('urlParams-projectId', projectId);
// wujie props
interface WujieProps {
accessToken?: string;
applicationId?: number | string;
fileId?: string;
name?: string;
projectId?: number | string;
[key: string]: any;
}
// wujie props
const wujieProps: WujieProps = window.$wujie?.props || {
fileId,
projectId,
};
console.log('wujie props:', wujieProps);
// sessionStorage
sessionStorage.clear();
//
const renderer = ref();
const lowCodeService = new LowCodeService();
const isLoading = ref(false);
const provider = ref(null);
const loadingInstance = ref(null);
//
const initRequestConfig = (token: string) => {
if (!token) return;
request.useRequest((req) => {
req.headers.set('Authorization', `Bearer ${token}`);
return req;
});
};
//
const showLoading = (text = '低代码文件加载中...') => {
if (loadingInstance.value) return;
loadingInstance.value = ElLoading.service({ text });
};
//
const hideLoading = () => {
if (loadingInstance.value) {
loadingInstance.value.close();
loadingInstance.value = null;
}
};
// -
const initLowCodeEngine = async () => {
//
if (provider.value) return provider.value;
//
initRequestConfig(wujieProps.accessToken);
try {
const { provider: lowCodeProvider, onReady } = createProvider({
nodeEnv: import.meta.env.NODE_ENV,
service: lowCodeService,
project: { id: Number(wujieProps.projectId) },
adapter: {
request,
jsonp,
},
});
provider.value = { provider: lowCodeProvider, onReady };
return { provider: lowCodeProvider, onReady };
} catch (error) {
console.error('初始化低代码引擎失败:', error);
ElMessage.error('初始化低代码引擎失败');
return Promise.reject(error);
}
};
//
const getRenderComponent = async () => {
isLoading.value = true;
showLoading();
try {
// 1.
const { provider: lowCodeProvider, onReady } = await initLowCodeEngine();
// 2.
return new Promise<any>((resolve) => {
onReady(async () => {
const instance = getCurrentInstance();
instance?.appContext.app.use(lowCodeProvider);
try {
const renderComponent = await lowCodeProvider.getRenderComponent(
wujieProps.fileId,
);
console.log('渲染组件获取成功');
resolve(renderComponent);
} catch (error) {
console.error('获取渲染组件失败:', error);
ElMessage.error('获取渲染组件失败');
resolve(null);
}
});
});
} catch (error) {
console.error('获取渲染组件过程出错:', error);
return null;
} finally {
isLoading.value = false;
hideLoading();
}
};
// 使 useQuery
const { data: rendererComponent, isError } = useQuery({
queryKey: ['getRenderer', wujieProps.fileId, wujieProps.projectId],
queryFn: getRenderComponent,
enabled: false, //
retry: 1, //
staleTime: 1000 * 60 * 5, // 5
});
// renderer
watch(rendererComponent, (newVal) => {
if (newVal) {
renderer.value = newVal;
console.log('渲染器组件已更新');
}
});
//
const notifyParent = (event: string, data?: any) => {
if (window.$wujie?.bus) {
window.$wujie.bus.$emit(event, data);
}
};
//
onMounted(async () => {
//
notifyParent('ready', 'y-code-renderer is ready');
try {
await initLowCodeEngine();
const component = await getRenderComponent();
if (component) {
renderer.value = component;
notifyParent('render-success');
} else {
notifyParent('render-fail', 'Failed to get component');
}
} catch (error) {
console.error('初始化过程出错:', error);
notifyParent('render-fail', error);
}
});
</script>
<template>
<div class="renderer-container">
<component :is="renderer" v-if="renderer" :wujie-props="wujieProps" />
<div v-else-if="!isLoading && isError" class="error-message">
组件加载失败请检查参数和网络连接
</div>
<div v-else-if="!isLoading" class="error-message">
组件加载失败请检查控制台日志
</div>
</div>
</template>
<style scoped>
.renderer-container {
padding: 20px;
height: 100%;
width: 100%;
}
.error-message {
margin-top: 50px;
color: red;
text-align: center;
}
</style>

1447
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff