58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
from flask import Blueprint, jsonify, request
|
|
from app.models import User, UserDetail, UserField
|
|
from app import db
|
|
|
|
bp = Blueprint('users', __name__)
|
|
|
|
@bp.route('', methods=['GET'])
|
|
def get_users():
|
|
page = request.args.get('page', 1, type=int)
|
|
per_page = request.args.get('per_page', 10, type=int)
|
|
users = User.query.paginate(page=page, per_page=per_page, error_out=False)
|
|
|
|
users_list = [{
|
|
'id': user.id,
|
|
'username': user.username,
|
|
'primary_department': user.primary_department.name if user.primary_department else None,
|
|
'roles': [role.name for role in user.roles]
|
|
} for user in users.items]
|
|
|
|
return jsonify({
|
|
'users': users_list,
|
|
'total': users.total,
|
|
'pages': users.pages,
|
|
'current_page': page
|
|
}), 200
|
|
|
|
@bp.route('/<int:user_id>', methods=['GET'])
|
|
def get_user_details(user_id):
|
|
user = User.query.get(user_id)
|
|
if not user:
|
|
return jsonify({'message': '用户不存在'}), 404
|
|
|
|
user_fields = UserField.query.all()
|
|
user_details = {}
|
|
for field in user_fields:
|
|
detail = UserDetail.query.filter_by(user_id=user.id, field_id=field.id).first()
|
|
user_details[field.name] = detail.value if detail else None
|
|
|
|
user_info = {
|
|
'id': user.id,
|
|
'username': user.username,
|
|
'primary_department': user.primary_department.name if user.primary_department else None,
|
|
'secondary_departments': [dept.name for dept in user.secondary_departments],
|
|
'roles': [role.name for role in user.roles],
|
|
'details': user_details,
|
|
'login_info': {
|
|
'register_time': user.login_info.register_time.isoformat(),
|
|
'login_count': user.login_info.login_count,
|
|
'last_login_time': user.login_info.last_login_time.isoformat() if user.login_info.last_login_time else None,
|
|
'is_new_user': user.login_info.is_new_user,
|
|
'has_changed_initial_password': user.login_info.has_changed_initial_password
|
|
}
|
|
}
|
|
|
|
return jsonify(user_info), 200
|
|
|
|
# 可以在这里添加更多用户相关的路由...
|