product_parameter.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. """API - 商品参数模板管理"""
  2. from typing import Optional
  3. from fastapi import APIRouter, Depends, HTTPException, Query
  4. from sqlalchemy.orm import Session
  5. from app.core.database import get_db
  6. from app.core.auth import get_current_user
  7. from app.core.response import success_response, error_response
  8. from app.crud.product_parameter import product_parameter
  9. from app.schemas.product_parameter import (
  10. ProductParameterCreate,
  11. ProductParameterUpdate,
  12. ProductParameterResponse,
  13. ProductParameterListResponse,
  14. ProductParameterSimpleResponse
  15. )
  16. router = APIRouter(prefix="/web/admin/product-parameters", tags=["商品参数模板管理"])
  17. def require_admin(current_user: dict = Depends(get_current_user)):
  18. """验证运营人员权限"""
  19. if current_user.get("role") != "admin":
  20. raise HTTPException(status_code=403, detail="需要运营人员权限")
  21. return current_user
  22. @router.get("", response_model=dict)
  23. def list_parameters(
  24. page: int = Query(1, ge=1, description="页码"),
  25. pageSize: int = Query(10, ge=1, le=100, description="每页条数"),
  26. keyword: Optional[str] = Query(None, description="关键词搜索"),
  27. isActive: Optional[int] = Query(None, description="是否启用"),
  28. db: Session = Depends(get_db),
  29. current_user: dict = Depends(require_admin)
  30. ):
  31. """获取参数模板列表"""
  32. items, total = product_parameter.get_multi_paged(
  33. db,
  34. skip=(page - 1) * pageSize,
  35. limit=pageSize,
  36. keyword=keyword,
  37. is_active=isActive
  38. )
  39. return success_response({
  40. "list": [{
  41. "id": p.id,
  42. "name": p.name,
  43. "code": p.code,
  44. "paramType": p.param_type,
  45. "options": p.options,
  46. "placeholder": p.placeholder,
  47. "isRequired": p.is_required,
  48. "isActive": p.is_active,
  49. "sortOrder": p.sort_order,
  50. "remark": p.remark,
  51. "createAt": str(p.create_at) if p.create_at else None
  52. } for p in items],
  53. "total": total,
  54. "page": page,
  55. "pageSize": pageSize
  56. })
  57. @router.get("/simple", response_model=dict)
  58. def list_parameters_simple(
  59. db: Session = Depends(get_db),
  60. current_user: dict = Depends(require_admin)
  61. ):
  62. """获取参数模板简洁列表(用于下拉选择)"""
  63. items = product_parameter.get_active_all(db)
  64. return success_response({
  65. "list": [{
  66. "id": p.id,
  67. "name": p.name,
  68. "code": p.code,
  69. "paramType": p.param_type,
  70. "options": p.options
  71. } for p in items],
  72. "total": len(items)
  73. })
  74. @router.get("/{parameter_id}", response_model=dict)
  75. def get_parameter(
  76. parameter_id: str,
  77. db: Session = Depends(get_db),
  78. current_user: dict = Depends(require_admin)
  79. ):
  80. """获取参数详情"""
  81. param = product_parameter.get(db, parameter_id)
  82. if not param:
  83. return error_response(404, "参数不存在")
  84. return success_response({
  85. "id": param.id,
  86. "name": param.name,
  87. "code": param.code,
  88. "paramType": param.param_type,
  89. "options": param.options,
  90. "placeholder": param.placeholder,
  91. "isRequired": param.is_required,
  92. "isActive": param.is_active,
  93. "sortOrder": param.sort_order,
  94. "remark": param.remark,
  95. "createAt": str(param.create_at) if param.create_at else None
  96. })
  97. @router.post("", response_model=dict)
  98. def create_parameter(
  99. create_data: ProductParameterCreate,
  100. db: Session = Depends(get_db),
  101. current_user: dict = Depends(require_admin)
  102. ):
  103. """创建参数模板"""
  104. # 检查编码是否已存在
  105. if product_parameter.code_exists(db, create_data.code):
  106. return error_response(400, "参数编码已存在")
  107. creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
  108. param = product_parameter.create(db, create_data.model_dump(), creator)
  109. return success_response({
  110. "id": param.id,
  111. "name": param.name,
  112. "code": param.code
  113. })
  114. @router.put("/{parameter_id}", response_model=dict)
  115. def update_parameter(
  116. parameter_id: str,
  117. update_data: ProductParameterUpdate,
  118. db: Session = Depends(get_db),
  119. current_user: dict = Depends(require_admin)
  120. ):
  121. """更新参数模板"""
  122. # 检查编码是否已存在(排除自身)
  123. if update_data.code:
  124. if product_parameter.code_exists(db, update_data.code, exclude_id=parameter_id):
  125. return error_response(400, "参数编码已存在")
  126. updater = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")}
  127. param = product_parameter.update(db, parameter_id, update_data.model_dump(exclude_unset=True), updater)
  128. if not param:
  129. return error_response(404, "参数不存在")
  130. return success_response({
  131. "id": param.id,
  132. "name": param.name,
  133. "code": param.code
  134. })
  135. @router.delete("/{parameter_id}", response_model=dict)
  136. def delete_parameter(
  137. parameter_id: str,
  138. db: Session = Depends(get_db),
  139. current_user: dict = Depends(require_admin)
  140. ):
  141. """删除参数模板"""
  142. result = product_parameter.delete(db, parameter_id)
  143. if not result:
  144. return error_response(404, "参数不存在")
  145. return success_response({"message": "删除成功"})