193 lines
5.6 KiB
Vue
193 lines
5.6 KiB
Vue
<script setup>
|
|
import moment from 'moment';
|
|
import { onBeforeMount, onMounted, onUnmounted } from 'vue';
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
import { useStore } from 'vuex';
|
|
const store = useStore()
|
|
const router = useRouter()
|
|
const route = useRoute()
|
|
const editDialog = ref(false)
|
|
const deleteDialog = ref(false)
|
|
const search = ref('')
|
|
const appointmentId = ref('');
|
|
const defaultItem = ref({
|
|
id: -1,
|
|
avatar: '',
|
|
name: '',
|
|
email: '',
|
|
dob: '',
|
|
phone_no: '',
|
|
|
|
})
|
|
|
|
const editedItem = ref(defaultItem.value)
|
|
const editedIndex = ref(-1)
|
|
const patientMeetingList = ref([])
|
|
const isLoading=ref(false)
|
|
// status options
|
|
const selectedOptions = [
|
|
{
|
|
text: 'Active',
|
|
value: 1,
|
|
},
|
|
{
|
|
text: 'InActive',
|
|
value: 2,
|
|
},
|
|
|
|
]
|
|
|
|
const refVForm = ref(null)
|
|
|
|
onBeforeMount(async () => {});
|
|
onMounted(async () => {});
|
|
onUnmounted(async () => {});
|
|
|
|
// headers
|
|
const headers = [
|
|
{
|
|
title: 'Appiontment Id',
|
|
key: 'id',
|
|
},
|
|
{
|
|
title: 'Patient',
|
|
key: 'patient_name',
|
|
},
|
|
{ key: 'appointment_date', sortable: false, title: 'Date' },
|
|
{ key: 'start_time', title: 'Start Time' },
|
|
{ key: 'end_time', title: 'End Time' },
|
|
{ key: 'duration', title: 'Duration' },
|
|
{ title: 'ACTIONS', key: 'actions'},
|
|
]
|
|
|
|
|
|
|
|
const getPatientMeetingList = computed(async () => {
|
|
patientMeetingList.value = [];
|
|
store.dispatch('updateIsLoading', true)
|
|
await store.dispatch('patientMeetingList', {
|
|
id: route.params.id
|
|
})
|
|
console.log('patientMeetingList',store.getters.getPatientMeetingList)
|
|
let list = store.getters.getPatientMeetingList
|
|
store.dispatch('updateIsLoading', false)
|
|
patientMeetingList.value = list;
|
|
return patientMeetingList.value.map(history => ({
|
|
...history,
|
|
appointment_date: changeFormat(history.appointment_date),
|
|
start_time: changeDateFormat(history.start_time),
|
|
end_time: changeDateFormat(history.end_time),
|
|
duration: totalCallDuration(history.start_time, history.end_time),
|
|
}));
|
|
// return patientMeetingList.value
|
|
});
|
|
|
|
function changeDateFormat(dateFormat) {
|
|
console.log("startTimeFormat", dateFormat);
|
|
if (dateFormat) {
|
|
const [datePart, timePart] = dateFormat.split(' '); // Split date and time parts
|
|
const [year, month, day] = datePart.split('-'); // Split date into year, month, and day
|
|
const formattedMonth = parseInt(month).toString(); // Convert month to integer and then string to remove leading zeros
|
|
const formattedDay = parseInt(day).toString(); // Convert day to integer and then string to remove leading zeros
|
|
const formattedDate = `${formattedMonth}-${formattedDay}-${year}`; // Format date as mm-dd-yyyy
|
|
return `${formattedDate} ${timePart}`; // Combine formatted date with original time part
|
|
}
|
|
}
|
|
function changeFormat(dateFormat) {
|
|
const dateParts = dateFormat.split('-'); // Assuming date is in yyyy-mm-dd format
|
|
const year = parseInt(dateParts[0]);
|
|
const month = parseInt(dateParts[1]); // No need for padding
|
|
const day = parseInt(dateParts[2]); // No need for padding
|
|
|
|
// Create a new Date object with the parsed values
|
|
const date = new Date(year, month - 1, day); // Month is zero-based in JavaScript Date object
|
|
|
|
// Format the date as mm-dd-yyyy
|
|
const formattedDate = month + '-' + day + '-' + date.getFullYear();
|
|
|
|
return formattedDate;
|
|
}
|
|
function totalCallDuration(start_time, end_time) {
|
|
console.log(start_time, end_time);
|
|
const startMoment = moment(start_time);
|
|
const endMoment = moment(end_time);
|
|
|
|
// Calculate the duration
|
|
const duration = moment.duration(endMoment.diff(startMoment));
|
|
const hours = duration.hours();
|
|
const thours = `${String(hours).padStart(2, '0')}`;
|
|
const minutes = duration.minutes();
|
|
const tminutes = `${String(minutes).padStart(2, '0')}`;
|
|
const seconds = duration.seconds();
|
|
const tsecond = `${String(seconds).padStart(2, '0')}`;
|
|
let durationText;
|
|
if (hours === 0 && minutes === 0) { //for second
|
|
durationText = ` 00:00:${tsecond}`;
|
|
} else if (hours === 0 && minutes > 0) { //for minutes
|
|
durationText = `00:${tminutes}:${tsecond}`;
|
|
} else if (hours > 0) { //for hours
|
|
durationText = `${thours}:${tminutes}:${tsecond}`;
|
|
}
|
|
const totalDuration = durationText;
|
|
console.log('Duration:', durationText);
|
|
// You may need to adjust this function based on your actual data structure
|
|
// For example, if you have separate first name and last name properties in each appointment object
|
|
return totalDuration; // For now, just return the first name
|
|
}
|
|
onMounted(() => {
|
|
|
|
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
|
|
<v-row>
|
|
<v-col cols="12" md="12" v-if="getPatientMeetingList">
|
|
<VCard title="Meetings">
|
|
<VCardText >
|
|
<VRow>
|
|
<VCol
|
|
cols="12"
|
|
offset-md="8"
|
|
md="4"
|
|
>
|
|
<VTextField
|
|
v-model="search"
|
|
label="Search"
|
|
placeholder="Search ..."
|
|
append-inner-icon="ri-search-line"
|
|
single-line
|
|
hide-details
|
|
dense
|
|
outlined
|
|
/>
|
|
</VCol>
|
|
</VRow>
|
|
</VCardText>
|
|
<VDataTable
|
|
:headers="headers"
|
|
:items="patientMeetingList"
|
|
:search="search"
|
|
:items-per-page="5"
|
|
class="text-no-wrap"
|
|
>
|
|
<template #item.id="{ item }">
|
|
{{ item.id }}
|
|
</template>
|
|
|
|
<!-- Actions -->
|
|
<template #item.actions="{ item }">
|
|
<div class="d-flex gap-1">
|
|
|
|
</div>
|
|
</template>
|
|
</VDataTable>
|
|
</VCard>
|
|
</v-col>
|
|
</v-row>
|
|
|
|
<!-- 👉 Delete Dialog -->
|
|
|
|
</template>
|