v1.5.3 — 日历同步按日期自动填充

- 后端 api_calendar_sync_all 查询后自动去重保存到各日期 checkin
- 不再只填充当前选中的日期
- 弹窗显示已填充天数
This commit is contained in:
mac
2026-06-05 12:19:22 +08:00
parent 19ae81ae6e
commit 350c9fb877
2 changed files with 31 additions and 3 deletions

32
app.py
View File

@@ -398,18 +398,46 @@ def api_calendar_sync():
@app.route('/api/calendar-sync-all', methods=['GET']) @app.route('/api/calendar-sync-all', methods=['GET'])
@login_required @login_required
def api_calendar_sync_all(): def api_calendar_sync_all():
"""批量查询过去15天~未来15天的钉钉日程按日期分组返回""" """批量查询过去15天~未来15天的钉钉日程按日期分组返回,并自动填充到对应日期的 checkin"""
import json as _json import json as _json
from datetime import datetime, timedelta from datetime import datetime, timedelta
today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
results = [] results = []
saved_days = 0
for delta in range(-15, 16): for delta in range(-15, 16):
d = today + timedelta(days=delta) d = today + timedelta(days=delta)
ds = d.strftime('%Y-%m-%d') ds = d.strftime('%Y-%m-%d')
events = _fetch_dingtalk_events(ds) events = _fetch_dingtalk_events(ds)
if events: if events:
results.append({'date': ds, 'events': events}) results.append({'date': ds, 'events': events})
return jsonify({'ok': True, 'data': results}) # 自动去重填充到对应日期的 checkin
existing = get_checkin(ds)
data = existing['data'] if existing else {'morning': [], 'evening': [], 'study': []}
morning = data.get('morning', [])
existing_texts = set()
for mi in morning:
t = mi if isinstance(mi, str) else mi.get('text', '')
if t.strip():
existing_texts.add(t.strip())
added = False
for evt in events:
summary = (evt.get('summary') or '').strip()
if not summary:
continue
text = f"{evt['time']}{summary}" if evt.get('time') else summary
loc = evt.get('location', '')
if loc:
text += f" @{loc}"
text = text.strip()
if text not in existing_texts:
morning.append(text)
existing_texts.add(text)
added = True
if added:
data['morning'] = morning
save_checkin(ds, data)
saved_days += 1
return jsonify({'ok': True, 'data': results, 'saved_days': saved_days})
# ── 启动 ────────────────────────────────────────────── # ── 启动 ──────────────────────────────────────────────

View File

@@ -410,7 +410,7 @@
var totalDays = data.length; var totalDays = data.length;
var totalEvents = 0; var totalEvents = 0;
data.forEach(function(d){ totalEvents += d.events.length; }); data.forEach(function(d){ totalEvents += d.events.length; });
summary.innerHTML = '同步完成!共 <b>' + totalDays + '</b> 天有日程,合计 <b>' + totalEvents + '</b> 个会议'; summary.innerHTML = '同步完成!共 <b>' + totalDays + '</b> 天有日程,合计 <b>' + totalEvents + '</b> 个会议' + (res.saved_days ? ',已自动填充 <b>' + res.saved_days + '</b> 天' : '');
// 渲染结果列表 // 渲染结果列表
var html = ''; var html = '';