From 5f9bd7da3eead7ae9166015b0cf7bed5399d106b Mon Sep 17 00:00:00 2001 From: xiaji Date: Wed, 21 Jan 2026 22:25:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=8A=A5=E5=91=8A):=20=E6=B7=BB=E5=8A=A0P?= =?UTF-8?q?DF=E6=8A=A5=E5=91=8A=E9=A2=84=E8=A7=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增预览PDF报告功能,允许用户在生成正式PDF前查看HTML格式的预览,样式与PDF保持一致。该功能使用与PDF相同的模板渲染,方便用户确认报告内容无误后再生成正式文件。 --- core/urls.py | 1 + core/views.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/core/urls.py b/core/urls.py index 46a83a4..8068c73 100644 --- a/core/urls.py +++ b/core/urls.py @@ -40,6 +40,7 @@ urlpatterns = [ path('report/', views.generate_report, name='generate_report'), path('report//', views.view_report, name='view_report'), path('report//pdf/', views.generate_pdf_report, name='generate_pdf_report'), + path('report//preview/', views.preview_pdf_report, name='preview_pdf_report'), # 系统配置 path('settings/', views.system_settings, name='system_settings'), diff --git a/core/views.py b/core/views.py index 596271e..b87c1fe 100644 --- a/core/views.py +++ b/core/views.py @@ -560,6 +560,38 @@ def generate_pdf_report(request, date): logger.error(f"生成PDF报告失败: {str(e)}") return HttpResponse(f"生成PDF报告失败: {str(e)}", status=500) +# 预览PDF报告 +def preview_pdf_report(request, date): + """预览PDF报告(HTML格式,样式与PDF一致)""" + logger.info(f"用户预览PDF报告: {date}") + + try: + report_date = datetime.strptime(date, '%Y-%m-%d').date() + yesterday = report_date - timedelta(days=1) + + # 获取指定日期的记录 + yesterday_reading = ReadingRecord.objects.filter(date=yesterday) + yesterday_insight = InsightRecord.objects.filter(date=yesterday) + today_plan = TodayPlan.objects.filter(date=report_date) + + # 获取家庭事项统计 + family_task_stats = FamilyTask.objects.values('type').annotate(count=Count('id')) + + context = { + 'today': report_date, + 'yesterday': yesterday, + 'yesterday_reading': yesterday_reading, + 'yesterday_insight': yesterday_insight, + 'today_plan': today_plan, + 'family_task_stats': family_task_stats, + } + + # 渲染HTML模板(与PDF使用相同的模板) + return render(request, 'core/report_pdf.html', context) + except Exception as e: + logger.error(f"预览PDF报告失败: {str(e)}") + return HttpResponse(f"预览PDF报告失败: {str(e)}", status=500) + # 系统配置 def system_settings(request): """系统配置"""