diff --git a/app/src/protyle/render/av/cell.ts b/app/src/protyle/render/av/cell.ts index 2d2a6165e..70e430f59 100644 --- a/app/src/protyle/render/av/cell.ts +++ b/app/src/protyle/render/av/cell.ts @@ -1039,8 +1039,14 @@ const renderRollup = (cellValue: IAVCellValue) => { } } else if (cellValue.type === "number") { text = cellValue?.number.formattedContent || cellValue?.number.content.toString() || ""; - } else if (cellValue.type === "date") { - const dataValue = cellValue ? cellValue.date : null; + } else if (["date", "updated", "created"].includes(cellValue.type)) { + let dataValue = cellValue ? cellValue.date : null; + if (!dataValue) { + dataValue = cellValue.updated; + } + if (!dataValue) { + dataValue = cellValue.created; + } if (dataValue.formattedContent) { text = dataValue.formattedContent; } else { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index edec3f91a..13e6507a6 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1194,7 +1194,7 @@ func SearchAttributeViewNonRelationKey(avID, keyword string) (ret []*av.Key) { } for _, keyValues := range attrView.KeyValues { - if av.KeyTypeRelation != keyValues.Key.Type && av.KeyTypeRollup != keyValues.Key.Type && av.KeyTypeCreated != keyValues.Key.Type && av.KeyTypeUpdated != keyValues.Key.Type && av.KeyTypeLineNumber != keyValues.Key.Type { + if av.KeyTypeRelation != keyValues.Key.Type && av.KeyTypeRollup != keyValues.Key.Type && av.KeyTypeLineNumber != keyValues.Key.Type { if strings.Contains(strings.ToLower(keyValues.Key.Name), strings.ToLower(keyword)) { ret = append(ret, keyValues.Key) } diff --git a/kernel/sql/av.go b/kernel/sql/av.go index f51b3dd7c..b79e71eab 100644 --- a/kernel/sql/av.go +++ b/kernel/sql/av.go @@ -350,6 +350,58 @@ func fillAttributeViewAutoGeneratedValues(attrView *av.AttributeView, collection } } } + case av.KeyTypeCreated: // 渲染创建时间 + ial := map[string]string{} + block := item.GetBlockValue() + if nil != block { + ial = ials[block.Block.ID] + } + if nil == ial { + ial = map[string]string{} + } + id := itemID + if "" != ial["id"] { + id = ial["id"] + } + createdStr := id[:len("20060102150405")] + created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) + if nil == parseErr { + value.Created = av.NewFormattedValueCreated(created.UnixMilli(), 0, av.CreatedFormatNone) + value.Created.IsNotEmpty = true + } else { + value.Created = av.NewFormattedValueCreated(time.Now().UnixMilli(), 0, av.CreatedFormatNone) + } + case av.KeyTypeUpdated: // 渲染更新时间 + ial := map[string]string{} + block := item.GetBlockValue() + if nil != block { + ial = ials[block.Block.ID] + } + if nil == ial { + ial = map[string]string{} + } + updatedStr := ial["updated"] + if "" == updatedStr && nil != block { + value.Updated = av.NewFormattedValueUpdated(block.Block.Updated, 0, av.UpdatedFormatNone) + value.Updated.IsNotEmpty = true + } else { + updated, parseErr := time.ParseInLocation("20060102150405", updatedStr, time.Local) + if nil == parseErr { + value.Updated = av.NewFormattedValueUpdated(updated.UnixMilli(), 0, av.UpdatedFormatNone) + value.Updated.IsNotEmpty = true + } else { + value.Updated = av.NewFormattedValueUpdated(time.Now().UnixMilli(), 0, av.UpdatedFormatNone) + } + } + } + } + } + + for _, item := range collection.GetItems() { + for _, value := range item.GetValues() { + itemID := item.GetID() + + switch value.Type { case av.KeyTypeRollup: // 渲染汇总 rollupKey, _ := attrView.GetKey(value.KeyID) if nil == rollupKey || nil == rollupKey.Rollup { @@ -421,49 +473,6 @@ func fillAttributeViewAutoGeneratedValues(attrView *av.AttributeView, collection } } } - case av.KeyTypeCreated: // 渲染创建时间 - ial := map[string]string{} - block := item.GetBlockValue() - if nil != block { - ial = ials[block.Block.ID] - } - if nil == ial { - ial = map[string]string{} - } - id := itemID - if "" != ial["id"] { - id = ial["id"] - } - createdStr := id[:len("20060102150405")] - created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) - if nil == parseErr { - value.Created = av.NewFormattedValueCreated(created.UnixMilli(), 0, av.CreatedFormatNone) - value.Created.IsNotEmpty = true - } else { - value.Created = av.NewFormattedValueCreated(time.Now().UnixMilli(), 0, av.CreatedFormatNone) - } - case av.KeyTypeUpdated: // 渲染更新时间 - ial := map[string]string{} - block := item.GetBlockValue() - if nil != block { - ial = ials[block.Block.ID] - } - if nil == ial { - ial = map[string]string{} - } - updatedStr := ial["updated"] - if "" == updatedStr && nil != block { - value.Updated = av.NewFormattedValueUpdated(block.Block.Updated, 0, av.UpdatedFormatNone) - value.Updated.IsNotEmpty = true - } else { - updated, parseErr := time.ParseInLocation("20060102150405", updatedStr, time.Local) - if nil == parseErr { - value.Updated = av.NewFormattedValueUpdated(updated.UnixMilli(), 0, av.UpdatedFormatNone) - value.Updated.IsNotEmpty = true - } else { - value.Updated = av.NewFormattedValueUpdated(time.Now().UnixMilli(), 0, av.UpdatedFormatNone) - } - } } } }