|
|
|
|
@ -18,7 +18,7 @@
|
|
|
|
|
<text class="date-num" :class="{ dim: !cell.inMonth }">{{ cell.date }}</text>
|
|
|
|
|
<view class="cell-events" :style="'padding-top:'+getCellPadding(cell.fullDate)+'rpx'">
|
|
|
|
|
<view
|
|
|
|
|
v-for="(ev, evIdx) in eventsForDate(cell.fullDate)"
|
|
|
|
|
v-for="ev in eventsForDate(cell.fullDate)"
|
|
|
|
|
:key="ev.id"
|
|
|
|
|
class="event-chip"
|
|
|
|
|
:class="[
|
|
|
|
|
@ -40,9 +40,7 @@
|
|
|
|
|
// 有跨天覆盖或其他事件:固定到底部,单行,清除上内边距与位移
|
|
|
|
|
hasMultiDayCover(cell.fullDate)
|
|
|
|
|
? { position: 'absolute', bottom: '10px', left: 0, right: 0, paddingTop: '0px', transform: 'none', '-webkit-line-clamp': 1, 'line-clamp': 1 }
|
|
|
|
|
: {},
|
|
|
|
|
// 多事件垂直堆叠布局:为每个事件分配垂直位置
|
|
|
|
|
getSingleEventPosition(cell.fullDate, evIdx)
|
|
|
|
|
: {}
|
|
|
|
|
]"
|
|
|
|
|
@tap.stop="onEventClick(ev)"
|
|
|
|
|
>
|
|
|
|
|
@ -434,31 +432,6 @@ export default {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getSingleEventPosition(fullDate, eventIndex) {
|
|
|
|
|
// 为单个事件计算垂直位置,避免重叠
|
|
|
|
|
const events = this.eventsForDate(fullDate) || []
|
|
|
|
|
const hasMultiDay = this.hasMultiDayCover(fullDate)
|
|
|
|
|
|
|
|
|
|
// 如果只有一个事件且没有跨天事件,使用默认布局
|
|
|
|
|
if (events.length === 1 && !hasMultiDay) {
|
|
|
|
|
return {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 多事件或与跨天事件共存时,使用垂直堆叠布局
|
|
|
|
|
const eventHeight = 20 // 每个事件的高度(px)
|
|
|
|
|
const eventSpacing = 2 // 事件间距(px)
|
|
|
|
|
const topOffset = eventIndex * (eventHeight + eventSpacing)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
top: topOffset + 'px',
|
|
|
|
|
left: '0',
|
|
|
|
|
right: '0',
|
|
|
|
|
height: eventHeight + 'px',
|
|
|
|
|
'-webkit-line-clamp': 1,
|
|
|
|
|
'line-clamp': 1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
hasOtherEvents(fullDate) {
|
|
|
|
|
// 判断该日期是否有其他事件(包括跨天事件)
|
|
|
|
|
const singleEvents = this.eventsForDate(fullDate) || []
|
|
|
|
|
|