diff --git a/frontend/components/admin/AdminClientTicketTab.vue b/frontend/components/admin/AdminClientTicketTab.vue index 940f490..64401a5 100644 --- a/frontend/components/admin/AdminClientTicketTab.vue +++ b/frontend/components/admin/AdminClientTicketTab.vue @@ -79,7 +79,16 @@ {{ getProjectName(ticket.project) }} - {{ getSubmitterName(ticket.submittedBy) }} + +
+ + {{ getSubmitterName(ticket.submittedBy) }} +
+ {{ formatDate(ticket.createdAt) }}
@@ -216,7 +225,7 @@ const { t } = useI18n() const clientTicketService = useClientTicketService() const projectService = useProjectService() const userService = useUserService() -const { typeBadgeClass, statusBadgeClass, formatDate } = useClientTicketHelpers() +const { typeBadgeClass, statusBadgeClass, formatDate, getAvailableStatusTransitions } = useClientTicketHelpers() const tickets = ref([]) const projects = ref([]) @@ -261,19 +270,7 @@ const detailTicket = ref(null) const availableStatusTransitions = computed(() => { if (!statusTarget.value) return [] - const current = statusTarget.value.status - const allStatuses: { label: string; value: ClientTicketStatus }[] = [ - { label: t('clientTicket.status.new'), value: 'new' }, - { label: t('clientTicket.status.in_progress'), value: 'in_progress' }, - { label: t('clientTicket.status.done'), value: 'done' }, - { label: t('clientTicket.status.rejected'), value: 'rejected' }, - ] - // Filter out forbidden transitions - return allStatuses.filter(s => { - if (s.value === current) return false - if ((current === 'done' || current === 'rejected') && s.value === 'new') return false - return true - }) + return getAvailableStatusTransitions(statusTarget.value.status, t) }) function getProjectName(iri: string): string { @@ -291,6 +288,14 @@ function getSubmitterName(iri: string | null): string { return users.value.find(u => u.id === id)?.username ?? '' } +function getSubmitterUser(iri: string | null): UserData | undefined { + if (!iri) return undefined + const match = iri.match(/\/api\/users\/(\d+)/) + if (!match) return undefined + const id = Number(match[1]) + return users.value.find(u => u.id === id) +} + function openDetail(ticket: ClientTicket) { detailTicket.value = ticket detailOpen.value = true diff --git a/frontend/components/task/TaskCard.vue b/frontend/components/task/TaskCard.vue index de1df03..2147d59 100644 --- a/frontend/components/task/TaskCard.vue +++ b/frontend/components/task/TaskCard.vue @@ -44,13 +44,12 @@ > {{ tag.label }} - - {{ task.assignee.username.substring(0, 2).toUpperCase() }} - + :user="task.assignee" + size="xs" + class="ml-auto" + />
- + +
@@ -130,7 +128,7 @@ const filteredTasks = computed(() => { async function loadData() { const [p, t, s, e, pr, ty, g, u] = await Promise.all([ projectService.getById(projectId.value), - taskService.getByProjectArchived(projectId.value), + taskService.getByProject(projectId.value, true), statusService.getAll(), effortService.getAll(), priorityService.getAll(),