文档列表与筛选
文档列表与筛选
相关源文件
本章引用的主要源码文件:
src-ui/e2e/document-list/document-list.spec.tssrc-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.htmlsrc-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.spec.tssrc-ui/src/app/components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component.tssrc-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.htmlsrc-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.spec.tssrc-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.tssrc-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.htmlsrc-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.scsssrc-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.spec.tssrc-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.tssrc-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.htmlsrc-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.spec.tssrc-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.tssrc-ui/src/app/components/document-list/document-card-large/document-card-large.component.htmlsrc-ui/src/app/components/document-list/document-card-large/document-card-large.component.scsssrc-ui/src/app/components/document-list/document-card-large/document-card-large.component.spec.tssrc-ui/src/app/components/document-list/document-card-large/document-card-large.component.tssrc-ui/src/app/components/document-list/document-card-small/document-card-small.component.htmlsrc-ui/src/app/components/document-list/document-card-small/document-card-small.component.scsssrc-ui/src/app/components/document-list/document-card-small/document-card-small.component.spec.tssrc-ui/src/app/components/document-list/document-card-small/document-card-small.component.tssrc-ui/src/app/components/document-list/document-list.component.htmlsrc-ui/src/app/components/document-list/document-list.component.scsssrc-ui/src/app/components/document-list/document-list.component.spec.tssrc-ui/src/app/components/document-list/document-list.component.tssrc-ui/src/app/components/document-list/filter-editor/filter-editor.component.htmlsrc-ui/src/app/components/document-list/filter-editor/filter-editor.component.scsssrc-ui/src/app/components/document-list/filter-editor/filter-editor.component.spec.tssrc-ui/src/app/components/document-list/filter-editor/filter-editor.component.tssrc-ui/src/app/data/filter-rule-type.tssrc-ui/src/app/pipes/filter.pipe.spec.tssrc-ui/src/app/pipes/filter.pipe.tssrc-ui/src/app/services/document-list-view.service.spec.tssrc-ui/src/app/services/document-list-view.service.tssrc-ui/src/app/services/rest/document.service.spec.tssrc-ui/src/app/services/rest/document.service.tssrc-ui/src/app/utils/custom-field-query-element.spec.tssrc-ui/src/app/utils/custom-field-query-element.tssrc-ui/src/app/utils/query-params.ts
本文档介绍 Paperless-ngx 中的文档列表视图和筛选系统,用户可以通过该系统浏览、搜索、筛选和批量编辑文档。文档列表是文档被系统处理后的主要交互界面。
组件概览
文档列表界面由多个集成组件组成,它们协同工作,提供灵活且强大的文档管理体验。
来源: src-ui/src/app/components/document-list/document-list.component.ts:108-122 src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts:120-128 src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts:80-98 src-ui/src/app/services/document-list-view.service.ts:110-117
文档列表组件
DocumentListComponent 是管理文档展示的主容器,负责协调筛选工具、批量操作和文档集合的渲染。
核心职责
- 显示模式选择:在
table(表格)、smallCards(小卡片)或largeCards(大卡片)之间切换src-ui/src/app/components/document-list/document-list.component.html:48-61。 - 字段选择:选择要显示的文档元数据字段(包括自定义字段)
src-ui/src/app/components/document-list/document-list.component.ts:132-150。 - 排序控制:通过
DocumentListViewService按不同字段对文档排序src-ui/src/app/components/document-list/document-list.component.html:63-86。 - 已保存视图:管理命名的筛选/排序配置
src-ui/src/app/components/document-list/document-list.component.ts:367-446。 - 分页:在结果页面之间导航
src-ui/src/app/components/document-list/document-list.component.html:123-144。
显示模式与卡片
列表支持三种可视化表现形式:
- 表格视图:使用标准 HTML 表格的紧凑型表格显示
src-ui/src/app/components/document-list/document-list.component.html:146-288。 - 小卡片:由
DocumentCardSmallComponent渲染,侧重于网格布局和标签src-ui/src/app/components/document-list/document-card-small/document-card-small.component.ts:38-60。 - 大卡片:由
DocumentCardLargeComponent渲染,提供完整的预览和内容摘要src-ui/src/app/components/document-list/document-card-large/document-card-large.component.ts:40-61。
来源: src-ui/src/app/components/document-list/document-list.component.ts:108-156 src-ui/src/app/components/document-list/document-list.component.html:1-120
文档列表视图服务
DocumentListViewService 是一个单例服务,负责在整个应用中维护文档列表的状态。它作为当前查询、选择和分页的真相来源。
ListViewState(列表视图状态)
状态封装在 ListViewState 接口中 src-ui/src/app/services/document-list-view.service.ts:45-102:
filterRules:活跃的FilterRule对象。sortField/sortReverse:排序配置。selected:包含已选文档 ID 的Set<number>。allSelected:布尔值,表示是否选择了整个筛选结果集。
关键方法
reload():使用当前状态从后端获取文档src-ui/src/app/services/document-list-view.service.ts:360-422。activateSavedView():将服务切换到特定的SavedView配置src-ui/src/app/services/document-list-view.service.ts:238-246。selectRangeTo():实现 Shift+点击范围选择逻辑src-ui/src/app/services/document-list-view.service.ts:597-632。
来源: src-ui/src/app/services/document-list-view.service.ts:113-134 src-ui/src/app/services/document-list-view.service.ts:197-209
文档筛选系统
筛选系统允许用户通过 FilterEditorComponent 创建复杂的查询。
筛选规则与类型
筛选条件表示为 FilterRule 对象 src-ui/src/app/data/filter-rule.ts。rule_type 是一个整数,映射到诸如 FILTER_TAGS_ALL 或 FILTER_CREATED_AFTER 等常量 src-ui/src/app/data/filter-rule-type.ts:36-80。
自定义字段查询
FilterEditorComponent 包含对自定义字段的特殊处理,利用 CustomFieldsQueryDropdownComponent src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts:101-103。这支持对自定义字段值使用复杂的逻辑运算符(AND/OR)src-ui/src/app/data/custom-field-query.ts:32-34。
来源: src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts:1-128 src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html:1-113 src-ui/src/app/utils/query-params.ts:17-52
批量编辑器
当文档被选中时,BulkEditorComponent 会显示出来,允许进行批量元数据更新和操作。
选择数据
该组件从 DocumentListViewService 消费 selectionData src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts:104-108。这些数据包括有多少已选文档共享特定标签、通信方等的计数,这些信息会在 FilterableDropdownComponent 中显示。
批量操作
操作通过 DocumentService.bulkEdit 方法执行 src-ui/src/app/services/rest/document.service.ts:213-219。
- 元数据:
modify_tags(修改标签)、set_correspondent(设置通信方)、set_document_type(设置文档类型)、set_storage_path(设置存储路径)。 - 操作:
reprocess(重新处理)、rotate(旋转)、merge(合并)、delete(删除)。 - 权限:
setPermissions()方法会打开一个PermissionsDialogComponent对话框,用于更新所有已选项的所有权和访问规则src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts:404-419。
来源: src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.ts:80-117 src-ui/src/app/components/document-list/bulk-editor/bulk-editor.component.html:1-81
可筛选下拉框
FilterableDropdownComponent 是用于筛选和批量编辑的主要 UI 元素。
选择模型
FilterableDropdownSelectionModel src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts:57-118 管理:
- 逻辑运算符:
And(与)与Or(或)src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts:47-50。 - 交集:
Include(包含)与Exclude(排除)src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts:52-55。 - 状态:通过
ToggleableItemState枚举,项目可以处于Selected(已选)、Excluded(已排除)或NotSelected(未选)状态src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.ts:31-36。
来源: src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts:1-118 src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html:1-81
URL 与查询参数
Paperless-ngx 使用 URL 来持久化文档列表的状态。这由 query-params.ts 中的工具函数处理。
paramsFromViewState(state):将ListViewState转换为 Angular Router 的ParamMapsrc-ui/src/app/utils/query-params.ts:54-106。paramsToViewState(params):在页面加载或按下“返回”按钮时,从 URL 参数重建ListViewStatesrc-ui/src/app/utils/query-params.ts:108-154。
每当列表状态发生变化时,DocumentListViewService 都会调用这些工具函数,以确保 URL 保持同步 src-ui/src/app/services/document-list-view.service.ts:431-435。
来源:
src-ui/src/app/utils/query-params.ts:1-154src-ui/src/app/services/document-list-view.service.ts:20-22