Загрузка данных


(() => {
  let isSorting = false;

  const sortTable = () => {
    if (isSorting) return;

    // Ищем все строки таблицы
    let rows = Array.from(document.querySelectorAll('tbody tr')).filter(r => !r.querySelector('th'));
    let container = document.querySelector('tbody');

    if (!rows.length) {
      const badges = Array.from(document.querySelectorAll('*')).filter(el => 
        el.children.length === 0 && /(^|\s)(не\s+)?выполнено(\s|$)/i.test(el.textContent)
      );
      if (badges.length > 0) {
        let p = badges[0].parentElement;
        while (p && p.parentElement && p.parentElement.children.length < 3) p = p.parentElement;
        container = p.parentElement;
        rows = Array.from(container.children);
      }
    }

    // Берем все строки заказов
    rows = rows.filter(r => /(не\s+)?выполнено/i.test(r.innerText));
    if (!rows.length || !container) return;

    // «Не выполнено» -> 0 (наверх), «Выполнено» -> 1 (вниз)
    const getStatusPriority = (row) => {
      return (row.innerText || '').toLowerCase().includes('не выполнено') ? 0 : 1;
    };

    const getShelfNum = (row) => {
      const match = (row.innerText || '').match(/Полка[-\s]*(\d+)/i);
      return match ? parseInt(match[1], 10) : 999999;
    };

    const compareRows = (a, b) => {
      const sDiff = getStatusPriority(a) - getStatusPriority(b);
      if (sDiff !== 0) return sDiff;
      return getShelfNum(a) - getShelfNum(b);
    };

    let alreadySorted = true;
    for (let i = 0; i < rows.length - 1; i++) {
      if (compareRows(rows[i], rows[i + 1]) > 0) {
        alreadySorted = false;
        break;
      }
    }
    if (alreadySorted) return;

    isSorting = true;
    rows.sort(compareRows);
    rows.forEach(row => container.appendChild(row));

    setTimeout(() => { isSorting = false; }, 100);
  };

  sortTable();

  if (window._ozonShelfObserver) {
    window._ozonShelfObserver.disconnect();
  }
  window._ozonShelfObserver = new MutationObserver(() => {
    sortTable();
  });
  window._ozonShelfObserver.observe(document.body, { childList: true, subtree: true });

  console.log('✅ Готово! Зеленые «Выполнено» внизу, красные «Не выполнено» вверху по полкам.');
})();