feat: 站点媒体库与移动端底部导航,服务测试补强
- 新增媒体库:media_library/media_thumbs 服务(WebP 缩略图)、管理端 media 页面 - 移动端底部导航 MobileTabBar 替换 MobilePostBar - 旧数据导入增强与测试、路由与登录会话/板块侧边栏测试补强 - site-doc 组件精简(移除 Breadcrumb),文档新增迁移公告说明
This commit is contained in:
@@ -38,11 +38,12 @@ var (
|
||||
adImageUploadRe = regexp.MustCompile(`(?i)^/uploads/(ads|images|brand)/[0-9a-f]{32}\.(png|jpe?g|gif|webp)$`)
|
||||
)
|
||||
|
||||
// AdDurationOption 可购时长档位
|
||||
// AdDurationOption 可购时长档位(图片 / 文字广告分别计价)
|
||||
type AdDurationOption struct {
|
||||
Days int `json:"days"`
|
||||
Label string `json:"label"`
|
||||
PriceHint string `json:"price_hint"`
|
||||
Days int `json:"days"`
|
||||
Label string `json:"label"`
|
||||
PriceHint string `json:"price_hint"` // 图片广告价格
|
||||
PriceHintText string `json:"price_hint_text"` // 文字广告价格
|
||||
}
|
||||
|
||||
// AdPaymentOption 收款方式(展示二维码,人工确认)
|
||||
@@ -68,11 +69,11 @@ func DefaultAdConfig() AdConfig {
|
||||
Enabled: true,
|
||||
PanelTitle: AdDefaultTitle,
|
||||
Durations: []AdDurationOption{
|
||||
{Days: 30, Label: "1 个月", PriceHint: ""},
|
||||
{Days: 60, Label: "2 个月", PriceHint: ""},
|
||||
{Days: 90, Label: "3 个月", PriceHint: ""},
|
||||
{Days: 180, Label: "6 个月", PriceHint: ""},
|
||||
{Days: 365, Label: "12 个月", PriceHint: ""},
|
||||
{Days: 30, Label: "1 个月", PriceHint: "", PriceHintText: ""},
|
||||
{Days: 60, Label: "2 个月", PriceHint: "", PriceHintText: ""},
|
||||
{Days: 90, Label: "3 个月", PriceHint: "", PriceHintText: ""},
|
||||
{Days: 180, Label: "6 个月", PriceHint: "", PriceHintText: ""},
|
||||
{Days: 365, Label: "12 个月", PriceHint: "", PriceHintText: ""},
|
||||
},
|
||||
Payments: []AdPaymentOption{},
|
||||
}
|
||||
@@ -116,6 +117,9 @@ func (s *AdService) loadConfig() (AdConfig, error) {
|
||||
if strings.TrimSpace(cfg.Durations[i].PriceHint) == "面议" {
|
||||
cfg.Durations[i].PriceHint = ""
|
||||
}
|
||||
if strings.TrimSpace(cfg.Durations[i].PriceHintText) == "面议" {
|
||||
cfg.Durations[i].PriceHintText = ""
|
||||
}
|
||||
}
|
||||
return cfg, nil
|
||||
}
|
||||
@@ -195,7 +199,14 @@ func normalizeAdConfig(in AdConfig) (AdConfig, error) {
|
||||
if utf8.RuneCountInString(price) > 32 {
|
||||
return AdConfig{}, ErrAdInvalid
|
||||
}
|
||||
durs = append(durs, AdDurationOption{Days: d.Days, Label: label, PriceHint: price})
|
||||
priceText := strings.TrimSpace(d.PriceHintText)
|
||||
if priceText == "面议" {
|
||||
priceText = ""
|
||||
}
|
||||
if utf8.RuneCountInString(priceText) > 32 {
|
||||
return AdConfig{}, ErrAdInvalid
|
||||
}
|
||||
durs = append(durs, AdDurationOption{Days: d.Days, Label: label, PriceHint: price, PriceHintText: priceText})
|
||||
}
|
||||
out.Durations = durs
|
||||
|
||||
|
||||
Reference in New Issue
Block a user