mirror of https://github.com/EasyDarwin/EasyDarwin
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.2 KiB
142 lines
5.2 KiB
<template> |
|
<div class="container-fluid no-padding"> |
|
<div class="alert alert-success alert-dismissible"> |
|
<small> |
|
<strong><i class="fa fa-info-circle"></i> 提示 : </strong> |
|
RTSP低延时播放器可以采用<a href="https://github.com/EasyDSS/EasyPlayer-RTSP-Win" target="_blank"> EasyPlayer-RTSP <i class="fa fa-external-link"></i></a>, |
|
<span class="push-url-format">拉流播放URL规则: rtsp://{ip}:{port}/{id}</span> , |
|
例如 : rtsp://www.easydarwin.org:554/your_stream_id |
|
</small> |
|
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> |
|
</div> |
|
|
|
<div class="box box-success"> |
|
<div class="box-header"> |
|
<h4 class="text-success text-center">拉流列表</h4> |
|
<form class="form-inline"> |
|
<div class="form-group pull-right"> |
|
<div class="input-group"> |
|
<input type="text" class="form-control" placeholder="搜索" v-model.trim="q" @keydown.enter.prevent ref="q"> |
|
<div class="input-group-btn"> |
|
<button type="button" class="btn btn-default" @click.prevent="doSearch" > |
|
<i class="fa fa-search"></i> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</form> |
|
</div> |
|
<div class="box-body"> |
|
<el-table :data="players" stripe class="view-list" :default-sort="{prop: 'startAt', order: 'descending'}" @sort-change="sortChange"> |
|
<el-table-column prop="id" label="ID" min-width="120"></el-table-column> |
|
<el-table-column prop="path" label="播放地址" min-width="240" show-overflow-tooltip> |
|
<template slot-scope="scope"> |
|
<span> |
|
<i class="fa fa-copy" role="button" v-clipboard="scope.row.path" title="点击拷贝" @success="$message({type:'success', message:'成功拷贝到粘贴板'})"></i> |
|
{{scope.row.path}} |
|
</span> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="transType" label="传输方式" min-width="100"></el-table-column> |
|
<!-- <el-table-column prop="inBytes" label="上行流量" min-width="120" :formatter="formatBytes" sortable="custom"></el-table-column> --> |
|
<el-table-column prop="outBytes" label="下行流量" min-width="120" :formatter="formatBytes" sortable="custom"></el-table-column> |
|
<el-table-column prop="startAt" label="开始时间" min-width="200" sortable="custom"></el-table-column> |
|
</el-table> |
|
</div> |
|
<div class="box-footer clearfix" v-if="total > 0"> |
|
<el-pagination layout="prev,pager,next" class="pull-right" :total="total" :page-size.sync="pageSize" :current-page.sync="currentPage"></el-pagination> |
|
</div> |
|
</div> |
|
</div> |
|
</template> |
|
|
|
<script> |
|
import prettyBytes from "pretty-bytes"; |
|
|
|
import _ from "lodash"; |
|
export default { |
|
props: {}, |
|
data() { |
|
return { |
|
q: "", |
|
sort: "startAt", |
|
order: "descending", |
|
players: [], |
|
total: 0, |
|
timer: 0, |
|
pageSize: 10, |
|
currentPage: 1 |
|
}; |
|
}, |
|
beforeDestroy() { |
|
if (this.timer) { |
|
clearInterval(this.timer); |
|
this.timer = 0; |
|
} |
|
}, |
|
mounted() { |
|
this.$refs["q"].focus(); |
|
this.timer = setInterval(() => { |
|
this.getPlayers(); |
|
}, 3000); |
|
}, |
|
watch: { |
|
q: function(newVal, oldVal) { |
|
this.doDelaySearch(); |
|
}, |
|
currentPage: function(newVal, oldVal) { |
|
this.doSearch(newVal); |
|
} |
|
}, |
|
methods: { |
|
getPlayers() { |
|
$.get("/api/v1/players", { |
|
q: this.q, |
|
start: (this.currentPage - 1) * this.pageSize, |
|
limit: this.pageSize, |
|
sort: this.sort, |
|
order: this.order |
|
}).then(data => { |
|
this.total = data.total; |
|
this.players = data.rows; |
|
}); |
|
}, |
|
doSearch(page = 1) { |
|
var query = {}; |
|
if (this.q) query["q"] = this.q; |
|
this.$router.replace({ |
|
path: `/players/${page}`, |
|
query: query |
|
}); |
|
}, |
|
doDelaySearch: _.debounce(function() { |
|
this.doSearch(); |
|
}, 500), |
|
sortChange(data) { |
|
this.sort = data.prop; |
|
this.order = data.order; |
|
this.getPlayers(); |
|
}, |
|
formatBytes(row, col, val) { |
|
if (val == undefined) return "-"; |
|
return prettyBytes(val); |
|
} |
|
}, |
|
beforeRouteEnter(to, from, next) { |
|
next(vm => { |
|
vm.q = to.query.q || ""; |
|
vm.currentPage = parseInt(to.params.page) || 1; |
|
}); |
|
}, |
|
beforeRouteUpdate(to, from, next) { |
|
next(); |
|
this.$nextTick(() => { |
|
this.q = to.query.q || ""; |
|
this.currentPage = parseInt(to.params.page) || 1; |
|
this.players = []; |
|
this.getPlayers(); |
|
}); |
|
} |
|
}; |
|
</script> |
|
|
|
|