feat: support cross-review supplement opinions export

This commit is contained in:
wren
2026-05-19 14:12:02 +08:00
parent 3fb72d94ad
commit 564f2bebc8
5 changed files with 581 additions and 20 deletions
@@ -3,7 +3,7 @@
from typing import Any
from fastapi import Depends, File, Form, Query, UploadFile
from fastapi.responses import JSONResponse
from fastapi.responses import JSONResponse, Response
from fastapi_common.fastapi_common_security.security import verify_access_token
from fastapi_common.fastapi_common_web.controller import BaseController
@@ -221,6 +221,26 @@ class CrossReviewController(BaseController):
Data = await self.CrossReviewService.GetDocumentPendingVotes(CurrentUserId=int(payload["user_id"]), DocumentId=DocumentId)
return Result.success(data=Data)
@self.router.get("/documents/{DocumentId}/proposals/export")
async def ExportDocumentProposals(
DocumentId: int,
payload: dict[str, Any] = Depends(verify_access_token),
):
"""导出文档提案列表 Excel。"""
if not await self._check_permission(int(payload["user_id"]), [self._PERMISSIONS["proposal_read"]]):
return JSONResponse(status_code=403, content={"code": 403, "msg": "当前用户没有导出交叉评查提案权限", "data": None})
fileContent, fileName = await self.CrossReviewService.ExportDocumentProposals(
CurrentUserId=int(payload["user_id"]),
DocumentId=DocumentId,
)
return Response(
content=fileContent,
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{fileName}",
},
)
async def _check_permission(self, user_id: int, permission_keys: list[str]) -> bool:
"""OR 逻辑权限校验。"""
for permission_key in permission_keys: