fix: Rock Token 超时按满 2/3 天判定并统一显示口径

This commit is contained in:
2026-11-10 17:25:59 +08:00
parent 162745082b
commit 227d4b93ad
9 changed files with 190 additions and 23 deletions
@@ -121,6 +121,39 @@ func rockOverdueCutoff(now time.Time, days int) time.Time {
return now.AddDate(0, 0, -days)
}
// applyRockTokenOverdueFlags 用与筛选、统计完全相同的 now 和阈值,
// 为列表补充超时标记与实际天数,避免前端用本地时间算出「显示 2.0 天但未超时」。
func applyRockTokenOverdueFlags(tokens []model.RockToken, now time.Time, warnDays, dangerDays, boundWarnDays int) {
usingCutoff := rockOverdueCutoff(now, warnDays)
dangerCutoff := rockOverdueCutoff(now, dangerDays)
boundCutoff := rockOverdueCutoff(now, boundWarnDays)
for i := range tokens {
switch tokens[i].Status {
case model.RockStatusUsing:
if tokens[i].UsingAt == nil {
continue
}
days := now.Sub(*tokens[i].UsingAt).Hours() / 24
if days < 0 {
days = 0
}
tokens[i].UsingDays = days
tokens[i].UsingOverdue = !tokens[i].UsingAt.After(usingCutoff)
tokens[i].UsingDanger = !tokens[i].UsingAt.After(dangerCutoff)
case model.RockStatusBound:
if tokens[i].BoundAt == nil {
continue
}
days := now.Sub(*tokens[i].BoundAt).Hours() / 24
if days < 0 {
days = 0
}
tokens[i].BoundDays = days
tokens[i].BoundOverdue = !tokens[i].BoundAt.After(boundCutoff)
}
}
}
// applyRockTokenListFilters 与 Token 列表使用同一套筛选条件,避免“看到多少、删多少”不一致。
// 列表、删除预览、全部删除、回收站共用;now 由调用方传入以便同一请求内阈值一致。
func applyRockTokenListFilters(db *gorm.DB, status, search string, now time.Time, warnDays, boundWarnDays int) *gorm.DB {