56 lines
5.1 KiB
Markdown
56 lines
5.1 KiB
Markdown
# Changelog
|
||
|
||
## [sync2 vibe] — 2026-03-23
|
||
|
||
### Новое: «Служебный статус в интре» — двусторонняя синхронизация
|
||
|
||
#### Колонка в таблице заявок
|
||
|
||
- Добавлена новая колонка **«Служ. статус в интре»** (`servstatus`) — отображает значение дополнительного поля `addfield_2f6eaa2vnutrennij_statusSingleSelect` из IntraDesk
|
||
- Колонка интерактивная: при наведении открывается выпадающий пикер с полным списком внутренних статусов (аналогично колонке «Статус»)
|
||
- Текущее значение подсвечивается цветом соответствующего внутреннего статуса (если совпадает по label)
|
||
- Есть пункт «— очистить» для сброса значения в IntraDesk
|
||
|
||
#### Синхронизация IntraDesk → наш статус (входящая)
|
||
|
||
- При каждом обновлении задачи в ходе инкрементального или полного сканирования проверяется значение доп. поля
|
||
- Если значение доп. поля совпадает с label одного из активных внутренних статусов — этот статус автоматически выставляется через `setExclusiveMark` (без участия пользователя)
|
||
- Управляется настройкой `sync_addfield_status` (по умолчанию выключена)
|
||
|
||
#### Синхронизация наш статус → IntraDesk (исходящая)
|
||
|
||
- При смене внутреннего статуса через `POST /api/marks` значение нового статуса (его `label`) автоматически записывается в доп. поле IntraDesk через `PUT /changes/v3/tasks/`
|
||
- Если статус снимается без замены — доп. поле очищается (`null`)
|
||
- Работает только при включённом `sync_addfield_status`
|
||
|
||
#### Прямое редактирование из UI
|
||
|
||
- Новый эндпоинт `POST /api/tasks/:taskId/intra-addfield` — позволяет записать произвольное значение в доп. поле IntraDesk напрямую, независимо от внутреннего статуса
|
||
- После успешной записи локальный кеш задачи обновляется немедленно (без ожидания следующего сканирования)
|
||
- SSE-событие `intra_addfield` рассылается всем подключённым клиентам — обновление отображается в реальном времени на других вкладках/у других пользователей
|
||
- Тост-уведомление показывается другим пользователям при изменении
|
||
|
||
#### Настройки
|
||
|
||
- Новая настройка **«Синхронизировать служебный статус с доп. полем IntraDesk (двусторонняя)»** в панели администратора → Status Automation
|
||
- Ключ: `sync_addfield_status`, булева строка `'0'`/`'1'`
|
||
|
||
#### Запуск локально
|
||
|
||
- Добавлен `docker-compose.local.yml` — compose-файл для локальной сборки из исходников (вместо пулла готового образа из registry), данные хранятся в `./data`
|
||
- Добавлен `start-local.bat` — батник для запуска локального Docker одним двойным кликом
|
||
|
||
---
|
||
|
||
### Затронутые файлы
|
||
|
||
| Файл | Изменения |
|
||
|---|---|
|
||
| `refresh-service.js` | Константа алиаса доп. поля; извлечение `_addfield_status` при fetch; `updateIntraAdditionalField()`; inbound-синхронизация в `applyStatusAutomationForChangedTasks`; `sync_addfield_status` в `normalizeSettings` |
|
||
| `server.js` | Outbound-вызов после `POST /api/marks`; новый эндпоинт `POST /api/tasks/:taskId/intra-addfield`; настройка `sync_addfield_status` в `ALLOWED_SETTINGS` и `GET/POST /api/settings` |
|
||
| `public/js/ui.js` | Колонка `servstatus` в `ALL_COLS`; функции `_addfieldBadgeHtml`, `intraAddfieldPickerHtml`, `setIntraAddfield` |
|
||
| `public/js/sse.js` | Обработчик события `intra_addfield` |
|
||
| `public/js/auth.js` | Загрузка/сохранение чекбокса `sync_addfield_status` |
|
||
| `public/index.html` | Чекбокс настройки в панели Status Automation |
|
||
| `docker-compose.local.yml` | Новый файл — compose для локальной разработки |
|
||
| `start-local.bat` | Новый файл — скрипт запуска локального Docker |
|