2022-03-25 16:05:14 +08:00
|
|
|
<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,
|
2023-01-10 11:36:54 +08:00
|
|
|
timer: null
|
2022-03-25 16:05:14 +08:00
|
|
|
|
|
|
|
};
|
|
|
|
},
|
|
|
|
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()
|
|
|
|
},
|
2023-01-10 11:36:54 +08:00
|
|
|
getProgressTimer: function (){
|
2022-03-25 16:05:14 +08:00
|
|
|
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',
|
2023-03-05 09:53:26 +08:00
|
|
|
url: `/api/gb_record/download/progress/${this.deviceId}/${this.channelId}/${this.stream}`
|
2022-03-25 16:05:14 +08:00
|
|
|
}).then((res)=> {
|
2022-09-21 18:18:37 +08:00
|
|
|
console.log(res)
|
2022-08-22 16:16:31 +08:00
|
|
|
if (res.data.code === 0) {
|
|
|
|
this.streamInfo = res.data.data;
|
|
|
|
if (parseFloat(res.data.progress) == 1) {
|
|
|
|
this.percentage = 100;
|
|
|
|
}else {
|
2022-09-21 18:18:37 +08:00
|
|
|
this.percentage = (parseFloat(res.data.data.progress)*100).toFixed(1);
|
2022-08-22 16:16:31 +08:00
|
|
|
}
|
|
|
|
if (callback)callback();
|
2023-01-10 11:36:54 +08:00
|
|
|
}else {
|
|
|
|
this.$message({
|
|
|
|
showClose: true,
|
|
|
|
message: res.data.msg,
|
|
|
|
type: "error",
|
|
|
|
});
|
|
|
|
this.close();
|
2022-03-25 16:05:14 +08:00
|
|
|
}
|
2022-08-22 16:16:31 +08:00
|
|
|
|
2022-03-25 16:05:14 +08:00
|
|
|
}).catch((e) =>{
|
2023-01-10 11:36:54 +08:00
|
|
|
console.log(e)
|
2022-03-25 16:05:14 +08:00
|
|
|
});
|
|
|
|
},
|
|
|
|
close: function (){
|
2023-04-14 14:59:22 +08:00
|
|
|
if (this.streamInfo.progress < 1) {
|
|
|
|
this.stopDownloadRecord();
|
|
|
|
}
|
|
|
|
|
2023-01-10 11:36:54 +08:00
|
|
|
if (this.timer !== null) {
|
|
|
|
window.clearTimeout(this.timer);
|
|
|
|
this.timer = null;
|
2022-03-25 16:05:14 +08:00
|
|
|
}
|
|
|
|
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',
|
2023-03-05 09:53:26 +08:00
|
|
|
url: '/api/gb_record/download/stop/' + this.deviceId + "/" + this.channelId+ "/" + this.stream
|
2022-03-25 16:05:14 +08:00
|
|
|
}).then((res)=> {
|
|
|
|
if (callback) callback(res)
|
|
|
|
});
|
|
|
|
},
|
|
|
|
getFileDownload: function (){
|
|
|
|
this.$axios({
|
|
|
|
method: 'get',
|
2023-03-05 09:53:26 +08:00
|
|
|
url:`/record_proxy/${this.mediaServerId}/api/record/file/download/task/add`,
|
2022-03-25 16:05:14 +08:00
|
|
|
params: {
|
|
|
|
app: this.app,
|
|
|
|
stream: this.stream,
|
|
|
|
startTime: null,
|
|
|
|
endTime: null,
|
|
|
|
}
|
|
|
|
}).then((res) =>{
|
2022-08-22 16:16:31 +08:00
|
|
|
if (res.data.code === 0 ) {
|
2022-03-25 16:05:14 +08:00
|
|
|
// 查询进度
|
|
|
|
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',
|
2023-03-05 09:53:26 +08:00
|
|
|
url:`/record_proxy/${this.mediaServerId}/api/record/file/download/task/list`,
|
2022-03-25 16:05:14 +08:00
|
|
|
params: {
|
|
|
|
app: this.app,
|
|
|
|
stream: this.stream,
|
|
|
|
taskId: this.taskId,
|
|
|
|
isEnd: true,
|
|
|
|
}
|
|
|
|
}).then((res) => {
|
2022-05-13 21:05:33 +08:00
|
|
|
console.log(res)
|
2022-08-22 16:16:31 +08:00
|
|
|
if (res.data.code === 0) {
|
2022-09-14 14:32:22 +08:00
|
|
|
if (res.data.data.length === 0){
|
|
|
|
this.percentage = 0
|
|
|
|
return
|
|
|
|
}
|
2022-03-25 16:05:14 +08:00
|
|
|
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>
|