diff --git a/frontend/src/components/project/ProjectDocumentsModal.vue b/frontend/src/components/project/ProjectDocumentsModal.vue new file mode 100644 index 0000000..2d450ef --- /dev/null +++ b/frontend/src/components/project/ProjectDocumentsModal.vue @@ -0,0 +1,153 @@ + + + + + + 연동된 드라이브 폴더 {{ driveLinks.length }}개의 문서를 AI 업무 추천에 활용합니다. + + + + 연동 폴더에 문서가 없습니다. 설정에서 드라이브 폴더를 연동해 보세요. + + + + {{ fileBadgeOf(d.name).label }} + + {{ d.name }} + {{ formatBytes(d.size) }} + + + + + + + + diff --git a/frontend/src/pages/relay/ProjectDetailPage.vue b/frontend/src/pages/relay/ProjectDetailPage.vue index d0a8e60..7a00e26 100644 --- a/frontend/src/pages/relay/ProjectDetailPage.vue +++ b/frontend/src/pages/relay/ProjectDetailPage.vue @@ -12,12 +12,11 @@ import DropdownSelect from '@/components/DropdownSelect.vue' import SegmentedTabs from '@/components/common/SegmentedTabs.vue' import LoadMore from '@/components/common/LoadMore.vue' import EmptyState from '@/components/common/EmptyState.vue' -import AttachmentAiBadge from '@/components/common/AttachmentAiBadge.vue' +import ProjectDocumentsModal from '@/components/project/ProjectDocumentsModal.vue' import { useProjectStore } from '@/stores/project.store' import { useTaskStore } from '@/stores/task.store' -import { useDrive } from '@/composables/useDrive' import type { TaskListQuery, TaskSegment, TaskSort } from '@/types/task' -import { taskStatusLabel, formatBytes } from '@/shared/utils/format' +import { taskStatusLabel } from '@/shared/utils/format' import type { Project } from '@/mock/relay.mock' const route = useRoute() @@ -36,17 +35,8 @@ async function loadProject() { } } -// 연동 문서 다운로드 — 드라이브 단기 presigned URL 발급 후 다운로드 -const driveApi = useDrive() -async function downloadDoc(fileId: string): Promise { - const url = await driveApi.getDownloadUrl(fileId) - const a = document.createElement('a') - a.href = url - a.rel = 'noopener' - document.body.appendChild(a) - a.click() - a.remove() -} +// AI 검토 문서 모달 표시 여부 +const docsModalOpen = ref(false) const keyword = ref('') const segment = ref('all') @@ -187,12 +177,16 @@ const overdueCount = computed(() => tasks.value.filter((t) => t.overdue).length) :can-manage="repo.canManage" /> - + - + tasks.value.filter((t) => t.overdue).length) stroke-linecap="round" stroke-linejoin="round" > - AI 검토 문서 {{ repo.documents?.length ?? 0 }} - - - 연동된 드라이브 폴더 {{ repo.driveLinks.length }}개의 문서를 AI 업무 추천에 활용합니다. - - - - {{ d.name }} - - {{ formatBytes(d.size) }} - - - - 연동 폴더에 문서가 없습니다. - + AI 검토 문서 + {{ repo.documents?.length ?? 0 }} + + + @@ -518,76 +491,12 @@ const overdueCount = computed(() => tasks.value.filter((t) => t.overdue).length) } /* 프로젝트 문서 */ -.proj-docs { +/* AI 검토 문서 — 모달 열기 버튼 */ +.docs-bar { margin: 0.25rem 0 1rem; - padding: 0.875rem 1.125rem; - background: var(--panel); - border: 1px solid var(--border); - border-radius: 0.625rem; } -.pd-head { - display: flex; - align-items: center; - gap: 0.4375rem; - font-size: 0.8125rem; - font-weight: 700; - color: var(--text-2); - margin-bottom: 0.625rem; -} -.pd-head svg { - width: 0.9375rem; - height: 0.9375rem; - color: var(--text-3); -} -.pd-head .pd-ct { - font-size: 0.719rem; - color: var(--text-3); -} -.pd-list { - display: flex; - flex-wrap: wrap; - gap: 0.5rem; -} -.pd-sub { - font-size: 0.75rem; - color: var(--text-3); - margin: -0.25rem 0 0.625rem; -} -.pd-empty { - font-size: 0.8125rem; - color: var(--text-3); -} -.pd-item { - display: inline-flex; - align-items: center; - gap: 0.5rem; - max-width: 100%; - padding: 0.375rem 0.6875rem; - border: 1px solid var(--border); - border-radius: var(--radius); - background: #fff; - text-decoration: none; - color: inherit; - cursor: pointer; - font: inherit; - text-align: left; -} -.pd-item:hover { - background: #fafbfc; - border-color: var(--border-strong); -} -.pd-name { - font-size: 0.8125rem; - font-weight: 600; - color: var(--text); - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.pd-size { - font-size: 0.719rem; - color: var(--text-3); - flex-shrink: 0; +.docs-btn .count-pill { + margin-left: 0.125rem; } .toolbar .search { width: 15rem;
- 연동된 드라이브 폴더 {{ repo.driveLinks.length }}개의 문서를 AI 업무 추천에 활용합니다. -
- 연동 폴더에 문서가 없습니다. -