94 lines
No EOL
4.4 KiB
HTML
94 lines
No EOL
4.4 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}User Management - Inspection Reporting{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="mb-6">
|
|
<h1 class="text-2xl font-bold">User Management</h1>
|
|
<a href="{{ url_for('admin.create_user') }}" class="btn btn-primary ml-4">Create New User</a>
|
|
</div>
|
|
|
|
{% if users.items %}
|
|
<table class="min-w-full divide-y divide-gray-200">
|
|
<thead class="bg-gray-50">
|
|
<tr>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Username</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Full Name</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Email</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Role</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Status</th>
|
|
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="bg-white divide-y divide-gray-200">
|
|
{% for user in users.items %}
|
|
<tr class="hover:bg-gray-50">
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">{{ user.username }}</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-700">{{ user.full_name }}</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-700">{{ user.email }}</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-700">
|
|
{% if user.is_admin %}<span class="badge badge-primary">Admin</span>{% else %}<span class="badge badge-secondary">User</span>{% endif %}
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-700">
|
|
{% if user.is_active %}<span class="badge badge-success">Active</span>{% else %}<span class="badge badge-error">Inactive</span>{% endif %}
|
|
</td>
|
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
|
|
<div class="flex space-x-2">
|
|
<a href="{{ url_for('admin.edit_user', id=user.id) }}" class="btn btn-xs btn-info">Edit</a>
|
|
{% if user.id != current_user.id %}
|
|
<form method="POST" action="{{ url_for('admin.toggle_active', id=user.id) }}" class="inline">
|
|
<button type="submit" class="btn btn-xs {% if user.is_active %}btn-error{% else %}btn-success{% endif %}">
|
|
{% if user.is_active %}Deactivate{% else %}Activate{% endif %}
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
|
|
<div class="flex items-center justify-between mt-4">
|
|
<p class="text-sm text-gray-500">
|
|
Showing {{ users.start_idx }} to {{ users.end_idx }} of {{ users.total }} users
|
|
</p>
|
|
<nav aria-label="Page navigation">
|
|
<ul class="inline-flex items-center spacing-x-1">
|
|
{% if users.has_prev %}
|
|
<li>
|
|
<a href="{{ url_for('admin.users', page=users.prev_num) }}" class="btn btn-xs btn-outline">Previous</a>
|
|
</li>
|
|
{% endif %}
|
|
{% for page_num in users.iter_pages() %}
|
|
{% if page_num %}
|
|
{% if page_num == users.page %}
|
|
<li>
|
|
<a href="{{ url_for('admin.users', page=page_num) }}" class="btn btn-xs btn-primary">{{ page_num }}</a>
|
|
</li>
|
|
{% else %}
|
|
<li>
|
|
<a href="{{ url_for('admin.users', page=page_num) }}" class="btn btn-xs btn-outline">{{ page_num }}</a>
|
|
</li>
|
|
{% endif %}
|
|
{% else %}
|
|
<li>
|
|
<span class="btn btn-xs btn-outline">…</span>
|
|
</li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if users.has_next %}
|
|
<li>
|
|
<a href="{{ url_for('admin.users', page=users.next_num) }}" class="btn btn-xs btn-outline">Next</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
{% else %}
|
|
<div class="text-center py-8">
|
|
<p class="text-gray-500">No users found.</p>
|
|
<a href="{{ url_for('admin.create_user') }}" class="btn btn-primary mt-4">Create First User</a>
|
|
</div>
|
|
{% endif %}
|
|
{% endblock %} |