Compare commits

...

5 Commits

4 changed files with 62 additions and 7 deletions

15
app.py
View File

@@ -427,7 +427,20 @@ def api_calendar_sync_all():
summary = (evt.get('summary') or '').strip() summary = (evt.get('summary') or '').strip()
if not summary: if not summary:
continue continue
text = f"{evt['time']}{summary}" if evt.get('time') else summary date_str = evt.get('date', '')
if date_str:
try:
parts = date_str.split('-')
date_label = f"{int(parts[1])}{int(parts[2])}"
except:
date_label = date_str
else:
date_label = ''
time_str = evt.get('time', '')
prefix = f"{date_label} {time_str}" if date_label and time_str else \
(f"{date_label}" if date_label else \
(f"{time_str}" if time_str else ''))
text = f"{prefix}{summary}" if prefix else summary
loc = evt.get('location', '') loc = evt.get('location', '')
if loc: if loc:
text += f" @{loc}" text += f" @{loc}"

View File

@@ -246,6 +246,12 @@
var v = mEls[i].value.trim(); var v = mEls[i].value.trim();
if (v) morningItems.push(v); if (v) morningItems.push(v);
} }
// 收集日历日程
var calEls = document.querySelectorAll('#morning-calendar-list .cal-task-item span:last-child');
for (var ci=0; ci<calEls.length; ci++) {
var txt = calEls[ci].textContent.trim();
if (txt) { morningItems.push(txt); }
}
var eveningItems = []; var eveningItems = [];
var eRows = document.querySelectorAll('#evening-list .evening-row'); var eRows = document.querySelectorAll('#evening-list .evening-row');
@@ -275,12 +281,29 @@
var evening = data.evening || []; var evening = data.evening || [];
var study = data.study || []; var study = data.study || [];
// 早间立志 // 本周重点:拆分手动任务 vs 日历日程
document.getElementById('morning-list').innerHTML = ''; document.getElementById('morning-list').innerHTML = '';
document.getElementById('morning-calendar-list').innerHTML = '';
var manualItems = [];
var calItems = [];
if (morning.length === 0) morning = ['']; if (morning.length === 0) morning = [''];
for (var m=0; m<morning.length; m++) { for (var m=0; m<morning.length; m++) {
var txt = typeof morning[m] === 'string' ? morning[m] : (morning[m].text || ''); var txt = typeof morning[m] === 'string' ? morning[m] : (morning[m].text || '');
addMorningRow(txt); if (txt && txt.trim().startsWith('【')) { calItems.push(txt); }
else { manualItems.push(txt); }
}
if (manualItems.length === 0) manualItems = [''];
for (var a=0; a<manualItems.length; a++) { addMorningRow(manualItems[a]); }
if (calItems.length > 0) {
document.getElementById('morning-calendar').style.display = 'block';
for (var b=0; b<calItems.length; b++) {
var div = document.createElement('div');
div.className = 'cal-task-item';
div.innerHTML = '<span class="cal-task-dot">&#128197;</span><span>' + esc(calItems[b]) + '</span>';
document.getElementById('morning-calendar-list').appendChild(div);
}
} else {
document.getElementById('morning-calendar').style.display = 'none';
} }
// 责善改过 // 责善改过
@@ -458,10 +481,12 @@
html += '<div class="sync-day">'; html += '<div class="sync-day">';
html += '<div class="sync-day-header"><span>' + day.date + '</span></div>'; html += '<div class="sync-day-header"><span>' + day.date + '</span></div>';
day.events.forEach(function(e) { day.events.forEach(function(e) {
var timeStr = e.time ? ' (' + e.time + ')' : ''; var timeStr = e.time ? e.time : '';
var dateStr = e.date || '';
html += '<div class="sync-event">' + html += '<div class="sync-event">' +
'<span class="sync-event-icon">📌</span>' + '<span class="sync-event-icon">📌</span>' +
'<span class="sync-event-text">' + esc(e.summary) + '<span class="sync-event-time">' + esc(timeStr) + '</span></span>' + '<span class="sync-event-text">' + esc(e.summary) + '</span>' +
'<span class="sync-event-meta">' + esc(dateStr) + (timeStr ? ' ' + esc(timeStr) : '') + '</span>' +
'</div>'; '</div>';
}); });
html += '</div>'; html += '</div>';

View File

@@ -833,7 +833,6 @@ body {
/* 编辑模式下才显示的元素 */ /* 编辑模式下才显示的元素 */
.edit-only { display: flex; } .edit-only { display: flex; }
.btn-edit-toggle:not(#study-edit-toggle) { display: none; }
/* 默认隐藏删除按钮 */ /* 默认隐藏删除按钮 */
.btn-del { display: none; } .btn-del { display: none; }
@@ -1461,7 +1460,7 @@ body {
.sync-event + .sync-event { border-top: 1px solid var(--bg); } .sync-event + .sync-event { border-top: 1px solid var(--bg); }
.sync-event-icon { flex-shrink: 0; } .sync-event-icon { flex-shrink: 0; }
.sync-event-text { flex: 1; } .sync-event-text { flex: 1; }
.sync-event-time { font-size: 11px; color: var(--text-muted); margin-left: 6px; } .sync-event-meta { font-size: 11px; color: var(--text-muted); }
.sync-modal-footer { .sync-modal-footer {
padding: 12px 20px; padding: 12px 20px;
border-top: 1px solid var(--border); border-top: 1px solid var(--border);
@@ -1800,3 +1799,14 @@ body {
#panel-daily.editing-study .study-card-del:hover { background:var(--danger); color:#FFF; } #panel-daily.editing-study .study-card-del:hover { background:var(--danger); color:#FFF; }
.edit-only-study { display: none; } .edit-only-study { display: none; }
#panel-daily.editing-study .edit-only-study { display: flex; } #panel-daily.editing-study .edit-only-study { display: flex; }
/* 编辑模式下显示删除按钮 */
.btn-del { display: none; }
.card.editing .btn-del { display: inline-flex; }
/* 本周日程 */
.morning-calendar { margin-top: 14px; border-top: 1px solid var(--border); padding-top: 12px; }
.morning-calendar-head { display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; color: var(--text-muted); margin-bottom: 8px; }
.cal-task-item { display: flex; align-items: flex-start; gap: 8px; padding: 6px 0; font-size: 13px; color: var(--text-dim); line-height: 1.5; border-bottom: 1px solid var(--bg); }
.cal-task-item:last-child { border-bottom: none; }
.cal-task-dot { flex-shrink: 0; font-size: 14px; margin-top: 1px; }

View File

@@ -157,6 +157,13 @@
<button class="btn-add edit-only" onclick="addMorning()"> <button class="btn-add edit-only" onclick="addMorning()">
<svg class="icon-sm"><use href="#icon-plus"/></svg> 增加一条 <svg class="icon-sm"><use href="#icon-plus"/></svg> 增加一条
</button> </button>
<div class="morning-calendar" id="morning-calendar" style="display:none">
<div class="morning-calendar-head">
<svg class="icon-sm"><use href="#icon-calendar"/></svg>
<span>本周日程</span>
</div>
<div id="morning-calendar-list"></div>
</div>
</div> </div>
<div class="card card-evening daily-card" data-card="evening"> <div class="card card-evening daily-card" data-card="evening">
<div class="card-head"> <div class="card-head">