仪表盘与设置
仪表盘与设置
相关源文件
本章引用的主要源码文件:
src-ui/e2e/admin/requests/api-settings.harsrc-ui/src/app/components/admin/config/config.component.htmlsrc-ui/src/app/components/admin/config/config.component.spec.tssrc-ui/src/app/components/admin/config/config.component.tssrc-ui/src/app/components/admin/logs/logs.component.htmlsrc-ui/src/app/components/admin/logs/logs.component.scsssrc-ui/src/app/components/admin/logs/logs.component.spec.tssrc-ui/src/app/components/admin/logs/logs.component.tssrc-ui/src/app/components/admin/settings/settings.component.htmlsrc-ui/src/app/components/admin/settings/settings.component.spec.tssrc-ui/src/app/components/admin/settings/settings.component.tssrc-ui/src/app/components/admin/tasks/tasks.component.htmlsrc-ui/src/app/components/admin/tasks/tasks.component.scsssrc-ui/src/app/components/admin/tasks/tasks.component.spec.tssrc-ui/src/app/components/admin/tasks/tasks.component.tssrc-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.scsssrc-ui/src/app/components/common/permissions-select/permissions-select.component.spec.tssrc-ui/src/app/components/dashboard/dashboard.component.htmlsrc-ui/src/app/components/dashboard/dashboard.component.tssrc-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.htmlsrc-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scsssrc-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.tssrc-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.tssrc-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.htmlsrc-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.scsssrc-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.spec.tssrc-ui/src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.tssrc-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.htmlsrc-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.scsssrc-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.spec.tssrc-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.tssrc-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.htmlsrc-ui/src/app/components/dashboard/widgets/welcome-widget/welcome-widget.component.tssrc-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.htmlsrc-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.scsssrc-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.spec.tssrc-ui/src/app/components/dashboard/widgets/widget-frame/widget-frame.component.tssrc-ui/src/app/components/manage/saved-views/saved-views.component.htmlsrc-ui/src/app/components/manage/saved-views/saved-views.component.spec.tssrc-ui/src/app/components/manage/saved-views/saved-views.component.tssrc-ui/src/app/data/paperless-task.tssrc-ui/src/app/data/ui-settings.tssrc-ui/src/app/services/permissions.service.spec.tssrc-ui/src/app/services/permissions.service.tssrc-ui/src/app/services/rest/log.service.spec.tssrc-ui/src/app/services/rest/log.service.tssrc-ui/src/app/services/tasks.service.spec.tssrc-ui/src/app/services/tasks.service.tssrc/documents/permissions.pysrc/documents/tests/test_api_tasks.pysrc/documents/tests/test_api_uisettings.pysrc/paperless/migrations/0004_applicationconfiguration_barcode_asn_prefix_and_more.pysrc/paperless/migrations/0009_alter_applicationconfiguration_options.py
本文档详细介绍了 Paperless-ngx 中的仪表盘界面、用户设置和管理页面。内容涵盖仪表盘小部件的实现、设置配置系统、任务管理以及权限用户界面。
仪表盘总览
仪表盘是应用的着陆页面,设计为响应式小部件网格。它提供系统活动的概览,并通过已保存视图快速访问文档。
仪表盘架构
仪表盘由 DashboardComponent 管理,该组件作为各种专用小部件的容器。
来源:src-ui/src/app/components/dashboard/dashboard.component.ts:26-44, src-ui/src/app/components/dashboard/dashboard.component.html:1-67
仪表盘小部件
| 小部件 | 组件 | 用途 | 数据源 |
|---|---|---|---|
| 欢迎 | WelcomeWidgetComponent | 新用户引导。 | SettingsService.offerTour() |
| 上传 | UploadFileWidgetComponent | 手动文件上传及处理状态。 | UploadDocumentsService 和 WebsocketStatusService |
| 已保存视图 | SavedViewWidgetComponent | 显示文档的过滤列表。 | DocumentService.listFiltered() |
| 统计信息 | StatisticsWidgetComponent | 高级文档计数。 | 后端统计 API |
来源:src-ui/src/app/components/dashboard/dashboard.component.html:32-64, src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts:39-43
拖放实现
用户可以在仪表盘上重新排序 SavedViewWidgetComponent 实例。这是通过 Angular CDK 的 DragDropModule 实现的。当发生拖放操作时,DashboardComponent.onDrop() 函数会更新本地数组,并通过 SettingsService.updateDashboardViewsSort() 持久化新顺序。
来源:src-ui/src/app/components/dashboard/dashboard.component.ts:83-100, src-ui/src/app/components/dashboard/dashboard.component.html:7-11
上传与消费状态
UploadFileWidgetComponent 负责处理上传的发起和实时处理状态的显示。
实时状态流程
该小部件订阅 WebsocketStatusService,以接收来自 Django 后端关于文档消费的更新。
来源:src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts:46-48, src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html:46-66
设置与配置
设置组件(SettingsComponent)允许用户自定义其 UI 体验。设置会按用户持久化存储在数据库中。
主要设置类别
- 通用: 语言、日期格式和主题(深色模式)。
- 外观: 窄侧边栏开关和主题颜色。
- 全局搜索: 高级搜索与仅数据库搜索。
- 已保存视图: 管理现有视图。
来源:src-ui/src/app/components/admin/settings/settings.component.html:41-158
UI 设置的实现
SettingsService 管理这些配置的状态。它使用 SETTINGS_KEYS 将 UI 组件映射到后端偏好设置。例如,darkModeEnabled 会与 SETTINGS_KEYS.DARK_MODE_ENABLED 进行比对。
来源:src-ui/src/app/data/ui-settings.ts:1-50, src-ui/src/app/services/settings.service.ts:1-100
管理页面
Paperless-ngx 包含用于监控系统的管理界面,与 Django 管理后台不同。
任务管理
TasksComponent 提供用于监控 Celery 任务的 UI。它将任务分类为"需要关注"、"进行中"和"已完成"。
- 数据源:
TasksService从/api/tasks/端点获取数据。 - 操作: 用户可以关闭已完成的任务或重试失败的任务。
- 过滤: 支持按
PaperlessTaskType(例如ConsumeFile、TrainClassifier、SanityCheck)进行过滤。
来源:src-ui/src/app/components/admin/tasks/tasks.component.ts:36-102, src-ui/src/app/services/tasks.service.ts:69-86
日志与系统状态
- 日志:
LogsComponent允许通过LogService直接在浏览器中查看后端日志(例如paperless.log、mail.log)。 - 系统状态: 设置中的"系统状态"模态框会检查数据库、Redis 和 Celery 工作进程的健康状况。
来源:src-ui/src/app/components/admin/logs/logs.component.ts:1-50, src-ui/src/app/components/admin/settings/settings.component.html:10-29
权限与用户管理
权限系统使用 django-guardian 实现对象级访问控制。
权限类型
前端使用 PermissionType 枚举来控制 UI 元素的显示:
Document:访问查看/编辑文档的权限。SavedView:访问仪表盘视图的权限。PaperlessTask:访问任务管理页面的权限。UISettings:访问设置页面的权限。
来源:src-ui/src/app/services/permissions.service.ts:10-35
代码实现
后端的 PaperlessObjectPermissions 类会覆盖标准的 Django 权限,以检查 owner 字段。如果文档有所有者,则只有该用户(或超级用户)可以访问它,除非授予了特定的对象级权限。
class PaperlessObjectPermissions(DjangoObjectPermissions):
def has_object_permission(self, request, view, obj):
if hasattr(obj, "owner") and obj.owner is not None:
if request.user == obj.owner:
return True
else:
return super().has_object_permission(request, view, obj)
else:
return True # 无所有者
来源:src/documents/permissions.py:28-51
UI 集成
在整个仪表盘和设置模板中,使用 IfPermissionsDirective(*pngxIfPermissions)根据当前用户的作用域有条件地渲染组件。
来源:src-ui/src/app/components/dashboard/dashboard.component.html:36, src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html:1