diff --git a/docs/TZ.md b/docs/TZ.md index 5ea881d..efab726 100644 --- a/docs/TZ.md +++ b/docs/TZ.md @@ -92,12 +92,12 @@ поля тоже показываются («— не указано») и редактируются кликом. То же — на странице проекта (название, заметка, актуальность, приоритет). Полный режим правки (вся форма целиком) сохраняется наряду с инлайном. -- **README вместо описания-ссылки** (0.41): если описание задачи состоит из одной - ссылки на git-репозиторий, на странице задачи вместо неё показывается +- **README вместо описания-ссылки** (0.41): если описание задачи **или заметка + проекта** состоит из одной ссылки на git-репозиторий, вместо неё показывается `README.md` из репозитория (с подписью-ссылкой на источник). Хост не обязан быть GitHub/GitLab — селф-хостед системы ищутся эвристикой (API github/gitlab/gitea + raw-пути web-интерфейсов, дефолтная ветка HEAD); не нашли — остаётся ссылка. - Сырое описание в БД не меняется; кэш прочтённого README — 10 минут. + Сырой текст в БД не меняется; кэш прочтённого README — 10 минут. ### 3.4. Статусы, дедлайны, прогнозы, бюджет diff --git a/frontend/src/views/ProjectView.vue b/frontend/src/views/ProjectView.vue index 20312d1..594f42b 100644 --- a/frontend/src/views/ProjectView.vue +++ b/frontend/src/views/ProjectView.vue @@ -157,6 +157,28 @@ const noteHtml = computed(() => (project.value ? renderMarkdown(project.value.note) : '')) +// Заметка — только ссылка на репозиторий → показываем README.md оттуда +// (как в описании задачи: сырое не меняем, не нашли — остаётся заметка) +const noteReadmeUrl = computed(() => { + const note = project.value?.note.trim() ?? '' + return /^https?:\/\/\S+$/.test(note) ? note : '' +}) +const noteReadme = ref('') +const noteReadmeHtml = computed(() => (noteReadme.value ? renderMarkdown(noteReadme.value) : '')) +watch( + noteReadmeUrl, + async (url) => { + noteReadme.value = '' + if (!url) return + try { + noteReadme.value = (await api.getRepoReadme(url)).content + } catch { + // README не нашли — остаётся заметка-ссылка + } + }, + { immediate: true }, +) + // Клик по картинке в заметке → просмотр на весь экран const noteImage = ref<{ url: string; name: string } | null>(null) @@ -574,8 +596,15 @@