智慧农业后台管理页面
guanqb
2022-09-06 cbf18809270976db8af332fb80bedd6509c60245
溯源码页面修改
4 files modified
1 files deleted
1782 ■■■■ changed files
public/js/WebRtcPlayer.js 69 ●●●● patch | view | raw | blame | history
public/newtrac.html 945 ●●●●● patch | view | raw | blame | history
public/traceablityInfo.html 652 ●●●● patch | view | raw | blame | history
src/views/land/landAdd.vue 112 ●●●● patch | view | raw | blame | history
vue.config.js 4 ●●●● patch | view | raw | blame | history
public/js/WebRtcPlayer.js
@@ -4,73 +4,72 @@
     * @param {Element} ele 
     */
    constructor(ele) {
        this.ele = ele;
        this.ele = ele
        // this.PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
        this.PeerConnection = window.RTCPeerConnection;
        this.PeerConnection = window.RTCPeerConnection
    }
    Open(url) {
        if(this.localpc){
            this.Close();
            this.Close()
        }
        this.localpc = new this.PeerConnection(null);
        this.localpc = new this.PeerConnection(null)
        const AudioTransceiverInit = {
            direction: 'recvonly',
            sendEncodings: []
        };
        }
        const VideoTransceiverInit = {
            direction: 'recvonly',
            sendEncodings: []
        };
        this.localpc.addTransceiver('audio', AudioTransceiverInit);
        this.localpc.addTransceiver('video', VideoTransceiverInit);
        let that = this;
        }
        this.localpc.addTransceiver('audio', AudioTransceiverInit)
        this.localpc.addTransceiver('video', VideoTransceiverInit)
        let that = this
        this.localpc.ontrack = function (e) {
            if (!that.localpc.stream) {
                that.localpc.streamId = e.track.id;
                that.localpc.stream = new MediaStream();
                that.ele.srcObject = that.localpc.stream;
                that.ele.muted = true;
                that.ele.autoplay = true;
                that.localpc.streamId = e.track.id
                that.localpc.stream = new MediaStream()
                that.ele.srcObject = that.localpc.stream
                that.ele.muted = true
                that.ele.autoplay = true
            }
            that.localpc.stream.addTrack(e.track);
            that.localpc.stream.addTrack(e.track)
        }
        this.localpc.createOffer()
            .then(offer => this.localpc.setLocalDescription(offer))
            .then(() => {
                that.getSdp(url, this.localpc.localDescription.sdp, function (data) {
                    console.log("pullStreamRes:", data);
                    data = JSON.parse(data);
                    if (data.code != 0) return;
                    let anwser = {};
                    anwser.sdp = data.sdp;
                    anwser.type = 'answer';
                    data = JSON.parse(data)
                    if (data.code != 0) return
                    let anwser = {}
                    anwser.sdp = data.sdp
                    anwser.type = 'answer'
                    that.localpc.setRemoteDescription(anwser).then(() => {
                        console.log("播放成功");
                        console.log("播放成功")
                    }).catch(e => {
                        console.error("播放错误:" + e);
                    });
                });
                        console.error("播放错误:" + e)
            })
            .catch(e => "添加ICE候选人过程错误: " + e);
                })
            })
            .catch(e => "添加ICE候选人过程错误: " + e)
    }
    Close() {
        if(this.localpc){
            this.localpc.close();
            this.localpc = null;
            this.localpc.close()
            this.localpc = null
        }
    }
    getSdp(url, body, success) {
        let xhr = new XMLHttpRequest();
        xhr.open('POST', url);
        xhr.setRequestHeader('Content-Type', 'text/plain;charset=utf-8');
        let xhr = new XMLHttpRequest()
        xhr.open('POST', url)
        xhr.setRequestHeader('Content-Type', 'text/plain;charset=utf-8')
        xhr.onreadystatechange = function () {
            if (xhr.responseText.length < 1) return;
            if (xhr.responseText.length < 1) return
            if (xhr.status === 200) {
                success(xhr.responseText);
                success(xhr.responseText)
            }
        };
        xhr.send(body);
        }
        xhr.send(body)
    }
}
public/newtrac.html
File was deleted
public/traceablityInfo.html
@@ -5,6 +5,8 @@
<head>
  <meta charset="UTF-8">
  <meta name="divport" content="width=device-width, initial-scale=1.0">
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"> -->
  <title>查看溯源</title>
  <style>
    .top-log {
      position: relative;
@@ -222,7 +224,6 @@
    .model-box.cd .model-content.dk .content-body {
      height: 450px;
      background: greenyellow;
    }
    .model-box.cd .model-content.jksp .content-body {
@@ -355,8 +356,13 @@
      font-size: 24px;
      color: #697580;
      white-space: nowrap;
      padding: 0 5px;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .equiBtnOn {
      background-color: rgb(28, 235, 28) !important;
      color: #fff !important;
    }
    .model-box.cd .model-content.jksp .content-footer .equi-btn:first-child {
@@ -607,6 +613,15 @@
      position: relative;
      overflow: hidden;
    } */
    #video-body {
      width: 94%;
      padding: 0 3%;
      height: 400px;
    }
    #video-body video {
      object-fit: fill;
    }
    #video-footer {
      width: 100%;
@@ -633,19 +648,187 @@
  </style>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
  <script src="js/flv.min.js" type="text/javascript" charset="utf-8"></script>
  <script src="js/WebRtcPlayer.js"></script>
</head>
<body>
  <div class="page-main-container" style="background: #F1F9F8;width:100%;height: 100%;">
    <!-- str0 -->
    <!-- 顶部图片 -->
    <div class="top-log">
      <img width="100%" height="520px" src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sym/2.png" />
      <div class="btn-grounp">
        <img bindtap="scrollTo" data-class=".qw" width="200px" height="100px"
          src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1418.png" />
        <img bindtap="scrollTo" data-class=".cd" width="200px" height="100px"
          src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1416.png" />
        <img bindtap="scrollTo" data-class=".zz" width="200px" height="100px"
          src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1415.png" />
        <img bindtap="scrollTo" data-class=".sc" width="200px" height="100px"
          src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1414.png" />
      </div>
    </div>
    <!-- <scroll-div scroll-top="{{scrollTop}}" refresher-enabled="{{true}}" bindrefresherrefresh="refresh" refresher-triggered="{{triggered}}" style="height: {{clientHeight}}" scroll-y bindscrolltolower="upcroll"> -->
    <!-- 农产品信息 -->
    <div class="main-content">
      <div class="logo">
        <img width="100%" height="100%" id="logoImg" />
      </div>
      <div class="title" id="titleName"></div>
      <div class="type">
        <div class="sub" id="sub1">${recovery.lx}</div>
      </div>
      <div class="date" id="date1"></div>
    </div>
    <!-- </scroll-div> -->
    <!-- 权威检测 -->
    <div class="qw model-box">
      <div class="model-title">
        <div class="l"></div>
        <div class="title">权威检测</div>
        <div class="border"></div>
        <div class="status">
          <div>
            <van-icon style="margin-right: 10px;"
              name="https://dev.jxpskj.com:8023/zhny-web/assets/images/sym/1265.png" />
          </div>
          可追溯
        </div>
      </div>
      <div class="model-content" id="str1Dom">
        <!-- str1 -->
        <!-- str2 -->
      </div>
    </div>
    <!-- 产地信息 -->
    <div class="cd model-box">
      <div class="model-title">
        <div class="l"></div>
        <div class="title">产地信息</div>
        <div class="border"></div>
        <div class="status">
          <div>
            <van-icon style="margin-right: 10px;"
              name="https://dev.jxpskj.com:8023/zhny-web/assets/images/sym/1265.png" />
          </div>
          可追溯
        </div>
      </div>
      <div class="dk model-content">
        <div class="content-header">
          <van-icon style="margin-right: 12px;" name="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1267.png" />
          种植地块
        </div>
        <div class="content-body">
          <img width="94%" height="100%" style="margin-left:3%" id="contentImg1" />
        </div>
        <div class="content-footer">
          <div class="l" id="farmAddress"></div>
        </div>
      </div>
      <!-- 监控数据展示 -->
      <div class="jksp model-content">
        <div class="content-header">
          <van-icon style="margin-right: 12px;" name="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/1272.png" />
          良心生产,不怕监督,24小时视频监控
        </div>
        <div class="content-body">
          <div id="video-body">
            <video autoplay muted controls id="videoElement"
              style="width:100%;height: 100%;">你的浏览器太老了,不支持HTML5视频。</video>
          </div>
        </div>
        <div class="content-footer" id="videoFooter"></div>
        <!-- str10 -->
      </div>
      <!-- 监测数据展示-->
      <div class="jk model-content">
        <div class="content-header">
          物联网监控保证产地养分充足,且不被污染
        </div>
        <div class="content-body">
          <div class="site-box">
            <!-- strdetection -->
            <div class="site-title">
              <div class="l">
                <select id="select" style="font-weight: bold;color: #333333;border: none;font-size: 28px;width:96%">
                </select>
              </div>
            </div>
            <div class="site-date">
              <div class="site-date-text" id="sitedatetext">更新时间</div>
            </div>
            <div class="site-content" id="detectionlist">
              <!-- str11 -->
              <!-- </div> -->
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 种植环节 -->
    <div class="zz model-box">
      <div class="model-title">
        <div class="l"></div>
        <div class="title">种植环节</div>
        <div class="border"></div>
        <div class="status no"></div>
      </div>
      <div class="model-content">
        <div class="msg">
          <div class="l">
            <img width="126px" height="126px" src="https://dev.jxpskj.com:8023/zhny-web/assets/images/sy/zz-log.png" />
          </div>
          <div class="r">
            <div>
              我是基地管理员:
            </div>
            <div class="r-b-msg">
              以下农事操作,是在我的监督下完成
            </div>
            <div class="point-to"></div>
          </div>
        </div>
        <!-- str3 -->
        <div id="recordBox"></div>
        <!-- str4 -->
      </div>
    </div>
    <!-- 生产企业 -->
    <div class="sc model-box">
      <div class="model-title">
        <div class="l"></div>
        <div class="title">生产企业</div>
        <div class="border"></div>
        <div class="status no">
        </div>
      </div>
      <div class="model-content">
        <div class="content-header" id="contentHeader"></div>
        <div class="content-body">
          <swiper class="swiper" indicator-dots="true" autoplay="true" interval="3000" duration="1000">
            <block class="swiper-image" id="swImg">
              <!-- str5 -->
              <!-- str6 -->
            </block>
          </swiper>
  </div>
        <div class="text-intro" id="textIntro"></div>
        <div class="content-footer">
        </div>
      </div>
    </div>
  </div>
</body>
  <script>
  $(function () {
    var getData = function (name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
      var r = window.location.search.substr(1).match(reg);
@@ -653,14 +836,9 @@
      return null;
    };
    var code = getData("code");
    // var code = "22070000001";
    axios.get('https://dev.jxpskj.com:8023/api/traceability/getTraceabilityDetailInfos?code=' + code).then(function (
      res) {
      // axios.get('http://192.168.0.114:89/traceability/getTraceabilityDetailInfo?code=' + code).then(function(res) {
    axios.get('https://dev.jxpskj.com:8023/api/traceability/getTraceabilityDetailInfos?code=' + code).then(
      function (res) {
        // 初始化数据begin
      var data = res.data.data;
      var farm = data.farm;
      var land = data.landVO;
@@ -668,52 +846,19 @@
      var paperList = data.paperVOList;
      var recordVOList = data.recordVOList;
      var recovery = data.recoveryVO;
      var str0 = `<div class="top-log">
            <img width="100%" height="520px" src="http://182.106.212.58:8014/assets/images/sym/2.png" />
            <div class="btn-grounp">
                <img bindtap="scrollTo" data-class=".qw" width="200px" height="100px" src="http://182.106.212.58:8014/assets/images/sy/1418.png" />
                <img bindtap="scrollTo" data-class=".cd" width="200px" height="100px" src="http://182.106.212.58:8014/assets/images/sy/1416.png" />
                <img bindtap="scrollTo" data-class=".zz" width="200px" height="100px" src="http://182.106.212.58:8014/assets/images/sy/1415.png" />
                <img bindtap="scrollTo" data-class=".sc" width="200px" height="100px" src="http://182.106.212.58:8014/assets/images/sy/1414.png" />
            </div>
        </div>
        // 初始化数据end
        <div class="main-content">
        // 页面数据渲染begin
        $('#titleName').text(recovery.strainName)
        $('#logoImg').attr('src', recovery.url)
        $('#sub1').text(recovery.lx)
        $('#date1').text('采收时间:' + recovery.time.replaceAll("-", "."))
        $('#contentHeader').text(farm.farmName)
        $('#textIntro').text(farm.introduce)
        // $('#slideImg').attr(item)
        // 页面数据渲染end
            <div class="logo">
                <img width="100%" height="100%" src="${recovery.url}" />
                <!-- <div class="btn">更换图片</div> -->
            </div>
            <div class="title">${recovery.strainName}</div>
            <div class="type">
                <div class="sub">${recovery.lx}</div>
                <!-- <div class="icon">
                <van-icon name="play" />
              </div> -->
            </div>
            <div class="date">
                采收时间:${recovery.time.replaceAll("-", ".")}
            </div>
        </div>
        <div class="qw model-box">
        <div class="model-title">
            <div class="l"></div>
            <div class="title">权威检测</div>
            <div class="border"></div>
            <div class="status">
                <div>
                    <van-icon style="margin-right: 10px;" name="http://182.106.212.58:8014/assets/images/sym/1265.png" />
                </div>
                可追溯
            </div>
        </div>
        <div class="model-content">`
        // 权威检测页面遍历begin
      var str1 = '';
      if (paperList.length > 0) {
        paperList.forEach(item => {
@@ -744,111 +889,99 @@
      } else {
        str1 = str1 + `<div class="box"></div>`
      }
        $('#str1Dom').append(str1)
        $('#contentImg1').attr('src', land.url)
        $('#farmAddress').text(farm.farmAddress)
        // 权威检测页面遍历end
      var str2 = `
            </div>
        </div>
        <div class="cd model-box">
            <div class="model-title">
                <div class="l"></div>f
                <div class="title">产地信息</div>
                <div class="border"></div>
                <div class="status">
                    <div>
                        <van-icon style="margin-right: 10px;" name="http://182.106.212.58:8014/assets/images/sym/1265.png" />
                    </div>
                    可追溯
                </div>
            </div>
            <div class="dk model-content">
                <div class="content-header">
                    <van-icon style="margin-right: 12px;" name="http://182.106.212.58:8014/assets/images/sy/1267.png" /> 种植地块
                </div>
                <div class="content-body">
                    <image style="width: 100%;height:100%" src="${land.url}" />
                </div>
                <div class="content-footer">
        // 种植环节遍历begin
        var str3 = '';
        recordVOList.forEach((item, index) => {
          str3 = str3 + `<div class="record-box">
                    <div class="l">
                        ${farm.farmAddress}
                    </div>
                    <!-- <div class="r">
                  <van-icon name="star" />
                  导航
                </div> -->
                </div>
                        <div class="one  line" style="${index == 0 ? 'background: transparent !important;' : ''}">
            </div>
            <div class="jksp model-content">
                <div class="content-header">
                    <van-icon style="margin-right: 12px;" name="http://182.106.212.58:8014/assets/images/sy/1272.png" /> 良心生产,不怕监督,24小时视频监控
                        <div class="point">
                        </div>
                        <div class="two line" style="${index == recordVOList.length - 1 ? 'background: transparent !important;' : ''}">
                        </div>
                    </div>
                    <div class="r">
                        <div class="record-item">
                            <div class="type">${item.typeName}</div>
                            <div class="date-pel">
                                <div class="date">${item.time}</div>
                                <div class="pel">操作人:${item.realName}</div>
                            </div>
                        </div>
                    </div>
                </div>`
        });
        $('#recordBox').append(str3)
        // 种植环节遍历end
      var dom = $('.page-main-container');
      dom.empty();
      dom.append(str0 + str1 + str2);
        //生产企业begin
        var str5 = ''
        var urls = farm.picture.split(",");
        if (urls.length > 0) {
          urls.forEach(item => {
            str5 = str5 + `<swiper-item>
                                <image src="${item}" class="slide-image" />
                            </swiper-item>`
          })
        }
        $('#swImg').append(str5)
        //生产企业end
      //请求检测数据
        // 监控/监测数据begin
      axios.get(
        'http://dev.jxpskj.com:8030/pyh-station/stationAndVideo/queryStationAndVideoInfoData?type=All&landId=' +
          'https://dev.jxpskj.com:8023/pyh-station/stationAndVideo/queryStationAndVideoInfoData?type=All&landId=' +
        recovery.landId).then(function (res) {
        var staList = res.data.data.staList;
        var vidList = res.data.data.vidList;
        window.detectionList = staList;
        window.videoList = vidList;
        //监控
        var strvedio = '';
        // vidList.push({
        //   name:"1号摄像头"
        // })
        // vidList.push({
        //   name:"2号摄像头"
        // })
        if (vidList.length > 0) {
          //读取第一个视频 url
          strvedio = strvedio + `<div class="content-body">
                  <div id="video-body">
                    <video controls id="video-element" autoplay muted>你的浏览器太老了,不支持HTML5视频。</video>
                  </div>
                </div><div class="content-footer">`
          //遍历监控点
          //监控展示
          var ele = document.getElementById("videoElement");
          var player = new WebRtcPlayer(ele);
          var videoUrl = vidList[0].webRtc
          player.Open(videoUrl)
          //监控列表
          var jkBtn = ''
          vidList.forEach((item, index) => {
            strvedio = strvedio + `<div class="equi-btn on">
                        ${item.name}
                    </div>`
            if (index >= 1) {
              // equibtn.style.color = "#fff";
            jkBtn = jkBtn + `<div class="equi-btn">${item.name}</div>`
          })
          $('#videoFooter').append(jkBtn)
          $('.equi-btn')[0].classList.add('equiBtnOn')
          //切换视频
          $('.jksp .content-footer .equi-btn').click(function () {
            for (var i = 0; i < $('.equi-btn').length; i++) {
              $('.equi-btn')[i].classList.remove('equiBtnOn')
            }
            $(this)[0].classList.add('equiBtnOn')
            var btnText = $(this)[0].innerText
            vidList.forEach((item, index) => {
              if (item.name == btnText) {
                var newVideoUrl = item.webRtc
                player.Open(newVideoUrl)
            }
          })
        } else {
          strvedio = strvedio + `<div class="content-body">
                </div><div class="content-footer">`
        }
        var str10 =
          `</div>
              </div>
            <div class="jk model-content">
                <div class="content-header">
                    物联网监控保证产地养分充足,且不被污染
                </div>
                <div class="content-body">
                    <div class="site-box">`
        var strdetection = '';
          })
          //监测点
          var jcList = ''
          staList.forEach(item => {
            jcList = jcList + `<option>${item.name}</option>`
          })
          $('#select').append(jcList)
          //更新时间
          var timeStr = ''
        if (staList.length > 0) {
          var sta = staList[0];
          var timeStr = '';
          var time = sta.weatherTime;
          //当前时间
          var date = new Date();
@@ -878,33 +1011,16 @@
              }
            }
          }
          //读取第一个检测设备
          strdetection = strdetection +
            `<div class="site-title">
                            <div class="l">
                              <select id="select" style="font-weight: bold;color: #333333;border: none;font-size: 28px;width:96%">`
          staList.forEach(item => {
            strdetection = strdetection + `<option>${item.name}</option>`
          })
          strdetection = strdetection + `</select>
                            </div>
                        </div>
                        <div class="site-date">
                            <div class="site-date-text" id="sitedatetext">
                              ${timeStr}前更新</div>
                        </div>
                        <div class="site-content" id="detectionlist">`
          //遍历检测信息
            timeStr = timeStr + '前更新'
          }
          $('#sitedatetext').text(timeStr)
          //监测数据展示
          var jcStr = ''
          var weatherList = staList[0].weatherList;
          if (weatherList.length > 0) {
            weatherList.forEach(item => {
              if (item.name != '监测时间') {
                strdetection = strdetection + `<div class="list">
                jcStr = jcStr + `<div class="list">
                                  <div class="l">
                                      <div class="type">${item.name}</div>
                                      <div class="unit">
@@ -918,188 +1034,7 @@
              }
            })
          }
        } else {
          strdetection = strdetection + `
                        <div class="site-content">`
        }
        var str11 = `</div>
                    </div>
                </div>
            </div>
        </div>
        <div class="zz model-box">
            <div class="model-title">
                <div class="l"></div>
                <div class="title">种植环节</div>
                <div class="border"></div>
                <div class="status no">
                    <!-- 去完善 -->
                    <!-- <div>
                  <van-icon style="margin-left: 10px;" color="#EC9144" name="arrow" />
                </div> -->
                </div>
            </div>
            <div class="model-content">
                <div class="msg">
                    <div class="l">
                        <img width="126px" height="126px" src="http://182.106.212.58:8014/assets/images/sy/zz-log.png" />
                    </div>
                    <div class="r">
                        <div>
                            我是基地管理员:
                        </div>
                        <div class="r-b-msg">
                            以下农事操作,是在我的监督下完成
                        </div>
                        <div class="point-to"></div>
                    </div>
                </div>`
        var str3 = '';
        recordVOList.forEach((item, index) => {
          str3 = str3 + `<div class="record-box">
                    <div class="l">
                        <div class="one  line" style="${index == 0 ? 'background: transparent !important;' : ''}">
                        </div>
                        <div class="point">
                        </div>
                        <div class="two line" style="${index == recordVOList.length - 1 ? 'background: transparent !important;' : ''}">
                        </div>
                    </div>
                    <div class="r">
                        <div class="record-item">
                            <div class="type">${item.typeName}</div>
                            <div class="date-pel">
                                <div class="date">${item.time}</div>
                                <div class="pel">操作人:${item.realName}</div>
                            </div>
                        </div>
                    </div>
                </div>`
        });
        var str4 = `</div>
        </div>
        <div class="sc model-box">
            <div class="model-title">
                <div class="l"></div>
                <div class="title">生产企业</div>
                <div class="border"></div>
                <div class="status no">
                    <!-- 去完善
                <div>
                  <van-icon style="margin-left: 10px;" color="#EC9144" name="arrow" />
                </div> -->
                </div>
            </div>
            <div class="model-content">
                <div class="content-header">
                    ${farm.farmName}
                </div>
                <div class="content-body">
                    <swiper class="swiper" indicator-dots="true" autoplay="true" interval="3000" duration="1000">
                        <block class="swiper-image">`
        var str5 = '';
        var urls = farm.picture.split(",");
        if (urls.length > 0) {
          urls.forEach(item => {
            str5 = str5 + `<swiper-item>
                                <image src="${item}" class="slide-image" />
                            </swiper-item>`
          })
        }
        var str6 = `</block></swiper>
                </div>
                <div class="text-intro">
                    ${farm.introduce}
                </div>
                <div class="content-footer">
                </div>
            </div>
        </div>`
        // <div class="btn-grounp">
        //     <div class="l">
        //         <div class="plan">
        //             ${num} %
        //         </div>
        //         <div class="text">
        //             溯源完整度
        //         </div>
        //     </div>
        //     <div class="r">
        //         <van-button bind:click="editTracability" round custom-style="margin-right: 40px; width: 200px; height: 72px; border: 2px solid #5ABF78; background: #fff; color: #5ABF78; font-size: 30px;">编辑溯源</van-button>
        //         <van-button bind:click="submit" round custom-style="width: 200px; height: 72px; border: none; background: #5ABF78; color: #fff; font-size: 30px;">分享</van-button>
        //     </div>
        // </div>
        // var dom = $('.page-main-container');
        dom.empty();
        dom.append(str0 + str1 + str2 + strvedio + str10 + strdetection + str11 + str3 + str4 + str5 + str6);
        var videoBody = document.getElementById('video-body'),
          videoElement = document.getElementById('video-element');
        var slide = false,
          soundWidth = 0;
        var flvPlayer = null;
        //初始化视频配置
        if (flvjs.isSupported()) {
          flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: window.videoList[0].wssFlv,
            hasAudio: false
          });
          flvPlayer.attachMediaElement(videoElement);
          flvPlayer.load();
        }
        videoElement.style.width = "100%";
        videoElement.style.height = "385px";
        videoElement.style.objectFit = "fill";
        //切换视频
        $('.jksp .content-footer .equi-btn').click(function () {
          var ind = $(this).index()
          window.videoList.some((item, index) => {
            console.log('1112', item, index);
            if (ind == index) {
              //暂停播放数据流
              flvPlayer.pause();
              //取消数据流加载
              flvPlayer.unload();
              //将播放实例从节点中取出
              flvPlayer.detachMediaElement();
              //销毁播放实例
              flvPlayer.destroy();
              //重新创建流实例
              flvPlayer = flvjs.createPlayer({
                type: 'flv',
                url: window.videoList[index].wssFlv,
                hasAudio: false
              });
              flvPlayer.attachMediaElement(videoElement);
              flvPlayer.load();
            }
          })
        })
          $('#detectionlist').append(jcStr)
        //检测点下拉切换事件
        $('#select').change(function () {
          var bind = $(this).val()
@@ -1165,19 +1100,22 @@
                }
              }
              //填充时间参数
                if (time != null) {
              sitedatetext.innerHTML = `<div class="site-date-text" id="sitedatetext">
                                ${timeStr}前更新</div>`;
                } else {
                  sitedatetext.innerHTML = '暂无数据'
                }
            }
          })
        })
      });
    });
        })
        // 监控/监测数据end
      })
  })
  </script>
  <script>
  </script>
</body>
</html>
src/views/land/landAdd.vue
@@ -21,15 +21,15 @@
</template>
<script>
import { mapGetters } from "vuex";
import { getFarmList,getDetail } from "@/api/farm/farm";
import { getDeptTree } from "@/api/system/dept";
import { add } from "@/api/land/land";
import website from "@/config/website";
import domtoimage from "dom-to-image";
import h2 from "html2canvas";
import getMapDataInThere from "./getMapDataInThere.vue";
import { number } from "echarts";
import { mapGetters } from "vuex"
import { getFarmList, getDetail } from "@/api/farm/farm"
import { getDeptTree } from "@/api/system/dept"
import { add } from "@/api/land/land"
import website from "@/config/website"
import domtoimage from "dom-to-image"
// import h2 from "html2canvas";
import getMapDataInThere from "./getMapDataInThere.vue"
import { number } from "echarts"
// import canvas2Image from 'canvas2Image'
export default {
@@ -145,7 +145,7 @@
      area: "",
      farmInfo:{},
      visible: false,
    };
        }
  },
  created() {
    
@@ -163,64 +163,64 @@
    landUrl: {
      handler(newVal, oldVal) {
        if (newVal) {
          this.$refs.form.submit();
                    this.$refs.form.submit()
        }
      },
    },
    "form.landName": {
      handler(newVal, oldVal) {
        this.landUrl = "";
                this.landUrl = ""
      },
    },
    "form.landType": {
      handler(newVal, oldVal) {
        this.landUrl = "";
                this.landUrl = ""
      },
    },
    "form.landArea": {
      handler(newVal, oldVal) {
        this.landUrl = "";
                this.landUrl = ""
      },
    },
    "form.landUnit": {
      handler(newVal, oldVal) {
        this.landUrl = "";
                this.landUrl = ""
      },
    },
  },
  mounted() {
    this.initData(this.userInfo.tenant_id);
    window.addEventListener("message", this.handleMessage);
        this.initData(this.userInfo.tenant_id)
        window.addEventListener("message", this.handleMessage)
  },
  methods: {
    handleMessage(event) {
      if (Number.isFinite(event.data)) {
        this.form.landArea = (event.data * 0.0015).toFixed(2);
                this.form.landArea = (event.data * 0.0015).toFixed(2)
      }
      if (Object.prototype.toString.call(event.data) === "[object Object]") {
        var obj = event.data;
        this.polygon = obj.polygons;
        this.landUrl = obj.url;
                var obj = event.data
                this.polygon = obj.polygons
                this.landUrl = obj.url
      }
    },
    initData(tenantId) {
      getFarmList().then((res) => {
        const column = this.findObject(this.option.column, "farmId");
        column.dicData = res.data.data;
      });
                const column = this.findObject(this.option.column, "farmId")
                column.dicData = res.data.data
            })
    },
    //初始化
    init() {
      //清空面的数据
      this.$store.commit("clear_polygon");
            this.$store.commit("clear_polygon")
      this.form.landArea = 0
      this.visible = true;
      this.form.farmId = this.$farmId;
            this.visible = true
            this.form.farmId = this.$farmId
        getDetail(this.form.farmId).then(res=>{
            this.farmInfo = res.data.data
            this.url = this.drawMapUrlBase + "/base?type=1&lng=112&lat=24&status=manage&longitude="+this.farmInfo.longitude+"&latitude="+this.farmInfo.latitude;
                this.url = this.drawMapUrlBase + "/base?type=1&lng=112&lat=24&status=manage&longitude=" + this.farmInfo.longitude + "&latitude=" + this.farmInfo.latitude
        })
@@ -229,19 +229,19 @@
    },
    // 表单提交
    submit(row, done) {
      row["deptId"] = this.userInfo.dept_id;
            row["deptId"] = this.userInfo.dept_id
      // row.farmId = this.farm.id
      var that = this;
      var poly = [];
            var that = this
            var poly = []
      if (this.polygon.length != 0) {
        this.polygon.forEach((e) => {
          poly.push({
            lng: e[0],
            lat: e[1],
          });
        });
        this.polygon = poly;
                    })
                })
                this.polygon = poly
      }
      if (this.polygon.length == 0) {
@@ -250,18 +250,18 @@
        // loading()
      } else {
        //如果有值,空间坐标转换
        let pol = this.polygon;
        let polLength = this.polygon.length - 1;
        let usePolygons = "";
                let pol = this.polygon
                let polLength = this.polygon.length - 1
                let usePolygons = ""
        for (let k in pol) {
          usePolygons += pol[k].lng + "," + pol[k].lat;
                    usePolygons += pol[k].lng + "," + pol[k].lat
          if (k != polLength) {
            usePolygons += ";";
                        usePolygons += ";"
          }
        }
        //设置坐标点
        row.userId = this.userInfo.user_id;
        row.landRange = usePolygons;
                row.userId = this.userInfo.user_id
                row.landRange = usePolygons
      }
      // if (this.polygons.length == 0) {
@@ -285,41 +285,41 @@
      //     console.log(row.landRange)
      // }
      row["url"] = this.landUrl;
            row["url"] = this.landUrl
      // row['landArea'] = this.area
      if (row.landArea < 0) {
        this.$message.warning("地块面积不能为负数");
        done();
        return;
                this.$message.warning("地块面积不能为负数")
                done()
                return
      }
      add(row).then(
        () => {
          that.$emit("refreshOnLoad");
          that.$refs.form.resetFields();
          that.form.landUnit = "0";
          that.visible = false;
                    that.$emit("refreshOnLoad")
                    that.$refs.form.resetFields()
                    that.form.landUnit = "0"
                    that.visible = false
          this.$message({
            type: "success",
            message: "操作成功!",
          });
          done();
                    })
                    done()
        },
        (error) => {
          // loading()
          window.console.log(error);
                    window.console.log(error)
        }
      );
            )
    },
    setMapData(val) {
      this.LineData = val[0];
      this.PointData = val[1];
            this.LineData = val[0]
            this.PointData = val[1]
    },
    showMap() {
      this.mapVisible = true;
            this.mapVisible = true
    },
  },
};
vue.config.js
@@ -45,9 +45,9 @@
        proxy: {
            '/api': {
                //本地服务接口地址
                target: 'http://192.168.0.207:89',
                // target: 'http://192.168.0.207:89',
                //远程演示服务地址,可用于直接启动项目
                // target: 'http://182.106.212.58:8013/api',
                target: 'http://182.106.212.58:8020/api',
                ws: true,
                pathRewrite: {
                    '^/api': '/'