"""API - 商品参数模板管理""" from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from app.core.database import get_db from app.core.auth import get_current_user from app.core.response import success_response, error_response from app.crud.product_parameter import product_parameter from app.schemas.product_parameter import ( ProductParameterCreate, ProductParameterUpdate, ProductParameterResponse, ProductParameterListResponse, ProductParameterSimpleResponse ) router = APIRouter(prefix="/web/admin/product-parameters", tags=["商品参数模板管理"]) def require_admin(current_user: dict = Depends(get_current_user)): """验证运营人员权限""" if current_user.get("role") != "admin": raise HTTPException(status_code=403, detail="需要运营人员权限") return current_user @router.get("", response_model=dict) def list_parameters( page: int = Query(1, ge=1, description="页码"), pageSize: int = Query(10, ge=1, le=100, description="每页条数"), keyword: Optional[str] = Query(None, description="关键词搜索"), isActive: Optional[int] = Query(None, description="是否启用"), db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """获取参数模板列表""" items, total = product_parameter.get_multi_paged( db, skip=(page - 1) * pageSize, limit=pageSize, keyword=keyword, is_active=isActive ) return success_response({ "list": [{ "id": p.id, "name": p.name, "code": p.code, "paramType": p.param_type, "options": p.options, "placeholder": p.placeholder, "isRequired": p.is_required, "isActive": p.is_active, "sortOrder": p.sort_order, "remark": p.remark, "createAt": str(p.create_at) if p.create_at else None } for p in items], "total": total, "page": page, "pageSize": pageSize }) @router.get("/simple", response_model=dict) def list_parameters_simple( db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """获取参数模板简洁列表(用于下拉选择)""" items = product_parameter.get_active_all(db) return success_response({ "list": [{ "id": p.id, "name": p.name, "code": p.code, "paramType": p.param_type, "options": p.options } for p in items], "total": len(items) }) @router.get("/{parameter_id}", response_model=dict) def get_parameter( parameter_id: str, db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """获取参数详情""" param = product_parameter.get(db, parameter_id) if not param: return error_response(404, "参数不存在") return success_response({ "id": param.id, "name": param.name, "code": param.code, "paramType": param.param_type, "options": param.options, "placeholder": param.placeholder, "isRequired": param.is_required, "isActive": param.is_active, "sortOrder": param.sort_order, "remark": param.remark, "createAt": str(param.create_at) if param.create_at else None }) @router.post("", response_model=dict) def create_parameter( create_data: ProductParameterCreate, db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """创建参数模板""" # 检查编码是否已存在 if product_parameter.code_exists(db, create_data.code): return error_response(400, "参数编码已存在") creator = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")} param = product_parameter.create(db, create_data.model_dump(), creator) return success_response({ "id": param.id, "name": param.name, "code": param.code }) @router.put("/{parameter_id}", response_model=dict) def update_parameter( parameter_id: str, update_data: ProductParameterUpdate, db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """更新参数模板""" # 检查编码是否已存在(排除自身) if update_data.code: if product_parameter.code_exists(db, update_data.code, exclude_id=parameter_id): return error_response(400, "参数编码已存在") updater = {"user_id": current_user.get("user_id"), "real_name": current_user.get("real_name")} param = product_parameter.update(db, parameter_id, update_data.model_dump(exclude_unset=True), updater) if not param: return error_response(404, "参数不存在") return success_response({ "id": param.id, "name": param.name, "code": param.code }) @router.delete("/{parameter_id}", response_model=dict) def delete_parameter( parameter_id: str, db: Session = Depends(get_db), current_user: dict = Depends(require_admin) ): """删除参数模板""" result = product_parameter.delete(db, parameter_id) if not result: return error_response(404, "参数不存在") return success_response({"message": "删除成功"})