Commit Graph

9 Commits

Author SHA1 Message Date
Дмитрий 0c96d96784 feat(ui): subject-level regions autocomplete in NewProjectDialog + PDD (Plan 6 Task 5)
- projectsStore: Project.regions?: number[] interface field
- NewProjectDialog: replace interim placeholder с v-autocomplete (89
  subjects + federal district subtitle); form drops region_mask/region_mode
  (backend dual-writes)
- ProjectDetailsDrawer: replace maskToCodes/encode-watch с direct
  form.regions binding; same v-autocomplete component
- Vitest: +2 NewProjectDialog tests (count=89, POST payload includes regions[]);
  refactor 3 existing PDD region tests на regions[] model

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 05:54:05 +03:00
Дмитрий 0e5e5a9d30 feat(pdd): regions multi-select autocomplete + bitmask binding
Реализует Out-of-plan «Region multi-select autocomplete» из parent PDD spec.
Spec: d0ee2d8. Plan: 9e86519.

Component (ProjectDetailsDrawer.vue):
- import REGIONS из constants/regions
- selectedRegions: Ref<number[]> + selectableRegions (filter code !== 0
  для исключения «Вся РФ» sentinel — fixes latent NewProjectDialog bug)
- maskToCodes(mask): reverse-decompose bits 1..31
- reseedFromProject: +selectedRegions.value = maskToCodes(form.region_mask)
- watch(selectedRegions): forward-encode mask + mode (include при empty, exclude иначе)
- Template: v-autocomplete multi+chips+clearable между Лимитом и Днями

Tests (ProjectDetailsDrawer.spec.ts): 17 passed (14 prior + 3 new):
- renders region chips when project has non-zero region_mask
- selecting regions encodes mask + sets mode=exclude on save
- clearing all regions resets mask=0 + mode=include on save

NB: config.global.plugins = [createVuetify()] добавлен в spec.ts — v-autocomplete
требует Vuetify defaults provide context. Все 17 PDD tests + 8/1sk ProjectsView
integration green (0 regressions).

Backend без изменений (region_mask + region_mode payload уже в Task 5 onSave).
2026-05-14 17:51:56 +03:00
Дмитрий f4c17c375d feat(pdd): Delete button with confirm + archive + close 2026-05-14 14:54:55 +03:00
Дмитрий 170cd4aea2 feat(pdd): Pause/Resume button with toggleActive + dynamic label 2026-05-14 14:48:24 +03:00
Дмитрий fdb344bdc4 feat(pdd): Save action — PATCH /api/projects/{id} + 422 errors 2026-05-14 14:41:28 +03:00
Дмитрий 09dc29ee0f feat(pdd): reseed form on project.id change 2026-05-14 14:35:54 +03:00
Дмитрий 596df62289 feat(pdd): emit close on X/Cancel/ESC 2026-05-14 14:28:49 +03:00
Дмитрий 15f6f9ca5c feat(pdd): render project name/limit/days form fields 2026-05-14 14:21:07 +03:00
Дмитрий e4a0bb8cf9 test(pdd): scaffold ProjectDetailsDrawer + null-project no-open test 2026-05-14 14:13:52 +03:00