"""用户管理 API""" from flask import Blueprint, jsonify, render_template, request from flask_login import login_required, current_user from werkzeug.security import generate_password_hash from app.auth import admin_required from app.models import get_all_users, create_user, update_user, get_user_by_username bp = Blueprint("users", __name__, url_prefix="/users") @bp.route("/") @admin_required def users_page(): return render_template("users.html") @bp.route("/api/users") @admin_required def api_users(): return jsonify(get_all_users()) @bp.route("/api/users", methods=["POST"]) @admin_required def api_create_user(): data = request.get_json() username = data.get("username", "").strip() password = data.get("password", "").strip() role = data.get("role", "operator") if not username or not password: return jsonify({"ok": False, "error": "用户名和密码不能为空"}), 400 if get_user_by_username(username): return jsonify({"ok": False, "error": "用户名已存在"}), 400 create_user(username, generate_password_hash(password), role) return jsonify({"ok": True}) @bp.route("/api/users/", methods=["PUT"]) @admin_required def api_update_user(user_id): data = request.get_json() kwargs = {} if "password" in data and data["password"]: kwargs["password_hash"] = generate_password_hash(data["password"]) if "role" in data: kwargs["role"] = data["role"] if "is_active" in data: kwargs["is_active"] = data["is_active"] if kwargs: update_user(user_id, **kwargs) return jsonify({"ok": True})