瀏覽代碼

feat(oa): expose GET /instances/history for start-page history

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 月之前
父節點
當前提交
37e8ce52a7
共有 1 個文件被更改,包括 44 次插入 和 0 次删除
  1. 44 0
      backend/app/api/oa_approval.py

+ 44 - 0
backend/app/api/oa_approval.py

@@ -18,6 +18,8 @@ from app.services.oa_receive_account import normalize_account_fields
 
 router = APIRouter(prefix="/web/admin/oa-approval", tags=["OA审批"])
 
+OA_START_HISTORY_ALL_PERM = "oa:start:history:all"
+
 
 def _get_tenant_no(db: Session, user: dict) -> str:
     tenant = (user.get("tenant_no") or "").strip()
@@ -893,6 +895,48 @@ async def start_oa_instance(
         return error_response(400, str(e))
 
 
+@router.get("/instances/history")
+async def list_oa_instance_history(
+    appId: str = Query(..., description="流程应用 ID"),
+    instanceId: str = Query(""),
+    instanceStatus: str = Query(""),
+    initiatorName: str = Query(""),
+    applyTimeFrom: str = Query(""),
+    applyTimeTo: str = Query(""),
+    finishTimeFrom: str = Query(""),
+    finishTimeTo: str = Query(""),
+    page: int = Query(1),
+    pageSize: int = Query(20, alias="pageSize"),
+    user: dict = Depends(require_admin_or_super_admin),
+    db: Session = Depends(get_db),
+):
+    from app.core.menu_guard import user_has_menu_perm
+    from app.services.oa_engine import OaEngineError, list_instance_history
+
+    try:
+        tenant_no = _get_tenant_no(db, user)
+        can_view_all = user_has_menu_perm(db, user, OA_START_HISTORY_ALL_PERM)
+        data = list_instance_history(
+            db,
+            tenant_no=tenant_no,
+            user_id=user.get("user_id") or "",
+            can_view_all=can_view_all,
+            app_id=appId,
+            instance_id=instanceId or None,
+            initiator_name=initiatorName or None,
+            apply_time_from=applyTimeFrom or None,
+            apply_time_to=applyTimeTo or None,
+            finish_time_from=finishTimeFrom or None,
+            finish_time_to=finishTimeTo or None,
+            instance_status=instanceStatus or None,
+            page=page,
+            page_size=pageSize,
+        )
+        return success_response(data)
+    except OaEngineError as e:
+        return error_response(400, str(e))
+
+
 @router.get("/instances/{instance_id}")
 async def get_oa_instance(
     instance_id: str,