<div class="card-body p-2" style="font-size:11px;">
<div class="row g-2">
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Категория</label>
+ <label class="form-label fw-semibold mb-1" for="pm-filter-category" style="font-size:10px;">Категория</label>
<select class="form-select form-select-sm pm-filter" name="category" id="pm-filter-category">
<option value="">Все</option>
<?php foreach ($categories as $cat): ?>
</div>
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Подкатегория</label>
+ <label class="form-label fw-semibold mb-1" for="pm-filter-subcategory" style="font-size:10px;">Подкатегория</label>
<select class="form-select form-select-sm pm-filter" name="subcategory" id="pm-filter-subcategory"
<?= empty($subcategories) ? 'disabled' : '' ?>>
<option value="">Все</option>
</div>
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Вид</label>
+ <label class="form-label fw-semibold mb-1" for="pm-filter-species" style="font-size:10px;">Вид</label>
<select class="form-select form-select-sm pm-filter" name="species" id="pm-filter-species"
<?= empty($speciesList) ? 'disabled' : '' ?>>
<option value="">Все</option>
</div>
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Папка 1С</label>
- <select class="form-select form-select-sm pm-filter" name="folder_1c">
+ <label class="form-label fw-semibold mb-1" for="pm-filter-folder-1c" style="font-size:10px;">Папка 1С</label>
+ <select class="form-select form-select-sm pm-filter" name="folder_1c" id="pm-filter-folder-1c">
<option value="">Все</option>
<?php foreach ($folders1c as $fid => $fname): ?>
- <option value="<?= Html::encode($fid) ?>" <?= $filters->folder_1c === $fid ? 'selected' : '' ?>>
+ <option value="<?= Html::encode($fid) ?>" <?= (string)$filters->folder_1c === (string)$fid ? 'selected' : '' ?>>
<?= Html::encode($fname) ?>
</option>
<?php endforeach; ?>
</div>
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Поставщик</label>
- <select class="form-select form-select-sm pm-filter" name="supplier_id">
+ <label class="form-label fw-semibold mb-1" for="pm-filter-supplier" style="font-size:10px;">Поставщик</label>
+ <select class="form-select form-select-sm pm-filter" name="supplier_id" id="pm-filter-supplier">
<option value="">Все</option>
<?php foreach ($suppliers as $sid => $sname): ?>
<option value="<?= (int)$sid ?>" <?= (int)$filters->supplier_id === (int)$sid ? 'selected' : '' ?>>
</div>
<div class="col-md-2">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Маркировка</label>
- <select class="form-select form-select-sm pm-filter" name="marking_id">
+ <label class="form-label fw-semibold mb-1" for="pm-filter-marking" style="font-size:10px;">Маркировка</label>
+ <select class="form-select form-select-sm pm-filter" name="marking_id" id="pm-filter-marking">
<option value="">Все</option>
<?php foreach ($markings as $mid => $mlabel): ?>
<option value="<?= (int)$mid ?>" <?= (int)$filters->marking_id === (int)$mid ? 'selected' : '' ?>>
<div class="row g-2 mt-1">
<div class="col-md-4">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Поиск по названию</label>
- <input type="search" class="form-control form-control-sm pm-filter" name="search"
+ <label class="form-label fw-semibold mb-1" for="pm-filter-search" style="font-size:10px;">Поиск по названию</label>
+ <input type="search" class="form-control form-control-sm pm-filter" name="search" id="pm-filter-search"
value="<?= Html::encode($filters->search ?? '') ?>"
placeholder="Введите часть названия...">
</div>
<div class="col-md-3">
- <label class="form-label fw-semibold mb-1" style="font-size:10px;">Актуальность</label>
- <select class="form-select form-select-sm pm-filter" name="is_actual">
+ <label class="form-label fw-semibold mb-1" for="pm-filter-is-actual" style="font-size:10px;">Актуальность</label>
+ <select class="form-select form-select-sm pm-filter" name="is_actual" id="pm-filter-is-actual">
<option value="">Все</option>
<option value="1" <?= $filters->is_actual === true ? 'selected' : '' ?>>Только актуальные</option>
<option value="0" <?= $filters->is_actual === false ? 'selected' : '' ?>>Только неактуальные</option>
var pmModal = new bootstrap.Modal(document.getElementById('pm-modal'));
var editingId = null;
var searchTimer = null;
+ var cascadeXhr = null;
var loaderHtml = '<div class="text-center p-4"><i class="fa fa-spinner fa-spin fa-2x text-secondary"></i></div>';
function collectFilters() {
}
function reloadList(extraParams) {
+ // Отменяем незавершённый cascade AJAX — сервер вернёт актуальные данные
+ if (cascadeXhr) {
+ cascadeXhr.abort();
+ cascadeXhr = null;
+ }
var params = collectFilters();
if (extraParams) {
$.extend(params, extraParams);
$('#pm-filter-subcategory').html('<option value="">Все</option>').prop('disabled', !category);
$('#pm-filter-species').html('<option value="">Все</option>').prop('disabled', true);
if (category) {
- $.get(cfg.urls.cascade, {category: category}, function (data) {
+ // Показываем подкатегории быстро, до полного reload списка
+ cascadeXhr = $.get(cfg.urls.cascade, {category: category}, function (data) {
+ cascadeXhr = null;
var html = '<option value="">Все</option>';
$.each(data.subcategories, function (_, sub) {
html += '<option value="' + sub + '">' + sub + '</option>';
var sub = $(this).val();
$('#pm-filter-species').html('<option value="">Все</option>').prop('disabled', !sub);
if (cat && sub) {
- $.get(cfg.urls.cascade, {category: cat, subcategory: sub}, function (data) {
+ cascadeXhr = $.get(cfg.urls.cascade, {category: cat, subcategory: sub}, function (data) {
+ cascadeXhr = null;
var html = '<option value="">Все</option>';
$.each(data.species, function (_, sp) {
html += '<option value="' + sp + '">' + sp + '</option>';