feat(attachments): 新增附件管理页面

This commit is contained in:
2026-06-06 22:45:48 +08:00
parent 0fca20756b
commit df3f393dd2
7 changed files with 660 additions and 6 deletions

View File

@@ -1,4 +1,5 @@
from django.contrib.auth.decorators import login_required
from django.db.models import Count, Q
from django.http import HttpRequest, HttpResponse, JsonResponse, StreamingHttpResponse
from django.shortcuts import redirect, render
from django.views.decorators.http import require_http_methods
@@ -10,7 +11,7 @@ from .services import (
send_message,
stream_message,
)
from .models import FileAttachment, FileSummaryBatch
from .models import Conversation, FileAttachment, FileSummaryBatch
@login_required
@@ -56,6 +57,38 @@ def workspace(request: HttpRequest) -> HttpResponse:
)
@login_required
@require_http_methods(["GET"])
def attachment_manager(request: HttpRequest) -> HttpResponse:
conversations = (
Conversation.objects.filter(user=request.user)
.annotate(
attachment_count=Count(
"file_attachments",
filter=~Q(file_attachments__upload_status=FileAttachment.UploadStatus.DELETED),
)
)
.order_by("-updated_at", "-id")
)
selected = get_conversation_for_user(request.user, request.GET.get("conversation"))
attachments = (
FileAttachment.objects.filter(conversation=selected)
.order_by("original_name", "-version_no")
if selected
else []
)
return render(
request,
"attachment_manager.html",
{
"page_title": "附件管理",
"conversations": conversations,
"selected_conversation": selected,
"attachments": attachments,
},
)
@login_required
@require_http_methods(["POST"])
def stream_chat(request: HttpRequest) -> HttpResponse: