feat(家庭事项): 按到期时间分类显示,一个月内显示详情,超过一个月显示数量

- 修改视图逻辑,将未完成事项分为即将到期(一个月内)和远期事项
- 即将到期的事项显示完整详情表格
- 超过一个月的远期事项只显示数量,不显示详情
- 支持显示已过期的事项(红色标记)
This commit is contained in:
2026-03-16 18:26:47 +08:00
parent ec21ff68e3
commit b4e0fc2a67
2 changed files with 63 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse, JsonResponse
from django.utils import timezone
from django.db import models
from django.db.models import Count
from django.core.mail import send_mail, EmailMessage
from django.conf import settings
@@ -397,13 +398,30 @@ def delete_summary(request, pk):
# 家庭事项视图
@login_required
def family_tasks(request):
"""家庭事项 - 显示所有未完成的事项非completed状态"""
"""家庭事项 - 显示未完成的事项,一个月内显示详情,超过一个月显示数量"""
logger.info("用户访问家庭事项页面")
# 排除已完成的事项,显示所有未完成的事项
tasks = FamilyTask.objects.exclude(status__name='completed')
today = timezone.now().date()
one_month_later = today + timedelta(days=30)
# 获取所有未完成的事项
all_pending_tasks = FamilyTask.objects.exclude(status__name='completed')
# 一个月内到期的事项(显示详情)
# 包括:有截止日期且在一个月内,或者没有截止日期的事项
upcoming_tasks = all_pending_tasks.filter(
models.Q(deadline__isnull=True) | models.Q(deadline__lte=one_month_later)
)
# 超过一个月到期的事项(只显示数量)
future_tasks = all_pending_tasks.filter(deadline__gt=one_month_later)
future_tasks_count = future_tasks.count()
context = {
'tasks': tasks,
'upcoming_tasks': upcoming_tasks,
'future_tasks_count': future_tasks_count,
'total_pending_count': all_pending_tasks.count(),
'today': today,
}
return render(request, 'core/family_tasks.html', context)