iview Tab表格里面把时间轴里面的时间段,用开始-结束时间,阴影显示在Tab上

先不废话,上效果图一:

时间轴为(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT博客技术分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值