| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <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-button icon="el-icon-download" v-if="downloadFile" size="mini" title="点击下载" @click="downloadFileClientEvent()">点击下载</el-button>
- </el-col>
- </el-row>
- </el-dialog>
- </div>
- </template>
- <script>
- import moment from "moment";
- export default {
- name: 'recordDownload',
- created() {
- window.addEventListener('beforeunload', this.stopDownloadRecord)
- },
- 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,
- downloadFile: 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 (){
- if (this.streamInfo.progress < 1) {
- 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
- // 往往在多次请求后(实验五分钟的视频是三次请求),才会返回数据,第一次请求通常是返回空数组
- if (callback)callback()
- return
- }
- // res.data.data应是数组类型
- this.percentage = parseFloat(res.data.data[0].percentage)*100
- if (res.data.data[0].percentage === '1') {
- this.getProgressForFileRun = false;
- this.downloadFile = res.data.data[0].downloadFile
- this.title = "文件处理完成,点击按扭下载"
- // window.open(res.data.data[0].downloadFile)
- }else {
- if (callback)callback()
- }
- }
- }).catch(function (error) {
- console.log(error);
- });
- },
- downloadFileClientEvent: function (){
- window.open(this.downloadFile )
- }
- },
- destroyed() {
- window.removeEventListener('beforeunload', this.stopDownloadRecord)
- }
- };
- </script>
- <style>
- </style>
|