648540858
2021-10-15 62e82ea9ee6a73cf7cdcfe1ab1a7b49a23f571e3
web_src/src/components/StreamProxyList.vue
@@ -10,6 +10,7 @@
            </div>
            <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;">
               <el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="addStreamProxy">添加代理</el-button>
               <el-button v-if="false" icon="el-icon-search" size="mini" style="margin-right: 1rem;" type="primary" @click="addOnvif">搜索ONVIF</el-button>
            </div>
            <devicePlayer ref="devicePlayer"></devicePlayer>
            <el-table :data="streamProxyList" border style="width: 100%" :height="winHeight">
@@ -19,19 +20,36 @@
               <el-table-column label="流地址" width="400" align="center" show-overflow-tooltip >
                  <template slot-scope="scope">
                  <div slot="reference" class="name-wrapper">
                     <el-tag size="medium" v-if="scope.row.type == 'default'">
                        <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
                        <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
                        {{scope.row.url}}
                     </el-tag>
                     <el-tag size="medium" v-if="scope.row.type != 'default'">
                        <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
                        <i class="cpoy-btn el-icon-document-copy"  title="点击拷贝" v-clipboard="scope.row.src_url" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i>
                        {{scope.row.src_url}}
                     </el-tag>
                  </div>
                  </template>
               </el-table-column>
          <el-table-column prop="mediaServerId" label="流媒体" width="150" align="center"></el-table-column>
          <el-table-column label="类型" width="100" align="center">
            <template slot-scope="scope">
              <div slot="reference" class="name-wrapper">
                <el-tag size="medium">{{scope.row.type}}</el-tag>
              </div>
            </template>
          </el-table-column>
               <el-table-column prop="gbId" label="国标编码" width="180" align="center" show-overflow-tooltip/>
          <el-table-column label="启用" width="120" align="center">
            <template slot-scope="scope">
              <div slot="reference" class="name-wrapper">
                <el-tag size="medium" v-if="scope.row.enable">已启用</el-tag>
                <el-tag size="medium" type="info" v-if="!scope.row.enable">未启用</el-tag>
              </div>
            </template>
          </el-table-column>
               <el-table-column label="转HLS" width="120" align="center">
                  <template slot-scope="scope">
                  <div slot="reference" class="name-wrapper">
@@ -48,14 +66,7 @@
                  </div>
                  </template>
               </el-table-column>
               <el-table-column label="启用" width="120" align="center">
                  <template slot-scope="scope">
                  <div slot="reference" class="name-wrapper">
                     <el-tag size="medium" v-if="scope.row.enable">已启用</el-tag>
                     <el-tag size="medium" type="info" v-if="!scope.row.enable">未启用</el-tag>
                  </div>
                  </template>
               </el-table-column>
               <el-table-column label="操作" width="360" align="center" fixed="right">
                  <template slot-scope="scope">
@@ -79,6 +90,7 @@
               :total="total">
            </el-pagination>
         <streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
         <onvifEdit ref="onvifEdit" ></onvifEdit>
         </el-main>
      </el-container>
   </div>
@@ -86,6 +98,7 @@
<script>
   import streamProxyEdit from './dialog/StreamProxyEdit.vue'
   import onvifEdit from './dialog/onvifEdit.vue'
   import devicePlayer from './dialog/devicePlayer.vue'
   import uiHeader from './UiHeader.vue'
   export default {
@@ -93,15 +106,16 @@
      components: {
         devicePlayer,
         streamProxyEdit,
      onvifEdit,
         uiHeader
      },
      data() {
         return {
            streamProxyList: [],
            streamProxyList: [],
            currentPusher: {}, //当前操作设备对象
            updateLooper: 0, //数据刷新轮训标志
            currentDeviceChannelsLenth:0,
            winHeight: window.innerHeight - 200,
            winHeight: window.innerHeight - 250,
            currentPage:1,
            count:15,
            total:0,
@@ -113,7 +127,7 @@
      },
      mounted() {
         this.initData();
         // this.updateLooper = setInterval(this.initData, 10000);
         this.updateLooper = setInterval(this.initData, 1000);
      },
      destroyed() {
         this.$destroy('videojs');
@@ -142,8 +156,6 @@
                  count: that.count
               }
            }).then(function (res) {
               console.log(res);
               console.log(res.data.list);
               that.total = res.data.total;
               that.streamProxyList = res.data.list;
               that.getListLoading = false;
@@ -155,6 +167,35 @@
         addStreamProxy: function(){
            this.$refs.streamProxyEdit.openDialog(null, this.initData)
         },
      addOnvif: function(){
        this.getListLoading = true;
        this.getListLoading = true;
        this.$axios({
          method: 'get',
          url:`/api/onvif/search?timeout=3000`,
        }).then((res) =>{
          this.getListLoading = false;
          if (res.data.code == 0 ){
            if (res.data.data.length > 0) {
              this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{
                  if (url != null) {
                    this.$refs.onvifEdit.close();
                    this.$refs.streamProxyEdit.openDialog({type: "default", url: url, src_url: url}, this.initData())
                  }
              })
            }else {
              this.$message.success("未找到可用设备");
            }
        }else {
            this.$message.error(res.data.msg);
          }
        }).catch((error)=> {
          this.getListLoading = false;
          this.$message.error(error.response.data.msg);
        });
         },
         saveStreamProxy: function(){
         },
         play: function(row){
@@ -165,37 +206,46 @@
               url:`/api/media/stream_info_by_app_and_stream`,
               params: {
                  app: row.app,
                  stream: row.stream
                  stream: row.stream,
            mediaServerId: row.mediaServerId
               }
            }).then(function (res) {
               that.getListLoading = false;
               that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
                        streamInfo: res.data,
                        hasAudio: true
                    });
               if (res.data.code === 0) {
            that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
              streamInfo: res.data.data,
              hasAudio: true
            });
          }else {
            that.$message({
              showClose: true,
              message: "获取地址失败:" + res.data.msg,
              type: "error",
            });
          }
            }).catch(function (error) {
               console.log(error);
               that.getListLoading = false;
            });
         },
         deleteStreamProxy: function(row){
            console.log(1111)
            let that = this;
            this.getListLoading = true;
            that.$axios({
                    method:"delete",
                    url:"/api/proxy/del",
                    params:{
                  app: row.app,
                  stream: row.stream
               }
                      app: row.app,
                      stream: row.stream
                    }
                }).then((res)=>{
                    that.getListLoading = false;
               that.initData()
                         that.initData()
                }).catch(function (error) {
                    console.log(error);
               that.getListLoading = false;
                         that.getListLoading = false;
                });
         },
         start: function(row){
@@ -210,9 +260,18 @@
                  stream: row.stream
               }
            }).then(function (res) {
               that.getListLoading = false;
               that.startBtnLaoding = false;
               that.initData()
          that.getListLoading = false;
          that.startBtnLaoding = false;
              if (res.data == "success"){
            that.initData()
          }else {
            that.$message({
              showClose: true,
              message: "保存失败,请检查地址是否可用!",
              type: "error",
            });
          }
            }).catch(function (error) {
               console.log(error);
               that.getListLoading = false;