diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index f4f816c75..3c6ec55a3 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -3021,6 +3021,25 @@ func addAttributeViewBlock(now int64, avID, dbBlockID, groupID, previousItemID, } else { v.ItemIDs = append([]string{addingItemID}, v.ItemIDs...) } + + // 在所有分组视图中添加,目的是为了在重新分组的过程中保住排序状态 https://github.com/siyuan-note/siyuan/issues/15560 + for _, g := range v.Groups { + if "" != previousItemID { + changed := false + for i, id := range g.GroupItemIDs { + if id == previousItemID { + g.GroupItemIDs = append(g.GroupItemIDs[:i+1], append([]string{addingItemID}, g.GroupItemIDs[i+1:]...)...) + changed = true + break + } + } + if !changed { + g.GroupItemIDs = append(g.GroupItemIDs, addingItemID) + } + } else { + g.GroupItemIDs = append([]string{addingItemID}, g.GroupItemIDs...) + } + } } regenAttrViewGroups(attrView, "force") @@ -3028,10 +3047,10 @@ func addAttributeViewBlock(now int64, avID, dbBlockID, groupID, previousItemID, return } -func fillDefaultValue(attrView *av.AttributeView, view, groupView *av.View, previousBlockID, addingBlockID string) { - defaultValues := getAttrViewAddingBlockDefaultValues(attrView, view, groupView, previousBlockID, addingBlockID) +func fillDefaultValue(attrView *av.AttributeView, view, groupView *av.View, previousItemID, addingItemID string) { + defaultValues := getAttrViewAddingBlockDefaultValues(attrView, view, groupView, previousItemID, addingItemID) for keyID, newValue := range defaultValues { - newValue.BlockID = addingBlockID + newValue.BlockID = addingItemID keyValues, getErr := attrView.GetKeyValues(keyID) if nil != getErr { continue @@ -3054,7 +3073,7 @@ func fillDefaultValue(attrView *av.AttributeView, view, groupView *av.View, prev updateTwoWayRelationDestAttrView(attrView, keyValues.Key, newValue, 1, []string{}) } - existingVal := keyValues.GetValue(addingBlockID) + existingVal := keyValues.GetValue(addingItemID) if nil == existingVal { keyValues.Values = append(keyValues.Values, newValue) } else {