112 lines
4.7 KiB
HTML
112 lines
4.7 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Users - SEREACT Web Client{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h2><i class="fas fa-user"></i> Users</h2>
|
|
<a href="{{ url_for('create_user') }}" class="btn btn-primary">
|
|
<i class="fas fa-plus"></i> Create User
|
|
</a>
|
|
</div>
|
|
|
|
{% if users %}
|
|
<div class="row">
|
|
{% for user in users %}
|
|
<div class="col-md-6 col-lg-4 mb-4">
|
|
<div class="card h-100">
|
|
<div class="card-body">
|
|
<h5 class="card-title">
|
|
<i class="fas fa-user text-primary"></i> {{ user.name }}
|
|
{% if user.is_admin %}
|
|
<span class="badge bg-warning text-dark ms-2">
|
|
<i class="fas fa-crown"></i> Admin
|
|
</span>
|
|
{% endif %}
|
|
</h5>
|
|
<p class="card-text">
|
|
<i class="fas fa-envelope"></i> {{ user.email }}
|
|
</p>
|
|
<p class="card-text">
|
|
<i class="fas fa-users"></i> Team ID: {{ user.team_id }}
|
|
</p>
|
|
<div class="text-muted small">
|
|
<div>
|
|
<i class="fas fa-circle {{ 'text-success' if user.is_active else 'text-danger' }}"></i>
|
|
{{ 'Active' if user.is_active else 'Inactive' }}
|
|
</div>
|
|
<div><i class="fas fa-calendar"></i> Created: {{ user.created_at.strftime('%Y-%m-%d %H:%M') if user.created_at else 'Unknown' }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="card-footer bg-transparent">
|
|
<div class="btn-group w-100" role="group">
|
|
<a href="{{ url_for('edit_user', user_id=user.id) }}" class="btn btn-outline-primary btn-sm">
|
|
<i class="fas fa-edit"></i> Edit
|
|
</a>
|
|
<button type="button" class="btn btn-outline-danger btn-sm"
|
|
onclick="confirmDelete('{{ user.name }}', '{{ user.email }}', '{{ url_for('delete_user', user_id=user.id) }}')">
|
|
<i class="fas fa-trash"></i> Delete
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-5">
|
|
<i class="fas fa-user fa-4x text-muted mb-3"></i>
|
|
<h4 class="text-muted">No Users Found</h4>
|
|
<p class="text-muted">Create your first user to get started.</p>
|
|
<a href="{{ url_for('create_user') }}" class="btn btn-primary">
|
|
<i class="fas fa-plus"></i> Create First User
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- Delete Confirmation Modal -->
|
|
<div class="modal fade" id="deleteModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">
|
|
<i class="fas fa-exclamation-triangle text-warning"></i> Confirm Delete
|
|
</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>Are you sure you want to delete the user:</p>
|
|
<div class="alert alert-info">
|
|
<strong><span id="deleteUserName"></span></strong><br>
|
|
<small><span id="deleteUserEmail"></span></small>
|
|
</div>
|
|
<div class="alert alert-warning" role="alert">
|
|
<i class="fas fa-exclamation-triangle"></i>
|
|
<strong>Warning:</strong> This action cannot be undone. All user data and associated content may be affected.
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
|
|
<i class="fas fa-times"></i> Cancel
|
|
</button>
|
|
<form id="deleteForm" method="POST" style="display: inline;">
|
|
<button type="submit" class="btn btn-danger">
|
|
<i class="fas fa-trash"></i> Delete User
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
<script>
|
|
function confirmDelete(userName, userEmail, deleteUrl) {
|
|
document.getElementById('deleteUserName').textContent = userName;
|
|
document.getElementById('deleteUserEmail').textContent = userEmail;
|
|
document.getElementById('deleteForm').action = deleteUrl;
|
|
new bootstrap.Modal(document.getElementById('deleteModal')).show();
|
|
}
|
|
</script>
|
|
{% endblock %} |