先不废话,上效果图一:
时间轴为(0-24点)
具体代码如下:
<template>
<div>
<div class="listfile">
<Table border ref="selection" :columns="historyColumns" :data="historyData" @on-select-all='selectTable' @on-select='selectTable' @on-select-cancel='selectTable'>
<template slot-scope="{row}" slot="timeAxis">
<div class="timeBox" ref="timeBox">
<!-- 标题文字 -->
<div class="timeRange" :title="item" :style="{left:countLeftValue(item).left, width: countLeftValue(item).width}" v-for="(item,index) in row.timeAxis" :value="item.value" :key="index">
</div>
</div>
</template>
</Table>
<div style="margin: 10px;overflow: hidden">
<div style="float: right;">
<Page :total="dataCount" :page-size="pageSize" show-total @on-change="changepage"></Page>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data(){
return{
dataCount:1,// 初始化信息总条数
currentPage:0,
pageSize:10, // 每页显示多少条
below: 0, //下一页或者上一页的第一项索引值
historyColumns: [
{type: 'selection', width: 60,align: 'center'},
{title: '播表名称',key: 'broadCastName',width: 120,align: 'center'},
{title: '时间轴',slot: 'timeAxis',align: 'center'},
{title: '总时长',key: 'sumtime',width: 100,align: 'center'},
],
historyData:[
// { broadCastId: "0810000100120190820092825", broadCastName: "周一", sumtime: "75",timeAxis: ["03:00:00-03:00:40"]},
// { broadCastId: "0810000100120190820154046",broadCastName: "列车广播",sumtime: "3075",timeAxis: ["03:02:02-03:02:23", "05:05:05-05:05:59", "09:00:00-09:50:00"]}
]
}
},
methods:{
//查询所有播表时间轴
load_getTimeAxis() {
this.$axios({
method: 'get',
url: this.baseURL + '/broadcast/timeAxis/getTimeAxis_View',
params: {
currentPage: this.currentPage,
pageSize: this.pageSize,
}
})
.then((res)=> {
console.log(res.data);
this.historyData = res.data.list; //把结果拿到的数据赋给table
this.dataCount = res.data.total; //所有的条数
}).catch((error) =>{})
},
times(){
// 24*60*60 = 86400 秒
// 02:00- 02:30 1.( 2*60*60 = 7200) 7200 秒 / 86400 秒= 0.083; 2.(2.5*60*60 / 24*60*60 = 0.104;) 第一个点的位置是在 8.3% 到 10.4% 的位置
},
// 计算left值
countLeftValue(timeRange) {
// let width = this.$refs.timeBox
// let timeRange = "00:00:00-01:01:00";
let totalTime = 24*60*60 // s
let startTime = timeRange.split('-')[0].split(':')[0] *60 * 60 + timeRange.split('-')[0].split(':')[1] *60 + Number(timeRange.split('-')[0].split(':')[2]) // 秒
let endTime = timeRange.split('-')[1].split(':')[0] *60 * 60 + timeRange.split('-')[1].split(':')[1] *60 + Number(timeRange.split('-')[1].split(':')[2]) // 秒
let left = (startTime / totalTime) * 100 + '%'
let width =( (endTime - startTime) / totalTime) * 100 + '%'
console.log(endTime, startTime, totalTime, width)
return {left: left, width: width}
},
//列表左侧checkbox
selectTable(data){
this.selectData = data;
console.log(data);
},
//修改每页显示条数时调用
pages(num) {
this.pageSize = num;
this.changepage(1);
},
changepage(index) {
},
},
created(){
//查询所有播表时间轴
this.load_getTimeAxis();
},
computed:{
// this.countLeftValue()
},
mounted(){
}
}
</script>
<style type="text/css">
.timeBox {
width: 100%;
height: 24px;
border: 1px solid #ccc;
border-radius: 4px;
position: relative;
}
.timeBox .timeRange {
position: absolute;
top:0;
display: inline-block;
background-color: greenyellow;
height: 100%;
cursor: pointer;
}
.listfile{padding:15px 0 15px 0;}
.ivu-page{
font-size: 12px !important;
}
td.ivu-table-column-center{height:36px !important;}
</style>
方法二
列子:
beginTime:"00:00:00",
endTime:"11:59:59",
如果返回的一个开始时间和结束时间,并且以这个为时间轴的起点 和重点位置;
这时,需要重新计算每行的 总时间:totalTime
let new_endTime = endTime.split('-')[0].split(':')[0] *60 * 60 + endTime.split('-')[0].split(':')[1] *60 + Number(endTime.split('-')[0].split(':')[2]); // 秒
let new_beginTime = beginTime.split('-')[0].split(':')[0] *60 * 60 + beginTime.split('-')[0].split(':')[1] *60 + Number(beginTime.split('-')[0].split(':')[2]); // 秒
let totalTime = (new_endTime - new_beginTime);
小心有坑:
left 的值会变化;如果起始时间 从0点0分0秒 开始是正常的,否则有bug;
let left = (start_Time / totalTime) *100;
let width =( (end_Time - start_Time) / totalTime)*100 + '%';
if( left >100 ){
left = (left - 100 )+ '%'
}else{
left = left + '%'
}
详细代码如下:
<template>
<div>
<div class="listfile">
<Table border ref="selection" :columns="historyColumns" :data="historyData" @on-select-all='selectTable' @on-select='selectTable' @on-select-cancel='selectTable'>
<template slot-scope="{row}" slot="timeAxis">
<div class="timeBox" ref="timeBox">
<!-- 标题文字 -->
<div class="timeRange" :title="item" :style="{left:countLeftValue(item,row.beginTime,row.endTime).left, width: countLeftValue(item,row.beginTime,row.endTime).width}" v-for="(item,index) in row.timeAxis" :value="item.value" :key="index">
<!-- {{item}} -->
</div>
</div>
</template>
</Table>
<div style="margin: 10px;overflow: hidden">
<div style="float: right;">
<Page :total="dataCount" :page-size="pageSize" show-total @on-change="changepage"></Page>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data(){
return{
dataCount:1,// 初始化信息总条数
currentPage:0,
pageSize:10, // 每页显示多少条
below: 0, //下一页或者上一页的第一项索引值
historyColumns: [
{type: 'selection', width: 60,align: 'center'},
{title: '播表名称',key: 'broadCastName',width: 120,align: 'center'},
{title: '时间轴',slot: 'timeAxis',align: 'center'},
{title: '总时长',key: 'sumtime',width: 100,align: 'center'},
],
historyData:[
{ broadCastId: "0810000100120190820092825", broadCastName: "周一", sumtime: "75",timeAxis: ["00:00:00-06:00:00", "09:00:00-11:59:59"],beginTime:"00:00:00",endTime:"11:59:59",},
{ broadCastId: "0810000100120190820154046",broadCastName: "列车广播",sumtime: "3075",timeAxis: ["12:00:00-13:59:59", "19:00:00-21:59:59","22:08:00-23:59:59"],beginTime:"12:00:00",endTime:"23:59:59",},
{ broadCastId: "0810000100120190820092825", broadCastName: "周二", sumtime: "75",timeAxis: ["01:00:00-02:00:00","03:00:00-4:59:59"],beginTime:"00:00:00",endTime:"05:59:59",},
{ broadCastId: "0810000100120190820092825", broadCastName: "周三", sumtime: "75",timeAxis: ["01:00:00-06:00:00", "09:00:00-10:59:59"],beginTime:"00:00:00",endTime:"11:59:59",},
{ broadCastId: "0810000100120190820092825", broadCastName: "周四", sumtime: "75",timeAxis: ["11:00:00-13:00:00",],beginTime:"00:00:00",endTime:"23:59:59",}
]
}
},
methods:{
//查询所有播表时间轴
load_getTimeAxis() {
this.$axios({
method: 'get',
url: this.baseURL + '/broadcast/timeAxis/getTimeAxis_View',
params: {
currentPage: this.currentPage,
pageSize: this.pageSize,
}
})
.then((res)=> {
console.log(res.data);
this.historyData = res.data.list; //把结果拿到的数据赋给table
this.dataCount = res.data.total; //所有的条数
}).catch((error) =>{})
},
times(){
// 24*60*60 = 86400 秒
// 02:00- 02:30 1.( 2*60*60 = 7200) 7200 秒 / 86400 秒= 0.083; 2.(2.5*60*60 / 24*60*60 = 0.104;) 第一个点的位置是在 8.3% 到 10.4% 的位置
},
// 计算left值
countLeftValue(timeRange,beginTime,endTime) {
// let width = this.$refs.timeBox
// let timeRange = "00:00:00-01:01:00";
// let totalTime = 24*60*60 // s
let new_endTime = endTime.split('-')[0].split(':')[0] *60 * 60 + endTime.split('-')[0].split(':')[1] *60 + Number(endTime.split('-')[0].split(':')[2]); // 秒
let new_beginTime = beginTime.split('-')[0].split(':')[0] *60 * 60 + beginTime.split('-')[0].split(':')[1] *60 + Number(beginTime.split('-')[0].split(':')[2]); // 秒
let totalTime = (new_endTime - new_beginTime);
// console.log("结束时间:",new_endTime,"开始时间:",new_beginTime,"总时间:",totalTime);
let start_Time = timeRange.split('-')[0].split(':')[0] *60 * 60 + timeRange.split('-')[0].split(':')[1] *60 + Number(timeRange.split('-')[0].split(':')[2]); // 秒
let end_Time = timeRange.split('-')[1].split(':')[0] *60 * 60 + timeRange.split('-')[1].split(':')[1] *60 + Number(timeRange.split('-')[1].split(':')[2]); // 秒
let left = (start_Time / totalTime) *100;
let width =( (end_Time - start_Time) / totalTime)*100 + '%';
if( left >100 ){
left = (left - 100 )+ '%'
}else{
left = left + '%'
}
console.log(end_Time, start_Time, totalTime, width,left);
return {left: left, width: width}
},
//列表左侧checkbox
selectTable(data){
this.selectData = data;
console.log(data);
},
//修改每页显示条数时调用
pages(num) {
this.pageSize = num;
this.changepage(1);
},
changepage(index) {
},
},
created(){
//查询所有播表时间轴
// this.load_getTimeAxis();
},
computed:{
// this.countLeftValue()
},
mounted(){
}
}
</script>
<style type="text/css">
.timeBox {
width: 100%;
height: 24px;
border: 1px solid #ccc;
border-radius: 4px;
position: relative;
}
.timeBox .timeRange {
position: absolute;
top:0;
display: inline-block;
background-color: greenyellow;
height: 100%;
cursor: pointer;
}
.listfile{padding:15px 0 15px 0;}
.ivu-page{
font-size: 12px !important;
}
td.ivu-table-column-center{height:36px !important;}
</style>
效果图:
最后为了方便大家的沟通与交流请加QQ群: 625787746
请进QQ群交流:【IT博客技术分享群①】:https://jq.qq.com/?_wv=1027&k=DceI0140