fix(shift): badge color contrast and dynamic calendar rows
- 角标文字色按背景类别配对:班=onPrimary,休=onError,起=onTertiary - 迷你月历复用 getMonthGridInfo 动态算行数(4/5/6),不再固定 6 行
This commit is contained in:
parent
f8df108bf3
commit
4b098442c4
@ -69,9 +69,10 @@ fun ShiftCalendarGrid(
|
|||||||
var viewYear by remember { mutableStateOf(today.year) }
|
var viewYear by remember { mutableStateOf(today.year) }
|
||||||
var viewMonth by remember { mutableStateOf(today.month.number) }
|
var viewMonth by remember { mutableStateOf(today.month.number) }
|
||||||
|
|
||||||
val firstOfMonth = LocalDate(viewYear, Month(viewMonth), 1)
|
// 复用主日历的网格计算(周一为首日,动态行数 4/5/6)
|
||||||
val daysInMonth = firstOfMonth.plus(DatePeriod(months = 1)).minus(DatePeriod(days = 1)).day
|
val gridInfo = remember(viewYear, viewMonth) { getMonthGridInfo(viewYear, viewMonth) }
|
||||||
val firstWeekdayOffset = firstOfMonth.dayOfWeek.isoDayNumber - 1
|
val firstWeekdayOffset = gridInfo.offset
|
||||||
|
val rows = gridInfo.rows
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
@ -115,12 +116,12 @@ fun ShiftCalendarGrid(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(0 until 6).forEach { row ->
|
(0 until rows).forEach { row ->
|
||||||
Row(Modifier.fillMaxWidth()) {
|
Row(Modifier.fillMaxWidth()) {
|
||||||
(0 until 7).forEach { col ->
|
(0 until 7).forEach { col ->
|
||||||
val cellIndex = row * 7 + col
|
val cellIndex = row * 7 + col
|
||||||
val dayNum = cellIndex - firstWeekdayOffset + 1
|
val dayNum = cellIndex - firstWeekdayOffset + 1
|
||||||
if (dayNum in 1..daysInMonth) {
|
if (dayNum in 1..gridInfo.daysInMonth) {
|
||||||
val date = LocalDate(viewYear, Month(viewMonth), dayNum)
|
val date = LocalDate(viewYear, Month(viewMonth), dayNum)
|
||||||
ShiftDayCell(
|
ShiftDayCell(
|
||||||
date = date,
|
date = date,
|
||||||
@ -209,12 +210,19 @@ private fun ShiftDayCell(
|
|||||||
// rephaseFlip 的 rephaseFrom = 当天,表示该天为重排起点
|
// rephaseFlip 的 rephaseFrom = 当天,表示该天为重排起点
|
||||||
val isRephaseStart = pattern.rephaseFlips.any { it.rephaseFrom == date }
|
val isRephaseStart = pattern.rephaseFlips.any { it.rephaseFrom == date }
|
||||||
|
|
||||||
|
// 背景色与文字色配对,保证对比度(对照 DayCell 的配色风格)
|
||||||
val badgeColor = when {
|
val badgeColor = when {
|
||||||
isRephaseStart -> MaterialTheme.colorScheme.tertiary
|
isRephaseStart -> MaterialTheme.colorScheme.tertiary
|
||||||
kind == ShiftKind.WORK -> MaterialTheme.colorScheme.primary
|
kind == ShiftKind.WORK -> MaterialTheme.colorScheme.primary
|
||||||
kind == ShiftKind.OFF -> MaterialTheme.colorScheme.error
|
kind == ShiftKind.OFF -> MaterialTheme.colorScheme.error
|
||||||
else -> Color.Transparent
|
else -> Color.Transparent
|
||||||
}
|
}
|
||||||
|
val badgeTextColor = when {
|
||||||
|
isRephaseStart -> MaterialTheme.colorScheme.onTertiary
|
||||||
|
kind == ShiftKind.WORK -> MaterialTheme.colorScheme.onPrimary
|
||||||
|
kind == ShiftKind.OFF -> MaterialTheme.colorScheme.onError
|
||||||
|
else -> Color.Transparent
|
||||||
|
}
|
||||||
val badgeText = when {
|
val badgeText = when {
|
||||||
isRephaseStart -> "起"
|
isRephaseStart -> "起"
|
||||||
kind == ShiftKind.WORK -> "班"
|
kind == ShiftKind.WORK -> "班"
|
||||||
@ -243,7 +251,7 @@ private fun ShiftDayCell(
|
|||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = badgeText,
|
text = badgeText,
|
||||||
color = MaterialTheme.colorScheme.onPrimary,
|
color = badgeTextColor,
|
||||||
fontSize = 8.sp,
|
fontSize = 8.sp,
|
||||||
fontWeight = FontWeight.Bold,
|
fontWeight = FontWeight.Bold,
|
||||||
lineHeight = 8.sp
|
lineHeight = 8.sp
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user