前言
在上一篇文章中有介绍到如何生成以时间日期为表头的动态表格,附上链接
vue+element ui生成以当月日期时间为表头的table表格
那么在这里就将介绍在这张表格中进行的一些操作,从而实现想要实现的功能
实现步骤
- 通过点击事件,得到当前点击的日期时间,在这里我运用到的是
el-table
中的@cell-click
事件,得到当前点击的row
和column
,然后获取到点击的日期时间,在与前面得到的日期时间数组进行对比,得到确切的时间
//在这里我主要是利用得到的column当前列的数据
cellClick(row, column, event, cell) {
let columnDate = column.label
// 得到当前列的数据与返回的日期数据做对比
let nowColumnDate = '' //这个就是想要得到的当前点击列的具体时间
this.visibleCalendar.forEach(item => {
let itemLabel = item.day + '日' + ',' + item.week
if (columnDate === itemLabel) {
nowColumnDate = item.keyDate
}
})
}
- 接下来就要看你具体想要实现的功能是什么,我这里的功能主要是判断它是在当日还是当日之前或者当日之后,然后显示不同的弹窗内容,在当日和当日之前的日期呢,就显示休假的详细信息就可以,在当日之后的日期是可以添加休假信息的,所以在这个地方我用到的是将得到的时间转换成时间戳的格式,通过时间戳去判断是否出现弹窗
cellClick(row, column, event, cell) {
......
let newColumnDate = ''
newColumnDate = new Date(nowColumnDate) * 1
// 获取今天的年月日与当前行的数据做对比来判断标记信息的显示
let todayTime = ''
const today = this.getToday(new Date())
todayTime = new Date(today) * 1
let rowDayData = row.dayData
let nowRowData = {}
for (let k in rowDayData) {
if (k === nowColumnDate && Object.keys(rowDayData[k]).length !== 0) {
nowRowData = rowDayData[k]
}
}
// 判断在今日之后添加与查看标记信息
//Object.keys(nowRowData).length 这个是我用来判断当前日期有没有数据,也是一个判断条件之一
if (newColumnDate > todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo === null) {
console.log('在今日之后');
this.$refs.markInfoAfter.markInfoAfterDialog = true //想要显示的弹窗,以实际的为准
} else if (newColumnDate > todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo !== null) {
this.$refs.markInfoAfter.markInfoAfterDialog = true //想要显示的弹窗,以实际的为准
}
// 判断在今日之前查看标记信息
if (newColumnDate < todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo === null) {
console.log('在今日之前,但是没有休假标记信息');
this.$refs.markInfoAfter.markInfoAfterDialog = false //关闭弹窗,以实际的为准
this.$refs.markInfo.markInfoBeforeDialog = false //关闭弹窗,以实际的为准
} else if (newColumnDate < todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo !== null) {
console.log('在今日之前');
this.$refs.markInfo.markInfoBeforeDialog = true //想要显示的弹窗,以实际的为准
this.$refs.markInfo.getBaseData(nowRowData.dutyUserVacationSerialNo)
}
// 判断在今天查看标记信息
if (newColumnDate === todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo === null) {
console.log('在今天,安排了值班,没有值班标记信息');
} else if (newColumnDate === todayTime && Object.keys(nowRowData).length !== 0 && nowRowData.dutyUserVacationSerialNo !== null) {
console.log('在今天');
this.$refs.markInfo.markInfoBeforeDialog = true //想要显示的弹窗,以实际的为准
}
// 没有值班安排,不能添加以及查看休假标记信息
if (Object.keys(nowRowData).length === 0) {
console.log('没有值班安排,不能添加休假信息');
this.$refs.markInfoAfter.markInfoAfterDialog = false //关闭弹窗,以实际的为准
this.$refs.markInfo.markInfoBeforeDialog = false //关闭弹窗,以实际的为准
}
},
- 如果可以添加休假的标记信息,添加完成之后就会显示下面的效果
- 在这里呢还有一个地方就是当日期为当天的日期的时候,表格需要加深一下背景颜色,在这里呢,我也主要是用的
el-table
中的cell-style
,通过表头的是时间与当前的日期时间做对比,写上判断条件,渲染样式
cellStyle({row,column}) {
let columnDate = column.label
// 得到当前列的数据与返回的日期数据做对比
let nowColumnDate = ''
let newColumnDate = ''
this.visibleCalendar.forEach(item => {
let itemLabel = item.day + '日' + ',' + item.week
if (columnDate === itemLabel) {
nowColumnDate = item.keyDate
}
})
newColumnDate = new Date(nowColumnDate) * 1
// 得到点击的当前行的日期的时间戳,方便为了选择休假日期的禁止时间做对比
this.dutyTime = Number(newColumnDate)
// 获取今天的年月日与当前行的数据做对比来判断标记信息的显示
let todayTime = ''
const today = this.getToday(new Date())
todayTime = new Date(today) * 1
if(newColumnDate === todayTime){
return 'cursor: pointer;backgroundColor:#f2f8fe'
}else{
return 'cursor: pointer;'
}
}
- 这样就可以很好的查看当天的日期了
总结
可能我的实现方式有些复杂,但是也确实实现了我想要实现的功能,如果有更好的方法,欢迎交流~~