fix(v1.8.1): 按次显示已完成/总次数、隐藏已开通套餐、已结束订阅置灰置底
1) 按次计费显示口径 - 订阅卡片、列表、大屏 TOP 都从「剩 x / y 次」改为「已完成 x / y 次」 - 进度条改为按已用次数计算 2) 开通订阅下拉过滤 - 客户详情「开通订阅」下拉自动隐藏该客户已开通的套餐,延期只能走「追加」入口,避免新开叠加 - 若客户已开通全部套餐,下拉只剩占位项 3) 已结束订阅置灰置底 - 客户详情的订阅卡片按「进行中 → 已结束」排序,已结束排到最后 - 已结束卡片降低透明度、降低饱和度,鼠标悬停恢复部分可见 数据库:无变更 测试: - 功能验证 5 项:按次文案、已开通套餐不在下拉、未开通仍可选、已结束卡片置灰、已结束排在最后 - 119 项验收回归全绿(8 条按次断言随之更新为新口径) - 无头 Chrome 实拍客户详情页;版本号 1.8.1
This commit is contained in:
@@ -323,12 +323,32 @@ func (s *Server) handleCustomerDetail(w http.ResponseWriter, r *http.Request) {
|
||||
pauses, _ := s.db.PausesForSubs(ids)
|
||||
|
||||
users, _ := s.db.ActiveUsers()
|
||||
// 已开通的套餐不再出现在「开通订阅」下拉里,延期走追加
|
||||
owned := map[int64]bool{}
|
||||
for _, sub := range subs {
|
||||
owned[sub.PackageID] = true
|
||||
}
|
||||
available := make([]store.Package, 0, len(pkgs))
|
||||
for _, pkg := range pkgs {
|
||||
if !owned[pkg.ID] {
|
||||
available = append(available, pkg)
|
||||
}
|
||||
}
|
||||
sorted := append([]store.Subscription{}, subs...)
|
||||
sort.SliceStable(sorted, func(i, j int) bool {
|
||||
ai := sorted[i].Status == domain.StatusClosed
|
||||
aj := sorted[j].Status == domain.StatusClosed
|
||||
if ai != aj {
|
||||
return !ai
|
||||
}
|
||||
return sorted[i].ID < sorted[j].ID
|
||||
})
|
||||
data := &customerDetailData{
|
||||
Users: users,
|
||||
CustCal: s.buildCustomerCal(c, r.URL.Query().Get("cm"), today),
|
||||
Customer: c,
|
||||
Subs: subViews(subs, today, warn),
|
||||
Packages: pkgs,
|
||||
Subs: subViews(sorted, today, warn),
|
||||
Packages: available,
|
||||
Timeline: buildTimeline(subs, pauses, today),
|
||||
AdjSubName: map[int64]string{},
|
||||
AdjSubColor: map[int64]string{},
|
||||
|
||||
Reference in New Issue
Block a user