forked from ZhanLi/ScientificSystem
		
	
		
			
	
	
		
			91 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			3.0 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>
							 |