From 90058a82d3d51860dfe54374f0b0b401eb631920 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Tue, 10 Feb 2026 17:06:47 +0700 Subject: [PATCH] Refine roadmap gantt layout and copy --- app/app.vue | 93 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/app/app.vue b/app/app.vue index 3bdb14d..7455a23 100644 --- a/app/app.vue +++ b/app/app.vue @@ -166,9 +166,9 @@ :nodes="flowNodes" :edges="flowEdges" :fit-view-on-init="true" - :nodes-draggable="false" + :nodes-draggable="true" :nodes-connectable="false" - :elements-selectable="false" + :elements-selectable="true" :zoom-on-scroll="false" :zoom-on-pinch="false" :pan-on-drag="false" @@ -334,53 +334,45 @@
10Roadmap
-

Пилот за 2 месяца, затем смета и приемка

+

6 месяцев, 3 этапа

- Первые два месяца уходит на запуск пилота: этапы работ, декомпозиция объема и подбор исполнителей. - Затем доводим ресурсную ведомость и смету, а в конце выстраиваем приемку с инспекторами. + М1–М2 — готовим и запускаем пилот: фиксируем этапы работ, разбираем объем на сроки и выбираем исполнителей. + М3–М4 — отрабатываем ресурсную ведомость и смету на данных пилота, уточняем объемы и цены. + М5–М6 — выстраиваем приемку с инспекторами, закрепляем регламенты и готовим масштабирование.

-
+
Этап
-
М1
-
М2
-
М3
-
М4
-
М5
-
М6
+
1
+
2
+
3
+
4
+
5
+
6
-
-
Пилот: этапы, объем, исполнители
-
М1
-
М2
-
-
-
-
+
+
Подготовка и запуск пилота
+
+
+
-
+
Ресурсная ведомость и смета
-
-
-
М3
-
М4
-
-
+
+
+
-
+
Приемка и инспекторы
-
-
-
-
-
М5
-
М6
+
+
+
@@ -469,7 +461,7 @@ const flowNodes = ref([ { id: '5', type: 'step', - position: { x: 720, y: 220 }, + position: { x: 960, y: 40 }, data: { step: '05', title: 'Эскроу и запуск', @@ -479,7 +471,7 @@ const flowNodes = ref([ { id: '6', type: 'step', - position: { x: 480, y: 220 }, + position: { x: 1200, y: 40 }, data: { step: '06', title: 'Фиксация прогресса', @@ -489,7 +481,7 @@ const flowNodes = ref([ { id: '7', type: 'step', - position: { x: 240, y: 220 }, + position: { x: 1440, y: 40 }, data: { step: '07', title: 'Приемка и расчет', @@ -502,9 +494,9 @@ const flowEdges = ref([ { id: 'e1-2', source: '1', target: '2', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, { id: 'e2-3', source: '2', target: '3', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, { id: 'e3-4', source: '3', target: '4', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, - { id: 'e4-5', source: '4', target: '5', sourceHandle: 'source-b', targetHandle: 'target-t', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, - { id: 'e5-6', source: '5', target: '6', sourceHandle: 'source-l', targetHandle: 'target-r', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, - { id: 'e6-7', source: '6', target: '7', sourceHandle: 'source-l', targetHandle: 'target-r', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed } + { id: 'e4-5', source: '4', target: '5', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, + { id: 'e5-6', source: '5', target: '6', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed }, + { id: 'e6-7', source: '6', target: '7', sourceHandle: 'source-r', targetHandle: 'target-l', type: 'smoothstep', markerEnd: MarkerType.ArrowClosed } ]) onMounted(() => { @@ -562,7 +554,7 @@ html { .flow-wrapper { width: 100%; - height: 420px; + height: 280px; overflow: hidden; } @@ -695,6 +687,25 @@ html { -webkit-backdrop-filter: blur(24px) saturate(1.15); } +.gantt-track { + position: relative; + height: 18px; + border-radius: 999px; + background: + linear-gradient(to right, rgba(20, 20, 20, 0.1) 1px, transparent 1px) 0 0 / calc(100% / 6) 100%, + rgba(20, 20, 20, 0.06); + overflow: hidden; +} + +.gantt-bar { + position: absolute; + top: 2px; + height: 14px; + border-radius: 999px; + background: linear-gradient(90deg, rgba(67, 56, 118, 0.9), rgba(102, 126, 234, 0.85)); + box-shadow: 0 6px 14px rgba(67, 56, 118, 0.25); +} + .glass-card { background: rgba(255, 255, 255, 0.42); border: 1px solid rgba(255, 255, 255, 0.45);