From ff677ed780b7d9734626ed66985cce3bbf143cc1 Mon Sep 17 00:00:00 2001 From: DmitriyFadin <93384500+DmitriyFadin@users.noreply.github.com> Date: Wed, 14 Oct 2026 00:14:12 +0300 Subject: [PATCH] Add intensity percentage selector with repetition hints --- .env.example | 4 +++ README.md | 2 +- docs/verification.md | 6 +++++ .../IntensityPreset.cs | 7 +++++ .../PlannerOptions.cs | 1 + .../Components/Editor/ExerciseEditor.razor | 27 +++++++++++++++++-- src/TrainingPlanner.Web/appsettings.json | 11 ++++++++ src/TrainingPlanner.Web/wwwroot/app.css | 7 +++++ 8 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/TrainingPlanner.Application/IntensityPreset.cs diff --git a/.env.example b/.env.example index 8a3a9aa..cc21abf 100644 --- a/.env.example +++ b/.env.example @@ -45,3 +45,7 @@ Planner__UndoDeleteDurationSeconds=10 # Размер иконки камеры в PDF (пункты). Pdf__CameraSizePoints=18 + +# Пример переопределения подсказки процентов (индекс 0 — первая строка списка). +# Planner__IntensityPresets__0__Percent=100 +# Planner__IntensityPresets__0__Repetitions=1 diff --git a/README.md b/README.md index 6d760a2..366b497 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - Поиск в конфигураторе: адаптивный выпадающий список с фильтром названия и группы. Двойной клик или Enter сразу добавляет упражнение; одиночный клик выбирает его для кнопки «Добавить». Точное совпадение и начало названия выше остальных; регистр и «ё/е» не мешают поиску. - Удаление из библиотеки через корзину с подтверждением; упражнения в ранее составленных программах сохраняются. - Недели, тренировки и перемещаемые блоки. Перетаскивание за маркер или кнопки вверх/вниз. -- Общие подходы, текстовые повторения и вес; текстовые разминка и примечание; процент от максимума вручную. +- Общие подходы, текстовые повторения и вес; текстовые разминка и примечание; процент от максимума выбирается из компактного списка с подсказкой по повторениям. Подсказка не меняет поле повторений. Список задан в `Planner:IntensityPresets`; ранее сохранённые нестандартные значения сохраняются. - Отдых в минутах. Итог — количество подходов × отдых, включая последний подход. Время тренировки задаётся вручную. - Копирование блоков, тренировок, недель и всей программы. Каждое упражнение — отдельный блок; сетов нет. - Перетаскивание недель с автоматической перенумерацией и сохранением порядка. diff --git a/docs/verification.md b/docs/verification.md index 75d4c88..f3aa89d 100644 --- a/docs/verification.md +++ b/docs/verification.md @@ -115,3 +115,9 @@ - Имя скачиваемого файла: «Имя клиента — dd.MM.yyyy.pdf», дата создания программы без времени, в том же локальном времени сервера, что и история программ. Недопустимые символы имени файла заменяются подчёркиванием. - Сборка и Docker-обновление успешны. Проверен Content-Disposition с кириллическим именем клиента и форматом даты. Собственные тестовые записи удалены, скриншоты не выполнялись. + +## Список процентов — 14 октября 2026 + +- Поле процента заменено компактным списком из девяти значений с ориентиром повторений. Значения вынесены в Planner:IntensityPresets. Сохранённые нестандартные проценты отображаются отдельным пунктом. +- Локальная сборка и Docker-обновление выполнены. Без скриншотов проверены все девять значений, значение по умолчанию 80, сохранение 85 после перезагрузки и неизменность поля повторений. Собственные тестовые данные удалены. +- По уточнению пользователя убран title списка (подсказка при наведении). Сервер и его данные не затрагивались, миграций нет. diff --git a/src/TrainingPlanner.Application/IntensityPreset.cs b/src/TrainingPlanner.Application/IntensityPreset.cs new file mode 100644 index 0000000..dd0bc36 --- /dev/null +++ b/src/TrainingPlanner.Application/IntensityPreset.cs @@ -0,0 +1,7 @@ +namespace TrainingPlanner.Application; + +public class IntensityPreset +{ + public decimal Percent { get; set; } + public string Repetitions { get; set; } = string.Empty; +} diff --git a/src/TrainingPlanner.Application/PlannerOptions.cs b/src/TrainingPlanner.Application/PlannerOptions.cs index 621832f..10cdd30 100644 --- a/src/TrainingPlanner.Application/PlannerOptions.cs +++ b/src/TrainingPlanner.Application/PlannerOptions.cs @@ -4,6 +4,7 @@ public class PlannerOptions { public string DefaultWorkoutName { get; set; } = string.Empty; public string DefaultWorkoutDuration { get; set; } = string.Empty; + public List IntensityPresets { get; set; } = []; public decimal DefaultIntensityPercent { get; set; } public int DefaultWeekCount { get; set; } public int DefaultSetsCount { get; set; } diff --git a/src/TrainingPlanner.Web/Components/Editor/ExerciseEditor.razor b/src/TrainingPlanner.Web/Components/Editor/ExerciseEditor.razor index 9004d60..260cf6e 100644 --- a/src/TrainingPlanner.Web/Components/Editor/ExerciseEditor.razor +++ b/src/TrainingPlanner.Web/Components/Editor/ExerciseEditor.razor @@ -1,3 +1,5 @@ +@inject PlannerOptions Options +