From 692665f1000d994cb132b5ea370fa52472371ec3 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 30 Jul 2025 10:40:04 +0800 Subject: [PATCH] :art: Card view supports displaying field names https://github.com/siyuan-note/siyuan/issues/15180 --- kernel/av/layout_gallery.go | 2 ++ kernel/model/attribute_view.go | 31 +++++++++++++++++++++++++++++++ kernel/model/transaction.go | 2 ++ kernel/sql/av_gallery.go | 1 + 4 files changed, 36 insertions(+) diff --git a/kernel/av/layout_gallery.go b/kernel/av/layout_gallery.go index 817984383..f97252459 100644 --- a/kernel/av/layout_gallery.go +++ b/kernel/av/layout_gallery.go @@ -29,6 +29,7 @@ type LayoutGallery struct { CardAspectRatio CardAspectRatio `json:"cardAspectRatio"` // 卡片宽高比 CardSize CardSize `json:"cardSize"` // 卡片大小,0:小卡片,1:中卡片,2:大卡片 FitImage bool `json:"fitImage"` // 是否适应封面图片大小 + DisplayFieldName bool `json:"displayFieldName"` // 是否显示字段名称 CardFields []*ViewGalleryCardField `json:"fields"` // 卡片字段 @@ -94,6 +95,7 @@ type Gallery struct { CardAspectRatio CardAspectRatio `json:"cardAspectRatio"` // 卡片宽高比 CardSize CardSize `json:"cardSize"` // 卡片大小 FitImage bool `json:"fitImage"` // 是否适应封面图片大小 + DisplayFieldName bool `json:"displayFieldName"` // 是否显示字段名称 Fields []*GalleryField `json:"fields"` // 卡片字段 Cards []*GalleryCard `json:"cards"` // 卡片 CardCount int `json:"cardCount"` // 总卡片数 diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index f90868e69..905a4df44 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -514,6 +514,36 @@ func setAttrViewFitImage(operation *Operation) (err error) { return } +func (tx *Transaction) doSetAttrViewDisplayFieldName(operation *Operation) (ret *TxErr) { + err := setAttrViewDisplayFieldName(operation) + if err != nil { + return &TxErr{code: TxErrHandleAttributeView, id: operation.AvID, msg: err.Error()} + } + return +} + +func setAttrViewDisplayFieldName(operation *Operation) (err error) { + attrView, err := av.ParseAttributeView(operation.AvID) + if err != nil { + return + } + + view, err := getAttrViewViewByBlockID(attrView, operation.BlockID) + if err != nil { + return + } + + switch view.LayoutType { + case av.LayoutTypeTable: + return + case av.LayoutTypeGallery: + view.Gallery.DisplayFieldName = operation.Data.(bool) + } + + err = av.SaveAttributeView(attrView) + return +} + func (tx *Transaction) doSetAttrViewCardSize(operation *Operation) (ret *TxErr) { err := setAttrViewCardSize(operation) if err != nil { @@ -2503,6 +2533,7 @@ func (tx *Transaction) doDuplicateAttrViewView(operation *Operation) (ret *TxErr view.Gallery.CoverFromAssetKeyID = masterView.Gallery.CoverFromAssetKeyID view.Gallery.CardSize = masterView.Gallery.CardSize view.Gallery.FitImage = masterView.Gallery.FitImage + view.Gallery.DisplayFieldName = masterView.Gallery.DisplayFieldName view.Gallery.ShowIcon = masterView.Gallery.ShowIcon view.Gallery.WrapField = masterView.Gallery.WrapField } diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 0f65692a2..1057fed86 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -289,6 +289,8 @@ func performTx(tx *Transaction) (ret *TxErr) { ret = tx.doSetAttrViewCardSize(op) case "setAttrViewFitImage": ret = tx.doSetAttrViewFitImage(op) + case "setDisplayFieldName": + ret = tx.doSetAttrViewDisplayFieldName(op) case "setAttrViewShowIcon": ret = tx.doSetAttrViewShowIcon(op) case "setAttrViewWrapField": diff --git a/kernel/sql/av_gallery.go b/kernel/sql/av_gallery.go index d4e937b81..f09b222f4 100644 --- a/kernel/sql/av_gallery.go +++ b/kernel/sql/av_gallery.go @@ -26,6 +26,7 @@ func RenderAttributeViewGallery(attrView *av.AttributeView, view *av.View, query CardAspectRatio: view.Gallery.CardAspectRatio, CardSize: view.Gallery.CardSize, FitImage: view.Gallery.FitImage, + DisplayFieldName: view.Gallery.DisplayFieldName, Fields: []*av.GalleryField{}, Cards: []*av.GalleryCard{}, }