main
vue 101 lines 2.88 KB
Raw
1 <template>
2 <div class="flex flex-col gap-4">
3 <div class="grid grid-cols-1 gap-4 @xl:grid-cols-2">
4 <CardEntity size="small">
5 <template #header>
6 <div class="text-secondary text-sm">Case Name</div>
7 </template>
8 {{ caseData.case_name }}
9 </CardEntity>
10 <CardEntity size="small">
11 <template #header-main>
12 <div class="text-secondary text-sm">Status</div>
13 </template>
14 <template #header-extra>
15 <Chip
16 v-if="caseData.escalated"
17 type="error"
18 value="Escalated"
19 size="tiny"
20 round
21 :bordered="false"
22 />
23 </template>
24 <CaseStatusSelect
25 :case-id="caseData.id"
26 :status="caseData.case_status"
27 @success="handleStatusUpdateSuccess"
28 />
29 </CardEntity>
30 <CardEntity size="small">
31 <template #header>
32 <div class="text-secondary text-sm">Notification Invoked Number</div>
33 </template>
34 {{ caseData.notification_invoked_number }}
35 </CardEntity>
36
37 <CardEntity size="small">
38 <template #header>
39 <div class="text-secondary text-sm">Customer</div>
40 </template>
41 {{ caseData.customer_code }}
42 </CardEntity>
43
44 <CardEntity size="small">
45 <template #header>
46 <div class="text-secondary text-sm">Created</div>
47 </template>
48 {{ formatDate(caseData.case_creation_time, dFormats.datetime) }}
49 </CardEntity>
50
51 <CardEntity size="small">
52 <template #header>
53 <div class="text-secondary text-sm">Assigned To</div>
54 </template>
55 <CaseAssignedSelect
56 :case-id="caseData.id"
57 :assigned-to="caseData.assigned_to"
58 @success="handleAssignedToUpdateSuccess"
59 />
60 </CardEntity>
61
62 <CardEntity v-if="caseData.case_description" size="small" class="@xl:col-span-2">
63 <template #header>
64 <div class="text-secondary text-sm">Description</div>
65 </template>
66 {{ caseData.case_description }}
67 </CardEntity>
68 </div>
69 </div>
70 </template>
71
72 <script setup lang="ts">
73 import type { CaseAssignedUpdateSuccessPayload } from "../CaseAssignedSelect.vue"
74 import type { CaseStatusUpdateSuccessPayload } from "../CaseStatusSelect.vue"
75 import type { Case } from "@/types/cases"
76 import CardEntity from "@/components/common/cards/CardEntity.vue"
77 import Chip from "@/components/common/Chip.vue"
78 import { useSettingsStore } from "@/stores/settings"
79 import { formatDate } from "@/utils/format"
80 import CaseAssignedSelect from "../CaseAssignedSelect.vue"
81 import CaseStatusSelect from "../CaseStatusSelect.vue"
82
83 defineProps<{
84 caseData: Case
85 }>()
86
87 const emit = defineEmits<{
88 (e: "statusUpdated", value: CaseStatusUpdateSuccessPayload): void
89 (e: "assignedToUpdated", value: CaseAssignedUpdateSuccessPayload): void
90 }>()
91
92 const dFormats = useSettingsStore().dateFormat
93
94 function handleStatusUpdateSuccess(payload: CaseStatusUpdateSuccessPayload) {
95 emit("statusUpdated", payload)
96 }
97
98 function handleAssignedToUpdateSuccess(payload: CaseAssignedUpdateSuccessPayload) {
99 emit("assignedToUpdated", payload)
100 }
101 </script>