diff --git a/static/app.js b/static/app.js index 0112b59..2cf2db5 100644 --- a/static/app.js +++ b/static/app.js @@ -177,20 +177,34 @@ } var todayWk = fmtWeek(new Date()); + var today = new Date(); var wHtml = ''; for (var i2 = 0; i2 < weeks.length; i2++) { var w = weeks[i2]; - var cls = 'cal-week-cell'; + var cls = 'cal-week-row'; var status = calendarStatus[w]; - if (status) cls += ' ' + status; if (w === todayWk) cls += ' today'; if (w === selectedWeek) cls += ' selected'; - wHtml += '
' + - '第' + w.split('-W')[1].replace(/^0/, '') + '周
'; + // 计算日期范围 + var monday = new Date(calYear, calMonth, 1); + while (fmtWeek(monday) !== w) monday.setDate(monday.getDate() + 7); + var sunday = new Date(monday); + sunday.setDate(sunday.getDate() + 6); + var dateRange = (monday.getMonth()+1) + '.' + monday.getDate() + ' - ' + sunday.getDate(); + var statusIcon = status === 'pass' ? '✓' : (status === 'fail' ? '✗' : '○'); + var statusLabel = status === 'pass' ? '达标' : (status === 'fail' ? '未达标' : '未打卡'); + wHtml += '
' + + '' + statusIcon + '' + + '
' + + '第' + w.split('-W')[1].replace(/^0/, '') + '周' + + '' + dateRange + '' + + '
' + + '' + statusLabel + '' + + '
'; } var we = document.getElementById('cal-weeks'); we.innerHTML = wHtml; - we.querySelectorAll('.cal-week-cell').forEach(function(cell) { + we.querySelectorAll('.cal-week-row').forEach(function(row) { cell.addEventListener('click', function() { var wk = this.dataset.week; if (wk) navigateToWeek(wk); diff --git a/static/style.css b/static/style.css index a23f869..412cebf 100644 --- a/static/style.css +++ b/static/style.css @@ -292,36 +292,60 @@ body { color: var(--text); } -/* 周选择 */ -.cal-weeks { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px; +/* 周列表行 */ +.cal-week-rows { + display: flex; + flex-direction: column; + gap: 6px; padding: 8px 14px 10px; } -.cal-week-cell { - height: 42px; +.cal-week-row { + display: flex; + align-items: center; + gap: 10px; + padding: 8px 10px; + border: 0.5px solid var(--border); + border-radius: 8px; + background: var(--card); + cursor: pointer; + transition: all 0.15s; +} +.cal-week-row:hover { border-color: var(--primary); } +.cal-week-row.today { border-color: var(--primary); } +.cal-week-row.selected { background: var(--primary); color: #FFF; border-color: transparent; } +.cal-week-row.selected .cal-wk-label, +.cal-week-row.selected .cal-wk-date, +.cal-week-row.selected .cal-wk-badge { color: #FFF; } +.cal-week-row.selected .cal-wk-status { background: rgba(255,255,255,0.2); color: #FFF; } + +.cal-wk-status { + width: 28px; + height: 28px; + border-radius: 50%; display: flex; align-items: center; justify-content: center; - font-size: 13px; + font-size: 12px; font-weight: 600; - border-radius: 8px; - color: var(--text-dim); - cursor: pointer; - transition: all 0.15s; - border: 1.5px solid var(--border); - background: var(--card); + flex-shrink: 0; } -.cal-week-cell:hover { border-color: var(--primary); color: var(--primary); } -.cal-week-cell.pass { background: var(--success-light); border-color: var(--success); color: var(--success); } -.cal-week-cell.fail { background: var(--danger-light); border-color: var(--danger); color: var(--danger); } -.cal-week-cell.today { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-light); } -.cal-week-cell.selected { background: var(--primary); color: #FFF; border-color: var(--primary); } +.cal-wk-status.pass { background: var(--success-light); color: var(--success); } +.cal-wk-status.fail { background: var(--danger-light); color: var(--danger); } +.cal-wk-status.empty { background: var(--bg); color: var(--text-muted); } -/* 旧样式清理 */ -.cal-week-list { display: none; } -.cal-week-cell .wk-num, .cal-week-cell .wk-dot { display: none; } +.cal-wk-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 1px; +} +.cal-wk-label { font-size: 12px; font-weight: 600; color: var(--text); } +.cal-wk-date { font-size: 10px; color: var(--text-muted); } +.cal-wk-badge { font-size: 10px; color: var(--text-muted); } + +/* 旧样式隐藏 */ +.cal-weeks { display: none; } +.cal-week-cell { display: none; } .cal-header { display: flex; diff --git a/templates/index.html b/templates/index.html index 0ab021e..dd050f3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -125,7 +125,7 @@ -
+