From a2152fd423d75da2683dcb5d79c1f633499b872e Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 1 Dec 2025 09:48:24 +0800 Subject: [PATCH] :art: Improve av https://github.com/siyuan-note/siyuan/issues/15563#issuecomment-3592191959 Signed-off-by: Daniel <845765@qq.com> --- kernel/av/value.go | 9 +++++++++ kernel/model/attribute_view.go | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kernel/av/value.go b/kernel/av/value.go index a206b8030..625bafe5a 100644 --- a/kernel/av/value.go +++ b/kernel/av/value.go @@ -682,6 +682,15 @@ type ValueSelect struct { Color string `json:"color"` // 1-14 } +func MSelectRemoveOption(mSelect []*ValueSelect, opt string) (ret []*ValueSelect) { + for _, s := range mSelect { + if s.Content != opt { + ret = append(ret, s) + } + } + return +} + func MSelectExistOption(mSelect []*ValueSelect, opt string) bool { for _, s := range mSelect { if s.Content == opt { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 701f8e883..d3fe1fb99 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -231,8 +231,10 @@ func getAttrViewAddingBlockDefaultValues(attrView *av.AttributeView, view, group // 因为单选或多选只能按选项分组,并且可能存在空白分组(找不到临近项),所以单选或多选类型的分组字段使用分组值内容对应的选项 if opt := groupKey.GetOption(groupView.GetGroupValue()); nil != opt && groupValueDefault != groupView.GetGroupValue() { if nil == newValue { - // 如果没有临近项,则尝试从过滤结果中获取 - newValue = ret[groupKey.ID] + newValue = ret[groupKey.ID] // 如果没有临近项,则尝试从过滤结果中获取 + } + if nil == newValue { + newValue = keyValues.GetValue(addingItemID) // 尝试从已有值中获取 } if nil != newValue { @@ -3983,6 +3985,13 @@ func sortAttributeViewRow(operation *Operation) (err error) { if targetGroupView := view.GetGroupByID(operation.TargetGroupID); nil != targetGroupView && !gulu.Str.Contains(itemID, targetGroupView.GroupItemIDs) { fillDefaultValue(attrView, view, targetGroupView, operation.PreviousID, itemID, false) + // 移除旧分组的值 + if val := attrView.GetValue(groupKey.ID, itemID); nil != val { + if av.MSelectExistOption(val.MSelect, groupView.GetGroupValue()) { + val.MSelect = av.MSelectRemoveOption(val.MSelect, groupView.GetGroupValue()) + } + } + for i, r := range targetGroupView.GroupItemIDs { if r == operation.PreviousID { previousIndex = i + 1