From 9f16b5c553b479ea12fe368a7ecc748872ea8b98 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 12 六月 2025 11:11:27 +0800
Subject: [PATCH] 修改配置文件

---
 web_src/src/components/StreamProxyList.vue |  328 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 168 insertions(+), 160 deletions(-)

diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue
old mode 100644
new mode 100755
index 9ecb933..eb1f7d8
--- a/web_src/src/components/StreamProxyList.vue
+++ b/web_src/src/components/StreamProxyList.vue
@@ -1,115 +1,113 @@
 <template>
-	<div id="streamProxyList">
-		<el-container>
-			<el-header>
-				<uiHeader></uiHeader>
-			</el-header>
-			<el-main>
-				<div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;">
-					<span style="font-size: 1rem; font-weight: bold;">鎷夋祦浠g悊鍒楄〃</span>
-				</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">娣诲姞浠g悊</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">
-					<el-table-column prop="name" label="鍚嶇О" align="center" show-overflow-tooltip/>
-					<el-table-column prop="app" label="娴佸簲鐢ㄥ悕" align="center" show-overflow-tooltip/>
-					<el-table-column prop="stream" label="娴両D" align="center" show-overflow-tooltip/>
-					<el-table-column label="娴佸湴鍧�" width="400" align="center" show-overflow-tooltip >
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
+	<div id="streamProxyList" style="width: 100%">
+    <div class="page-header">
+      <div class="page-title">鎷夋祦浠g悊鍒楄〃</div>
+      <div class="page-header-btn">
+        <el-button icon="el-icon-plus" size="mini" style="margin-right: 1rem;" type="primary" @click="addStreamProxy">娣诲姞浠g悊</el-button>
+        <el-button v-if="false" icon="el-icon-search" size="mini" style="margin-right: 1rem;" type="primary" @click="addOnvif">鎼滅储ONVIF</el-button>
+        <el-button icon="el-icon-refresh-right" circle size="mini" @click="refresh()"></el-button>
+      </div>
+    </div>
+    <devicePlayer ref="devicePlayer"></devicePlayer>
+    <el-table :data="streamProxyList" style="width: 100%" :height="winHeight">
+      <el-table-column prop="name" label="鍚嶇О" min-width="120" show-overflow-tooltip/>
+      <el-table-column prop="app" label="娴佸簲鐢ㄥ悕" min-width="120" show-overflow-tooltip/>
+      <el-table-column prop="stream" label="娴両D" min-width="120" show-overflow-tooltip/>
+      <el-table-column label="娴佸湴鍧�" min-width="400"  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>
-								{{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>
-								{{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-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>
+              {{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.srcUrl" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})"></i>
+              {{scope.row.srcUrl}}
+            </el-tag>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="mediaServerId" label="娴佸獟浣�" min-width="180" ></el-table-column>
+      <el-table-column label="绫诲瀷" width="100" >
+        <template slot-scope="scope">
+          <div slot="reference" class="name-wrapper">
+            <el-tag size="medium">{{scope.row.type === "default"? "鐩存帴浠g悊":"FFMPEG浠g悊"}}</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.status">鍦ㄧ嚎</el-tag>
-                <el-tag size="medium" type="info" v-if="!scope.row.status">绂荤嚎</el-tag>
-              </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 prop="createTime" label="鍒涘缓鏃堕棿" align="center" width="150" show-overflow-tooltip/>
-					<el-table-column label="杞琀LS" width="120" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_hls">宸插惎鐢�</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_hls">鏈惎鐢�</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="MP4褰曞埗" width="120" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_mp4">宸插惎鐢�</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_mp4">鏈惎鐢�</el-tag>
-						</div>
-						</template>
-					</el-table-column>
-					<el-table-column label="鏃犱汉瑙傜湅鑷姩鍒犻櫎" width="160" align="center">
-						<template slot-scope="scope">
-						<div slot="reference" class="name-wrapper">
-							<el-tag size="medium" v-if="scope.row.enable_remove_none_reader">宸插惎鐢�</el-tag>
-							<el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader">鏈惎鐢�</el-tag>
-						</div>
-						</template>
-					</el-table-column>
+      <el-table-column prop="gbId" label="鍥芥爣缂栫爜" min-width="180"  show-overflow-tooltip/>
+      <el-table-column label="鐘舵��" min-width="120" >
+        <template slot-scope="scope">
+          <div slot="reference" class="name-wrapper">
+            <el-tag size="medium" v-if="scope.row.status">鍦ㄧ嚎</el-tag>
+            <el-tag size="medium" type="info" v-if="!scope.row.status">绂荤嚎</el-tag>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="鍚敤" min-width="120" >
+        <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 prop="createTime" label="鍒涘缓鏃堕棿"  min-width="150" show-overflow-tooltip/>
+      <el-table-column label="闊抽" min-width="120" >
+        <template slot-scope="scope">
+          <div slot="reference" class="name-wrapper">
+            <el-tag size="medium" v-if="scope.row.enableAudio">宸插惎鐢�</el-tag>
+            <el-tag size="medium" type="info" v-if="!scope.row.enableAudio">鏈惎鐢�</el-tag>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="褰曞埗" min-width="120" >
+        <template slot-scope="scope">
+          <div slot="reference" class="name-wrapper">
+            <el-tag size="medium" v-if="scope.row.enableMp4">宸插惎鐢�</el-tag>
+            <el-tag size="medium" type="info" v-if="!scope.row.enableMp4">鏈惎鐢�</el-tag>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="鏃犱汉瑙傜湅" min-width="160" >
+        <template slot-scope="scope">
+          <div slot="reference" class="name-wrapper">
+            <el-tag size="medium" v-if="scope.row.enableRemoveNoneReader">绉婚櫎</el-tag>
+            <el-tag size="medium" v-if="scope.row.enableDisableNoneReader">鍋滅敤</el-tag>
+            <el-tag size="medium" type="info" v-if="!scope.row.enableRemoveNoneReader && !scope.row.enableDisableNoneReader">涓嶅仛澶勭悊</el-tag>
+          </div>
+        </template>
+      </el-table-column>
 
 
-					<el-table-column label="鎿嶄綔" width="360" align="center" fixed="right">
-						<template slot-scope="scope">
-							<el-button-group>
-								<el-button size="mini" icon="el-icon-video-play" v-if="scope.row.enable" @click="play(scope.row)">鎾斁</el-button>
-								<el-button size="mini" icon="el-icon-close" type="success" v-if="scope.row.enable" @click="stop(scope.row)">鍋滅敤</el-button>
-								<el-button size="mini" icon="el-icon-check" type="primary" :loading="startBtnLaoding" v-if="!scope.row.enable" @click="start(scope.row)">鍚敤</el-button>
-								<el-button size="mini" icon="el-icon-delete" type="danger"  @click="deleteStreamProxy(scope.row)">鍒犻櫎</el-button>
-							</el-button-group>
-							</template>
-					</el-table-column>
-				</el-table>
-				<el-pagination
-					style="float: right"
-					@size-change="handleSizeChange"
-					@current-change="currentChange"
-					:current-page="currentPage"
-					:page-size="count"
-					:page-sizes="[15, 25, 35, 50]"
-					layout="total, sizes, prev, pager, next"
-					:total="total">
-				</el-pagination>
-			<streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
-			<onvifEdit ref="onvifEdit" ></onvifEdit>
-			</el-main>
-		</el-container>
+      <el-table-column label="鎿嶄綔" width="360"  fixed="right">
+        <template slot-scope="scope">
+          <el-button size="medium" icon="el-icon-video-play" type="text" v-if="scope.row.enable" @click="play(scope.row)">鎾斁</el-button>
+          <el-divider direction="vertical"></el-divider>
+          <el-button size="medium" icon="el-icon-switch-button" type="text" v-if="scope.row.enable" @click="stop(scope.row)">鍋滅敤</el-button>
+          <el-divider direction="vertical"></el-divider>
+          <el-button size="medium" icon="el-icon-check" type="text" :loading="scope.row.startBtnLoading" v-if="!scope.row.enable" @click="start(scope.row)">鍚敤</el-button>
+          <el-divider v-if="!scope.row.enable" direction="vertical"></el-divider>
+          <el-button size="medium" icon="el-icon-delete" type="text" style="color: #f56c6c" @click="deleteStreamProxy(scope.row)">鍒犻櫎</el-button>
+          <el-button size="medium" icon="el-icon-cloudy" type="text" @click="queryCloudRecords(scope.row)">浜戠褰曞儚
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      style="float: right"
+      @size-change="handleSizeChange"
+      @current-change="currentChange"
+      :current-page="currentPage"
+      :page-size="count"
+      :page-sizes="[15, 25, 35, 50]"
+      layout="total, sizes, prev, pager, next"
+      :total="total">
+    </el-pagination>
+    <streamProxyEdit ref="streamProxyEdit" ></streamProxyEdit>
+    <onvifEdit ref="onvifEdit" ></onvifEdit>
 	</div>
 </template>
 
@@ -117,7 +115,7 @@
 	import streamProxyEdit from './dialog/StreamProxyEdit.vue'
 	import onvifEdit from './dialog/onvifEdit.vue'
 	import devicePlayer from './dialog/devicePlayer.vue'
-	import uiHeader from './UiHeader.vue'
+	import uiHeader from '../layout/UiHeader.vue'
 	export default {
 		name: 'streamProxyList',
 		components: {
@@ -136,15 +134,14 @@
 				currentPage:1,
 				count:15,
 				total:0,
-				getListLoading: false,
-				startBtnLaoding: false
+        startBtnLoading: false
 			};
 		},
 		computed: {
 		},
 		mounted() {
 			this.initData();
-			this.updateLooper = setInterval(this.initData, 1000);
+			this.startUpdateList()
 		},
 		destroyed() {
 			this.$destroy('videojs');
@@ -154,6 +151,12 @@
 			initData: function() {
 				this.getStreamProxyList();
 			},
+      stopUpdateList: function (){
+        window.clearInterval(this.updateLooper)
+      },
+      startUpdateList: function (){
+        this.updateLooper = setInterval(this.initData, 1000);
+      },
 			currentChange: function(val){
 				this.currentPage = val;
 				this.getStreamProxyList();
@@ -164,7 +167,6 @@
 			},
 			getStreamProxyList: function() {
 				let that = this;
-				this.getListLoading = true;
 				this.$axios({
 					method: 'get',
 					url:`/api/proxy/list`,
@@ -173,31 +175,31 @@
 						count: that.count
 					}
 				}).then(function (res) {
-					that.total = res.data.total;
-					that.streamProxyList = res.data.list;
-					that.getListLoading = false;
+          if (res.data.code === 0) {
+            that.total = res.data.data.total;
+            for (let i = 0; i < res.data.data.list.length; i++) {
+              res.data.data.list[i]["startBtnLoading"] = false;
+            }
+            that.streamProxyList = res.data.data.list;
+          }
 				}).catch(function (error) {
 					console.log(error);
-					that.getListLoading = false;
 				});
 			},
 			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.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())
+                    this.$refs.streamProxyEdit.openDialog({type: "default", url: url, srcUrl: url}, this.initData())
                   }
               })
             }else {
@@ -208,7 +210,6 @@
           }
 
         }).catch((error)=> {
-          this.getListLoading = false;
           this.$message.error(error.response.data.msg);
         });
 
@@ -217,17 +218,15 @@
 			},
 			play: function(row){
 				let that = this;
-				this.getListLoading = true;
 				this.$axios({
 					method: 'get',
-					url:`/api/media/stream_info_by_app_and_stream`,
+					url:`/api/push/getPlayUrl`,
 					params: {
 						app: row.app,
 						stream: row.stream,
             mediaServerId: row.mediaServerId
 					}
 				}).then(function (res) {
-					that.getListLoading = false;
 					if (res.data.code === 0) {
             that.$refs.devicePlayer.openDialog("streamPlay", null, null, {
               streamInfo: res.data.data,
@@ -243,32 +242,38 @@
 
 				}).catch(function (error) {
 					console.log(error);
-					that.getListLoading = false;
 				});
 
 			},
+      queryCloudRecords: function (row) {
+
+        this.$router.push(`/cloudRecordDetail/${row.app}/${row.stream}`)
+      },
 			deleteStreamProxy: function(row){
 				let that = this;
-				this.getListLoading = true;
-				that.$axios({
-                    method:"delete",
-                    url:"/api/proxy/del",
-                    params:{
-                      app: row.app,
-                      stream: row.stream
-                    }
-                }).then((res)=>{
-                    that.getListLoading = false;
-					          that.initData()
-                }).catch(function (error) {
-                    console.log(error);
-					          that.getListLoading = false;
-                });
+        this.$confirm('纭畾鍒犻櫎姝や唬鐞嗗悧锛�', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          that.$axios({
+            method:"delete",
+            url:"/api/proxy/del",
+            params:{
+              app: row.app,
+              stream: row.stream
+            }
+          }).then((res)=>{
+            that.initData()
+          }).catch(function (error) {
+            console.log(error);
+          });
+        }).catch(() => {
+        });
 			},
 			start: function(row){
-				let that = this;
-				this.getListLoading = true;
-				this.startBtnLaoding = true;
+        this.stopUpdateList()
+        this.$set(row, 'startBtnLoading', true)
 				this.$axios({
 					method: 'get',
 					url:`/api/proxy/start`,
@@ -276,28 +281,31 @@
 						app: row.app,
 						stream: row.stream
 					}
-				}).then(function (res) {
-          that.getListLoading = false;
-          that.startBtnLaoding = false;
-				  if (res.data == "success"){
-            that.initData()
+				}).then((res)=> {
+				  if (res.data.code === 0){
+            this.initData()
           }else {
-            that.$message({
+            this.$message({
               showClose: true,
-              message: "淇濆瓨澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�",
+              message: "鍚姩澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�",
               type: "error",
             });
           }
-
-				}).catch(function (error) {
+          this.$set(row, 'startBtnLoading', false)
+          this.startUpdateList()
+				}).catch((error)=> {
 					console.log(error);
-					that.getListLoading = false;
-					that.startBtnLaoding = false;
+          this.$message({
+            showClose: true,
+            message: "鍚姩澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�",
+            type: "error",
+          });
+          this.$set(row, 'startBtnLoading', false)
+          this.startUpdateList()
 				});
 			},
 			stop: function(row){
 				let that = this;
-				this.getListLoading = true;
 				this.$axios({
 					method: 'get',
 					url:`/api/proxy/stop`,
@@ -306,14 +314,14 @@
 						stream: row.stream
 					}
 				}).then(function (res) {
-					that.getListLoading = false;
 					that.initData()
 				}).catch(function (error) {
 					console.log(error);
-					that.getListLoading = false;
 				});
-			}
-
+			},
+      refresh: function (){
+        this.initData();
+      }
 		}
 	};
 </script>

--
Gitblit v1.8.0