213 lines
5.7 KiB
Vue
213 lines
5.7 KiB
Vue
<script setup>
|
|
const props = defineProps({
|
|
userData: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
})
|
|
import { onBeforeMount, onMounted, onUnmounted, ref } 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);
|
|
|
|
// Headers
|
|
const headers = [
|
|
// { title: 'Appointment Id', key: 'id' },
|
|
|
|
{ title: 'Lab Kit Name', key: 'name' },
|
|
{ title: 'Phone', key: 'phone' },
|
|
// { key: 'appointment_date', sortable: false, title: 'Date' },
|
|
{ key: 'address', title: 'Address' },
|
|
{ key: 'amount', title: 'Amount' },
|
|
{ key: 'status', title: 'Status' },
|
|
// { title: 'ACTIONS', key: 'actions' },
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const formatDate = (date) => {
|
|
const messageDate = new Date(date);
|
|
const options = {
|
|
year: 'numeric',
|
|
month: 'numeric',
|
|
day: 'numeric',
|
|
hour: 'numeric', // Change from '2-digit' to 'numeric'
|
|
minute: '2-digit',
|
|
hour12: true, // Add hour12: true to get 12-hour format with AM/PM
|
|
};
|
|
const formattedDate = messageDate.toLocaleString('en-US', options).replace(/\//g, '-');
|
|
return `${formattedDate} `;
|
|
};
|
|
// Fetch and process the patient meeting list
|
|
const getPatientMeetingList = async () => {
|
|
//store.dispatch('updateIsLoading', true);
|
|
//await store.dispatch('patientMeetingList', { id: route.params.id });
|
|
// store.dispatch('updateIsLoading', false);
|
|
|
|
let list = props.userData.labkit;
|
|
|
|
patientMeetingList.value = list
|
|
console.log(list);
|
|
};
|
|
|
|
// Lifecycle hooks
|
|
onBeforeMount(() => {});
|
|
onMounted(async () => {
|
|
await getPatientMeetingList();
|
|
|
|
});
|
|
onUnmounted(() => {});
|
|
const historyDetail = (item, value) => {
|
|
console.log('item',item.id ,value)
|
|
if(value == 'notes')
|
|
router.push('/admin/patient/meeting/notes/' + route.params.id + '/' + item.id);
|
|
if(value == 'prescription')
|
|
router.push('/admin/patient/meeting/prescription/' + route.params.id + '/' + item.id);
|
|
}
|
|
const menusVariant = [
|
|
'primary'
|
|
];
|
|
const options = [
|
|
{
|
|
title: 'Notes',
|
|
key: 'notes',
|
|
},
|
|
{
|
|
title: 'Prescription',
|
|
key: 'prescription',
|
|
},
|
|
|
|
]
|
|
const getStatusColor = (status) => {
|
|
switch (status) {
|
|
case 'pending':
|
|
return 'warning'; // Use Vuetify's warning color (typically yellow)
|
|
case 'shipped':
|
|
return '#45B8AC'; // Use Vuetify's primary color (typically blue)
|
|
case 'delivered':
|
|
return 'success';
|
|
case 'returned':
|
|
return 'red';
|
|
case 'results':
|
|
return 'blue';
|
|
default:
|
|
return 'grey'; // Use Vuetify's grey color for any other status
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
|
|
<v-row>
|
|
<v-col cols="12" md="12">
|
|
<v-card title="Lab Kits">
|
|
<v-card-text>
|
|
<v-row>
|
|
<v-col cols="12" offset-md="8" md="4">
|
|
<v-text-field
|
|
v-model="search"
|
|
label="Search"
|
|
placeholder="Search ..."
|
|
append-inner-icon="ri-search-line"
|
|
single-line
|
|
hide-details
|
|
dense
|
|
outlined
|
|
/>
|
|
</v-col>
|
|
</v-row>
|
|
</v-card-text>
|
|
<v-data-table
|
|
:headers="headers"
|
|
:items="patientMeetingList"
|
|
:search="search"
|
|
:items-per-page="5"
|
|
class="text-no-wrap"
|
|
>
|
|
<template #item.id="{ item }">{{ item.id }}</template>
|
|
<template #item.provider_name="{ item }">
|
|
<div class="d-flex flex-column ms-3">
|
|
<router-link
|
|
:to="{ name: 'admin-provider-profile', params: { id: item.provider_id } }"
|
|
class="highlighted"
|
|
>
|
|
<span class="d-block font-weight-medium text-truncate">{{ item.provider_name }}</span>
|
|
</router-link>
|
|
|
|
</div>
|
|
</template>
|
|
<template #item.status="{ item }">
|
|
<VChip
|
|
:color="getStatusColor(item.status)"
|
|
density="comfortable"
|
|
>
|
|
{{ item.status}}
|
|
</VChip>
|
|
</template>
|
|
<template #item.address="{ item }">{{ item.shipping_address1 }} <br/>{{ item.shipping_city }} {{ item.shipping_state }} {{ item.shipping_zipcode }}</template>
|
|
<!-- Actions -->
|
|
<template #item.actions="{ item }">
|
|
<div class="demo-space-x">
|
|
<VMenu
|
|
v-for="menu in menusVariant"
|
|
:key="menu"
|
|
>
|
|
<template #activator="{ props }">
|
|
|
|
<i class="ri-more-2-line cursor-pointer" style="font-size: 32px;" v-bind="props"></i>
|
|
|
|
</template>
|
|
|
|
<v-list>
|
|
<v-list-item
|
|
v-for="opt in options"
|
|
:key="opt.value"
|
|
@click="historyDetail(item, opt.key)"
|
|
>
|
|
{{ opt.title }}
|
|
</v-list-item>
|
|
</v-list>
|
|
</VMenu>
|
|
</div>
|
|
<!-- <div class="d-flex gap-1">
|
|
<VBtn class="text-capitalize text-white" @click="historyDetail(item)"> Detail
|
|
</VBtn>
|
|
</div> -->
|
|
</template>
|
|
</v-data-table>
|
|
</v-card>
|
|
</v-col>
|
|
</v-row>
|
|
</template>
|