fix: 修复 Space 模板缺少 formatCount/str 函数导致的启动 panic

- 在 theme/loader.go FuncMap 中添加 formatCount 和 str 函数
- formatCount 将 int64 格式化为中文计数(如 2.5万)
- 控制器 ActiveFolderID 改为 uint 类型,避免模板中 str 类型比较
- 控制器传递 ActiveFolder 对象,移除模板内查找逻辑
- 清理旧模板替换残留的孤儿 HTML/SVG 代码
This commit is contained in:
2026-06-01 21:51:17 +08:00
parent d9eff2df08
commit c6da3932f3
3 changed files with 53 additions and 37 deletions

View File

@ -22,8 +22,10 @@ func LoadTemplates(roots ...TemplateRoot) (*template.Template, error) {
funcMap := template.FuncMap{
"add": func(a, b int) int { return a + b },
"subtract": func(a, b int) int { return a - b },
"formatTTL": formatTTL,
"assetV": common.AssetV,
"formatTTL": formatTTL,
"formatCount": formatCount,
"str": str,
"assetV": common.AssetV,
"substr": func(s string, start, length int) string {
runes := []rune(s)
if start >= len(runes) {
@ -100,3 +102,19 @@ func formatTTL(minutes int) string {
}
return fmt.Sprintf("%d 天 %d 小时", days, remainHours)
}
// formatCount 将 int64 数字格式化为简洁中文计数(如 "2.5万"、"70.3万"、"0"
func formatCount(n int64) string {
if n < 10000 {
return fmt.Sprintf("%d", n)
}
if n < 100000000 {
v := float64(n) / 10000.0
return fmt.Sprintf("%.1f万", v)
}
v := float64(n) / 100000000.0
return fmt.Sprintf("%.1f亿", v)
}
// str 将 uint 转为字符串,用于模板中与字符串比较
func str(n uint) string { return fmt.Sprintf("%d", n) }