docs/docs/cn/data-sources/field-sort/index.md
在 NocoBase 中,排序字段(Sort) 用于记录数据表中记录的排序值。它常用于表格、看板等区块的拖拽排序。
排序字段支持不分组排序,也支持先分组再排序。分组排序适合“同一个分组内独立排序”的场景,比如按班级排列学生、按看板状态排列任务。
:::warning 注意
因为排序字段是同表字段,所以分组排序时,不支持同一条记录同时出现在多个组里。
:::
排序字段由内置插件提供,无需单独安装。
在数据表的「Configure fields」页面中,点击「Add field」,选择「排序」可以创建排序字段。
创建排序字段时,NocoBase 会对排序值进行初始化:
:::warning 注意
创建字段时,如果排序值初始化失败,就不会创建排序字段。在某个范围内,如果某条记录从 A 位置移动到 B 位置,AB 区间内所有记录的排序值都会变更;如果其中一条失败,移动就会失败,相关记录的排序值都不会变更。
:::
下面是创建 sort1 字段的例子,这个字段不使用分组排序。
各记录排序字段会依据主键字段和创建日期字段进行初始化。
下面是创建一个基于 Class ID 分组的 sort2 字段。
此时会对数据表中的全部记录先按 Class ID 分组,再进行排序字段初始化。
排序字段主要用于各种区块记录的拖拽排序。目前支持拖拽排序的区块有表格和看板。
:::warning 注意
:::
表格区块可以使用排序字段拖拽调整记录顺序。
关系表格区块也可以使用排序字段拖拽排序。
<video controls width="100%" src="https://static-docs.nocobase.com/20240409111903_rec_.mp4" title="关系表格区块拖拽排序"></video>
:::warning 注意
一对多关系区块里,如果选择未分组的排序字段,那么所有记录都可能参与排序;如果基于外键先分组再排序,那么排序规则只会影响当前分组内的数据。最终效果可能看起来一致,但参与排序的记录范围不同。
:::
看板区块可以使用排序字段拖拽调整卡片顺序。
假设有一组数据:
[1,2,3,4,5,6,7,8,9]
当 5 向前移动到 3 的位置时,只有 3、4、5 的序号会变动。5 占用 3 的位置,3 和 4 各向后移动一个位置。
[1,2,5,3,4,6,7,8,9]
此时继续把 6 向后移动到 8 的位置,6 占用 8 的位置,7 和 8 各向前移动一个位置。
[1,2,5,3,4,7,8,6,9]
分组排序时,当某条记录移动到其他组里时,自身所在组也会发生改变。假设有两组数据:
A: [1,2,3,4]
B: [5,6,7,8]
当 1 移动到 6 后面时,1 所在组也会从 A 变为 B。
A: [2,3,4]
B: [5,6,1,7,8]
假设有一组数据:
[1,2,3,4,5,6,7,8,9]
界面只显示:
[1,5,9]
当 1 移动到 9 的位置时,中间的 2、3、4、5、6、7、8 的位置都会变更。
[2,3,4,5,6,7,8,9,1]
界面最终显示为:
[5,9,1]