mini_common.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. """小程序公共数据(同区域供应商列表等)"""
  2. from fastapi import APIRouter, Depends, Query
  3. from sqlalchemy.orm import Session
  4. from app.core.database import get_db
  5. from app.core.auth import get_current_user
  6. from app.core.response import success_response, error_response
  7. from app.crud.user import user_crud
  8. from app.api.system_config import read_customer_service_phone_for_mini
  9. router = APIRouter(prefix="/api/mini/common", tags=["小程序端-公共"])
  10. @router.get("/service-contact", response_model=dict)
  11. def get_service_contact(
  12. db: Session = Depends(get_db),
  13. current_user: dict = Depends(get_current_user),
  14. ):
  15. """客服电话(登录态,客户端/供应商/配送员共用)。"""
  16. if current_user.get("role") not in ("client", "supplier", "deliver"):
  17. return error_response(403, "无权限访问")
  18. phone = read_customer_service_phone_for_mini(db)
  19. return success_response({"servicePhone": phone})
  20. @router.get("/suppliers", response_model=dict)
  21. def list_region_suppliers(
  22. db: Session = Depends(get_db),
  23. current_user: dict = Depends(get_current_user),
  24. page: int = Query(1, ge=1),
  25. pageSize: int = Query(20, ge=1, le=100),
  26. ):
  27. """当前用户所属区域内的供应商列表(用于配送/业务选择等)"""
  28. if current_user.get("role") not in ("client", "supplier", "deliver"):
  29. return error_response(403, "无权限访问")
  30. region_id = current_user.get("region_id")
  31. if not region_id:
  32. return success_response({"list": [], "total": 0, "page": page, "pageSize": pageSize, "totalPages": 0})
  33. users, total = user_crud.get_multi_with_filters(
  34. db,
  35. role="supplier",
  36. region_id=region_id,
  37. is_active=True,
  38. skip=(page - 1) * pageSize,
  39. limit=pageSize,
  40. )
  41. lst = [
  42. {
  43. "id": u.id,
  44. "username": u.username,
  45. "realName": u.real_name,
  46. "phone": u.phone,
  47. "regionId": u.region_id,
  48. }
  49. for u in users
  50. ]
  51. total_pages = (total + pageSize - 1) // pageSize if total else 0
  52. return success_response({
  53. "list": lst,
  54. "total": total,
  55. "page": page,
  56. "pageSize": pageSize,
  57. "totalPages": total_pages,
  58. })