diff --git a/internal/web/static/app.js b/internal/web/static/app.js index d6d23fc..9af8fba 100644 --- a/internal/web/static/app.js +++ b/internal/web/static/app.js @@ -69,20 +69,38 @@ var daysWrap = form.querySelector('[data-days-wrap]'); var countWrap = form.querySelector('[data-count-wrap]'); var endWrap = form.querySelector('[data-end-wrap]'); + var startWrap = form.querySelector('[data-start-wrap]'); + var startInput = form.querySelector('input[name="start_date"]'); if (!sel) return; function sync() { var opt = sel.options[sel.selectedIndex]; var unit = opt && opt.getAttribute('data-unit'); var amount = opt && opt.getAttribute('data-amount'); - if (unit === 'count') { - if (daysWrap) daysWrap.hidden = true; - if (countWrap) { countWrap.hidden = false; if (amount) countWrap.querySelector('input').value = amount; } - if (endWrap) endWrap.hidden = true; - } else if (unit === 'season') { + var validity = opt && parseInt(opt.getAttribute('data-validity') || '0', 10); + var endInput = endWrap && endWrap.querySelector('input'); + + if (unit === 'season') { if (daysWrap) daysWrap.hidden = true; if (countWrap) countWrap.hidden = true; if (endWrap) endWrap.hidden = true; + if (startWrap) startWrap.hidden = true; + if (startInput) startInput.required = false; + return; + } + + if (startWrap) startWrap.hidden = false; + if (startInput) startInput.required = true; + + if (unit === 'count') { + if (daysWrap) daysWrap.hidden = true; + if (countWrap) { countWrap.hidden = false; if (amount) countWrap.querySelector('input').value = amount; } + if (endWrap) endWrap.hidden = false; + if (validity > 0 && endInput && !endInput.value && startInput && startInput.value) { + var d = new Date(startInput.value + 'T00:00:00'); + d.setDate(d.getDate() + validity - 1); + endInput.value = d.toISOString().slice(0, 10); + } } else if (unit === 'day') { if (daysWrap) { daysWrap.hidden = false; if (amount) daysWrap.querySelector('input').value = amount; } if (countWrap) countWrap.hidden = true; diff --git a/internal/web/templates/pages/customer_detail.html b/internal/web/templates/pages/customer_detail.html index b4add4d..accf809 100644 --- a/internal/web/templates/pages/customer_detail.html +++ b/internal/web/templates/pages/customer_detail.html @@ -89,12 +89,12 @@ 选择套餐… {{range .D.Packages}} - + {{.Name}} · {{.UnitLabel}} {{if .Season}}{{.SeasonStart}}~{{.SeasonEnd}}{{else}}{{.DefaultAmount}}{{if eq .Unit "day"}}天{{else}}次{{end}}{{end}}{{if .SeasonExpired $.TodayStr}}(赛季已结束){{end}}{{if .Archived}}(已归档){{end}} {{end}} - 开始日 + 开始日 {{/* 默认显示 */}} diff --git a/internal/web/templates/pages/package_form.html b/internal/web/templates/pages/package_form.html index 1a703c9..1c2446b 100644 --- a/internal/web/templates/pages/package_form.html +++ b/internal/web/templates/pages/package_form.html @@ -16,7 +16,7 @@ 计费方式 * - + 按日有开始日与结束日,每天一条待打任务,可打卡 按次记录剩余次数,排期完成时自动扣 1 次,有效期可选 diff --git a/main.go b/main.go index c0784b8..b418fa6 100644 --- a/main.go +++ b/main.go @@ -26,7 +26,7 @@ import ( "daili/internal/web" ) -const version = "1.8.1" +const version = "1.8.2" func main() { cfgFlag := flag.String("config", "", "配置文件路径(默认:exe 同级的 "+config.FileName+")")