diff --git a/docs/TEST-PLAN.md b/docs/TEST-PLAN.md index 18ceac5..f2a7923 100644 --- a/docs/TEST-PLAN.md +++ b/docs/TEST-PLAN.md @@ -201,6 +201,7 @@ - [ ] **T-WIM-01** Меню: «Импорт работ из Excel» после «Загрузить работы из сметы»; есть у роли **Е**, у **Р** (без edit0) — нет; в архивном проекте — нет; в завершённом — есть. - [ ] **T-WIM-02** Файл с несуществующим объектом → «С ошибками: 1», «Объект 2: «…» не найден внутри «…»», кнопки «Импортировать» нет. - [ ] **T-WIM-03** Тестовый файл → «Сверяем с работами объектов…» → «Будет создано работ: 1, обновлён … у существующих: 1», кнопка «Импортировать (работ: 2)». +- [ ] **T-WIM-03a** У работ, где план уже есть, — таблица «Сейчас → Станет»: изменившийся объём подсвечен со стрелкой ▲/▼ (например, «Арматура» 120 м → 150 м ▲), совпадающий — серым «без изменений». План **заменяется** значением из файла, не складывается. В окне подтверждения — «…плановый объём будет заменён значением из файла». (Проверено 2026-10-23.) - [ ] ✍️ **T-WIM-04** «Импортировать» → окно «… будет создано работ: 1, обновлено: 1» → «Сохраняем работы…» → «Импорт завершён: создано работ — 1, обновлено — 1» и ссылка «Открыть «Объекты»». (Проверено 2026-10-22.) - [ ] **T-WIM-05** «Объекты» → «Бетонирование» → «Работы»: «Арматура» — 120 м, родитель «Бетон B25» и даты не изменились; «Тестовая работа импорта» — 50 м3, верхний уровень. - [ ] ✍️ **T-WIM-06** Тот же файл ещё раз → «создано: 0, обновлено: 2» — работы не задваиваются. (Проверено 2026-10-22.) diff --git a/src/webparts/stroyBot/pages/worksImport/WorksImportPage.module.scss b/src/webparts/stroyBot/pages/worksImport/WorksImportPage.module.scss index 8a9a69f..60b1020 100644 --- a/src/webparts/stroyBot/pages/worksImport/WorksImportPage.module.scss +++ b/src/webparts/stroyBot/pages/worksImport/WorksImportPage.module.scss @@ -33,3 +33,51 @@ color: inherit; font-weight: 600; } + +// «Сейчас → станет»: изменившийся план подсвечен, совпадающий — приглушён. +.updates { + display: flex; + flex-direction: column; + gap: $sp-2; +} + +.updatesTitle { + margin: 0; + font-size: $fs-sm; + font-weight: 600; + color: $gold-600; +} + +.updatesTable { + border-collapse: collapse; + font-size: $fs-sm; + background: $white; + border: 1px solid $gray-200; + border-radius: $r-md; + + th { + padding: $sp-2 $sp-3; + border-bottom: 1px solid $gray-200; + background: $gray-50; + font-size: $fs-caption; + font-weight: 600; + text-align: left; + text-transform: uppercase; + color: $gray-500; + } + + td { + padding: $sp-2 $sp-3; + border-bottom: 1px solid $gray-100; + color: $gray-900; + } +} + +.changed { + font-weight: 600; + background: $gold-50; +} + +.unchanged td { + color: $gray-400; +} diff --git a/src/webparts/stroyBot/pages/worksImport/WorksImportStep.tsx b/src/webparts/stroyBot/pages/worksImport/WorksImportStep.tsx index d86a24d..a3c19ac 100644 --- a/src/webparts/stroyBot/pages/worksImport/WorksImportStep.tsx +++ b/src/webparts/stroyBot/pages/worksImport/WorksImportStep.tsx @@ -4,6 +4,7 @@ import { IExcelImportCheck } from '../_excelImport/excelImportTypes'; import { IWorksImportPlan } from './worksImportBuilder'; import { WorksImportStatus } from './useWorksImport'; import { WorksImportOutcome } from './WorksImportOutcome'; +import { WorksUpdatesTable } from './WorksUpdatesTable'; import { WORKS_IMPORT_TEXTS } from './texts'; import styles from './WorksImportPage.module.scss'; @@ -47,6 +48,7 @@ export const WorksImportStep: React.FC = ({ check, projectId, projectTitl return (

{TEXTS.plan(plan.toCreate.length, plan.toUpdate.length)}

+