This commit is contained in:
Inshal 2024-06-01 04:28:22 +05:00
parent 88c2df5145
commit fc0c654595
5 changed files with 438 additions and 181 deletions

View File

@ -1,4 +1,22 @@
export const GET_BASE_PATH = ""
let MAIN_DOMAIN = "http://127.0.0.1:8000";
let MAIN_DOMAIN = "http://127.0.0.1:8005";
export const ADMIN_LOGIN_API = MAIN_DOMAIN + "/api/admin/login"
export const PATIENT_LIST_API = MAIN_DOMAIN + "/api/admin/patient-list"
export const PATIENT_INFO_API = MAIN_DOMAIN + "/api/admin/patient/"
export const PATIENT_UPDATE_API = MAIN_DOMAIN + "/api/admin/patient-update/"
export const PATIENT_DELETE_API = MAIN_DOMAIN + "/api/admin/patient-delete/"
export const PROVIDER_LIST_API = MAIN_DOMAIN + "/api/admin/telemed-pro-list"
export const PROVIDER_INFO_API = MAIN_DOMAIN + "/api/admin/telemed-pro/"
export const PROVIDER_UPDATE_API = MAIN_DOMAIN + "/api/admin/telemed-pro-update/"
export const PROVIDER_DELETE_API = MAIN_DOMAIN + "/api/admin/telemed-pro-delete/"
export const LABS_LIST_API = MAIN_DOMAIN + "/api/admin/labs-list"
export const LABS_INFO_API = MAIN_DOMAIN + "/api/admin/labs/"
export const LABS_UPDATE_API = MAIN_DOMAIN + "/api/admin/labs-update/"
export const LABS_DELETE_API = MAIN_DOMAIN + "/api/admin/labs-delete/"

View File

@ -1,78 +1,79 @@
<script setup>
import data from '@/views/demos/forms/tables/data-table/datatable';
import { useStore } from 'vuex';
const store = useStore()
const editDialog = ref(false)
const deleteDialog = ref(false)
const search = ref('')
const defaultItem = ref({
responsiveId: '',
id: -1,
avatar: '',
fullName: '',
post: '',
name: '',
email: '',
city: '',
startDate: '',
salary: -1,
age: '',
experience: '',
status: -1,
// dob: '',
phone_no: '',
})
const editedItem = ref(defaultItem.value)
const editedIndex = ref(-1)
const userList = ref([])
const labsList = ref([])
const isLoading=ref(false)
// status options
const selectedOptions = [
{
text: 'Current',
text: 'Active',
value: 1,
},
{
text: 'Professional',
text: 'InActive',
value: 2,
},
{
text: 'Rejected',
value: 3,
},
{
text: 'Resigned',
value: 4,
},
{
text: 'Applied',
value: 5,
},
]
const refVForm = ref(null)
const formatPhoneNumber = () => {
console.log(editedItem.value)
// Remove non-numeric characters from the input
const numericValue = editedItem.value.contact_no.replace(/\D/g, '');
// Apply formatting logic
if (numericValue.length <= 10) {
editedItem.value.contact_no = numericValue.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
} else {
// Limit the input to a maximum of 14 characters
const truncatedValue = numericValue.slice(0, 10);
editedItem.value.contact_no = truncatedValue.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
};
// headers
const headers = [
{
title: 'ID',
key: 'id',
},
{
title: 'NAME',
key: 'fullName',
key: 'name',
},
{
title: 'EMAIL',
key: 'email',
title: 'ADDRESS',
key: 'address',
},
// {
// title: 'Date Of Birth',
// key: 'dob',
// },
{
title: 'DATE',
key: 'startDate',
},
{
title: 'SALARY',
key: 'salary',
},
{
title: 'AGE',
key: 'age',
},
{
title: 'STATUS',
key: 'status',
title: 'CONTACT',
key: 'contact_no',
},
{
title: 'ACTIONS',
key: 'actions',
@ -108,13 +109,13 @@ const resolveStatusVariant = status => {
}
const editItem = item => {
editedIndex.value = userList.value.indexOf(item)
editedIndex.value = labsList.value.indexOf(item)
editedItem.value = { ...item }
editDialog.value = true
}
const deleteItem = item => {
editedIndex.value = userList.value.indexOf(item)
editedIndex.value = labsList.value.indexOf(item)
editedItem.value = { ...item }
deleteDialog.value = true
}
@ -131,63 +132,83 @@ const closeDelete = () => {
editedItem.value = { ...defaultItem.value }
}
const save = () => {
if (editedIndex.value > -1)
Object.assign(userList.value[editedIndex.value], editedItem.value)
else
userList.value.push(editedItem.value)
const save = async () => {
const { valid } = await refVForm.value.validate()
console.log(valid)
if (valid) {
if (editedIndex.value > -1){
await store.dispatch('labUpdate',{
id: editedItem.value.id,
name: editedItem.value.name,
address: editedItem.value.address,
contact_no: editedItem.value.contact_no,
})
Object.assign(labsList.value[editedIndex.value], editedItem.value)
}else{
labsList.value.push(editedItem.value)
}
close()
}
}
const deleteItemConfirm = () => {
userList.value.splice(editedIndex.value, 1)
const deleteItemConfirm = async() => {
console.log('editedIndex.value',editedIndex.value,editedItem.value.id)
await store.dispatch('labDelete',{
id: editedItem.value.id
})
labsList.value.splice(editedIndex.value, 1)
closeDelete()
}
const getlabsList = computed(async () => {
store.dispatch('updateIsLoading', true)
await store.dispatch('labsList')
console.log('getLabsList',store.getters.getLabsList)
let list = store.getters.getLabsList
store.dispatch('updateIsLoading', false)
labsList.value = list
return labsList.value
});
onMounted(() => {
userList.value = JSON.parse(JSON.stringify(data))
})
</script>
<template>
<VOverlay
v-model="isLoading"
contained
persistent
scroll-strategy="none"
class="align-center justify-center"
>
<VProgressCircular indeterminate />
</VOverlay>
<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>
<v-row>
<v-col cols="12" md="12" v-if="getlabsList">
<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="userList"
:items="labsList"
:search="search"
:items-per-page="5"
class="text-no-wrap"
>
<!-- full name -->
<template #item.fullName="{ item }">
<template #item.name="{ item }">
<div class="d-flex align-center">
<!-- avatar -->
<VAvatar
@ -203,11 +224,11 @@ onMounted(() => {
<span
v-else
class="text-sm"
>{{ avatarText(item.fullName) }}</span>
>{{ avatarText(item.name) }}</span>
</VAvatar>
<div class="d-flex flex-column ms-3">
<span class="d-block font-weight-medium text-high-emphasis text-truncate">{{ item.fullName }}</span>
<span class="d-block font-weight-medium text-high-emphasis text-truncate">{{ item.name }}</span>
<small>{{ item.post }}</small>
</div>
</div>
@ -241,88 +262,62 @@ onMounted(() => {
</div>
</template>
</VDataTable>
</v-col>
</v-row>
<!-- 👉 Edit Dialog -->
<VDialog
v-model="editDialog"
max-width="800px"
max-width="600px"
>
<VForm ref="refVForm" >
<VCard>
<VCardTitle>
<span class="headline">Edit Item</span>
<span class="headline">Edit Lab</span>
</VCardTitle>
<VCardText>
<VContainer>
<VContainer >
<VRow>
<!-- fullName -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCol cols="12" md="12">
<VTextField
v-model="editedItem.fullName"
label="User name"
v-model="editedItem.name"
label="Name"
:rules="[requiredValidator]"
/>
</VCol>
<!-- email -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCol cols="12" sm="12" md="12">
<VTextField
v-model="editedItem.email"
label="Email"
v-model="editedItem.address"
label="Address"
:rules="[requiredValidator]"
/>
</VCol>
<!-- salary -->
<VCol
cols="12"
sm="6"
md="4"
>
<!-- <VCol cols="12" sm="6" md="12">
<VTextField
v-model="editedItem.salary"
label="Salary"
prefix="$"
type="number"
v-model="editedItem.dob"
label="Date Of Birth"
/>
</VCol> -->
<VCol cols="12" sm="6" md="12">
<VTextField v-model="editedItem.contact_no" label="Phone Number" pattern="^\(\d{3}\) \d{3}-\d{4}$"
:rules="[requiredPhone, validUSAPhone]" placeholder="i.e. (000) 000-0000"
@input="formatPhoneNumber" max="14" density="comfortable" />
</VCol>
<!-- age -->
<VCol
cols="12"
sm="6"
md="4"
>
<VTextField
v-model="editedItem.age"
label="Age"
type="number"
/>
</VCol>
<!-- start date -->
<VCol
cols="12"
sm="6"
md="4"
>
<VTextField
v-model="editedItem.startDate"
label="Date"
/>
</VCol>
<!-- status -->
<VCol
cols="12"
sm="6"
md="4"
md="12"
>
<VSelect
v-model="editedItem.status"
@ -355,14 +350,16 @@ onMounted(() => {
>
Save
</VBtn>
</VCardActions>
</VCard>
</VForm>
</VDialog>
<!-- 👉 Delete Dialog -->
<VDialog
v-model="deleteDialog"
max-width="600px"
max-width="500px"
>
<VCard>
<VCardTitle>

View File

@ -1,7 +1,5 @@
<script setup>
import { onBeforeMount, onMounted, onUnmounted } from 'vue';
import { useStore } from 'vuex';
const store = useStore()
const editDialog = ref(false)
@ -34,9 +32,11 @@ const selectedOptions = [
]
const refVForm = ref(null)
const refVForm = ref(null)
onBeforeMount(async () => {});
onMounted(async () => {});
onUnmounted(async () => {});
const formatPhoneNumber = () => {
console.log(editedItem.value)
// Remove non-numeric characters from the input
@ -53,6 +53,10 @@ const formatPhoneNumber = () => {
};
// headers
const headers = [
{
title: 'ID',
key: 'id',
},
{
title: 'NAME',
key: 'name',
@ -111,6 +115,7 @@ const editItem = item => {
}
const deleteItem = item => {
console.log('del',item)
editedIndex.value = patientList.value.indexOf(item)
editedItem.value = { ...item }
deleteDialog.value = true
@ -132,17 +137,32 @@ const save = async () => {
const { valid } = await refVForm.value.validate()
console.log(valid)
if (valid) {
console.log('editedItem.value',editedItem.value);
if (editedIndex.value > -1)
Object.assign(patientList.value[editedIndex.value], editedItem.value)
else
patientList.value.push(editedItem.value)
{
await store.dispatch('patientUpdate',{
id: editedItem.value.id,
first_name: editedItem.value.first_name,
last_name: editedItem.value.last_name,
email: editedItem.value.email,
phone_no: editedItem.value.phone_no,
dob: editedItem.value.dob,
})
Object.assign(patientList.value[editedIndex.value], editedItem.value)
}else{
patientList.value.push(editedItem.value)
}
close()
}
}
const deleteItemConfirm = () => {
const deleteItemConfirm = async () => {
console.log('editedIndex.value',editedIndex.value,editedItem.value.id)
await store.dispatch('patientDelete',{
id: editedItem.value.id
})
patientList.value.splice(editedIndex.value, 1)
closeDelete()
}
@ -192,6 +212,9 @@ onMounted(() => {
:items-per-page="5"
class="text-no-wrap"
>
<template #item.id="{ item }">
{{ item.id }}
</template>
<!-- full name -->
<template #item.name="{ item }">
<div class="d-flex align-center">

View File

@ -12,14 +12,14 @@ const defaultItem = ref({
avatar: '',
name: '',
email: '',
dob: '',
// dob: '',
phone_no: '',
})
const editedItem = ref(defaultItem.value)
const editedIndex = ref(-1)
const patientList = ref([])
const providersList = ref([])
const isLoading=ref(false)
// status options
const selectedOptions = [
@ -53,6 +53,10 @@ const formatPhoneNumber = () => {
};
// headers
const headers = [
{
title: 'ID',
key: 'id',
},
{
title: 'NAME',
key: 'name',
@ -61,10 +65,10 @@ const headers = [
title: 'EMAIL',
key: 'email',
},
{
title: 'Date Of Birth',
key: 'dob',
},
// {
// title: 'Date Of Birth',
// key: 'dob',
// },
{
title: 'Phone',
key: 'phone_no',
@ -105,13 +109,13 @@ const resolveStatusVariant = status => {
}
const editItem = item => {
editedIndex.value = patientList.value.indexOf(item)
editedIndex.value = providersList.value.indexOf(item)
editedItem.value = { ...item }
editDialog.value = true
}
const deleteItem = item => {
editedIndex.value = patientList.value.indexOf(item)
editedIndex.value = providersList.value.indexOf(item)
editedItem.value = { ...item }
deleteDialog.value = true
}
@ -132,28 +136,39 @@ const save = async () => {
const { valid } = await refVForm.value.validate()
console.log(valid)
if (valid) {
if (editedIndex.value > -1)
Object.assign(patientList.value[editedIndex.value], editedItem.value)
else
patientList.value.push(editedItem.value)
if (editedIndex.value > -1){
await store.dispatch('providerUpdate',{
id: editedItem.value.id,
first_name: editedItem.value.first_name,
last_name: editedItem.value.last_name,
email: editedItem.value.email,
})
Object.assign(providersList.value[editedIndex.value], editedItem.value)
}else{
providersList.value.push(editedItem.value)
}
close()
}
}
const deleteItemConfirm = () => {
patientList.value.splice(editedIndex.value, 1)
const deleteItemConfirm = async() => {
console.log('editedIndex.value',editedIndex.value,editedItem.value.id)
await store.dispatch('providerDelete',{
id: editedItem.value.id
})
providersList.value.splice(editedIndex.value, 1)
closeDelete()
}
const getPatientList = computed(async () => {
const getprovidersList = computed(async () => {
store.dispatch('updateIsLoading', true)
await store.dispatch('patientList')
console.log('patientList',store.getters.getPatientList)
let list = store.getters.getPatientList
await store.dispatch('providersList')
console.log('getProvidersList',store.getters.getProvidersList)
let list = store.getters.getProvidersList
store.dispatch('updateIsLoading', false)
patientList.value = list
return patientList.value
providersList.value = list
return providersList.value
});
onMounted(() => {
@ -164,7 +179,7 @@ onMounted(() => {
<template>
<v-row>
<v-col cols="12" md="12" v-if="getPatientList">
<v-col cols="12" md="12" v-if="getprovidersList">
<VCardText >
<VRow>
<VCol
@ -187,7 +202,7 @@ onMounted(() => {
</VCardText>
<VDataTable
:headers="headers"
:items="patientList"
:items="providersList"
:search="search"
:items-per-page="5"
class="text-no-wrap"
@ -257,7 +272,7 @@ onMounted(() => {
<VForm ref="refVForm" >
<VCard>
<VCardTitle>
<span class="headline">Edit Patient</span>
<span class="headline">Edit Provider</span>
</VCardTitle>
<VCardText>
@ -290,12 +305,12 @@ onMounted(() => {
</VCol>
<VCol cols="12" sm="6" md="12">
<!-- <VCol cols="12" sm="6" md="12">
<VTextField
v-model="editedItem.dob"
label="Date Of Birth"
/>
</VCol>
</VCol> -->
<VCol cols="12" sm="6" md="12">
<VTextField v-model="editedItem.phone_no" label="Phone Number" pattern="^\(\d{3}\) \d{3}-\d{4}$"
:rules="[requiredPhone, validUSAPhone]" placeholder="i.e. (000) 000-0000"

View File

@ -1,11 +1,23 @@
import axios from 'axios';
import { createStore } from 'vuex';
import { PATIENT_LIST_API } from './constants.js';
import {
LABS_DELETE_API,
LABS_LIST_API,
LABS_UPDATE_API,
PATIENT_DELETE_API,
PATIENT_LIST_API,
PATIENT_UPDATE_API,
PROVIDER_DELETE_API,
PROVIDER_LIST_API,
PROVIDER_UPDATE_API
} from './constants.js';
export default createStore({
state: {
isLoading: false,
patientList:[]
patientList:[],
providersList:[],
labsList:[]
},
mutations: {
setLoading(state, payload) {
@ -14,6 +26,12 @@ export default createStore({
},
setPtientList(state, payload) {
state.patientList = payload
},
setProvidersList(state, payload) {
state.providersList = payload
},
setLabsList(state, payload) {
state.labsList = payload
}
},
actions: {
@ -23,12 +41,12 @@ export default createStore({
},
async patientList({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
console.log(localStorage.getItem('admin_access_token'))
await axios.post(PATIENT_LIST_API, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data.patients);
let dataArray =[]
@ -40,7 +58,8 @@ export default createStore({
dataObject.email = data.email
dataObject.dob = data.dob
dataObject.phone_no = data.phone_no
dataObject.avatar = ''
dataObject.avatar = '',
dataObject.id = data.id,
dataArray.push(dataObject)
}
console.log(dataArray)
@ -51,7 +70,186 @@ export default createStore({
commit('setLoading', false)
console.error('Error:', error);
});
},
},
async patientUpdate({ commit }, payload) {
commit('setLoading', true)
await axios.post(PATIENT_UPDATE_API+payload.id, {
first_name: payload.first_name,
last_name: payload.last_name,
email: payload.email,
phone_no: payload.phone_no,
dob: payload.dob,
}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async patientDelete({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
await axios.post(PATIENT_DELETE_API+payload.id, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async providersList({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
await axios.post(PROVIDER_LIST_API, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data.patients);
let dataArray =[]
for (let data of response.data.patients) {
let dataObject = {}
dataObject.name = data.first_name + ' ' + data.last_name
dataObject.first_name = data.first_name
dataObject.last_name = data.last_name
dataObject.email = data.email
// dataObject.dob = data.dob
dataObject.phone_no = data.phone_number
dataObject.avatar = '',
dataObject.id = data.id,
dataArray.push(dataObject)
}
console.log(dataArray)
commit('setProvidersList',dataArray)
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async providerUpdate({ commit }, payload) {
commit('setLoading', true)
await axios.post(PROVIDER_UPDATE_API+payload.id, {
first_name: payload.first_name,
last_name: payload.last_name,
email: payload.email,
phone_number: payload.phone_no,
}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async providerDelete({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
await axios.post(PROVIDER_DELETE_API+payload.id, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async labsList({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
await axios.post(LABS_LIST_API, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
let dataArray =[]
for (let data of response.data.patients) {
let dataObject = {}
dataObject.name = data.name
dataObject.address = data.address
dataObject.slot_date = data.slot_date
dataObject.slot_time = data.slot_time
dataObject.appointment_id = data.appointment_id
dataObject.booking_time = data.booking_time
dataObject.contact_no = data.contact_no
dataObject.avatar = '',
dataObject.id = data.id,
dataArray.push(dataObject)
}
console.log(dataArray)
commit('setLabsList',dataArray)
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async labUpdate({ commit }, payload) {
commit('setLoading', true)
await axios.post(LABS_UPDATE_API+payload.id, {
name: payload.name,
address: payload.address,
contact_no: payload.contact_no,
}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
async labDelete({ commit }, payload) {
commit('setLoading', true)
console.log(localStorage.getItem('admin_access_token'))
await axios.post(LABS_DELETE_API+payload.id, {}, {
headers: {
'Authorization': `Bearer ${localStorage.getItem('admin_access_token')}`,
}
}) .then(response => {
commit('setLoading', false)
console.log('Response:', response.data);
})
.catch(error => {
commit('setLoading', false)
console.error('Error:', error);
});
},
},
getters: {
getIsLoading(state){
@ -60,5 +258,11 @@ export default createStore({
getPatientList(state){
return state.patientList
},
getProvidersList(state){
return state.providersList
},
getLabsList(state){
return state.labsList
},
}
})