From 039a83ba87d5b6f89c637e343863253798e69cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 22 Jun 2026 11:20:17 +0400 Subject: [PATCH] =?UTF-8?q?doc:=20=D0=BF=D0=BB=D0=B0=D0=BD=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=8F=D0=B4=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=81=D0=BE=20=D1=81=D1=82=D1=80=D0=B5=D0=BB=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D0=91=D0=B0=D0=B7=D0=BE=D0=B2=D1=8B=D0=B9=20radio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/file-order-plan.md | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 History/file-order-plan.md diff --git a/History/file-order-plan.md b/History/file-order-plan.md new file mode 100644 index 0000000..1147c52 --- /dev/null +++ b/History/file-order-plan.md @@ -0,0 +1,89 @@ +# План: Порядок файлов вместо Базового radio + +**v1.0.106+** + +## Суть + +Убрать столбец «Базовый» с radio-кнопкой. Вместо этого: +- Первый файл в списке = основной договор (исходная спецификация) +- Порядок файлов определяет последовательность обработки в сравнении +- Перемещение стрелками ↑↓ +- Первая строка визуально выделена + +## UI (index.cfm) + +### Столбцы +`Имя | Изменён | Размер | Парсинг | ↕ | Текст | ✕` + +### Строка +```html + + имя + дата + размер + статус + + + + + + + +``` + +### CSS +```css +.first-row td { background: rgba(37,99,235,.05); font-weight: 600; } +.arrow-btn { cursor: pointer; color: var(--muted); background: none; border: none; padding: 2px 4px; font-size: 12px; } +.arrow-btn:hover { color: var(--brand-primary); } +.arrow-btn:disabled { opacity: .3; cursor: default; } +``` + +### JS +```js +function moveUp(i) { + if (i <= 0) return; + var tmp = fileQueue[i]; fileQueue[i] = fileQueue[i-1]; fileQueue[i-1] = tmp; + renderTable(); +} +function moveDown(i) { + if (i >= fileQueue.length - 1) return; + var tmp = fileQueue[i]; fileQueue[i] = fileQueue[i+1]; fileQueue[i+1] = tmp; + renderTable(); +} +``` + +## Бэкенд (convert_server.py) + +### Передача порядка +EventSource URL: `/process-v2?contract_id=X&order=sid1,sid2,sid3` + +### Обработка +В `_handle_process_v2`: +- Если есть `order` — обрабатывать supplements в этом порядке +- Если нет — `ORDER BY created_at` (как сейчас) + +```python +order = params.get("order", [None])[0] +if order: + ordered_ids = order.split(",") + # Переупорядочить supps по ordered_ids + supps.sort(key=lambda s: ordered_ids.index(s["id"]) if s["id"] in ordered_ids else 999) +``` + +### UI — построение order +```js +var order = fileQueue.map(function(f) { return f.supp_id; }).filter(Boolean).join(','); +var es = new EventSource('/process-v2?contract_id=' + contractId + '&order=' + order); +``` + +## Что убрать + +- `Базовый` из заголовка +- Radio-кнопки из строк +- `setInitial()` JS-функцию +- `action=set_initial` в api.cfm (опционально, не мешает) + +## Приоритет + +Сделать когда вернём все security-фиксы и деплой заработает.