mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-02-09 08:44:20 +01:00
This commit is contained in:
parent
778929ddde
commit
00df78768b
9 changed files with 153 additions and 229 deletions
|
|
@ -178,37 +178,20 @@ type SelectOption struct {
|
|||
|
||||
// View 描述了视图的结构。
|
||||
type View struct {
|
||||
ID string `json:"id"` // 视图 ID
|
||||
Icon string `json:"icon"` // 视图图标
|
||||
Name string `json:"name"` // 视图名称
|
||||
HideAttrViewName bool `json:"hideAttrViewName"` // 是否隐藏属性视图名称
|
||||
Desc string `json:"desc"` // 视图描述
|
||||
ID string `json:"id"` // 视图 ID
|
||||
Icon string `json:"icon"` // 视图图标
|
||||
Name string `json:"name"` // 视图名称
|
||||
HideAttrViewName bool `json:"hideAttrViewName"` // 是否隐藏属性视图名称
|
||||
Desc string `json:"desc"` // 视图描述
|
||||
Filters []*ViewFilter `json:"filters"` // 过滤规则
|
||||
Sorts []*ViewSort `json:"sorts"` // 排序规则
|
||||
PageSize int `json:"pageSize"` // 每页条目数
|
||||
|
||||
LayoutType LayoutType `json:"type"` // 当前布局类型
|
||||
Table *LayoutTable `json:"table,omitempty"` // 表格布局
|
||||
Gallery *LayoutGallery `json:"gallery,omitempty"` // 画廊布局
|
||||
}
|
||||
|
||||
func (view *View) GetFilters() (ret []*ViewFilter) {
|
||||
switch view.LayoutType {
|
||||
case LayoutTypeTable:
|
||||
return view.Table.Filters
|
||||
case LayoutTypeGallery:
|
||||
return view.Gallery.Filters
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (view *View) GetSorts() (ret []*ViewSort) {
|
||||
switch view.LayoutType {
|
||||
case LayoutTypeTable:
|
||||
return view.Table.Sorts
|
||||
case LayoutTypeGallery:
|
||||
return view.Gallery.Sorts
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// LayoutType 描述了视图布局类型。
|
||||
type LayoutType string
|
||||
|
||||
|
|
@ -218,8 +201,7 @@ const (
|
|||
)
|
||||
|
||||
const (
|
||||
TableViewDefaultPageSize = 50 // 表格视图默认分页大小
|
||||
GalleryViewDefaultPageSize = 50 // 画廊视图默认分页大小
|
||||
ViewDefaultPageSize = 50 // 视图默认分页大小
|
||||
)
|
||||
|
||||
func NewTableView() (ret *View) {
|
||||
|
|
@ -252,6 +234,9 @@ func NewGalleryView() (ret *View) {
|
|||
ret = &View{
|
||||
ID: ast.NewNodeID(),
|
||||
Name: GetAttributeViewI18n("gallery"),
|
||||
Filters: []*ViewFilter{},
|
||||
Sorts: []*ViewSort{},
|
||||
PageSize: ViewDefaultPageSize,
|
||||
LayoutType: LayoutTypeGallery,
|
||||
Gallery: NewLayoutGallery(),
|
||||
}
|
||||
|
|
@ -416,18 +401,15 @@ func SaveAttributeView(av *AttributeView) (err error) {
|
|||
if nil != view.Table {
|
||||
// 行去重
|
||||
view.Table.RowIDs = gulu.Str.RemoveDuplicatedElem(view.Table.RowIDs)
|
||||
// 分页大小
|
||||
if 1 > view.Table.PageSize {
|
||||
view.Table.PageSize = TableViewDefaultPageSize
|
||||
}
|
||||
}
|
||||
if nil != view.Gallery {
|
||||
// 行去重
|
||||
view.Gallery.CardIDs = gulu.Str.RemoveDuplicatedElem(view.Gallery.CardIDs)
|
||||
// 分页大小
|
||||
if 1 > view.Gallery.PageSize {
|
||||
view.Gallery.PageSize = GalleryViewDefaultPageSize
|
||||
}
|
||||
}
|
||||
|
||||
// 分页大小
|
||||
if 1 > view.PageSize {
|
||||
view.Table.PageSize = ViewDefaultPageSize
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -595,31 +577,25 @@ func (av *AttributeView) Clone() (ret *AttributeView) {
|
|||
for _, view := range ret.Views {
|
||||
view.ID = ast.NewNodeID()
|
||||
view.Table.ID = ast.NewNodeID()
|
||||
|
||||
for _, f := range view.Filters {
|
||||
f.Column = keyIDMap[f.Column]
|
||||
}
|
||||
for _, s := range view.Sorts {
|
||||
s.Column = keyIDMap[s.Column]
|
||||
}
|
||||
|
||||
switch view.LayoutType {
|
||||
case LayoutTypeTable:
|
||||
for _, column := range view.Table.Columns {
|
||||
column.ID = keyIDMap[column.ID]
|
||||
}
|
||||
view.Table.RowIDs = []string{}
|
||||
|
||||
for _, f := range view.Table.Filters {
|
||||
f.Column = keyIDMap[f.Column]
|
||||
}
|
||||
for _, s := range view.Table.Sorts {
|
||||
s.Column = keyIDMap[s.Column]
|
||||
}
|
||||
case LayoutTypeGallery:
|
||||
for _, cardField := range view.Gallery.CardFields {
|
||||
cardField.ID = keyIDMap[cardField.ID]
|
||||
}
|
||||
view.Gallery.CardIDs = []string{}
|
||||
|
||||
for _, f := range view.Gallery.Filters {
|
||||
f.Column = keyIDMap[f.Column]
|
||||
}
|
||||
for _, s := range view.Gallery.Sorts {
|
||||
s.Column = keyIDMap[s.Column]
|
||||
}
|
||||
}
|
||||
}
|
||||
ret.ViewID = ret.Views[0].ID
|
||||
|
|
|
|||
|
|
@ -17,14 +17,69 @@
|
|||
package av
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/88250/lute/ast"
|
||||
"github.com/siyuan-note/logging"
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
"time"
|
||||
)
|
||||
|
||||
func UpgradeSpec(av *AttributeView) {
|
||||
upgradeSpec1(av)
|
||||
upgradeSpec2(av)
|
||||
}
|
||||
|
||||
func upgradeSpec2(av *AttributeView) {
|
||||
if 2 <= av.Spec {
|
||||
return
|
||||
}
|
||||
|
||||
// 如果存在 view.table.filters/sorts/pageSize 则复制覆盖到 view.filters/sorts/pageSize 下后置空
|
||||
for _, view := range av.Views {
|
||||
if 1 > len(view.Filters) {
|
||||
view.Filters = []*ViewFilter{}
|
||||
}
|
||||
if 1 > len(view.Sorts) {
|
||||
view.Sorts = []*ViewSort{}
|
||||
}
|
||||
if 1 > view.PageSize {
|
||||
view.PageSize = ViewDefaultPageSize
|
||||
}
|
||||
|
||||
if nil != view.Table {
|
||||
if 0 < len(view.Table.Filters) {
|
||||
view.Filters = append(view.Filters, view.Table.Filters...)
|
||||
view.Table.Filters = nil
|
||||
}
|
||||
if 0 < len(view.Table.Sorts) {
|
||||
view.Sorts = append(view.Sorts, view.Table.Sorts...)
|
||||
view.Table.Sorts = nil
|
||||
}
|
||||
if 0 < view.Table.PageSize {
|
||||
view.PageSize = view.Table.PageSize
|
||||
view.Table.PageSize = 0
|
||||
}
|
||||
}
|
||||
|
||||
// 清理过滤和排序规则中不存在的键
|
||||
tmpFilters := []*ViewFilter{}
|
||||
for _, f := range view.Filters {
|
||||
if k, _ := av.GetKey(f.Column); nil != k {
|
||||
tmpFilters = append(tmpFilters, f)
|
||||
}
|
||||
}
|
||||
view.Filters = tmpFilters
|
||||
|
||||
tmpSorts := []*ViewSort{}
|
||||
for _, s := range view.Sorts {
|
||||
if k, _ := av.GetKey(s.Column); nil != k {
|
||||
tmpSorts = append(tmpSorts, s)
|
||||
}
|
||||
}
|
||||
view.Sorts = tmpSorts
|
||||
}
|
||||
|
||||
av.Spec = 2
|
||||
}
|
||||
|
||||
func upgradeSpec1(av *AttributeView) {
|
||||
|
|
|
|||
|
|
@ -20,11 +20,13 @@ import "sort"
|
|||
|
||||
// BaseLayout 描述了布局的基础结构。
|
||||
type BaseLayout struct {
|
||||
Spec int `json:"spec"` // 布局格式版本
|
||||
ID string `json:"id"` // 布局 ID
|
||||
Filters []*ViewFilter `json:"filters"` // 过滤规则
|
||||
Sorts []*ViewSort `json:"sorts"` // 排序规则
|
||||
PageSize int `json:"pageSize"` // 每页条目数
|
||||
Spec int `json:"spec"` // 布局格式版本
|
||||
ID string `json:"id"` // 布局 ID
|
||||
|
||||
// 以下三个字段已经废弃,计划于 2026 年 6 月 30 日后删除 https://github.com/siyuan-note/siyuan/issues/15162
|
||||
Filters []*ViewFilter `json:"filters,omitempty"` // 过滤规则
|
||||
Sorts []*ViewSort `json:"sorts,omitempty"` // 排序规则
|
||||
PageSize int `json:"pageSize,omitempty"` // 每页条目数
|
||||
}
|
||||
|
||||
// BaseValue 描述了字段值的基础结构。
|
||||
|
|
|
|||
|
|
@ -43,11 +43,8 @@ func (layoutGallery *LayoutGallery) GetItemIDs() (ret []string) {
|
|||
func NewLayoutGallery() *LayoutGallery {
|
||||
return &LayoutGallery{
|
||||
BaseLayout: &BaseLayout{
|
||||
Spec: 0,
|
||||
ID: ast.NewNodeID(),
|
||||
Filters: []*ViewFilter{},
|
||||
Sorts: []*ViewSort{},
|
||||
PageSize: GalleryViewDefaultPageSize,
|
||||
Spec: 0,
|
||||
ID: ast.NewNodeID(),
|
||||
},
|
||||
CoverFrom: CoverFromContentImage,
|
||||
CardAspectRatio: CardAspectRatio16_9,
|
||||
|
|
|
|||
|
|
@ -35,11 +35,8 @@ func (layoutTable *LayoutTable) GetItemIDs() (ret []string) {
|
|||
func NewLayoutTable() *LayoutTable {
|
||||
return &LayoutTable{
|
||||
BaseLayout: &BaseLayout{
|
||||
Spec: 0,
|
||||
ID: ast.NewNodeID(),
|
||||
Filters: []*ViewFilter{},
|
||||
Sorts: []*ViewSort{},
|
||||
PageSize: TableViewDefaultPageSize,
|
||||
Spec: 0,
|
||||
ID: ast.NewNodeID(),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue