</div>
</div>
<div class="table-wrapper">
+ <div class="loader-overlay d-none">
+ <div class="spinner-border text-primary" role="status"></div>
+ </div>
<table class="table">
<thead>
<tr class="head">
<?php foreach ($groupedCategories as $category => $subcategories): ?>
<tr>
<td class="category" style="display: flex; justify-content: flex-end;">
- <a class="list-group-item list-group-item-action">
- <?= Html::encode($category) ?> ▲
- </a>
+ <span class="list-group-item list-group-item-action">
+ <?= Html::encode($category) ?>
+ </span>
</td>
<?php foreach ($stores as $id => $storeName): ?>
<td data-store-id="<?= $id ?>" data-category="<?=$category?>"></td>
<tr>
<td class="subcategory" style="display: flex; justify-content: flex-end;">
- <a href="#" class="list-group-item list-group-item-action subcategory-link" style="width: 95%" data-category="<?= Html::encode($category) ?>" data-subcategory="<?= Html::encode($subcategory) ?>">
- <?= Html::encode($subcategory) ?> ▶
- </a>
+ <span class="list-group-item list-group-item-action" style="width: 95%" data-category="<?= Html::encode($category) ?>" data-subcategory="<?= Html::encode($subcategory) ?>">
+ <?= Html::encode($subcategory) ?>
+ </span>
</td>
<?php foreach ($stores as $id => $storeName): ?>
<td data-store-id="<?= $id ?>" data-category="<?= $category?>" data-subcategory="<?= $subcategory ?>"></td>
padding: 10px;
border-right: 2px solid #ddd;
}
+
+ .list-group-item-action {
+ color:black;
+ }
+
+ .loader-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(255, 255, 255, 0.7);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 999;
+ }
+
</style>
\ No newline at end of file
document.querySelectorAll(".category").forEach(category => {
category.addEventListener("click", function () {
- let row = this.parentElement.nextElementSibling;
+ let row = this.closest("tr").nextElementSibling;
let isOpen = row?.style.display === "table-row";
while (row && !row.querySelector(".category")) {
}
if (!isOpen) {
- row = this.parentElement.nextElementSibling;
+ row = this.closest("tr").nextElementSibling;
while (row && !row.querySelector(".category")) {
if (row.querySelector(".subcategory")) {
row.style.display = "table-row";
document.querySelectorAll(".subcategory").forEach(sub => {
sub.addEventListener("click", function (e) {
e.stopPropagation();
- let row = this.parentElement.nextElementSibling;
+ let row = this.closest("tr").nextElementSibling;
let isOpen = row?.style.display === "table-row";
while (row && !row.querySelector(".subcategory") && !row.querySelector(".category")) {
});
});
-$('.subcategory-link').on('click', function (e) {
+$('.subcategory .list-group-item').on('click', function (e) {
e.preventDefault();
window.getSelection()?.removeAllRanges();
this.blur();
filters.category = category;
filters.subcategory = subcategory;
+ $('.loader-overlay').removeClass('d-none');
+
$.get('/auto-plannogramma/get-products', filters, response => {
$row.nextAll('tr.inserted-row').remove();
const subcategoryTd = $(`
<td class="subcategory" style="display: flex; justify-content: flex-end;">
- <a href="#" class="list-group-item list-group-item-action subcategory-link"
- style="width: 90%;"
- data-category="${category}" data-subcategory="${subcategory}">
+ <span class="list-group-item list-group-item-action subcategory-link"
+ style="width: 90%;"
+ data-category="${category}" data-subcategory="${subcategory}">
${item.name}
- </a>
+ </span>
</td>
`);
tr.append(subcategoryTd);
$row.after(tr);
});
- }).fail(xhr => alert('Ошибка: ' + xhr.responseText));
+ })
+ .fail(xhr => alert('Ошибка: ' + xhr.responseText))
+ .always(() => {
+ $('.loader-overlay').addClass('d-none');
+ });
});
+//
+// $('.category .list-group-item').on('click', function () {
+// let $categorySpan = $(this);
+// let category = $categorySpan.text().trim();
+//
+// $.get('/path/to/subcategories', { category: category }, function (subcategories) {
+// // пример: subcategories = ["Зелень", "Овощи", "Фрукты"]
+//
+// // удалим уже существующие строки подкатегорий
+// $categorySpan.closest('tr').nextAll('tr').each(function () {
+// if ($(this).find('.subcategory').length > 0) {
+// $(this).remove();
+// } else {
+// return false; // как только наткнулись на следующую категорию — останавливаемся
+// }
+// });
+//
+// // вставим строки
+// let $categoryRow = $categorySpan.closest('tr');
+// $.each(subcategories, function (i, subcategory) {
+// let row = $('<tr style="display: table-row;"></tr>');
+// let td = $('<td class="subcategory" style="display: flex; justify-content: flex-end;"></td>');
+// let span = $('<span>', {
+// class: 'list-group-item list-group-item-action subcategory-link',
+// style: 'width: 95%',
+// 'data-category': category,
+// 'data-subcategory': subcategory,
+// text: subcategory
+// });
+// td.append(span);
+// row.append(td);
+//
+// // Добавим по колонке на каждый магазин
+// <?php foreach ($stores as $id => $storeName): ?>
+// row.append(
+// $('<td>', {
+// 'data-store-id': '<?= $id ?>',
+// 'data-category': category,
+// 'data-subcategory': subcategory
+// })
+// );
+// <?php endforeach; ?>
+//
+// $categoryRow.after(row);
+// $categoryRow = row; // чтобы следующий вставлялся после предыдущего
+// });
+// });
+// });
+
$('#autoplannogramma').on('input', '.input', function () {
$(this).closest('td').find('path').attr('fill', 'red');