test: 低代码依赖升级尝试
This commit is contained in:
		
							parent
							
								
									1019afc24c
								
							
						
					
					
						commit
						d1cbb3f1f7
					
				| @ -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:" | ||||||
|  | |||||||
| @ -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, | ||||||
|         }, |         }, | ||||||
|       }, |       }, | ||||||
|  | |||||||
| @ -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:" | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -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(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										206
									
								
								apps/renderer/src/wujie-vue-app.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								apps/renderer/src/wujie-vue-app.vue
									
									
									
									
									
										Normal 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
									
									
									
								
							
							
						
						
									
										1447
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 wangxuefeng
						wangxuefeng