427 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			427 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | ||
| <html lang="en">
 | ||
| 
 | ||
| <head>
 | ||
|   <meta charset="UTF-8">
 | ||
|   <link rel="stylesheet" href="./Vue/index.css">
 | ||
|   <link rel="stylesheet" href="./Vue/w-e-text.css">
 | ||
|   <script src="./Vue/vue.js"></script>
 | ||
|   <script src="./Vue/index.js"></script>
 | ||
|   <link href="./viewerJs/dist/viewer.css" rel="stylesheet">
 | ||
|   <script src="./viewerJs/dist/viewer.js"></script>
 | ||
|   <style>
 | ||
|     body,
 | ||
|     #info,
 | ||
|     div {
 | ||
|       margin: 0;
 | ||
|       padding: 0;
 | ||
|       box-sizing: border-box;
 | ||
|     }
 | ||
| 
 | ||
|     #info {
 | ||
|       width: 100vw;
 | ||
|       height: 100vh;
 | ||
|       display: flex;
 | ||
|       flex-direction: column;
 | ||
|       /* height: 100vh; background-color: rgba(255, 255, 255, 0.014); */
 | ||
|       /*color: red;*/
 | ||
|     }
 | ||
| 
 | ||
|     .tabs-header {
 | ||
|       display: flex;
 | ||
|       background: #ccc;
 | ||
|       user-select: none;
 | ||
|       overflow: hidden;
 | ||
|       overflow-x: scroll;
 | ||
|       /* height: 41px; */
 | ||
|     }
 | ||
| 
 | ||
|     .tabs-header::-webkit-scrollbar {
 | ||
|       height: 10px;
 | ||
|     }
 | ||
| 
 | ||
|     .tabs-header::-webkit-scrollbar-thumb {
 | ||
|       background: #f0f0f0;
 | ||
|       border-radius: 3px;
 | ||
|     }
 | ||
| 
 | ||
|     .tabs-header::-webkit-scrollbar-track {
 | ||
|       background: #ccc;
 | ||
|       border-radius: 3px;
 | ||
|     }
 | ||
| 
 | ||
|     .tabs-header>.item {
 | ||
|       border-radius: 6px;
 | ||
|       /* padding: 5px 15px; */
 | ||
|       padding: 5px 0 5px 0;
 | ||
|       margin: 5px 3px;
 | ||
|       min-width: 80px;
 | ||
|       text-align: center;
 | ||
|       cursor: pointer;
 | ||
|     }
 | ||
| 
 | ||
|     .active {
 | ||
|       background: #fff;
 | ||
|     }
 | ||
| 
 | ||
|     table {
 | ||
|       border-collapse: collapse;
 | ||
|       /* 合并边框 */
 | ||
|       width: 100%;
 | ||
|       /* 表格宽度 */
 | ||
|     }
 | ||
| 
 | ||
|     td {
 | ||
|       text-align: center;
 | ||
|     }
 | ||
|   </style>
 | ||
|   <style type="text/css">
 | ||
|     #iframe1>[src] {
 | ||
|       width: 100%;
 | ||
|       height: 100%;
 | ||
|       object-fit: contain;
 | ||
|     }
 | ||
|   </style>
 | ||
| </head>
 | ||
| 
 | ||
| <body>
 | ||
|   <div id="info">
 | ||
|     <!-- zhgeli -->
 | ||
|     <div class="tabs-header">
 | ||
|       <template v-for="(item,index) in tabsData">
 | ||
|         <div :class="['item',index!=tabsData.length-1?'borderRight':'',index==activeIndex?'active':'',]"
 | ||
|           @click="clickItem(item,index)">
 | ||
|           {{ item.name }}
 | ||
|         </div>
 | ||
|       </template>
 | ||
|     </div>
 | ||
|     <!-- 全景图片 -->
 | ||
|     <template v-if="activeItem.type === '全景图'">
 | ||
|       <div style="flex: 9" id="vrBox"></div>
 | ||
|     </template>
 | ||
|     <template v-else-if="activeItem.name === '富文本'">
 | ||
|       <div style="flex: 9" class="w-e-text" v-html="info.text"></div>
 | ||
|     </template>
 | ||
|     <template v-else-if="activeItem.type === '物资'">
 | ||
|       <div v-if="activeItem.type === '物资'" style="flex: 9" class="w-e-text">
 | ||
|         <table id="myTable" border="1">
 | ||
|           <thead>
 | ||
|             <tr>
 | ||
|               <th>序号</th>
 | ||
|               <th>名称</th>
 | ||
|               <th>数量</th>
 | ||
|             </tr>
 | ||
|           </thead>
 | ||
| 
 | ||
|         </table>
 | ||
|       </div>
 | ||
|     </template>
 | ||
|     <template v-else>
 | ||
|       <template v-if="isPicture">
 | ||
|         <div style="flex: auto;">
 | ||
|           <img v-if="isSvg" style="width: 100%;height: 100%" :src="activeItem.url" alt="">
 | ||
|           <iframe v-else style="width: 100%;height: 100%" src="./showPicture.html" frameborder="0"
 | ||
|             id="iframe1"></iframe>
 | ||
|         </div>
 | ||
|       </template>
 | ||
|       <template v-else>
 | ||
|         <div style="flex: auto;">
 | ||
|           <iframe style="width: 100%;height: 100%" :src="activeItem.url" frameborder="0" id="iframe2">
 | ||
|           </iframe>
 | ||
|         </div>
 | ||
|       </template>
 | ||
|     </template>
 | ||
|     </template>
 | ||
|   </div>
 | ||
| </body>
 | ||
| 
 | ||
| <script type="text/javascript">
 | ||
|   const fs = require('fs')
 | ||
|   //调用子页面方法
 | ||
|   function getIframe(data, str) {
 | ||
|     var iframe = document.createElement("iframe");
 | ||
|     iframe.src = "../static/vrHtml/index.html";
 | ||
|     iframe.style.width = "100%"
 | ||
|     iframe.style.height = "100%"
 | ||
|     iframe.setAttribute('frameborder', 0)
 | ||
|     iframe.onload = () => {
 | ||
|       iframe.contentWindow.setIframe(data, str);
 | ||
|     }
 | ||
|     document.getElementById('vrBox').appendChild(iframe);
 | ||
|   }
 | ||
|   //获取img元素并且插入属性
 | ||
|   function getImg(data) {
 | ||
|     console.log('进入方法', data);
 | ||
| 
 | ||
|     let iframe1 = document.getElementById('iframe1')
 | ||
| 
 | ||
|     console.log(iframe1);
 | ||
| 
 | ||
|     if (!iframe1) {
 | ||
|       return
 | ||
|     }
 | ||
|     console.log('url', data);
 | ||
| 
 | ||
|     iframe1.contentWindow.postMessage(data, '*')
 | ||
|     console.log('urlurlurlurlurl', data);
 | ||
|     // let frame = window.frames['iframeDialog']
 | ||
|     iframe1.onload = () => {
 | ||
|       iframe1.contentWindow.postMessage(data, '*')
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   //调用子组件关闭按钮
 | ||
|   function closeImg() {
 | ||
|     let iframe1 = document.getElementById('iframe1')
 | ||
|     if (!iframe1) {
 | ||
|       return
 | ||
|     }
 | ||
|     iframe1.contentWindow.close()
 | ||
|   }
 | ||
|   function closeVr() {
 | ||
|     let parentElement = document.getElementById('vrBox')
 | ||
|     if (!parentElement) {
 | ||
|       return
 | ||
|     }
 | ||
|     removeAllChildren(parentElement);
 | ||
|   }
 | ||
|   function removeAllChildren(parentNode) {
 | ||
|     while (parentNode.firstChild) {
 | ||
|       parentNode.removeChild(parentNode.firstChild);
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
| </script>
 | ||
| <script>
 | ||
|   const ipcRenderer = require('electron').ipcRenderer
 | ||
|   new Vue({
 | ||
|     el: '#info',
 | ||
|     data: function () {
 | ||
|       return {
 | ||
|         showRichText: '',
 | ||
|         activeIndex: 0,
 | ||
|         activeItem: {},
 | ||
|         tabsData: [],
 | ||
|         info: {
 | ||
|           type: "",
 | ||
|           text: "",
 | ||
|           hrefs: "",
 | ||
|           vrPath: '',
 | ||
|         },
 | ||
|         isPicture: false,
 | ||
|         tbody: '',
 | ||
|       }
 | ||
|     },
 | ||
|     computed: {
 | ||
| 
 | ||
|     },
 | ||
|     watch: {
 | ||
|       activeItem: {
 | ||
|         handler: function (val, oldVal) {
 | ||
|           this.appendData(val)
 | ||
|           console.log('document.getElementByIdmyObject', document.getElementById('myObject'));
 | ||
| 
 | ||
|         },
 | ||
|         deep: true
 | ||
|       }
 | ||
|     },
 | ||
|     methods: {
 | ||
|       // 填入数据
 | ||
|       appendData(item) {
 | ||
|         if (item.name === '物资') {
 | ||
|           this.$nextTick(() => {
 | ||
|             const table = document.querySelector('#myTable');
 | ||
|             if (table) {
 | ||
|               table.appendChild(this.tbody)
 | ||
|             }
 | ||
|           })
 | ||
|         }
 | ||
|       },
 | ||
|       clickItem(item, i) {
 | ||
|         if (this.tabsData.length < 1) {
 | ||
|           console.log('只有一个选项,不允许切换');
 | ||
|           return;
 | ||
|         }
 | ||
|         let setName = () => {
 | ||
|           this.showRichText = item.name
 | ||
|           this.activeIndex = i
 | ||
|           this.activeItem = item
 | ||
|           closeImg()
 | ||
|           console.log('this.activeItem', this.activeItem);
 | ||
|           this.renderImgView()
 | ||
|           this.$nextTick(() => {
 | ||
|             if (this.activeItem.name.indexOf('ISC-') > -1) {
 | ||
|               if (!this.player) {
 | ||
|                 this.player = new window.JSPlugin({
 | ||
|                   szId: 'player',
 | ||
|                   szBasePath: "./sdk",
 | ||
|                   iMaxSplit: 1,
 | ||
|                   iCurrentSplit: 1,
 | ||
|                   openDebug: true,
 | ||
|                   oStyle: {
 | ||
|                     borderSelect: IS_MOVE_DEVICE ? '#000' : '#FFCC00',
 | ||
|                   }
 | ||
|                 })
 | ||
|               }
 | ||
|               //播放某一特定监控
 | ||
|               let playURL = this.activeItem.previewUrl, index = this.player.currentWindowIndex, mode = 0//:0=普通模式; 1=高级模式 
 | ||
| 
 | ||
|               this.player.JS_Play(playURL, { playURL, mode }, index).then(
 | ||
|                 () => { console.log('realplay success') },
 | ||
|                 e => { console.error(e) }
 | ||
|               )
 | ||
| 
 | ||
|               console.log("this.player", this.player);
 | ||
| 
 | ||
|             }
 | ||
|           })
 | ||
|           closeVr()
 | ||
|           // setIframe2()
 | ||
|         }
 | ||
|         if (['富文本', '全景图', '链接'].includes(this.activeItem.type)) {
 | ||
|           setName()
 | ||
|           this.$nextTick(() => {
 | ||
|             getImg(this.activeItem.url)
 | ||
|           })
 | ||
|           return
 | ||
|         }
 | ||
|         setName()
 | ||
|       },
 | ||
|       renderImgView() {
 | ||
|         console.log(this.activeItem.url);
 | ||
|         let name
 | ||
|         if (this.activeItem.url) {
 | ||
|           name = this.activeItem.url.slice(this.activeItem.url.length - 3, this.activeItem.url.length)
 | ||
|         }
 | ||
|         console.log('node.detail.namenode.detail.namenode.detail.name', name);
 | ||
|         this.isPicture = ['jpg', 'png', 'JPG', 'PNG', 'JPEG', 'jpeg', 'gif', 'webp', 'GIF', 'bmp'].includes(name)
 | ||
|         console.log('this.isPicture', this.isPicture);
 | ||
|         this.isSvg = (name === 'svg');
 | ||
|         setTimeout(() => {
 | ||
|           //我希望图片和全景都有时,他们各自渲染各自的
 | ||
|           if (this.activeItem.type === '全景图') {
 | ||
|             getIframe(this.activeItem.url, '')
 | ||
|           } else {
 | ||
|             getImg(this.activeItem.url)
 | ||
|           }
 | ||
|           // if (!Boolean(this.info.panorama.length)) {
 | ||
|           //   console.log('图片渲染', 1232132);
 | ||
|           //   getImg(this.activeItem.url)
 | ||
|           // } else {
 | ||
|           //   getIframe(this.activeItem.url, '')
 | ||
|           // }
 | ||
|         }, 0)
 | ||
|       },
 | ||
| 
 | ||
|     },
 | ||
|     mounted() {
 | ||
|       window.ssssssssssssss = this.tabsData
 | ||
|       let fs = require('fs')
 | ||
|       console.log('fsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfsfs', fs);
 | ||
|       ipcRenderer.on('data', (event, obj) => {
 | ||
|         this.info = obj.info
 | ||
|         console.log('ddddddddddddddddddddddddddd', this.info);
 | ||
|         document.title = obj.source_name
 | ||
|         let arr = this.info.hrefs
 | ||
|         arr.forEach(item => {
 | ||
|           console.log(fs.existsSync(item.url));
 | ||
|           if (fs.existsSync(item.url)) {
 | ||
|             if (!item.url.startsWith('http')) {
 | ||
|               // if (item.url.indexOf(":/") > -1) {
 | ||
|               // ipcRenderer.send('setStaticFile', item.url)
 | ||
|               // let name = item.url.replaceAll("\\", "/").split("/").pop()
 | ||
|               // item.url = location.origin + "/" + name
 | ||
|               // item.url = this.info.env + "/yjearth4.0/api/v1/picture/getBypath?path=" + item.url
 | ||
|               item.url = this.info.env + "/yjearth4.0/api/v1/picture/getBypath?path=" + encodeURIComponent(item.url)
 | ||
|               // item.url
 | ||
|               // }
 | ||
|             }
 | ||
|           } else {
 | ||
|             if (!item.url.startsWith('http')) {
 | ||
|               // item.url = this.info.env + "/" + item.url
 | ||
|               item.url = this.info.env + "/" + encodeURIComponent(item.url)
 | ||
|             }
 | ||
|           }
 | ||
|         })
 | ||
|         this.tabsData = arr
 | ||
|         console.log('this.tabsData', this.tabsData);
 | ||
|         let hasRichText = Boolean(this.info.text)
 | ||
|         let hasVrPath = Boolean(this.info.vrPath)
 | ||
|         let hasVr = Boolean(this.info.vr.length)
 | ||
|         let hasGoods = Boolean(this.info.goods.length)
 | ||
|         let hasISC = this.info.ISC && Boolean(this.info.ISC.length > 0)
 | ||
| 
 | ||
|         if (hasRichText) {
 | ||
|           this.tabsData.unshift({ name: "富文本", type: '富文本', href: this.info.text })
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|         }
 | ||
|         // 当hasRichText为false,将第一个选项设置为链接
 | ||
|         if (!hasRichText && !hasVrPath && !hasVr && !hasGoods && !hasISC) {
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|           this.activeItem.type = '链接'
 | ||
|           this.clickItem(this.activeItem, this.activeIndex)
 | ||
|         }
 | ||
|         if (this.info.type == "link" && this.tabsData.length > 0) {
 | ||
|           this.activeIndex = hasRichText ? 0 : 0
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|           this.showRichText = ''
 | ||
|           this.activeItem.type = '链接'
 | ||
|           this.clickItem(this.activeItem, this.activeIndex)
 | ||
|         }
 | ||
|         let jsonPath = obj.info.source_path.replace('.jpg', '.json')
 | ||
|         console.log(hasRichText, hasVrPath, fs.existsSync(jsonPath), this.tabsData);
 | ||
|         let str = ""
 | ||
|         // fetch(jsonPath)
 | ||
|         if (fs.existsSync(jsonPath)) {
 | ||
|           str = String(fs.readFileSync(jsonPath))
 | ||
|         } /*else {
 | ||
|           return
 | ||
|         }*/
 | ||
|         if (hasVrPath) {
 | ||
|           this.tabsData.unshift({ name: "全景图", type: '全景图', href: this.info.vrPath })
 | ||
|           this.$nextTick(() => {
 | ||
|             getIframe(this.info.vrPath, str)
 | ||
|           })
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|         }
 | ||
|         if (hasISC) {
 | ||
|           this.info.ISC.forEach(item => {
 | ||
|             this.tabsData.push({ name: "ISC-" + item.name, cameraIndexCode: item.cameraIndexCode, status: item.status })
 | ||
|           })
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|         }
 | ||
|         if (hasGoods) {
 | ||
|           this.tabsData.unshift({ name: "物资", type: '物资' })
 | ||
|           // tbody.appendChild(row);
 | ||
|           this.tbody = document.createElement('tbody')
 | ||
| 
 | ||
|           this.info.goods.reverse().forEach((item, index) => {
 | ||
|             const row = document.createElement('tr');
 | ||
|             row.innerHTML = `
 | ||
|             <td>${index + 1}</td>
 | ||
|             <td>${item.name}</td>
 | ||
|             <td>${item.cnt}</td>
 | ||
|             `;
 | ||
|             this.tbody.appendChild(row);
 | ||
|           });
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|         }
 | ||
|         if (hasVr) {
 | ||
|           this.info.vr.forEach(item => {
 | ||
|             console.log(item);
 | ||
|             if (!item.url.startsWith('http')) {
 | ||
|               item.url = this.info.env + '/yjearth4.0/api/v1/picture/getBypath?path=' + encodeURIComponent(item.url)
 | ||
|             }
 | ||
|             this.tabsData.unshift({ name: item.name, type: '全景图', url: item.url })
 | ||
|           })
 | ||
|           this.activeItem = this.tabsData[this.activeIndex]
 | ||
|           this.renderImgView()
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|   })
 | ||
| </script>
 | ||
| <script>
 | ||
| </script>
 | ||
| 
 | ||
| </html> |