from django.contrib import messages from django.shortcuts import get_object_or_404, redirect, render from django.views.decorators.http import require_POST from apps.scenarios.services import list_scenarios from .forms import DocumentUploadForm from .models import UploadedDocument from .services import ( build_document_list_context, import_submission_batch, index_document, ) def document_list(request): # 资料包页展示批次、会话绑定和关键异常,同时保留文档级明细便于演示。 context = build_document_list_context(keyword=(request.GET.get("keyword") or "").strip()) return render(request, "documents/document_list.html", context) def upload(request): # 上传成功后直接创建资料包并绑定主会话。 if request.method == "POST": form = DocumentUploadForm(request.POST, request.FILES) if form.is_valid(): result = import_submission_batch( form.cleaned_data["scenario_id"], form.cleaned_data["uploaded_files"], ) messages.success( request, f"资料包已导入,已绑定会话 {result['conversation_id']}。", ) return redirect("documents:list") else: form = DocumentUploadForm() return render( request, "documents/upload.html", { "form": form, "scenarios": list_scenarios(), "upload_checks": [ "文件格式支持 PDF、DOCX、MD、TXT、ZIP、7Z 与 RAR 资料包", "业务资料与法规依据资料需分开归属", "支持一次上传多份文件并归并到同一个资料包", "目录类文件会优先参与完整性校验", "上传完成后建议立即进入解析与入库流程", ], }, ) @require_POST def index(request, document_id: int): document = get_object_or_404(UploadedDocument, pk=document_id) document = index_document(document) if document.status == UploadedDocument.STATUS_INDEXED: messages.success(request, "文档入库成功,当前文档已可参与检索。") else: messages.error(request, "文档入库失败,请检查错误原因后重试。") return redirect("documents:list")