feat(报告): 添加PDF报告预览功能
新增预览PDF报告功能,允许用户在生成正式PDF前查看HTML格式的预览,样式与PDF保持一致。该功能使用与PDF相同的模板渲染,方便用户确认报告内容无误后再生成正式文件。
This commit is contained in:
@@ -40,6 +40,7 @@ urlpatterns = [
|
|||||||
path('report/', views.generate_report, name='generate_report'),
|
path('report/', views.generate_report, name='generate_report'),
|
||||||
path('report/<str:date>/', views.view_report, name='view_report'),
|
path('report/<str:date>/', views.view_report, name='view_report'),
|
||||||
path('report/<str:date>/pdf/', views.generate_pdf_report, name='generate_pdf_report'),
|
path('report/<str:date>/pdf/', views.generate_pdf_report, name='generate_pdf_report'),
|
||||||
|
path('report/<str:date>/preview/', views.preview_pdf_report, name='preview_pdf_report'),
|
||||||
|
|
||||||
# 系统配置
|
# 系统配置
|
||||||
path('settings/', views.system_settings, name='system_settings'),
|
path('settings/', views.system_settings, name='system_settings'),
|
||||||
|
|||||||
@@ -560,6 +560,38 @@ def generate_pdf_report(request, date):
|
|||||||
logger.error(f"生成PDF报告失败: {str(e)}")
|
logger.error(f"生成PDF报告失败: {str(e)}")
|
||||||
return HttpResponse(f"生成PDF报告失败: {str(e)}", status=500)
|
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):
|
def system_settings(request):
|
||||||
"""系统配置"""
|
"""系统配置"""
|
||||||
|
|||||||
Reference in New Issue
Block a user