Merge pull request '1' (#117) from pc-master into portal
Reviewed-on: #117
| @ -379,7 +379,14 @@ selFsTime(data) { | ||||
| loadHistorydata(data) { | ||||
|   return sendPostRequest(`/load/historydata`, data) | ||||
| }, | ||||
| 
 | ||||
| //摄像头操作开始
 | ||||
| cameraStart(cameraSerialNumber,cameraChannelNumber,num) { | ||||
|   return sendPostRequest(`/camera/start?cameraid=${cameraSerialNumber}&channelid=${cameraChannelNumber}&direction=${num}`) | ||||
| }, | ||||
| //摄像头操作结束
 | ||||
| cameraStop(cameraSerialNumber,cameraChannelNumber,num) { | ||||
|   return sendPostRequest(`/camera/stop?cameraid=${cameraSerialNumber}&channelid=${cameraChannelNumber}&direction=${num}`) | ||||
| }, | ||||
|   //二维码溯源
 | ||||
|   //查看农事作物信息
 | ||||
|   getAgriculturalInformation(data) { | ||||
|  | ||||
| @ -1978,13 +1978,118 @@ | ||||
| .realTime .page-content .realTime-bottom .left-view > div { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-js { | ||||
|   width: 100%; | ||||
|   width: calc(100% - 400px); | ||||
|   height: 100%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control { | ||||
|   width: 400px; | ||||
|   display: flex; | ||||
|   height: 100%; | ||||
|   padding: 60px 0; | ||||
|   flex-direction: column; | ||||
|   align-items: center; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big { | ||||
|   width: 230px; | ||||
|   height: 230px; | ||||
|   background: url(../img/video-control.png) no-repeat center; | ||||
|   background-size: 100% 100%; | ||||
|   position: relative; | ||||
|   overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big > div { | ||||
|   width: 230px; | ||||
|   height: 230px; | ||||
|   position: relative; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big > div:active .arrow { | ||||
|   background: url(../img/control-arrow-active.png) no-repeat center; | ||||
|   background-size: 100% 100%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big > div .arrow { | ||||
|   width: 43px; | ||||
|   height: 26px; | ||||
|   transform: rotate(135deg); | ||||
|   background: url(../img/control-arrow.png) no-repeat center; | ||||
|   background-size: 100% 100%; | ||||
|   position: absolute; | ||||
|   top: 16px; | ||||
|   left: 7px; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big .top { | ||||
|   transform: rotate(-135deg); | ||||
|   position: absolute; | ||||
|   bottom: 70.5%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big .bottom { | ||||
|   transform: rotate(45deg); | ||||
|   position: absolute; | ||||
|   top: 71%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big .left { | ||||
|   transform: rotate(135deg); | ||||
|   position: absolute; | ||||
|   right: 70.5%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn-big .right { | ||||
|   transform: rotate(-45deg); | ||||
|   position: absolute; | ||||
|   left: 70.5%; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn { | ||||
|   display: grid; | ||||
|   grid-template-columns: repeat(2, 1fr); | ||||
|   grid-row-gap: 30px; | ||||
|   grid-column-gap: 30px; | ||||
|   margin-top: 41px; | ||||
|   width: 310px; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn > div { | ||||
|   width: 140px; | ||||
|   height: 40px; | ||||
|   background: #0294E2; | ||||
|   font-family: Microsoft YaHei; | ||||
|   font-weight: 400; | ||||
|   font-size: 16px; | ||||
|   color: #FFFFFF; | ||||
|   border-radius: 3px; | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn > div:active { | ||||
|   background: #22B2FF; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn > div > img { | ||||
|   margin-right: 12px; | ||||
|   width: 22px; | ||||
|   height: auto; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .left-view > div .video-control .video-btn > div > div { | ||||
|   white-space: nowrap; | ||||
|   width: 40px; | ||||
| } | ||||
| 
 | ||||
| .realTime .page-content .realTime-bottom .right { | ||||
|   width: calc(100% - 35%); | ||||
|   min-width: 230px; | ||||
| @ -3532,7 +3637,8 @@ | ||||
|   color: #606266; | ||||
| } | ||||
| 
 | ||||
| .el-button--primary.el-button span, .el-button--success.el-button span { | ||||
| .el-button--primary.el-button span, | ||||
| .el-button--success.el-button span { | ||||
|   color: #fff; | ||||
| } | ||||
| 
 | ||||
| @ -3557,7 +3663,8 @@ | ||||
|   margin-top: 20px; | ||||
| } | ||||
| 
 | ||||
| .el-pagination .btn-prev .el-icon, .el-pagination .btn-next .el-icon { | ||||
| .el-pagination .btn-prev .el-icon, | ||||
| .el-pagination .btn-next .el-icon { | ||||
|   color: #333; | ||||
| } | ||||
| 
 | ||||
| @ -3574,7 +3681,8 @@ | ||||
|   font-weight: 700; | ||||
| } | ||||
| 
 | ||||
| .el-pagination__total, .el-pagination__jump { | ||||
| .el-pagination__total, | ||||
| .el-pagination__jump { | ||||
|   color: #fff; | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								src/assets/css/main.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/control-arrow-active.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/control-arrow.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.0 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-control.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 60 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon0.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 240 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 237 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 233 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 240 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 677 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 603 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon6.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 214 B | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/video-icon7.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 228 B | 
| @ -1,36 +1,80 @@ | ||||
| <template> | ||||
|     <div class="formula realTime videoMonitoring"> | ||||
|     <div class="formula realTime videoMonitoring" @mouseup="upEnd()"> | ||||
|         <div class="page-content new-data"> | ||||
|             <div class="table-title"> | ||||
|                 <img src="../../assets/image/real-time.png" alt="" /> | ||||
|                 {{deviceTypeName}}—视频监控<span class="outline" v-if="deviceState == 0">(设备离线)</span> | ||||
|                 {{ deviceTypeName }}—视频监控<span class="outline" v-if="deviceState == 0">(设备离线)</span> | ||||
|             </div> | ||||
|             <div class="flex-list realTime-bottom videoMonitoring-monitor"> | ||||
|                 <div class="left-view" v-if="deviceName != 30"> | ||||
|                     <div ref="monitor" class="monitor" id="monitor"> | ||||
|                         <!-- <video ref="videoPlayer" class="video-js" id="video-js"></video> --> | ||||
|                         <div ref="videoPlayer" class="video-js" id="video-js"></div> | ||||
|                         <div class="video-control"> | ||||
|                             <div class="video-btn-big"> | ||||
|                                 <div class="top" @mousedown="downStart(0)"> | ||||
|                                     <div class="arrow"></div> | ||||
|                                 </div> | ||||
|                                 <div class="bottom" @mousedown="downStart(1)"> | ||||
|                                     <div class="arrow"></div> | ||||
|                                 </div> | ||||
|                                 <div class="left" @mousedown="downStart(2)"> | ||||
|                                     <div class="arrow"></div> | ||||
|                                 </div> | ||||
|                                 <div class="right" @mousedown="downStart(3)"> | ||||
|                                     <div class="arrow"></div> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                             <div class="video-btn"> | ||||
|                                 <div @mousedown="downStart(4)"><img src="../../assets/img/video-icon0.png" alt=""> | ||||
|                                     <div>左上 </div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(6)"><img src="../../assets/img/video-icon1.png" alt=""> | ||||
|                                     <div>右上 </div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(5)"><img src="../../assets/img/video-icon2.png" alt=""> | ||||
|                                     <div>左下 </div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(7)"><img src="../../assets/img/video-icon3.png" alt=""> | ||||
|                                     <div>右下 </div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(8)"><img src="../../assets/img/video-icon4.png" alt=""> | ||||
|                                     <div>放大+</div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(9)"><img src="../../assets/img/video-icon5.png" alt=""> | ||||
|                                     <div>缩小-</div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(10)"><img src="../../assets/img/video-icon6.png" alt=""> | ||||
|                                     <div>近焦距</div> | ||||
|                                 </div> | ||||
|                                 <div @mousedown="downStart(11)"><img src="../../assets/img/video-icon7.png" alt=""> | ||||
|                                     <div>远焦距</div> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     | ||||
| 
 | ||||
|                 </div> | ||||
|                 <div></div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|   </template> | ||||
|   <script> | ||||
|   import EZUIKit from 'ezuikit-js'; | ||||
|   import videojs from 'video.js'; | ||||
| </template> | ||||
| <script> | ||||
| import EZUIKit from 'ezuikit-js'; | ||||
| import videojs from 'video.js'; | ||||
| import video_zhCN from 'video.js/dist/lang/zh-CN.json' | ||||
|   export default { | ||||
|     data(){ | ||||
| import axios from 'axios'; | ||||
| export default { | ||||
|     data() { | ||||
|         return { | ||||
|             deviceTypeName:'', | ||||
|             deviceName:'', | ||||
|             deviceState:1, | ||||
|             deviceTypeName: '', | ||||
|             deviceName: '', | ||||
|             deviceState: 1, | ||||
|             statusInterval: null,//status状态的Interval | ||||
|             player: null, | ||||
|             url: '', | ||||
|             nowNum: -1, | ||||
|         } | ||||
|     }, | ||||
|     watch: { | ||||
| @ -66,22 +110,81 @@ import video_zhCN from 'video.js/dist/lang/zh-CN.json' | ||||
|         } | ||||
|         clearInterval(this.statusInterval) && this.statusInterval | ||||
|     }, | ||||
|     mounted(){ | ||||
|     mounted() { | ||||
|         const that = this; | ||||
|         const store = this.$store.state | ||||
|         this.indexs = this.$route.query.index ? this.$route.query.index : store.equipmentIndex; | ||||
|         this.deviceTypeName = store.equipmentList[this.indexs - 1].deviceTypeName | ||||
|         this.deviceName = store.equipmentList[this.indexs - 1].deviceName | ||||
|             this.deviceState = store.equipmentList[this.indexs - 1].deviceState | ||||
|     setTimeout(() => { | ||||
|         that.dataInit(); | ||||
|     }, 0); | ||||
|         this.deviceState = store.equipmentList[this.indexs - 1].deviceState | ||||
|         setTimeout(() => { | ||||
|             that.dataInit(); | ||||
|         }, 0); | ||||
|     }, | ||||
|     methods: { | ||||
|         downStart(num) { | ||||
|             const store = this.$store.state | ||||
|             const that = this | ||||
|             console.log('start'); | ||||
|             this.nowNum = num | ||||
|             var nowDevice = store.equipmentList[this.indexs - 1] | ||||
|             // var data = { | ||||
|             //     accessToken: this.accesstoken, | ||||
|             //     deviceSerial: nowDevice.cameraSerialNumber, | ||||
|             //     channelNo: nowDevice.cameraChannelNumber, | ||||
|             //     direction: num, | ||||
|             //     speed: 1, | ||||
|             // } | ||||
|             // var header={ | ||||
|             //     'Content-Type': 'application/x-www-form-urlencoded', | ||||
|             // } | ||||
|             // axios.post('https://open.ys7.com/api/lapp/device/ptz/start',data,header) | ||||
|             //     .then(response => { | ||||
|             //         console.log(response.data); | ||||
|             //     }) | ||||
|             //     .catch(error => { | ||||
|             //         console.error(error); | ||||
|             //     }); | ||||
|             this.api.cameraStart(nowDevice.cameraSerialNumber,nowDevice.cameraChannelNumber,num).then(res => { | ||||
|                 setTimeout(() => { | ||||
|                     that.upEnd() | ||||
|                 }, 10000); | ||||
|                 }) | ||||
|         }, | ||||
|         upEnd() { | ||||
|             const store = this.$store.state | ||||
|             const that = this | ||||
|             var num = this.nowNum | ||||
|             var nowDevice = store.equipmentList[this.indexs - 1] | ||||
|             console.log('end'); | ||||
|             // var data = { | ||||
|             //     accessToken: this.accesstoken, | ||||
|             //     deviceSerial: nowDevice.cameraSerialNumber, | ||||
|             //     channelNo: nowDevice.cameraChannelNumber, | ||||
|             //     direction: num, | ||||
|             //     speed: 1, | ||||
|             // } | ||||
|             // var header={ | ||||
|             //     'Content-Type': 'application/x-www-form-urlencoded', | ||||
|             // } | ||||
|             // axios.post('https://open.ys7.com/api/lapp/device/ptz/stop',data,header) | ||||
|             //     .then(response => { | ||||
|             //         console.log(response.data); | ||||
|             //     }) | ||||
|             //     .catch(error => { | ||||
|             //         console.error(error); | ||||
|             //     }); | ||||
|             if (num != -1) { | ||||
|                 this.api.cameraStop(nowDevice.cameraSerialNumber, nowDevice.cameraChannelNumber, num).then(res => { | ||||
|                     this.nowNum=-1 | ||||
|                 }) | ||||
|             } | ||||
| 
 | ||||
|         }, | ||||
|     methods:{ | ||||
|         createVideoNew(accessToken) { | ||||
|             // divW和divH是获取了父级宽高 使播放容器能铺满div | ||||
|             let divW = this.$refs.monitor.clientWidth | ||||
|             let divH = this.$refs.monitor.clientHeight | ||||
|             let divW = this.$refs.videoPlayer.clientWidth | ||||
|             let divH = this.$refs.videoPlayer.clientHeight | ||||
|             this.player = new EZUIKit.EZUIKitPlayer({ | ||||
|                 id: 'video-js', // 视频容器ID | ||||
|                 accessToken: accessToken, | ||||
| @ -95,29 +198,28 @@ import video_zhCN from 'video.js/dist/lang/zh-CN.json' | ||||
|                 height: divH, // 播放容器宽高 也可以直接设置成数字 如 1080 单位是px | ||||
|             }) | ||||
|         }, | ||||
|         dataInit(){ | ||||
|         dataInit() { | ||||
|             const store = this.$store.state | ||||
|             var nowDevice = store.equipmentList[this.indexs - 1] | ||||
|             var data2 = { | ||||
|                     cameraid: nowDevice.cameraSerialNumber, | ||||
|                     channelid: nowDevice.cameraChannelNumber | ||||
|                 } | ||||
|                 cameraid: nowDevice.cameraSerialNumber, | ||||
|                 channelid: nowDevice.cameraChannelNumber | ||||
|             } | ||||
|             if (!this.player) { | ||||
|                     this.api.getGethls(data2).then(res => { | ||||
|                         // console.log(res.data, 11); | ||||
|                         if (res.data.code == 200) { | ||||
|                             this.url = res.data.data.ezopen | ||||
|                             this.createVideoNew(res.data.data.accesstoken) | ||||
|                         } | ||||
|                     }) | ||||
|                 }     | ||||
|                 this.api.getGethls(data2).then(res => { | ||||
|                     // console.log(res.data, 11); | ||||
|                     if (res.data.code == 200) { | ||||
|                         this.url = res.data.data.ezopen | ||||
|                         this.accesstoken = res.data.data.accesstoken | ||||
|                         this.createVideoNew(res.data.data.accesstoken) | ||||
|                     } | ||||
|                 }) | ||||
|             } | ||||
|         }, | ||||
|     }, | ||||
|    | ||||
|   } | ||||
|   </script> | ||||
|   <style lang="scss"> | ||||
|    | ||||
|   </style> | ||||
| 
 | ||||
| } | ||||
| </script> | ||||
| <style lang="scss"></style> | ||||
|    | ||||
|    | ||||