- New Features - Add delete buttons with confirmation modals for users, expenses, invoices, and tickets - Introduce a priority column with styled badges in the ticket list - Refactor form fields to a shared partial for cleaner markup - Enhancements - Rename “Creator” to “Assignee” and improve status/priority badge rendering - Fix empty‑state colspan and correct broken delete‑modal label closing tag - Initialize Quill editor on the ticket detail page - Bug Fixes - Resolve typo in button class name and mismatched table header count
69 lines
3.9 KiB
HTML
69 lines
3.9 KiB
HTML
{% extends "base_authenticated.html" %}
|
|
{% block title %}Issues{% endblock %}
|
|
{% block content_inner %}
|
|
<div class="flex items-center justify-between mb-6">
|
|
<div>
|
|
<h1 class="text-2xl font-bold text-gray-900">Issues</h1>
|
|
<p class="text-gray-500 mt-1">Track bugs, features, and tasks.</p>
|
|
</div>
|
|
<a href="{% url 'issue_create' %}" class="btn bg-blue-600 text-white hover:bg-blue-700 border-0">
|
|
<svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/></svg>
|
|
New Issue
|
|
</a>
|
|
</div>
|
|
<div class="bg-white rounded-2xl shadow-sm border border-gray-100 overflow-hidden">
|
|
<div class="overflow-x-auto">
|
|
<table class="table w-full">
|
|
<thead>
|
|
<tr class="bg-gray-50">
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Title</th>
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Project</th>
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Status</th>
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Priority</th>
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Assignee</th>
|
|
<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Created</th>
|
|
{% if user.is_admin %}<th class="text-xs font-semibold text-gray-500 uppercase tracking-wider">Actions</th>{% endif %}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for issue in issues %}
|
|
<tr class="hover:bg-gray-50 transition-colors">
|
|
<td>
|
|
<a href="{% url 'issue_detail' issue.pk %}" class="font-medium text-gray-900 hover:text-blue-600">{{ issue.title }}</a>
|
|
</td>
|
|
<td class="text-sm text-gray-600">{{ issue.project.name }}</td>
|
|
<td>
|
|
<span class="text-xs px-2.5 py-1 rounded-full font-medium {% if issue.status == 'open' %}bg-blue-100 text-blue-700{% elif issue.status == 'in_progress' %}bg-amber-100 text-amber-700{% elif issue.status == 'resolved' %}bg-green-100 text-green-700{% else %}bg-gray-100 text-gray-700{% endif %}">
|
|
{{ issue.get_status_display }}
|
|
</span>
|
|
</td>
|
|
<td>
|
|
<span class="text-xs px-2.5 py-1 rounded-full font-medium {% if issue.priority == 'high' %}bg-red-100 text-red-700{% elif issue.priority == 'medium' %}bg-amber-100 text-amber-700{% else %}bg-blue-100 text-blue-700{% endif %}">
|
|
{{ issue.get_priority_display }}
|
|
</span>
|
|
</td>
|
|
<td class="text-sm text-gray-600">{{ issue.assignee.username|default:"-" }}</td>
|
|
<td class="text-sm text-gray-500">{{ issue.created_at|date:"M d" }}</td>
|
|
{% if user.is_admin %}
|
|
<td>
|
|
<label for="delete-issue-{{ issue.pk }}" class="btn btn-ghost btn-xs text-red-600">Delete</label>
|
|
</td>
|
|
{% endif %}
|
|
</tr>
|
|
{% empty %}
|
|
<tr><td colspan="6" class="text-center py-12 text-gray-500">No issues found.</td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{% if user.is_admin %}
|
|
{% for issue in issues %}
|
|
{% with issue_id=issue.pk|stringformat:"s" %}
|
|
{% url 'issue_delete' issue.pk as delete_url %}
|
|
{% include "components/delete_modal.html" with modal_id="delete-issue-"|add:issue_id title="Delete Issue" message="Are you sure you want to delete this issue? This action cannot be undone." delete_url=delete_url %}
|
|
{% endwith %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endblock %}
|