mini_common.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. from app.services.china_region_tree import get_china_region_tree_cached
  10. router = APIRouter(prefix="/api/mini/common", tags=["小程序端-公共"])
  11. @router.get("/china-region-tree", response_model=dict)
  12. def get_china_region_tree_mini(
  13. db: Session = Depends(get_db),
  14. current_user: dict = Depends(get_current_user),
  15. ):
  16. """中国省市区三级树(`bas_china_region`)。需执行 docs/sql/bas_china_region.sql 建表并导入数据。"""
  17. if current_user.get("role") not in ("client", "supplier", "deliver"):
  18. return error_response(403, "无权限访问")
  19. return success_response({"tree": get_china_region_tree_cached(db)})
  20. @router.get("/service-contact", response_model=dict)
  21. def get_service_contact(
  22. db: Session = Depends(get_db),
  23. current_user: dict = Depends(get_current_user),
  24. ):
  25. """客服电话(登录态,客户端/供应商/配送员共用)。"""
  26. if current_user.get("role") not in ("client", "supplier", "deliver"):
  27. return error_response(403, "无权限访问")
  28. phone = read_customer_service_phone_for_mini(db)
  29. return success_response({"servicePhone": phone})
  30. @router.get("/suppliers", response_model=dict)
  31. def list_region_suppliers(
  32. db: Session = Depends(get_db),
  33. current_user: dict = Depends(get_current_user),
  34. page: int = Query(1, ge=1),
  35. pageSize: int = Query(20, ge=1, le=100),
  36. ):
  37. """当前用户所属区域内的供应商列表(用于配送/业务选择等)"""
  38. if current_user.get("role") not in ("client", "supplier", "deliver"):
  39. return error_response(403, "无权限访问")
  40. region_id = current_user.get("region_id")
  41. if not region_id:
  42. return success_response({"list": [], "total": 0, "page": page, "pageSize": pageSize, "totalPages": 0})
  43. users, total = user_crud.get_multi_with_filters(
  44. db,
  45. role="supplier",
  46. region_id=region_id,
  47. is_active=True,
  48. skip=(page - 1) * pageSize,
  49. limit=pageSize,
  50. )
  51. lst = [
  52. {
  53. "id": u.id,
  54. "username": u.username,
  55. "realName": u.real_name,
  56. "phone": u.phone,
  57. "regionId": u.region_id,
  58. }
  59. for u in users
  60. ]
  61. total_pages = (total + pageSize - 1) // pageSize if total else 0
  62. return success_response({
  63. "list": lst,
  64. "total": total,
  65. "page": page,
  66. "pageSize": pageSize,
  67. "totalPages": total_pages,
  68. })