From 8646f335879456cf92c37f55f04ff88abfbfbf87 Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Sat, 1 Aug 2026 13:04:07 +0800 Subject: [PATCH] feat(crm): expose quote approver setting get/save APIs Co-authored-by: Cursor --- backend/app/api/crm_quote_routes.py | 40 ++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/backend/app/api/crm_quote_routes.py b/backend/app/api/crm_quote_routes.py index eda06c27b..c4667a99b 100644 --- a/backend/app/api/crm_quote_routes.py +++ b/backend/app/api/crm_quote_routes.py @@ -7,7 +7,7 @@ from fastapi import Depends from sqlalchemy.orm import Session from app.core.database import get_db -from app.core.menu_guard import require_admin_or_super_admin +from app.core.menu_guard import require_admin_or_super_admin, require_menu_code from app.core.response import error_response, success_response from app.core.tenant_context import get_tenant_no from app.crud.crm.data_scope_helpers import crm_user_info @@ -33,6 +33,7 @@ from app.crud.crm.quote import ( total_pages as quote_total_pages, update_quote, ) +from app.crud.crm.quote_approver_setting import get_setting, save_setting from app.crud.crm.quote_approval import ( approve_quote, list_quote_approvals, @@ -46,6 +47,7 @@ from app.crud.crm.quote_product import ( update_quote_product, ) from app.crud.crm.quote_share_log import list_share_logs, share_log_statistics +from app.schemas.crm.quote_approver_setting import QuoteApproverSettingSaveBody from app.schemas.crm.quote import ( QuoteAcceptBody, QuoteApprovalApproveBody, @@ -711,3 +713,39 @@ def register_quote_routes(router): return error_response(400, str(e)) except Exception as e: return error_response(500, str(e)) + + @router.post("/quote-approver-setting/get") + async def quote_approver_setting_get( + _user: dict = Depends(require_admin_or_super_admin), + db: Session = Depends(get_db), + ): + try: + tenant_no = get_tenant_no(db, _user) + data = get_setting(db, tenant_no=tenant_no) + return success_response(data or {"approverIds": [], "status": "1"}) + except Exception as e: + return error_response(500, str(e)) + + @router.post("/quote-approver-setting/save") + async def quote_approver_setting_save( + body: QuoteApproverSettingSaveBody, + _user: dict = Depends(require_menu_code("crm:quote:approverSetting")), + db: Session = Depends(get_db), + ): + try: + tenant_no = get_tenant_no(db, _user) + user_id = _user.get("user_id", "") or _user.get("id", "") + dept_id = _user.get("dept_id", "") or _user.get("create_dept_id", "") or "" + data = save_setting( + db, + tenant_no=tenant_no, + approver_ids=body.approverIds or [], + status=body.status or "0", + user_id=user_id, + dept_id=dept_id, + ) + return success_response(data, message="保存成功") + except ValueError as e: + return error_response(400, str(e)) + except Exception as e: + return error_response(500, str(e))