mini_common.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 build_china_region_tree, query_china_regions_active
  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. rows = query_china_regions_active(db)
  20. return success_response({"tree": build_china_region_tree(rows)})
  21. @router.get("/service-contact", response_model=dict)
  22. def get_service_contact(
  23. db: Session = Depends(get_db),
  24. current_user: dict = Depends(get_current_user),
  25. ):
  26. """客服电话(登录态,客户端/供应商/配送员共用)。"""
  27. if current_user.get("role") not in ("client", "supplier", "deliver"):
  28. return error_response(403, "无权限访问")
  29. phone = read_customer_service_phone_for_mini(db)
  30. return success_response({"servicePhone": phone})
  31. @router.get("/suppliers", response_model=dict)
  32. def list_region_suppliers(
  33. db: Session = Depends(get_db),
  34. current_user: dict = Depends(get_current_user),
  35. page: int = Query(1, ge=1),
  36. pageSize: int = Query(20, ge=1, le=100),
  37. ):
  38. """当前用户所属区域内的供应商列表(用于配送/业务选择等)"""
  39. if current_user.get("role") not in ("client", "supplier", "deliver"):
  40. return error_response(403, "无权限访问")
  41. region_id = current_user.get("region_id")
  42. if not region_id:
  43. return success_response({"list": [], "total": 0, "page": page, "pageSize": pageSize, "totalPages": 0})
  44. users, total = user_crud.get_multi_with_filters(
  45. db,
  46. role="supplier",
  47. region_id=region_id,
  48. is_active=True,
  49. skip=(page - 1) * pageSize,
  50. limit=pageSize,
  51. )
  52. lst = [
  53. {
  54. "id": u.id,
  55. "username": u.username,
  56. "realName": u.real_name,
  57. "phone": u.phone,
  58. "regionId": u.region_id,
  59. }
  60. for u in users
  61. ]
  62. total_pages = (total + pageSize - 1) // pageSize if total else 0
  63. return success_response({
  64. "list": lst,
  65. "total": total,
  66. "page": page,
  67. "pageSize": pageSize,
  68. "totalPages": total_pages,
  69. })