Аудитории: близкие типы объединены в фильтре, добавлен пункт «без типа»
В карточке остаётся формулировка из таблицы («комп.класс Linux»), а в фильтре близкие варианты сведены к одной группе: «комп.класс» (комп.класс, комп.класс Linux, компьютерный класс), «кабинет английского» (английский, кабинет английского), «аудитория кафедры», «лекционная», «лекционно-практическая», «аудитория для практических». Добавлен пункт «без типа» — 4 аудитории, где в таблице тип не указан. Бэкенд отдаёт в /rooms-day и /rooms-free дополнительное поле type_group (room_type_group), фронт фильтрует по нему. Тесты: 160.
This commit is contained in:
@@ -469,7 +469,12 @@ function roomAttrsText(room) {
|
||||
|
||||
function roomMatchesFilter(room) {
|
||||
const filter = roomsState.filter;
|
||||
if (filter.type && (room.type || "") !== filter.type) return false;
|
||||
const group = room.type_group || "";
|
||||
if (filter.type === "__none__") {
|
||||
if (group) return false; // только аудитории без указанного типа
|
||||
} else if (filter.type && group !== filter.type) {
|
||||
return false;
|
||||
}
|
||||
const min = parseInt(filter.capacity, 10);
|
||||
if (!isNaN(min) && min > 0 && (room.capacity == null || room.capacity < min)) return false;
|
||||
const wanted = filter.equipment;
|
||||
@@ -533,7 +538,8 @@ function drawRoomsScreen(status) {
|
||||
|
||||
function roomsToolbar() {
|
||||
const all = roomsAll();
|
||||
const types = [...new Set(all.map((r) => r.type).filter(Boolean))].sort((a, b) => a.localeCompare(b, "ru"));
|
||||
// близкие формулировки типов объединены в общий тип (room_type_group)
|
||||
const types = [...new Set(all.map((r) => r.type_group).filter(Boolean))].sort((a, b) => a.localeCompare(b, "ru"));
|
||||
const filter = roomsState.filter;
|
||||
const box = document.createElement("div");
|
||||
box.className = "rooms-filters";
|
||||
@@ -553,6 +559,7 @@ function roomsToolbar() {
|
||||
<select id="rf-type">
|
||||
<option value="">все типы</option>
|
||||
${types.map((t) => `<option value="${escapeHTML(t)}"${filter.type === t ? " selected" : ""}>${escapeHTML(t)}</option>`).join("")}
|
||||
<option value="__none__"${filter.type === "__none__" ? " selected" : ""}>без типа</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="rf-field rf-narrow"><span>Мест не меньше</span>
|
||||
|
||||
Reference in New Issue
Block a user