Initial QOffice implementation

This commit is contained in:
Курнат Андрей
2026-06-01 05:31:05 +03:00
commit 9bf4dd3672
44 changed files with 16854 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
import type { QOfficeState } from "../types";
export const initialState: QOfficeState = {
activeApp: "word",
word: {
id: "qword-project-proposal",
title: "Проектное предложение.qdocx",
updatedAt: new Date().toISOString(),
html: `
<h1>Проектное предложение</h1>
<h2>1. Обзор</h2>
<p>Документ описывает цели, область работ, сроки и ожидаемые результаты предлагаемого проекта.</p>
<h2>2. Цели</h2>
<p><span style="color: #0f5fae;">Ключевой результат</span>: <span style="background-color: #fff2cc;">подготовить проверяемую версию офисного пакета</span> с импортом и экспортом документов Microsoft Office.</p>
<ul>
<li>Поставить масштабируемое и сопровождаемое решение.</li>
<li>Повысить операционную эффективность.</li>
<li>Обеспечить безопасность данных и соответствие требованиям.</li>
<li>Показать измеримую бизнес-ценность.</li>
</ul>
<h2>3. Область работ</h2>
<p>Проект включает анализ требований, проектирование системы, разработку, тестирование, внедрение и сопровождение после запуска.</p>
<p>Дополнительные материалы доступны по <a href="https://example.com/qoffice/project">ссылке проекта</a>.</p>
<table>
<thead>
<tr><th>Этап</th><th>Описание</th><th>Ответственный</th></tr>
</thead>
<tbody>
<tr><td>Планирование</td><td>Требования и календарный план</td><td>Алиса К.</td></tr>
<tr><td>Проектирование</td><td>Архитектура и UX</td><td>Борис Л.</td></tr>
<tr><td>Поставка</td><td>Разработка и контроль качества</td><td>Карина М.</td></tr>
</tbody>
</table>
`
},
workbook: {
id: "qexcell-quarter-plan",
title: "Квартальный план.qxlsx",
updatedAt: new Date().toISOString(),
activeSheet: "sheet-1",
sheets: [
{
id: "sheet-1",
name: "Revenue",
cells: {
A1: "Продукт",
B1: "1 кв.",
C1: "2 кв.",
D1: "3 кв.",
E1: "Итого",
A2: "Базовый",
B2: "12500",
C2: "14300",
D2: "16800",
E2: "=SUM(B2:D2)",
A3: "Команды",
B3: "8200",
C3: "9100",
D3: "9900",
E3: "=SUM(B3:D3)",
A4: "Корпоративный",
B4: "19600",
C4: "21400",
D4: "23800",
E4: "=SUM(B4:D4)",
A6: "Общий итог",
E6: "=SUM(E2:E4)",
A8: "Объединённая строка примечания"
},
mergedCells: [{ start: "A8", end: "E8" }],
cellFormats: {
B2: { numberFormat: "# ##0.00 ₽" },
C2: { numberFormat: "# ##0.00 ₽" },
D2: { numberFormat: "# ##0.00 ₽" },
E2: { numberFormat: "# ##0.00 ₽" },
B3: { numberFormat: "# ##0.00 ₽" },
C3: { numberFormat: "# ##0.00 ₽" },
D3: { numberFormat: "# ##0.00 ₽" },
E3: { numberFormat: "# ##0.00 ₽" },
B4: { numberFormat: "# ##0.00 ₽" },
C4: { numberFormat: "# ##0.00 ₽" },
D4: { numberFormat: "# ##0.00 ₽" },
E4: { numberFormat: "# ##0.00 ₽" },
E6: { numberFormat: "# ##0.00 ₽" }
},
charts: [
{
id: "chart-revenue-total",
type: "bar",
title: "Итого по продуктам",
labelRange: "A2:A4",
valueRange: "E2:E4"
}
]
}
]
},
deck: {
id: "qpowerpoint-roadmap",
title: "Дорожная карта.qpptx",
updatedAt: new Date().toISOString(),
activeSlideId: "slide-1",
slides: [
{
id: "slide-1",
title: "Дорожная карта QOffice",
subtitle: "Единая рабочая среда для документов, данных, презентаций и коммуникации.",
notes: "Начать с цели продукта и текущего этапа.",
theme: "classic"
},
{
id: "slide-2",
title: "Модули продукта",
subtitle: "QWord, QExcell, QPowerPoint и QOutlook используют общую оболочку и модель хранения.",
notes: "Описать общую архитектуру и навигацию между модулями.",
theme: "ocean"
},
{
id: "slide-3",
title: "Следующий этап",
subtitle: "Импорт и экспорт файлов, совместная работа, аудит доступности и подпись пакетов.",
notes: "Завершить последовательностью реализации.",
theme: "graphite"
}
]
},
mail: {
activeFolder: "inbox",
activeMessageId: "mail-1",
messages: [
{
id: "mail-1",
folder: "inbox",
from: "Мария Чен",
to: "product@qoffice.local",
subject: "Контрольный список запуска",
body: "Пожалуйста, проверьте этапы редакторов, цели упаковки и ответственных за качество до пятницы.",
time: "09:24",
read: false,
flagged: true,
attachments: [
{
id: "attachment-launch-checklist-1",
fileName: "launch-checklist.txt",
contentType: "text/plain",
size: 37,
contentBase64: "0J/RgNC+0LLQtdGA0LjRgtGMIERPQ1gvWExTWC9QUFRYL0VNTA==",
disposition: "attachment"
}
]
},
{
id: "mail-2",
folder: "inbox",
from: "Иван Белл",
to: "product@qoffice.local",
subject: "Проверка формул таблиц",
body: "Последний слой таблиц поддерживает диапазоны, основные агрегатные функции, числовые форматы и базовые диаграммы. Следующий шаг — расширение fidelity сложных книг.",
time: "Вчера",
read: true,
flagged: false
},
{
id: "mail-3",
folder: "sent",
from: "product@qoffice.local",
to: "team@qoffice.local",
subject: "Заметки дизайн-ревью",
body: "Я отправил наблюдения по оболочке, ленте команд, инспектору и строке состояния после последнего ревью.",
time: "Пн",
read: true,
flagged: false
}
]
}
};