diff --git a/frontend/components/client-ticket/ClientTicketDetailModal.vue b/frontend/components/client-ticket/ClientTicketDetailModal.vue
index 8dc1b21..28fdb09 100644
--- a/frontend/components/client-ticket/ClientTicketDetailModal.vue
+++ b/frontend/components/client-ticket/ClientTicketDetailModal.vue
@@ -27,90 +27,161 @@
{{ $t('portal.ticketDetail') }}
-
+
-
-
{{ ticket.title }}
-
-
-
- {{ $t(`clientTicket.type.${ticket.type}`) }}
-
-
- {{ $t(`clientTicket.status.${ticket.status}`) }}
-
-
+
+
+
+
+
+
-
-
-
{{ $t('clientTicket.description') }}
-
{{ ticket.description }}
-
+
+
+
+
-
-
+
+
+
+
-
-
-
{{ $t('clientTicket.statusComment') }}
-
{{ ticket.statusComment }}
-
+
+
+
+
+
-
-
+
+
+
+ {{ ticket.title }}
-
-
+
+
+
+ {{ $t(`clientTicket.type.${ticket.type}`) }}
+
+
+ {{ $t(`clientTicket.status.${ticket.status}`) }}
+
+
-
-
+
+
+
{{ $t('clientTicket.description') }}
+
{{ ticket.description }}
+
-
-
- {{ $t('clientTicket.createdAt') }} : {{ formatDate(ticket.createdAt) }}
-
+
+
+
+
+
+
{{ $t('clientTicket.statusComment') }}
+
{{ ticket.statusComment }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('clientTicket.createdAt') }} : {{ formatDate(ticket.createdAt) }}
+
+
@@ -122,6 +193,7 @@
import type { ClientTicket } from '~/services/dto/client-ticket'
import type { TaskDocument } from '~/services/dto/task-document'
import { useTaskDocumentService } from '~/services/task-documents'
+import { useClientTicketService } from '~/services/client-tickets'
const props = defineProps<{
modelValue: boolean
@@ -130,6 +202,7 @@ const props = defineProps<{
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void
+ (e: 'refresh'): void
}>()
const isOpen = computed({
@@ -138,12 +211,72 @@ const isOpen = computed({
})
function close() {
+ isEditing.value = false
isOpen.value = false
}
+const auth = useAuthStore()
const { getByTicket } = useTaskDocumentService()
+const clientTicketService = useClientTicketService()
const { typeBadgeClass, statusBadgeClass, formatDate } = useClientTicketHelpers()
+// Edit mode
+const isEditing = ref(false)
+const isSaving = ref(false)
+const editForm = reactive({
+ title: '',
+ description: '',
+ url: '',
+})
+
+const canEdit = computed(() => {
+ if (!props.ticket) return false
+ const status = props.ticket.status
+ if (status === 'done' || status === 'rejected') return false
+ // Check if current user submitted the ticket
+ const userId = auth.user?.id
+ if (!userId) return false
+ const submittedByIri = props.ticket.submittedBy
+ if (!submittedByIri) return false
+ return submittedByIri === `/api/users/${userId}`
+})
+
+function startEdit() {
+ if (!props.ticket) return
+ editForm.title = props.ticket.title
+ editForm.description = props.ticket.description
+ editForm.url = props.ticket.url ?? ''
+ isEditing.value = true
+}
+
+function cancelEdit() {
+ isEditing.value = false
+}
+
+async function saveEdit() {
+ if (!props.ticket) return
+ isSaving.value = true
+ try {
+ const data: Record