88 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script lang="ts" setup>
 | ||
| import { ref } from 'vue';
 | ||
| 
 | ||
| import { LowCodeService } from '@/service';
 | ||
| import { useUserStore } from '@/store';
 | ||
| import { Engine, widgetManager } from '@vtj/pro';
 | ||
| import { jsonp, request } from '@vtj/utils';
 | ||
| import Postmate from 'postmate';
 | ||
| 
 | ||
| const container = ref();
 | ||
| const service = new LowCodeService();
 | ||
| const userStore = useUserStore();
 | ||
| 
 | ||
| onMounted(async () => {
 | ||
|   // 数据模型
 | ||
|   const model = {
 | ||
|     name: '',
 | ||
|     url: '',
 | ||
|     applicationId: -1,
 | ||
|     projectId: -1,
 | ||
|     accessToken: ''
 | ||
|   };
 | ||
| 
 | ||
|   const handshake = new Postmate.Model({});
 | ||
|   await handshake.then((parent) => {
 | ||
|     parent.emit('sync-context', 'y-code-designer is ready');
 | ||
|     Object.assign(model, parent.model);
 | ||
|     console.log('get parent model', model);
 | ||
|     userStore.setToken(model.accessToken);
 | ||
|     localStorage.setItem('y-code-access-token', model.accessToken);
 | ||
|     request.useRequest((req) => {
 | ||
|       req.headers.set('Authorization', `Bearer ${model.accessToken}`);
 | ||
|       return req;
 | ||
|     });
 | ||
|     sessionStorage.setItem('projectId', model.projectId);
 | ||
|     const _engine = new Engine({
 | ||
|       container,
 | ||
|       service,
 | ||
|       window,
 | ||
|       project: {
 | ||
|         // @ts-ignore
 | ||
|         id: model.projectId,
 | ||
|         name: model.name
 | ||
|       },
 | ||
|       adapter: {
 | ||
|         request,
 | ||
|         jsonp
 | ||
|       }
 | ||
|     });
 | ||
|     widgetManager.set('Previewer', {
 | ||
|       props: {
 | ||
|         path: (block: any) => {
 | ||
|           const pathname = location.pathname;
 | ||
|           return `${pathname}#/preview/${block.id}`;
 | ||
|         }
 | ||
|       }
 | ||
|     });
 | ||
| 
 | ||
|     widgetManager.set('Templates', {
 | ||
|       invisible: true
 | ||
|     });
 | ||
| 
 | ||
|     widgetManager.set('About', {
 | ||
|       invisible: true
 | ||
|     });
 | ||
| 
 | ||
|     widgetManager.set('History', {
 | ||
|       // 有 bug,先隐藏
 | ||
|       // invisible: true
 | ||
|     });
 | ||
|   });
 | ||
| });
 | ||
| </script>
 | ||
| 
 | ||
| <template>
 | ||
|   <div
 | ||
|     class="designer-container"
 | ||
|     ref="container"
 | ||
|     :token="userStore.token"></div>
 | ||
| </template>
 | ||
| 
 | ||
| <style scoped>
 | ||
| .designer-container {
 | ||
|   width: 100%;
 | ||
|   height: 100%;
 | ||
| }
 | ||
| </style>
 | 
