Весь контент перенесён в content/yasha/ (7 подразделов). Создан content/semen/ с подразделами: changelog, kb, diary. Навигация — dropdown в навбаре, двухуровневое меню в hugo.toml. Шаблоны, сайдбар, поиск обновлены под вложенные секции.
104 lines
5.6 KiB
Markdown
104 lines
5.6 KiB
Markdown
---
|
||
title: "Leadera — Экспорт диаграммы Ганта в Excel"
|
||
date: 2026-04-09
|
||
lastmod: 2026-04-09
|
||
tags: ["leadera", "gantt", "excel", "export"]
|
||
weight: 120
|
||
---
|
||
|
||
# Экспорт диаграммы Ганта в Excel
|
||
|
||
**Дата:** 09.04.2026
|
||
**Статус:** Требования
|
||
**Проект:** Leadera
|
||
|
||
---
|
||
|
||
## Общее описание
|
||
|
||
Пользователь нажимает кнопку экспорта в интерфейсе диаграммы Ганта. Система запрашивает диапазон дат выгрузки (по умолчанию — текущий видимый диапазон из интерфейса). После указания диапазона скачивается Excel-файл с визуальным представлением диаграммы Ганта.
|
||
|
||
---
|
||
|
||
## Вводные данные
|
||
|
||
- **Источник:** текущая диаграмма Ганта проекта (один проект = одна диаграмма)
|
||
- **Диапазон дат:** пользователь указывает начальную и конечную дату. По умолчанию подставляется видимый в момент запроса диапазон из интерфейса
|
||
- **Масштаб таймлайна:** берётся тот, который выбран пользователем в интерфейсе в момент запроса (не сохранённый в системе, а текущий). Варианты: по ячейкам или по дням
|
||
|
||
---
|
||
|
||
## Структура Excel-файла
|
||
|
||
### Шапка (первые строки)
|
||
- Название диаграммы (название проекта)
|
||
- Диапазон дат, в рамках которого сделана выгрузка
|
||
|
||
### Лист — один
|
||
|
||
Вся диаграмма размещается на одном листе.
|
||
|
||
### Секции
|
||
- Секции отображаются как **визуальная группировка строк** (не отдельные листы)
|
||
- Название секции — строка-заголовок над группой задач
|
||
|
||
### Задачи
|
||
Каждая задача — отдельная строка. Данные задачи:
|
||
- **Название** (текстовая колонка слева)
|
||
- **Дата начала** (текстовая колонка слева)
|
||
- **Дата конца** (текстовая колонка слева)
|
||
- **Цвет** — ячейки таймлайна, соответствующие задаче, закрашены в цвет задачи
|
||
|
||
### Таймлайн
|
||
- Таймлайн представлен колонками дат в верхней части (горизонтальная ось времени)
|
||
- Масштаб колонок соответствует выбранному пользователем в момент экспорта (по ячейкам / по дням)
|
||
- Задачи отображаются как **merged cells** по соответствующим колонкам дат — визуальная полоса диаграммы Ганта
|
||
|
||
### Вехи
|
||
- Отображаются **отдельной строкой** (как задача, но с маркировкой вехи)
|
||
- Позиционируются на соответствующей дате в таймлайне
|
||
|
||
### Зависимости
|
||
- **Не отображаются** (стрелочки/связи между задачами не нужны)
|
||
|
||
---
|
||
|
||
## Пользовательский сценарий
|
||
|
||
1. Пользователь открывает диаграмму Ганта проекта
|
||
2. Настраивает масштаб таймлайна (по ячейкам / по дням)
|
||
3. Нажимает кнопку «Экспорт в Excel»
|
||
4. Система показывает диалог с выбором диапазона дат (предзаполнен текущим видимым диапазоном)
|
||
5. Пользователь подтверждает / корректирует диапазон
|
||
6. Система генерирует Excel-файл и инициирует скачивание
|
||
|
||
---
|
||
|
||
## Технические требования
|
||
|
||
### Backend (Go API)
|
||
- Новый endpoint для генерации Excel (например, `GET /api/v1/gantt/:projectId/export`)
|
||
- Query-параметры: `dateFrom`, `dateTo`, `scale` (cell|day)
|
||
- Ответ: binary Excel-файл (`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`)
|
||
- Авторизация: обязательна (только участники проекта)
|
||
- Библиотека для генерации Excel: `excelize` (Go)
|
||
|
||
### Frontend (Angular)
|
||
- Кнопка экспорта в тулбаре диаграммы Ганта
|
||
- Модальное окно выбора диапазона дат с datepicker'ами
|
||
- Предзаполнение диапазона из текущего видимого viewport'а
|
||
- Скачивание файла через `Blob` / `saveAs`
|
||
|
||
### Фильтрация данных
|
||
- Выгружаются все задачи и вехи, которые:
|
||
- Начинаются в диапазоне, ИЛИ
|
||
- Заканчиваются в диапазоне, ИЛИ
|
||
- Начинаются до диапазона и заканчиваются после (перекрывают целиком)
|
||
- Секции включаются, если в них есть хотя бы одна попавшая задача
|
||
|
||
---
|
||
|
||
## Открытые вопросы
|
||
|
||
_(Нет)_
|