This commit is contained in:
Daniel 2023-08-03 22:47:37 +08:00
parent 760598d943
commit 9a5e9f1a14
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 55 additions and 4 deletions

View file

@ -32,6 +32,8 @@ import (
"github.com/siyuan-note/filelock"
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/util"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
// AttributeView 描述了属性视图的结构。
@ -176,12 +178,51 @@ func NewFormattedValueNumber(content float64, format NumberFormat) (ret *ValueNu
}
func (number *ValueNumber) FormatNumber() {
switch number.Format {
number.FormattedContent = formatNumber(number.Content, number.Format)
}
func formatNumber(content float64, format NumberFormat) string {
switch format {
case NumberFormatNone:
number.FormattedContent = strconv.FormatFloat(number.Content, 'f', -1, 64)
return strconv.FormatFloat(content, 'f', -1, 64)
case NumberFormatCommas:
p := message.NewPrinter(language.English)
return p.Sprintf("%d", content)
case NumberFormatPercent:
s := fmt.Sprintf("%.2f", number.Content*100)
number.FormattedContent = strings.TrimRight(strings.TrimRight(s, "0"), ".") + "%"
s := fmt.Sprintf("%.2f", content*100)
return strings.TrimRight(strings.TrimRight(s, "0"), ".") + "%"
case NumberFormatUSDollar:
p := message.NewPrinter(language.English)
return p.Sprintf("$%d", content)
case NumberFormatYuan:
p := message.NewPrinter(language.Chinese)
return p.Sprintf("CN¥%d", content)
case NumberFormatEuro:
p := message.NewPrinter(language.German)
return p.Sprintf("€%d", content)
case NumberFormatPound:
p := message.NewPrinter(language.English)
return p.Sprintf("£%d", content)
case NumberFormatYen:
p := message.NewPrinter(language.Japanese)
return p.Sprintf("¥%d", content)
case NumberFormatRuble:
p := message.NewPrinter(language.Russian)
return p.Sprintf("₽%d", content)
case NumberFormatRupee:
p := message.NewPrinter(language.Hindi)
return p.Sprintf("₹%d", content)
case NumberFormatWon:
p := message.NewPrinter(language.Korean)
return p.Sprintf("₩%d", content)
case NumberFormatCanadianDollar:
p := message.NewPrinter(language.English)
return p.Sprintf("CA$%d", content)
case NumberFormatFranc:
p := message.NewPrinter(language.French)
return p.Sprintf("CHF%d", content)
default:
return strconv.FormatFloat(content, 'f', -1, 64)
}
}

View file

@ -149,6 +149,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
Sorts: view.Table.Sorts,
}
// 组装列
for _, col := range view.Table.Columns {
key, getErr := attrView.GetKey(col.ID)
if nil != getErr {
@ -169,6 +170,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
})
}
// 生成行
rows := map[string][]*av.Value{}
for _, keyValues := range attrView.KeyValues {
for _, val := range keyValues.Values {
@ -176,6 +178,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
}
}
// 过滤掉不存在的行
notFound := []string{}
for blockID, _ := range rows {
if treenode.GetBlockTree(blockID) == nil {
@ -186,6 +189,7 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
delete(rows, blockID)
}
// 生成行单元格
for rowID, row := range rows {
var tableRow av.TableRow
for _, col := range ret.Columns {
@ -207,11 +211,17 @@ func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *a
}
}
tableRow.ID = rowID
if av.KeyTypeNumber == tableCell.ValueType {
tableCell.Value.Number.FormatNumber()
}
tableRow.Cells = append(tableRow.Cells, tableCell)
}
ret.Rows = append(ret.Rows, &tableRow)
}
// 自定义排序
sortRowIDs := map[string]int{}
if 0 < len(view.Table.RowIDs) {
for i, rowID := range view.Table.RowIDs {