UI: справочники типа места находки / кто нашёл / направление — единые селекты

- constants.js: LOCATION_TYPES (дорога/тропа/лес/дом-стройка/вода-берег/поле/
  не указано), WHO_FOUND_TYPES, FOUND_DIRECTIONS (8 румбов).
- Модал завершения поиска: тип места, кто нашёл, направление — селекты вместо
  свободного ввода (данные пригодны для матобработки архива без нормализации).
- Архив /admin (ClosedCases): «Кто нашёл» → тот же селект; LOCATION_TYPES
  вынесен в общий модуль.
This commit is contained in:
2026-09-09 22:08:25 +03:00
parent 91fe8358ac
commit 6e9dfe8a6f
3 changed files with 26 additions and 7 deletions
+14 -4
View File
@@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
import SearchMap from '../../components/SearchMap';
import { apiFetch } from "../../api/client";
import { LOCATION_TYPES, WHO_FOUND_TYPES, FOUND_DIRECTIONS } from "../../constants";
import "./AnalysisResult.css";
const GENDER_LABEL = { m: 'М', f: 'Ж' };
@@ -457,17 +458,26 @@ const AnalysisResult = () => {
<label>Дистанция, км
<input type="number" step="0.1" value={completeForm.found_distance_km} onChange={(e) => setCompleteForm({ ...completeForm, found_distance_km: e.target.value })} />
</label>
<label>Направление (N/NE/E/...)
<input value={completeForm.found_direction} onChange={(e) => setCompleteForm({ ...completeForm, found_direction: e.target.value })} />
<label>Направление от ТНП
<select value={completeForm.found_direction} onChange={(e) => setCompleteForm({ ...completeForm, found_direction: e.target.value })}>
<option value="">—</option>
{FOUND_DIRECTIONS.map((o) => <option key={o} value={o}>{o}</option>)}
</select>
</label>
<label>Кто нашёл
<input value={completeForm.who_found} onChange={(e) => setCompleteForm({ ...completeForm, who_found: e.target.value })} />
<select value={completeForm.who_found} onChange={(e) => setCompleteForm({ ...completeForm, who_found: e.target.value })}>
<option value="">—</option>
{WHO_FOUND_TYPES.map((o) => <option key={o} value={o}>{o}</option>)}
</select>
</label>
<label>Длительность поиска, ч
<input type="number" step="0.5" value={completeForm.search_duration_hours} onChange={(e) => setCompleteForm({ ...completeForm, search_duration_hours: e.target.value })} />
</label>
<label>Тип места находки
<input value={completeForm.found_location_type} onChange={(e) => setCompleteForm({ ...completeForm, found_location_type: e.target.value })} />
<select value={completeForm.found_location_type} onChange={(e) => setCompleteForm({ ...completeForm, found_location_type: e.target.value })}>
<option value="">—</option>
{LOCATION_TYPES.map((o) => <option key={o} value={o}>{o}</option>)}
</select>
</label>
</div>
{completeResult && (