feat: virtual company module, team projects, PWA dishes app, and startup scripts overhaul
- Add company module (3-tier org, CEO planning, parallel departments) - Add company orchestrator, knowledge extractor, presets, scheduler - Add company API endpoints, models, and frontend views - Add 今天吃啥 PWA app (69 dishes, real images, offline support) - Add team_projects output directory structure - Add unified manage.ps1 for service lifecycle - Add Windows startup guide v1.0 - Add TTS troubleshooting doc - Update frontend (AgentChat UX overhaul, new views) - Update backend (voice engine fix, multi-tenant, RBAC) - Remove deprecated startup scripts and old docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ from sqlalchemy.orm import Session
|
||||
from sqlalchemy import func
|
||||
|
||||
from app.api.auth import get_current_user
|
||||
from app.api.deps import require_admin
|
||||
from app.core.database import get_db
|
||||
from app.core.security import get_password_hash
|
||||
from app.models.user import User
|
||||
@@ -24,12 +25,6 @@ logger = logging.getLogger(__name__)
|
||||
router = APIRouter(prefix="/api/v1/admin/users", tags=["admin-users"])
|
||||
|
||||
|
||||
def _require_admin(current_user: User = Depends(get_current_user)) -> User:
|
||||
if current_user.role != "admin":
|
||||
raise HTTPException(status_code=403, detail="仅平台管理员可访问")
|
||||
return current_user
|
||||
|
||||
|
||||
# ── Request / Response schemas ──
|
||||
|
||||
class UserCreateRequest(BaseModel):
|
||||
@@ -90,7 +85,7 @@ def list_users(
|
||||
status: Optional[str] = Query(None, description="过滤状态: active/disabled/deleted"),
|
||||
role: Optional[str] = Query(None, description="过滤角色"),
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""获取用户列表(分页、搜索、过滤)"""
|
||||
q = db.query(User)
|
||||
@@ -137,7 +132,7 @@ def list_users(
|
||||
def create_user(
|
||||
data: UserCreateRequest,
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""管理员创建新用户"""
|
||||
if db.query(User).filter(User.username == data.username).first():
|
||||
@@ -166,7 +161,7 @@ def create_user(
|
||||
def get_user(
|
||||
user_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""获取用户详情"""
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
@@ -187,7 +182,7 @@ def update_user(
|
||||
user_id: str,
|
||||
data: UserUpdateRequest,
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""编辑用户"""
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
@@ -229,7 +224,7 @@ def update_user(
|
||||
def delete_user(
|
||||
user_id: str,
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""软删除用户(标记为 deleted)"""
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
@@ -250,7 +245,7 @@ def reset_password(
|
||||
user_id: str,
|
||||
data: ResetPasswordRequest,
|
||||
db: Session = Depends(get_db),
|
||||
_admin: User = Depends(_require_admin),
|
||||
_admin: User = Depends(require_admin()),
|
||||
):
|
||||
"""重置用户密码"""
|
||||
user = db.query(User).filter(User.id == user_id).first()
|
||||
|
||||
Reference in New Issue
Block a user