fix(v1.8.2): 套餐计费方式切换时的显示/隐藏与默认值修复
build / build-and-test (push) Successful in 3m41s

按「any → 包时 / 按次 / 包赛季」规则检查后修复 3 处问题:

1) 包赛季套餐编辑时「按日」也被勾中
   - 赛季套餐在库里 unit='day' + season=1,模板只判断了 unit,导致按日/赛季两个 radio 都带 checked
   - 修正为「unit=day 且非赛季」才勾中按日

2) 客户开通表单:选中包赛季时仍显示且必填「开始日」
   - 赛季起止由套餐决定,开始日应隐藏
   - 表单加 data-start-wrap,JS 在赛季模式隐藏并取消 required,切回其它模式恢复

3) 按次开通时没有带出套餐默认有效期
   - 套餐选项新增 data-validity,选中按次且终止日为空时,自动按「开始日 + 默认有效期 - 1」带出到期日,仍可手改

现状(已逐项验证):
- 包时:默认量单位「天」,无有效期/赛季字段
- 按次:默认量单位「次」,显示「按次默认有效期(天)」,开单自动带出到期日
- 包赛季:显示赛季开始日/结束日(必填),隐藏默认量有效期与开始日;过期套餐下拉置灰

测试:
- 转换专项 10 项全过:三种模式的勾选状态、字段显示、按日→按次→赛季→按日 往返保存均正常
- 数据库未改动结构,往返保存后 unit/season/season_start/season_end 值正确
- 版本号 1.8.2
This commit is contained in:
subtrack
2026-10-19 19:57:12 +08:00
parent bcce6bb830
commit bb923aab4d
4 changed files with 27 additions and 9 deletions
@@ -89,12 +89,12 @@
<select name="package_id" required data-pkg-select>
<option value="">选择套餐…</option>
{{range .D.Packages}}
<option value="{{.ID}}" data-unit="{{if .Season}}season{{else}}{{.Unit}}{{end}}" data-amount="{{.DefaultAmount}}"{{if .Archived}} disabled{{end}}{{if .SeasonExpired $.TodayStr}} disabled{{end}}>
<option value="{{.ID}}" data-unit="{{if .Season}}season{{else}}{{.Unit}}{{end}}" data-amount="{{.DefaultAmount}}" data-validity="{{.DefaultValidityDays}}"{{if .Archived}} disabled{{end}}{{if .SeasonExpired $.TodayStr}} disabled{{end}}>
{{.Name}} · {{.UnitLabel}} {{if .Season}}{{.SeasonStart}}~{{.SeasonEnd}}{{else}}{{.DefaultAmount}}{{if eq .Unit "day"}}天{{else}}次{{end}}{{end}}{{if .SeasonExpired $.TodayStr}}(赛季已结束){{end}}{{if .Archived}}(已归档){{end}}
</option>
{{end}}
</select>
<label class="inline-field">开始日
<label class="inline-field" data-start-wrap>开始日
<input type="date" name="start_date" value="{{.TodayStr}}" required>
</label>
<label class="inline-field" data-days-wrap>{{/* 默认显示 */}}