From 2b1f7a47394363e95deb4dfa0f1c67d41e747f7f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 01 二月 2023 10:56:40 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' into fix-269

---
 web_src/src/components/dialog/recordDownload.vue |  200 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 200 insertions(+), 0 deletions(-)

diff --git a/web_src/src/components/dialog/recordDownload.vue b/web_src/src/components/dialog/recordDownload.vue
new file mode 100644
index 0000000..3e8c427
--- /dev/null
+++ b/web_src/src/components/dialog/recordDownload.vue
@@ -0,0 +1,200 @@
+<template>
+<div id="recordDownload" >
+  <el-dialog :title="title" v-if="showDialog"  width="45rem" :append-to-body="true" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()" center>
+    <el-row>
+      <el-col :span="18" style="padding-top: 7px;">
+        <el-progress :percentage="percentage"></el-progress>
+      </el-col>
+      <el-col :span="6" >
+        <el-button icon="el-icon-download" v-if="percentage < 100" size="mini" title="鐐瑰嚮涓嬭浇鍙皢浠ョ紦瀛橀儴鍒嗕笅杞藉埌鏈湴" @click="download()">鍋滄缂撳瓨骞朵笅杞�</el-button>
+      </el-col>
+    </el-row>
+  </el-dialog>
+</div>
+</template>
+
+
+<script>
+
+import moment from "moment";
+
+export default {
+    name: 'recordDownload',
+    created() {
+
+
+    },
+    data() {
+        return {
+          title: "鍥涘�嶉�熶笅杞戒腑...",
+          deviceId: "",
+          channelId: "",
+          app: "",
+          stream: "",
+          mediaServerId: "",
+          showDialog: false,
+          scale: 1,
+          percentage: 0.00,
+          streamInfo: null,
+          taskId: null,
+          getProgressRun: false,
+          getProgressForFileRun: false,
+          timer: null
+
+        };
+    },
+    methods: {
+        openDialog: function (deviceId, channelId, app, stream, mediaServerId) {
+            this.deviceId = deviceId;
+            this.channelId = channelId;
+            this.app = app;
+            this.stream = stream;
+            this.mediaServerId = mediaServerId;
+            this.showDialog = true;
+            this.getProgressRun = true;
+            this.percentage = 0.0;
+            this.getProgressTimer()
+        },
+        getProgressTimer: function (){
+          if (!this.getProgressRun) {
+            return;
+          }
+          if (this.percentage == 100 ) {
+            this.getFileDownload();
+            return;
+          }
+          setTimeout( ()=>{
+            if (!this.showDialog) return;
+            this.getProgress(this.getProgressTimer())
+          }, 5000)
+        },
+        getProgress: function (callback){
+          this.$axios({
+            method: 'get',
+            url: `/api/gb_record/download/progress/${this.deviceId}/${this.channelId}/${this.stream}`
+          }).then((res)=> {
+            console.log(res)
+              if (res.data.code === 0) {
+                this.streamInfo = res.data.data;
+                if (parseFloat(res.data.progress) == 1) {
+                  this.percentage = 100;
+                }else {
+                  this.percentage = (parseFloat(res.data.data.progress)*100).toFixed(1);
+                }
+                if (callback)callback();
+              }else {
+                this.$message({
+                  showClose: true,
+                  message: res.data.msg,
+                  type: "error",
+                });
+                this.close();
+              }
+
+          }).catch((e) =>{
+            console.log(e)
+          });
+        },
+        close: function (){
+          this.stopDownloadRecord();
+          if (this.timer !== null) {
+            window.clearTimeout(this.timer);
+            this.timer = null;
+          }
+          this.showDialog=false;
+          this.getProgressRun = false;
+          this.getProgressForFileRun = false;
+        },
+        gbScale: function (scale){
+          this.scale = scale;
+        },
+        download: function (){
+          this.getProgressRun = false;
+          if (this.streamInfo != null ) {
+            if (this.streamInfo.progress < 1) {
+              // 鍙戦�佸仠姝㈢紦瀛�
+              this.stopDownloadRecord((res)=>{
+                  this.getFileDownload()
+              })
+            }else {
+              this.getFileDownload()
+            }
+          }
+        },
+        stopDownloadRecord: function (callback) {
+          this.$axios({
+            method: 'get',
+            url: '/api/gb_record/download/stop/' + this.deviceId + "/" + this.channelId+ "/" + this.stream
+          }).then((res)=> {
+            if (callback) callback(res)
+          });
+        },
+        getFileDownload: function (){
+          this.$axios({
+            method: 'get',
+            url:`/record_proxy/${this.mediaServerId}/api/record/file/download/task/add`,
+            params: {
+              app: this.app,
+              stream: this.stream,
+              startTime: null,
+              endTime: null,
+            }
+          }).then((res) =>{
+            if (res.data.code === 0 ) {
+              // 鏌ヨ杩涘害
+              this.title = "褰曞儚鏂囦欢澶勭悊涓�..."
+              this.taskId = res.data.data;
+              this.percentage = 0.0;
+              this.getProgressForFileRun = true;
+              this.getProgressForFileTimer();
+            }
+          }).catch(function (error) {
+            console.log(error);
+          });
+        },
+        getProgressForFileTimer: function (){
+          if (!this.getProgressForFileRun || this.percentage == 100) {
+            return;
+          }
+          setTimeout( ()=>{
+            if (!this.showDialog) return;
+            this.getProgressForFile(this.getProgressForFileTimer())
+          }, 1000)
+        },
+        getProgressForFile: function (callback){
+          this.$axios({
+            method: 'get',
+            url:`/record_proxy/${this.mediaServerId}/api/record/file/download/task/list`,
+            params: {
+              app: this.app,
+              stream: this.stream,
+              taskId: this.taskId,
+              isEnd: true,
+            }
+          }).then((res) => {
+            console.log(res)
+            if (res.data.code === 0) {
+              if (res.data.data.length === 0){
+                this.percentage = 0
+                return
+              }
+                this.percentage = parseFloat(res.data.data.percentage)*100
+                 if (res.data.data[0].percentage === '1') {
+                   this.getProgressForFileRun = false;
+                   window.open(res.data.data[0].downloadFile)
+                   this.close();
+                 }else {
+                   if (callback)callback()
+                 }
+            }
+          }).catch(function (error) {
+            console.log(error);
+          });
+        }
+    }
+};
+</script>
+
+<style>
+
+</style>

--
Gitblit v1.8.0