91 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
|  | <!DOCTYPE html> | |||
|  | <html lang="zh"> | |||
|  |   <head> | |||
|  |     <meta charset="utf-8"> | |||
|  |     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
|  |     <meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||
|  |     <link rel="icon" href="<%= BASE_URL %>favicon.ico"> | |||
|  |     <title>form-generator-preview</title> | |||
|  |     <link href="https://lib.baomitu.com/element-ui/2.13.2/theme-chalk/index.css" rel="stylesheet"> | |||
|  |     <script src="https://lib.baomitu.com/vue/2.6.11/vue.min.js"></script> | |||
|  |     <script src="https://lib.baomitu.com/vue-router/3.1.3/vue-router.min.js"></script> | |||
|  |     <script src="https://lib.baomitu.com/axios/0.19.2/axios.min.js"></script> | |||
|  |     <script src="https://lib.baomitu.com/element-ui/2.13.2/index.js"></script> | |||
|  |     <style> | |||
|  |       body{ | |||
|  |         margin: 0; | |||
|  |         padding: 0; | |||
|  |         overflow-x: hidden; | |||
|  |         -moz-osx-font-smoothing: grayscale; | |||
|  |         -webkit-font-smoothing: antialiased; | |||
|  |         text-rendering: optimizeLegibility; | |||
|  |         height: calc(100vh - 33px); | |||
|  |         padding: 12px; | |||
|  |         box-sizing: border-box; | |||
|  |         font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji; | |||
|  |       } | |||
|  |       input, textarea{ | |||
|  |         font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji; | |||
|  |       } | |||
|  |     </style> | |||
|  |   </head> | |||
|  |   <body> | |||
|  |     <noscript> | |||
|  |       <strong>抱歉,javascript被禁用,请开启后重试。</strong> | |||
|  |     </noscript> | |||
|  |     <div id="previewApp"></div> | |||
|  |     <script type="text/javascript"> | |||
|  |       Vue.prototype.$axios = axios | |||
|  |       const childAttrs = { | |||
|  |         file: '', | |||
|  |         dialog: ' width="600px" class="dialog-width" v-if="visible" :visible.sync="visible" :modal-append-to-body="false" ' | |||
|  |       } | |||
|  | 
 | |||
|  |       window.addEventListener('message', init, false) | |||
|  |       function init(event) { | |||
|  |         if (event.data.type === 'refreshFrame') { | |||
|  |           const code = event.data.data | |||
|  |           const attrs = childAttrs[code.generateConf.type] | |||
|  |           let links = '' | |||
|  | 
 | |||
|  |           if (Array.isArray(code.links) && code.links.length > 0) { | |||
|  |             links = buildLinks(code.links) | |||
|  |           } | |||
|  | 
 | |||
|  |           document.getElementById('previewApp').innerHTML = `${links}<style>${code.css}</style><div id="app"></div>` | |||
|  | 
 | |||
|  |           if (Array.isArray(code.scripts) && code.scripts.length > 0) { | |||
|  |             this.loadScriptQueue(code.scripts, () => { | |||
|  |               newVue(attrs, code.js, code.html) | |||
|  |             }) | |||
|  |           } else { | |||
|  |             newVue(attrs, code.js, code.html) | |||
|  |           } | |||
|  |         } | |||
|  |       } | |||
|  |       function buildLinks(links) { | |||
|  |         let strs = '' | |||
|  |         links.forEach(url => { | |||
|  |           strs += `<link href="${url}" rel="stylesheet">` | |||
|  |         }) | |||
|  |         return strs | |||
|  |       } | |||
|  |       function newVue(attrs, main, html) { | |||
|  |         main = eval(`(${main})`) | |||
|  |         main.template = `<div>${html}</div>` | |||
|  |         new Vue({ | |||
|  |           components: { | |||
|  |             child: main | |||
|  |           }, | |||
|  |           data() { | |||
|  |             return { | |||
|  |               visible: true | |||
|  |             } | |||
|  |           }, | |||
|  |           template: `<div><child ${attrs}/></div>` | |||
|  |         }).$mount('#app') | |||
|  |       } | |||
|  |     </script> | |||
|  |   </body> | |||
|  | </html> |