534dafc2c0
Реальные подписи forbion (Ожидающие выполнения/Свойства/секции обзора), добавлен блок «Режимы просмотра» (архивные/компактный/обложки), отмечено отсутствие Архивные/Shared доски в мобильной навигации. Ни одной пишущей операции.
206 lines
22 KiB
Markdown
206 lines
22 KiB
Markdown
# Карта: Карточки (Deck)
|
|
|
|
Приложение «Карточки» (`/apps/deck/`) на forbion.f7cloud.ru. Структура кнопок/меню/переходов
|
|
снята **из кода** (метод mail/078): апстрим `nextcloud/deck` **v1.16.4** (`src/**/*.vue` — точная
|
|
версия с forbion, канон README) + мобильная тема forbion
|
|
(`design-reference/forbion-theme/css/pages/pages-mobile/_mobile-deck.css`,
|
|
`css/pages/app-deck/_app-deck.css`). Живой мобильный web (Browser 1, `cloude`, mail/079) — только
|
|
для визуальной сверки «как выглядит/порядок»; **строго read-only** (mail/073): ничего не
|
|
создаётся/не меняется/не удаляется. Приватность: реальные названия досок/карточек не
|
|
фиксируются — только структура UI и дерево переходов.
|
|
|
|
> Статус визуальной сверки на живом forbion: **выполнена 2026-07-12** (Browser 1, `cloude`,
|
|
> мобильный вьюпорт через same-origin iframe 390px, read-only — ни одной пишущей операции).
|
|
> Реальные русские подписи forbion внесены ниже; расхождения кода ↔ живой темы помечены
|
|
> `сверено:`. Пройдены: Обзор, Все доски, доска (Controls+стеки+карточки), сайдбар карточки.
|
|
|
|
## Компоненты-источники (nextcloud/deck v1.16.4)
|
|
Навигация: `navigation/AppNavigation.vue` (+ `AppNavigationAddBoard`, `AppNavigationBoard`,
|
|
`AppNavigationBoardCategory`, `AppNavigationImportBoard`, `BoardCloneModal`, `BoardExportModal`).
|
|
Список досок: `boards/Boards.vue`, `boards/BoardItem.vue`. Обзор: `overview/Overview.vue`
|
|
(+ `dashboard/Card.vue`, `views/DashboardToday|Tomorrow|Upcoming.vue`). Доска: `board/Board.vue`,
|
|
`board/Stack.vue`, `Controls.vue`. Карточка на доске: `cards/CardItem.vue`, `cards/CardMenu.vue`,
|
|
`cards/CardMenuEntries.vue`, `cards/CardBadges.vue`, `cards/AvatarList.vue`, `cards/badges/DueDate.vue`,
|
|
`cards/badges/CardId.vue`. Сайдбар карточки: `card/CardSidebar.vue` + табы `CardSidebarTabDetails`
|
|
(→ `TagSelector`, `AssignmentSelector`, `DueDateSelector`, `Description`, `AttachmentList`),
|
|
`CardSidebarTabAttachments`, `CardSidebarTabComments` (+ `CommentForm`, `CommentItem`),
|
|
`CardSidebarTabActivity`. Сайдбар доски: `board/BoardSidebar.vue` + `SharingTabSidebar`,
|
|
`TagsTabSidebar`, `DeletedTabSidebar`, `TimelineTabSidebar`. Диалоги: `CardMoveDialog.vue`,
|
|
`CardCreateDialog.vue`, `BoardSelector.vue`, `CardSelector.vue`. Настройки: `DeckAppSettings.vue`
|
|
(+ `KeyboardShortcuts.vue`).
|
|
|
|
## Вход
|
|
Шторка приложений (по «трём полоскам») → «Карточки», или прямой URL `/apps/deck/`. Оболочку
|
|
(нижняя панель, шторка, бургер) описывает `shell.md` (зона лида) — здесь только специфика
|
|
приложения. На мобильном (узкий вьюпорт) тема (`_mobile-deck.css`) раскладывает **доску
|
|
колонками по вертикали** (`.smooth-dnd-container.horizontal { flex-direction: column }`),
|
|
навигацию убирает под бургер/шторку навигации, а сайдбары/модалки/настройки раскрывает **на
|
|
весь экран** (`modal-container height:100%`, `modal-header` скрыт).
|
|
|
|
## Экран: Навигация приложения (левая шторка — `AppNavigation`)
|
|
На мобильном — за «бургером»/шторкой навигации приложения (не нижняя панель оболочки).
|
|
**Тело (пункты по порядку, `сверено:` подписи с forbion):**
|
|
- «**Ожидающие выполнения**» (Upcoming cards, `to="/"`) → экран «Обзор» (дашборд по срокам).
|
|
`сверено:` на forbion пункт назван «Ожидающие выполнения», это и есть лендинг приложения.
|
|
- «**Все доски**» (All boards, `to="/board"`, иконка deck) → список досок.
|
|
- Список **личных досок** (каждая — `AppNavigationBoard`, см. ниже), сгруппировано по категориям
|
|
(`AppNavigationBoardCategory`).
|
|
- «**Добавить доску**» (Add board, иконка +) → инлайн-создание: цветной bullet (палитра-пикер) +
|
|
поле «**Имя доски**» (Board name) + кнопки «Отмена правки»/«Сохранить доску». *(write — не жму.)*
|
|
- «**Импортировать доску**» (Import board, иконка upload) → диалог импорта (файл). *(write — не жму.)*
|
|
- Внизу: «**Настройки Deck**» (Deck settings, шестерёнка) → модалка настроек.
|
|
> `сверено:` в мобильной навигации forbion пунктов «**Архивные доски**» (`/board/archived`) и
|
|
> «**Доски, доступные вам**» (`/board/shared`) НЕ видно — в коде они есть (`AppNavigation`), но
|
|
> на узком вьюпорте тема их не выводит (или показывает только при непустом списке). Для нативного
|
|
> клиента это скорее плюс: паритет по видимой мобильной навигации не требует этих двух видов.
|
|
|
|
### Меню доски (⋯ на пункте доски — `AppNavigationBoard` NcActions)
|
|
Порядок пунктов из кода:
|
|
- «**Сведения о доске**» (Board details, icon-info) → открывает сайдбар доски (см. ниже).
|
|
- «**Редактировать доску**» (Edit board, icon-rename; если canManage и не архивная) →
|
|
инлайн-правка названия/цвета.
|
|
- «**Клонировать доску**» (Clone board; если canCreate) → модалка `BoardCloneModal`.
|
|
- «**Разархивировать доску**» / «**Архивировать доску**» (Unarchive/Archive board) — тумблер.
|
|
- «**Экспортировать доску**» (Export board, icon-download) → модалка `BoardExportModal`.
|
|
- «**Вкл./выкл. напоминания о сроках**» → подменю «**Напоминания о сроках**» (Due date reminders):
|
|
«Все карточки» (All cards) / «Назначенные карточки» (Assigned cards) / «Выкл.» (Off).
|
|
*(все write — не выполняю.)*
|
|
|
|
## Экран: Все доски (список — `Boards.vue`)
|
|
**Тело:** таблица-список досок. Тема (`_app-deck.css`, `_mobile-deck.css`) делает каждую строку
|
|
карточкой (border, radius 8px). Колонки-заголовки (`board-list-header-row`):
|
|
- «**Имя доски**» (Board name) — bullet цвета доски + название (тап по строке → открыть доску).
|
|
- «**Участники**» (Members) — аватары ACL (`AvatarList`; если >5 — «+N» иконкой more).
|
|
- Поле фильтра списка `navFilter` (быстрый поиск по названию доски) — `визуал(?)` (положение
|
|
на мобильной вёрстке).
|
|
**Пустое состояние:** стандартный `NcEmptyContent` (тема подставляет deck-иконку).
|
|
|
|
## Экран: Доска (`Board.vue` + `Controls.vue`)
|
|
**Шапка (`Controls`)** — `сверено:` на мобильном forbion в шапке доски 4 контрола (иконками):
|
|
- «**Добавить список**» (Add list) — инлайн-поле «**Имя списка**» (List name) + подтверждение.
|
|
*(write — не жму.)*
|
|
- «**Применить фильтр**» (иконка-воронка; активная = primary). Раскрывает поповер фильтров:
|
|
- «**Фильтр по метке**» (Filter by tag) — чекбоксы по меткам доски.
|
|
- «**Фильтр по назначенному**» (Filter by assigned user) — «Без назначения» (Unassigned) +
|
|
список пользователей доски.
|
|
- «**Фильтр по статусу**» (Filter by status) — «Открытые и выполненные» / «Открытые» / «Выполненные».
|
|
- «**Режимы просмотра**» (View modes, иконка-сетка) — `сверено:` поповер с переключателями:
|
|
«**Показывать архивные карточки**», «**Выбор компактного или обычного режима просмотра**»,
|
|
«**Показывать обложки карточек**». *(в карте кода этого блока не было — добавлено по сверке.)*
|
|
- «**Открыть подробности**» (Open details, ⋯) → сайдбар доски (Общий доступ/Метки/Удалённые/Активность).
|
|
- «**Добавить карточку**» (Add card) в коде тоже есть в Controls — на мобильном быстрый ввод идёт
|
|
из шапки колонки (см. Stack). *(write — не жму.)*
|
|
**Тело:** колонки-списки (`Stack`) по вертикали (мобильная тема), в каждой — карточки.
|
|
**Состояния:** «Загрузка доски» (Loading board) / «Доска не найдена» (Board not found) /
|
|
пусто «**Нет доступных списков**» (No lists available) + «Создать новый список, чтобы добавлять
|
|
карточки» + поле «Имя списка».
|
|
|
|
### Колонка-список (`Stack.vue`)
|
|
**Шапка колонки:**
|
|
- Заголовок списка — тап (canManage) → инлайн-правка «**Изменить заголовок списка**» (Edit list title).
|
|
- Меню колонки (⋯, `NcActions`): «**Архивировать все карточки**» (Archive all cards) /
|
|
«**Разархивировать все карточки**» (Unarchive all cards) → подтверждение
|
|
(«Архивировать все карточки в этом списке» + Архивировать/Отмена); «**Удалить список**»
|
|
(Delete list). *(все write — не выполняю.)*
|
|
- «**Добавить карточку**» (Add card) → инлайн-поле «**Имя карточки**» (Card name). *(write — не жму.)*
|
|
**Тело:** карточки (`CardItem`), drag-n-drop переносом между колонками (мышью/тачем).
|
|
|
|
### Карточка на доске (`CardItem` + `CardBadges`)
|
|
- Тап по карточке → сайдбар/деталь карточки.
|
|
- Заголовок (тап при canEdit / клавиша `E` → инлайн-правка «Edit card title»).
|
|
- Бейджи (`CardBadges`): срок (`DueDate` — цвет по просрочке, «выполнено»→галочка), счётчик
|
|
«**чек-пунктов**» (Todo items), счётчик «**комментариев**» (N comments, M unread), аватары
|
|
назначенных (`AvatarList`), ID карточки (если включён бейдж ID в настройках).
|
|
- Меню карточки (⋯ / long-press, `CardMenuEntries`): «**Сведения о карточке**» (Card details) →
|
|
сайдбар; «**Изменить заголовок**» (Edit title); «**Назначить мне**» / «**Снять назначение с
|
|
меня**» (Assign to me / Unassign myself); «**Отметить выполненной**» / «**Отметить
|
|
невыполненной**» (Mark as done / not done); «**Переместить/копировать карточку**» (Move/copy
|
|
card) → диалог; «**Архивировать**» / «**Разархивировать карточку**» (Archive/Unarchive card);
|
|
«**Удалить карточку**» (Delete card) — с тостом «Карточка удалена» + «Отменить» (undo).
|
|
*(все write — не выполняю.)*
|
|
- Клавиши на карточке: `E` правка заголовка, `S` назначить себя, archive/done по хоткею (см. настройки).
|
|
|
|
## Экран: Обзор / Предстоящие карточки (`Overview.vue`)
|
|
Дашборд карточек по срокам (`to="/"`, заголовок экрана «**Ожидающие выполнения**» + кнопка «+»),
|
|
колонки-секции (мобильная тема ставит их в столбец). `сверено:` реальные подписи forbion:
|
|
«**Просроченные**», «**Сегодня**», «**Завтра**», «**Ближайшие 7 дней**», «**Позже**»,
|
|
«**Без назначенной даты**». Каждая секция — список `dashboard/Card.vue` (карточки с меткой,
|
|
иконкой описания и ⋯). Состояние загрузки: «Загрузка отфильтрованного вида».
|
|
|
|
## Сайдбар карточки (`CardSidebar` — на мобильном во весь экран)
|
|
**Шапка:** заголовок карточки (редактируемый), меню (⋯): «**Открыть в боковом виде**» (Open in
|
|
sidebar view) / «**Открыть в большом виде**» (Open in bigger view). Подпись «Изменено … ⸱ Создано …».
|
|
**Табы (по порядку)** — `сверено:` на forbion таб Details назван «**Свойства**», далее
|
|
«**Вложения**», «**Комментарии**», «**Активность**»:
|
|
- **Свойства** (Details) — `CardSidebarTabDetails`, порядок секций (сверено на живой карточке:
|
|
метка → назначение → срок → описание):
|
|
1. «**Назначить метку карточке…**» (`TagSelector`) — комбобокс «Выбрать или создать метку…»,
|
|
можно «Создать новую метку».
|
|
2. «**Назначить пользователю/группе/команде**» (`AssignmentSelector`) — «Выбрать пользователя…».
|
|
3. «**Назначить срок карточке…**» (`DueDateSelector`) — «Установить срок» / «Добавить срок»;
|
|
быстрые опции: «Позже сегодня», «Завтра», «В эти выходные», «На след. неделе»; «**Выбрать
|
|
дату**» (Choose a date) → пикер; «**Убрать срок**» (Remove due date); «**Отметить
|
|
выполненной**» (Mark as done); при наличии — «Срок: …»/«Не выполнено»; «Архивировать
|
|
карточку».
|
|
4. (если включены проекты) блок связанных проектов (`NcCollectionList`).
|
|
5. «**Описание**» (`Description`) — «Редактировать описание» / «Просмотр описания», «Справка по
|
|
форматированию», «Добавить вложение», плейсхолдер «Напишите описание …»; статусы «(Не
|
|
сохранено)»/«(Сохранение…)».
|
|
- **Вложения** (Attachments) — `CardSidebarTabAttachments` (+ `AttachmentList`): «**Загрузить новые
|
|
файлы**» (Upload new files), «**Поделиться из Файлов**» (Share from Files); по элементу:
|
|
«Показать в Файлах», «Скачать» (Download), «Удалить вложение», «Восстановить вложение»; drop-зона
|
|
«Перетащите файлы для загрузки»; «Эта доска только для чтения».
|
|
- **Комментарии** (Comments) — `CardSidebarTabComments` (+ `CommentForm`): поле ввода + «Сохранить»;
|
|
пусто «Пока нет комментариев. Начните обсуждение!».
|
|
- **Активность** (Activity) — `CardSidebarTabActivity` (если включён Activity-апп).
|
|
*(все действия табов — write, на forbion не выполняю.)*
|
|
|
|
## Сайдбар доски (`BoardSidebar` — во весь экран на мобильном)
|
|
Табы: «**Общий доступ**» (Sharing) — `SharingTabSidebar`: «Поделиться доской с пользователем,
|
|
группой или командой …», права по ACL (Can edit / Can share / Can manage / Owner), «Передать
|
|
доску» (Transfer) с подтверждением, «Удалить» доступ; «**Метки**» (Tags) — `TagsTabSidebar`:
|
|
список меток, «Добавить новую метку», по метке — «Редактировать»/«Удалить»; «**Удалённые
|
|
элементы**» (Deleted items) — `DeletedTabSidebar`: «Удалённые списки» / «Удалённые карточки»
|
|
(восстановление); «**Активность**» (Activity). *(все write — не выполняю.)*
|
|
|
|
## Диалог: Переместить/копировать карточку (`CardMoveDialog`)
|
|
- «**Выбрать доску**» (Select a board) — комбобокс.
|
|
- «**Выбрать список**» (Select a list; «Нет доступных списков», если пусто).
|
|
- Кнопки «**Переместить карточку**» (Move card) / «**Копировать карточку**» (Copy card).
|
|
|
|
## Модалка: Настройки Deck (`DeckAppSettings` — во весь экран на мобильном)
|
|
- **Общее** (General): «**Использовать увеличенный вид карточки**» (Use bigger card view).
|
|
- **Внешний вид** (Appearance): «**Показывать бейдж ID карточки**» (Show card ID badge),
|
|
«**Показывать доски в календаре/задачах**» (Show boards in calendar/tasks).
|
|
- **Настройки администратора** (Admin settings, если админ): «Ограничить создание досок группами».
|
|
- **Комбинации клавиш** (`KeyboardShortcuts`): действия доски (Scroll sideways, навигация
|
|
стрелками, Escape закрыть карточку, Ctrl+F поиск, F фильтры, X сброс фильтров, ? справка) и
|
|
карточки (Enter/Space открыть, E правка заголовка, S назначить себя). В теме forbion секция
|
|
клавиш может быть скрыта на мобильном — `визуал(?)`.
|
|
|
|
## Расхождения с нативным клиентом (`feature/deck`) — бэклог
|
|
Нативный модуль (`DeckRepository`/`DeckScreen`/`DeckCardSheet`/`DeckViewModel`) сейчас покрывает:
|
|
список неархивных досок, доску колонками, карточки (метки/срок/исполнители-**чтение**/done/
|
|
счётчик), деталь карточки (правка названия/описания, срок через пикер, done, toggle меток,
|
|
перенос между колонками, архив, удаление), создание карточки и колонки, учёт PERMISSION_EDIT.
|
|
**Отсутствует против веба (приоритетный бэклог):**
|
|
- **Обзор/Предстоящие карточки** — дашборда по срокам (Просрочено/Сегодня/…/Без срока) нет.
|
|
- **Архивные доски** и **Доски, доступные вам** — отдельных видов нет (архивные доски просто скрыты).
|
|
- **Фильтры доски** — по метке / назначенному / статусу; поиска по доске нет.
|
|
- **Исполнители — только чтение**: нет «Назначить мне/пользователю», снятия (совпадает с долгом №1
|
|
плана mail/071, п.2).
|
|
- **Комментарии** и **Вложения** карточки — нет совсем (вложения явно в зоне, mail/065).
|
|
- **Меню/CRUD колонки**: правка заголовка списка, «Архивировать/Разархивировать все карточки»,
|
|
«Удалить список» — в приложении нет (только создание).
|
|
- **CRUD досок**: создать/править/клонировать/архивировать/экспортировать/импортировать доску —
|
|
нет; переименования колонок нет.
|
|
- **Move/copy на другую доску** — нативно только перенос между колонками одной доски.
|
|
- **Метки (Tags) доски** — управления (создать/править/удалить) нет; toggle существующих есть.
|
|
- **Sharing / Deleted items / Activity** доски — нет.
|
|
- **Быстрые опции срока** (Позже сегодня/Завтра/Выходные/След. неделя) — в пикере нет.
|
|
- **Режимы просмотра доски** (`сверено:` шапка forbion): показ архивных карточек, компактный/
|
|
обычный режим, обложки карточек — в нативном клиенте нет.
|
|
- **Напоминания о сроках** (notify-due) и **бейдж ID / увеличенный вид** из настроек — нет.
|
|
- **Undo** при удалении карточки — в вебе есть тост-отмена; в нативном удаление сразу.
|
|
- Мелочь UI: счётчики чек-пунктов и комментариев на карточке доски — не показываются.
|