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/CloudRecord.vue | 240 ++++++++++++++++++++++++++++++++++------------------------- 1 files changed, 139 insertions(+), 101 deletions(-) diff --git a/web_src/src/components/CloudRecord.vue b/web_src/src/components/CloudRecord.vue index c47ce2f..b6f0286 100755 --- a/web_src/src/components/CloudRecord.vue +++ b/web_src/src/components/CloudRecord.vue @@ -2,29 +2,33 @@ <div id="app" style="width: 100%"> <div class="page-header"> <div class="page-title"> - <el-page-header v-if="recordDetail" @back="backToList" content="浜戠褰曞儚"></el-page-header> - <div v-if="!recordDetail">浜戠褰曞儚</div> + <div >浜戠褰曞儚</div> </div> <div class="page-header-btn"> 鎼滅储: - <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="鍏抽敭瀛�" - prefix-icon="el-icon-search" v-model="search" clearable></el-input> + <el-input @input="getMediaServerList" style="margin-right: 1rem; width: auto;" size="mini" placeholder="鍏抽敭瀛�" + prefix-icon="el-icon-search" v-model="search" clearable></el-input> 寮�濮嬫椂闂�: <el-date-picker v-model="startTime" type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" + @change="getMediaServerList" placeholder="閫夋嫨鏃ユ湡鏃堕棿"> </el-date-picker> 缁撴潫鏃堕棿: <el-date-picker v-model="endTime" type="datetime" + value-format="yyyy-MM-dd HH:mm:ss" + @change="getMediaServerList" placeholder="閫夋嫨鏃ユ湡鏃堕棿"> </el-date-picker> 鑺傜偣閫夋嫨: - <el-select size="mini" @change="chooseMediaChange" style="width: 16rem; margin-right: 1rem;" - v-model="mediaServerId" placeholder="璇烽�夋嫨" :disabled="recordDetail"> + <el-select size="mini" @change="getMediaServerList" style="width: 16rem; margin-right: 1rem;" + v-model="mediaServerId" placeholder="璇烽�夋嫨" > + <el-option label="鍏ㄩ儴" value=""></el-option> <el-option v-for="item in mediaServerList" :key="item.id" @@ -32,80 +36,99 @@ :value="item.id"> </el-option> </el-select> - <el-button size="mini" icon="el-icon-delete" type="danger" @click="deleteRecord()">鎵归噺鍒犻櫎</el-button> - <el-button v-if="!recordDetail" icon="el-icon-refresh-right" circle size="mini" :loading="loading" +<!-- <el-button size="mini" icon="el-icon-delete" type="danger" @click="deleteRecord()">鎵归噺鍒犻櫎</el-button>--> + <el-button icon="el-icon-refresh-right" circle size="mini" :loading="loading" @click="getRecordList()"></el-button> </div> </div> - <div v-if="!recordDetail"> - - <!--璁惧鍒楄〃--> - <el-table :data="recordList" style="width: 100%" :height="winHeight"> - <el-table-column prop="app" label="搴旂敤鍚�"> - </el-table-column> - <el-table-column prop="stream" label="娴両D" width="380"> - </el-table-column> - <el-table-column label="寮�濮嬫椂闂�"> - <template slot-scope="scope"> - {{formatTimeStamp(scope.row.startTime)}} - </template> - </el-table-column> - <el-table-column label="缁撴潫鏃堕棿"> - <template slot-scope="scope"> - {{formatTimeStamp(scope.row.endTime)}} - </template> - </el-table-column> - <el-table-column label="鏃堕暱"> - <template slot-scope="scope"> - <el-tag>{{formatTime(scope.row.timeLen)}}</el-tag> - </template> - </el-table-column> - <el-table-column prop="fileName" label="鏂囦欢鍚嶇О"> - </el-table-column> - <el-table-column prop="mediaServerId" label="娴佸獟浣�"> - </el-table-column> - <el-table-column label="鎿嶄綔" width="200" fixed="right"> - <template slot-scope="scope"> - <el-button size="medium" icon="el-icon-video-play" type="text" @click="showRecordDetail(scope.row)">鎾斁 - </el-button> - <el-button size="medium" icon="el-icon-delete" type="text" style="color: #f56c6c" - @click="deleteRecord(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> - </div> - + <!--璁惧鍒楄〃--> + <el-table :data="recordList" style="width: 100%" :height="winHeight"> + <el-table-column + type="selection" + width="55"> + </el-table-column> + <el-table-column prop="app" label="搴旂敤鍚�"> + </el-table-column> + <el-table-column prop="stream" label="娴両D" width="380"> + </el-table-column> + <el-table-column label="寮�濮嬫椂闂�"> + <template slot-scope="scope"> + {{formatTimeStamp(scope.row.startTime)}} + </template> + </el-table-column> + <el-table-column label="缁撴潫鏃堕棿"> + <template slot-scope="scope"> + {{formatTimeStamp(scope.row.endTime)}} + </template> + </el-table-column> + <el-table-column label="鏃堕暱"> + <template slot-scope="scope"> + <el-tag>{{formatTime(scope.row.timeLen)}}</el-tag> + </template> + </el-table-column> + <el-table-column prop="fileName" label="鏂囦欢鍚嶇О"> + </el-table-column> + <el-table-column prop="mediaServerId" label="娴佸獟浣�"> + </el-table-column> + <el-table-column label="鎿嶄綔" width="200" fixed="right"> + <template slot-scope="scope"> + <el-button size="medium" icon="el-icon-video-play" type="text" @click="play(scope.row)">鎾斁 + </el-button> + <el-button size="medium" icon="el-icon-download" type="text" @click="downloadFile(scope.row)">涓嬭浇 + </el-button> + <!-- <el-button size="medium" icon="el-icon-delete" type="text" style="color: #f56c6c"--> + <!-- @click="deleteRecord(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> + <el-dialog + :title="playerTitle" + :visible.sync="showPlayer" + width="50%"> + <easyPlayer ref="recordVideoPlayer" :videoUrl="videoUrl" :height="false" ></easyPlayer> + </el-dialog> </div> </template> <script> import uiHeader from '../layout/UiHeader.vue' import MediaServer from './service/MediaServer' +import easyPlayer from './common/easyPlayer.vue' import moment from 'moment' +import axios from "axios"; export default { name: 'app', components: { - uiHeader + uiHeader,easyPlayer }, data() { return { search: '', startTime: '', endTime: '', + showPlayer: false, + playerTitle: '', + videoUrl: '', + playerStyle: { + "margin": "auto", + "margin-bottom": "20px", + "width": window.innerWidth/2 + "px", + "height": this.winHeight/2 + "px", + }, mediaServerList: [], // 婊呬綋鑺傜偣鍒楄〃 - mediaServerId: null, // 濯掍綋鏈嶅姟 + mediaServerId: "", // 濯掍綋鏈嶅姟 mediaServerPath: null, // 濯掍綋鏈嶅姟鍦板潃 recordList: [], // 璁惧鍒楄〃 chooseRecord: null, // 濯掍綋鏈嶅姟 @@ -117,7 +140,6 @@ total: 0, loading: false, mediaServerObj: new MediaServer(), - recordDetail: false }; }, @@ -126,13 +148,13 @@ this.initData(); }, destroyed() { - // this.$destroy('videojs'); + this.$destroy('recordVideoPlayer'); }, methods: { initData: function () { // 鑾峰彇濯掍綋鑺傜偣鍒楄〃 this.getMediaServerList(); - // this.getRecordList(); + this.getRecordList(); }, currentChange: function (val) { this.currentPage = val; @@ -146,11 +168,6 @@ let that = this; that.mediaServerObj.getOnlineMediaServerList((data) => { that.mediaServerList = data.data; - if (that.mediaServerList.length > 0) { - that.mediaServerId = that.mediaServerList[0].id - that.setMediaServerPath(that.mediaServerId); - that.getRecordList(); - } }) }, setMediaServerPath: function (serverId) { @@ -194,35 +211,54 @@ this.loading = false; }); }, - backToList() { - this.recordDetail = false; - }, - chooseMediaChange(val) { - console.log(val) - this.total = 0; - this.recordList = []; - this.setMediaServerPath(val); - this.getRecordList(); - }, - showRecordDetail(row) { - this.recordDetail = true; + play(row) { + console.log(row) this.chooseRecord = row; - // 鏌ヨ鏄惁瀛樺湪褰曞儚 - // this.$axios({ - // method: 'delete', - // url:`/record_proxy/api/record/delete`, - // params: { - // page: this.currentPage, - // count: this.count - // } - // }).then((res) => { - // console.log(res) - // this.total = res.data.data.total; - // this.recordList = res.data.data.list; - // }).catch(function (error) { - // console.log(error); - // }); - this.$router.push(`/cloudRecordDetail/${row.app}/${row.stream}`) + this.showPlayer = true; + this.$axios({ + method: 'get', + url: `/api/cloud/record/play/path`, + params: { + recordId: row.id, + } + }).then((res) => { + console.log(res) + if (res.data.code === 0) { + if (location.protocol === "https:") { + this.videoUrl = res.data.data.httpsPath; + }else { + this.videoUrl = res.data.data.httpPath; + } + console.log(222 ) + console.log(this.videoUrl ) + } + }).catch((error) => { + console.log(error); + }); + }, + downloadFile(file){ + console.log(file) + this.$axios({ + method: 'get', + url: `/api/cloud/record/play/path`, + params: { + recordId: file.id, + } + }).then((res) => { + console.log(res) + const link = document.createElement('a'); + link.target = "_blank"; + if (res.data.code === 0) { + if (location.protocol === "https:") { + link.href = res.data.data.httpsPath + "&save_name=" + file.fileName; + }else { + link.href = res.data.data.httpPath + "&save_name=" + file.fileName; + } + link.click(); + } + }).catch((error) => { + console.log(error); + }); }, deleteRecord() { // TODO @@ -245,14 +281,16 @@ }); }, formatTime(time) { - const h = parseInt(time / 3600) - const minute = parseInt(time / 60 % 60) - const second = Math.ceil(time % 60) - - return (h > 0 ? h + `灏忔椂` : '') + (minute > 0 ? minute + '鍒�' : '') + second + '绉�' + const h = parseInt(time / 3600 / 1000) + const minute = parseInt((time - h * 3600 * 1000) / 60 / 1000) + let second = Math.ceil((time - h * 3600 * 1000 - minute * 60 * 1000) / 1000) + if (second < 0) { + second = 0; + } + return (h > 0 ? h + `灏忔椂` : '') + (minute > 0 ? minute + '鍒�' : '') + (second > 0 ? second + '绉�' : '') }, formatTimeStamp(time) { - return moment.unix(time).format('yyyy-MM-DD HH:mm:ss') + return moment.unix(time/1000).format('yyyy-MM-DD HH:mm:ss') } } -- Gitblit v1.8.0