initial commit

This commit is contained in:
Inshal
2024-10-25 01:02:11 +05:00
commit 6e65bc3a62
1710 changed files with 273609 additions and 0 deletions

View File

@@ -0,0 +1,150 @@
<script setup>
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
import { useChat } from './useChat'
import { useChatStore } from '@/views/apps/chat/useChatStore'
import { avatarText } from '@core/utils/formatters'
const emit = defineEmits(['close'])
const store = useChatStore()
const { resolveAvatarBadgeVariant } = useChat()
</script>
<template>
<template v-if="store.activeChat">
<!-- Close Button -->
<div
class="pt-2 me-2"
:class="$vuetify.locale.isRtl ? 'text-left' : 'text-right'"
>
<IconBtn @click="$emit('close')">
<VIcon
icon="tabler-x"
color="disabled"
class="text-medium-emphasis"
/>
</IconBtn>
</div>
<!-- User Avatar + Name + Role -->
<div class="text-center px-6">
<VBadge
location="bottom right"
offset-x="7"
offset-y="4"
bordered
:color="resolveAvatarBadgeVariant(store.activeChat.contact.status)"
class="chat-user-profile-badge mb-5"
>
<VAvatar
size="80"
:variant="!store.activeChat.contact.avatar ? 'tonal' : undefined"
:color="!store.activeChat.contact.avatar ? resolveAvatarBadgeVariant(store.activeChat.contact.status) : undefined"
>
<VImg
v-if="store.activeChat.contact.avatar"
:src="store.activeChat.contact.avatar"
/>
<span
v-else
class="text-3xl"
>{{ avatarText(store.activeChat.contact.fullName) }}</span>
</VAvatar>
</VBadge>
<h5 class="text-h5">
{{ store.activeChat.contact.fullName }}
</h5>
<p class="text-capitalize text-medium-emphasis">
{{ store.activeChat.contact.role }}
</p>
</div>
<!-- User Data -->
<PerfectScrollbar
class="ps-chat-user-profile-sidebar-content text-medium-emphasis pb-5 px-5"
:options="{ wheelPropagation: false }"
>
<!-- About -->
<div class="my-8">
<span class="text-sm text-disabled">ABOUT</span>
<p class="mt-2">
{{ store.activeChat.contact.about }}
</p>
</div>
<!-- Personal Information -->
<div class="mb-8">
<span class="d-block text-sm text-disabled mb-3">PERSONAL INFORMATION</span>
<div class="d-flex align-center">
<VIcon
class="me-2"
icon="tabler-mail"
size="24"
/>
<span>lucifer@email.com</span>
</div>
<div class="d-flex align-center my-3">
<VIcon
class="me-2"
icon="tabler-phone-call"
size="24"
/>
<span>+1(123) 456 - 7890</span>
</div>
<div class="d-flex align-center">
<VIcon
class="me-2"
icon="tabler-clock"
size="24"
/>
<span>Mon - Fri 10AM - 8PM</span>
</div>
</div>
<!-- Options -->
<div>
<span class="d-block text-sm text-disabled mb-3">OPTIONS</span>
<div class="d-flex align-center">
<VIcon
class="me-2"
icon="tabler-badge"
size="24"
/>
<span>Add Tag</span>
</div>
<div class="d-flex align-center my-3">
<VIcon
class="me-2"
icon="tabler-star"
size="24"
/>
<span>Important Contact</span>
</div>
<div class="d-flex align-center mb-3">
<VIcon
class="me-2"
icon="tabler-photo"
size="24"
/>
<span>Shared Media</span>
</div>
<div class="d-flex align-center mb-3">
<VIcon
class="me-2"
icon="tabler-trash"
size="24"
/>
<span>Delete Contact</span>
</div>
<div class="d-flex align-center">
<VIcon
class="me-2 ms-1"
size="18"
icon="tabler-ban"
/>
<span>Block Contact</span>
</div>
</div>
</PerfectScrollbar>
</template>
</template>

View File

@@ -0,0 +1,91 @@
<script setup>
import { useChat } from '@/views/apps/chat/useChat'
import { useChatStore } from '@/views/apps/chat/useChatStore'
import {
avatarText,
formatDateToMonthShort,
} from '@core/utils/formatters'
const props = defineProps({
isChatContact: {
type: Boolean,
required: false,
default: false,
},
user: {
type: null,
required: true,
},
})
const store = useChatStore()
const { resolveAvatarBadgeVariant } = useChat()
const isChatContactActive = computed(() => {
const isActive = store.activeChat?.contact.id === props.user.id
if (!props.isChatContact)
return !store.activeChat?.chat && isActive
return isActive
})
</script>
<template>
<li :key="store.chatsContacts.length" class="chat-contact cursor-pointer d-flex align-center"
:class="{ 'chat-contact-active': isChatContactActive }">
<VBadge dot location="bottom right" offset-x="3" offset-y="0"
:color="resolveAvatarBadgeVariant(props.user.status)" bordered :model-value="props.isChatContact">
<VAvatar size="38" :variant="!props.user.avatar ? 'tonal' : undefined"
:color="!props.user.avatar ? resolveAvatarBadgeVariant(props.user.status) : undefined">
<VImg v-if="props.user.avatar" :src="props.user.avatar" alt="John Doe" />
<span v-else>{{ avatarText(user.fullName) }}</span>
</VAvatar>
</VBadge>
<div class="flex-grow-1 ms-4 overflow-hidden">
<p class="text-base text-high-emphasis mb-0">
{{ props.user.fullName }}
</p>
<p class="mb-0 text-truncate text-body-2">
{{ props.isChatContact && 'chat' in props.user ? props.user.chat.lastMessage.message : props.user.about
}}
</p>
</div>
<div v-if="props.isChatContact && 'chat' in props.user" class="d-flex flex-column align-self-start">
<span class="text-body-2 text-disabled whitespace-no-wrap">{{
formatDateToMonthShort(props.user.chat.lastMessage.time) }}</span>
<VBadge v-if="props.user.chat.unseenMsgs" color="error" inline :content="props.user.chat.unseenMsgs"
class="ms-auto" />
</div>
</li>
</template>
<style lang="scss">
@use "@styles/variables/_vuetify.scss";
@use "@core/scss/base/mixins";
@use "vuetify/lib/styles/tools/states" as vuetifyStates;
.chat-contact {
border-radius: vuetify.$border-radius-root;
padding-block: 8px;
padding-inline: 12px;
@include mixins.before-pseudo;
@include vuetifyStates.states($active: false);
&.chat-contact-active {
background: linear-gradient(72.47deg, rgb(var(--v-theme-primary)) 0%, #fff 300%);
color: #fff;
--v-theme-on-background: #fff;
.v-avatar {
background: #fff;
outline: 2px solid #fff;
}
}
.v-badge--bordered .v-badge__badge::after {
color: #fff;
}
}
</style>

View File

@@ -0,0 +1,96 @@
<script setup>
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
import { useChat } from './useChat'
import ChatContact from '@/views/apps/chat/ChatContact.vue'
import { useChatStore } from '@/views/apps/chat/useChatStore'
import AppTextField from '@/@core/app-form-elements/AppTextField.vue'
const props = defineProps({
search: {
type: String,
required: true,
},
isDrawerOpen: {
type: Boolean,
required: true,
},
})
const emit = defineEmits([
'openChatOfContact',
'showUserProfile',
'close',
])
const { resolveAvatarBadgeVariant } = useChat()
const search = useVModel(props, 'search')
const store = useChatStore()
</script>
<template>
<!-- 👉 Chat list header -->
<div v-if="store.profileUser" class="chat-list-header">
<VBadge dot location="bottom right" offset-x="3" offset-y="3"
:color="resolveAvatarBadgeVariant(store.profileUser.status)" bordered>
<VAvatar size="38" class="cursor-pointer" @click="$emit('showUserProfile')">
<VImg :src="store.profileUser.avatar" alt="John Doe" />
</VAvatar>
</VBadge>
<AppTextField v-model="search" placeholder="Search..." class="app-text-field flex-grow-1 ms-4 chat-list-search"
density="compact">
<template #prepend-inner>
<VIcon size="22" icon="tabler-search" />
</template>
</AppTextField>
<IconBtn v-if="$vuetify.display.smAndDown" @click="$emit('close')">
<VIcon icon="tabler-x" class="text-medium-emphasis" />
</IconBtn>
</div>
<VDivider />
<PerfectScrollbar tag="ul" class="d-flex flex-column gap-y-1 chat-contacts-list px-3 list-none"
:options="{ wheelPropagation: false }">
<li>
<span class="chat-contact-header d-block text-primary text-xl font-weight-medium">Chats</span>
</li>
<ChatContact v-for="contact in store.chatsContacts" :key="`chat-${contact.id}`" :user="contact" is-chat-contact
@click="$emit('openChatOfContact', contact.id)" />
<span v-show="!store.chatsContacts.length" class="no-chat-items-text text-disabled">No chats found</span>
<li>
<span class="chat-contact-header d-block text-primary text-xl font-weight-medium">Contacts</span>
</li>
<ChatContact v-for="contact in store.contacts" :key="`chat-${contact.id}`" :user="contact"
@click="$emit('openChatOfContact', contact.id)" />
<span v-show="!store.contacts.length" class="no-chat-items-text text-disabled">No contacts found</span>
</PerfectScrollbar>
</template>
<style lang="scss">
.chat-contacts-list {
--chat-content-spacing-x: 16px;
padding-block-end: 0.75rem;
.chat-contact-header {
margin-block-end: 0.625rem;
margin-block-start: 1.25rem;
}
.chat-contact-header,
.no-chat-items-text {
margin-inline: var(--chat-content-spacing-x);
}
}
.chat-list-search {
.v-field--focused {
box-shadow: none !important;
}
}
</style>

View File

@@ -0,0 +1,125 @@
<script setup>
import { useChatStore } from '@/views/apps/chat/useChatStore'
import { formatDate } from '@core/utils/formatters'
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
const store = useChatStore()
const contact = computed(() => ({
id: store.activeChat?.contact.id,
avatar: store.activeChat?.contact.avatar,
}))
const resolveFeedbackIcon = feedback => {
if (feedback.isSeen)
return {
icon: 'tabler-checks',
color: 'success',
}
else if (feedback.isDelivered)
return {
icon: 'tabler-checks',
color: undefined,
}
else
return {
icon: 'tabler-check',
color: undefined,
}
}
const msgGroups = computed(() => {
let messages = []
const _msgGroups = []
if (store.activeChat.chat) {
messages = store.activeChat.chat.messages
let msgSenderId = messages[0].senderId
let msgGroup = {
senderId: msgSenderId,
messages: [],
}
messages.forEach((msg, index) => {
if (msgSenderId === msg.senderId) {
msgGroup.messages.push({
message: msg.message,
time: msg.time,
feedback: msg.feedback,
})
} else {
msgSenderId = msg.senderId
_msgGroups.push(msgGroup)
msgGroup = {
senderId: msg.senderId,
messages: [{
message: msg.message,
time: msg.time,
feedback: msg.feedback,
}],
}
}
if (index === messages.length - 1)
_msgGroups.push(msgGroup)
})
}
return _msgGroups
})
</script>
<template>
<div class="chat-log pa-5">
<div v-for="(msgGrp, index) in msgGroups" :key="msgGrp.senderId + String(index)"
class="chat-group d-flex align-start" :class="[{
'flex-row-reverse': msgGrp.senderId !== contact.id,
'mb-4': msgGroups.length - 1 !== index,
}]">
<div class="chat-avatar" :class="msgGrp.senderId !== contact.id ? 'ms-4' : 'me-4'">
<VAvatar size="32">
<VImg :src="msgGrp.senderId === contact.id ? contact.avatar : store.profileUser?.avatar" />
</VAvatar>
</div>
<div class="chat-body d-inline-flex flex-column"
:class="msgGrp.senderId !== contact.id ? 'align-end' : 'align-start'">
<div v-for="(msgData, msgIndex) in msgGrp.messages" :key="msgData.time"
class="chat-content py-2 px-4 elevation-1" style="background-color: rgb(var(--v-theme-surface));"
:class="[
msgGrp.senderId === contact.id ? 'chat-left' : 'bg-primary text-white chat-right',
msgGrp.messages.length - 1 !== msgIndex ? 'mb-3' : 'mb-1',
]">
<p class="mb-0 text-base"> {{ msgData.message }}</p>
</div>
<div :class="{ 'text-right': msgGrp.senderId !== contact.id }">
<VIcon v-if="msgGrp.senderId !== contact.id" size="18"
:color="resolveFeedbackIcon(msgGrp.messages[msgGrp.messages.length - 1].feedback).color">
{{ resolveFeedbackIcon(msgGrp.messages[msgGrp.messages.length - 1].feedback).icon }}
</VIcon>
<span class="text-sm ms-1 text-disabled">{{ formatDate(msgGrp.messages[msgGrp.messages.length -
1].time, { hour: 'numeric', minute: 'numeric' }) }}</span>
</div>
</div>
</div>
</div>
</template>
<style lang=scss>
.chat-log {
.chat-content {
border-end-end-radius: 6px;
border-end-start-radius: 6px;
&.chat-left {
border-start-end-radius: 6px;
}
&.chat-right {
border-start-start-radius: 6px;
}
}
}
.text-base {
font-size: .9375rem !important;
line-height: 1.375rem !important;
}
</style>

View File

@@ -0,0 +1,111 @@
<script setup>
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
import { useChat } from './useChat'
import { useChatStore } from '@/views/apps/chat/useChatStore'
import { avatarText } from '@core/utils/formatters'
import AppTextarea from '@/@core/app-form-elements/AppTextarea.vue'
const emit = defineEmits(['close'])
// composables
const store = useChatStore()
const { resolveAvatarBadgeVariant } = useChat()
const userStatusRadioOptions = [
{
title: 'Online',
value: 'online',
color: 'success',
},
{
title: 'Away',
value: 'away',
color: 'warning',
},
{
title: 'Do not disturb',
value: 'busy',
color: 'error',
},
{
title: 'Offline',
value: 'offline',
color: 'secondary',
},
]
</script>
<template>
<template v-if="store.profileUser">
<!-- Close Button -->
<div class="pt-2 me-2 text-end">
<IconBtn @click="$emit('close')">
<VIcon class="text-medium-emphasis" color="disabled" icon="tabler-x" />
</IconBtn>
</div>
<!-- User Avatar + Name + Role -->
<div class="text-center px-6">
<VBadge location="bottom right" offset-x="7" offset-y="4" bordered
:color="resolveAvatarBadgeVariant(store.profileUser.status)" class="chat-user-profile-badge mb-3">
<VAvatar size="84" :variant="!store.profileUser.avatar ? 'tonal' : undefined"
:color="!store.profileUser.avatar ? resolveAvatarBadgeVariant(store.profileUser.status) : undefined">
<VImg v-if="store.profileUser.avatar" :src="store.profileUser.avatar" />
<span v-else class="text-3xl">{{ avatarText(store.profileUser.fullName) }}</span>
</VAvatar>
</VBadge>
<h5 class="text-h5">
{{ store.profileUser.fullName }}
</h5>
<p class="text-capitalize text-medium-emphasis">
{{ store.profileUser.role }}
</p>
</div>
<!-- User Data -->
<PerfectScrollbar class="ps-chat-user-profile-sidebar-content pb-5 px-5" :options="{ wheelPropagation: false }">
<!-- About -->
<div class="my-5 text-medium-emphasis">
<span for="textarea-user-about" class="text-sm text-disabled">ABOUT</span>
<AppTextarea id="textarea-user-about" v-model="store.profileUser.about" auto-grow class="mt-1"
rows="4" />
</div>
<!-- Status -->
<div class="mb-5">
<span class="text-sm text-disabled">STATUS</span>
<VRadioGroup v-model="store.profileUser.status" class="mt-1">
<VRadio v-for="radioOption in userStatusRadioOptions" :key="radioOption.title"
:label="radioOption.title" :value="radioOption.value" :color="radioOption.color" />
</VRadioGroup>
</div>
<!-- Settings -->
<div class="text-medium-emphasis">
<span class="text-sm text-disabled">SETTINGS</span>
<div class="d-flex align-center my-3">
<VIcon class="me-2" icon="tabler-message-dots" size="22" />
<span class="text-high-emphasis">Two-step Verification</span>
</div>
<div class="d-flex align-center mb-3">
<VIcon class="me-2" icon="tabler-bell" size="22" />
<span class="text-high-emphasis">Notification</span>
</div>
<div class="d-flex align-center mb-3">
<VIcon class="me-2" icon="tabler-user-plus" size="22" />
<span class="text-high-emphasis">Invite Friends</span>
</div>
<div class="d-flex align-center">
<VIcon class="me-2" icon="tabler-trash" size="22" />
<span class="text-high-emphasis">Delete Account</span>
</div>
</div>
<!-- Logout Button -->
<VBtn color="primary" class="mt-11">
Logout
</VBtn>
</PerfectScrollbar>
</template>
</template>

View File

@@ -0,0 +1,16 @@
export const useChat = () => {
const resolveAvatarBadgeVariant = status => {
if (status === 'online')
return 'success'
if (status === 'busy')
return 'error'
if (status === 'away')
return 'warning'
return 'secondary'
}
return {
resolveAvatarBadgeVariant,
}
}

View File

@@ -0,0 +1,74 @@
import axios from '@axios';
export const useChatStore = defineStore('chat', {
// arrow function recommended for full type inference
state: () => ({
contacts: [],
chatsContacts: [],
profileUser: undefined,
activeChat: null,
}),
actions: {
async fetchChatsAndContacts(q) {
const { data } = await axios.get('/apps/chat/chats-and-contacts', {
params: { q },
})
const { chatsContacts, contacts, profileUser } = data
this.chatsContacts = chatsContacts
this.contacts = contacts
this.profileUser = profileUser
},
async getChat(userId) {
const { data } = await axios.get(`/apps/chat/chats/${userId}`)
this.activeChat = data
},
async sendMsg(message) {
const senderId = this.profileUser?.id
const { data } = await axios.post(`/apps/chat/chats/${this.activeChat?.contact.id}`, { message, senderId })
const { msg, chat } = data
console.log(this.activeChat?.contact.id,senderId)
console.log(data)
// ? If it's not undefined => New chat is created (Contact is not in list of chats)
if (chat !== undefined) {
const activeChat = this.activeChat
this.chatsContacts.push({
...activeChat.contact,
chat: {
id: chat.id,
lastMessage: [],
unseenMsgs: 0,
messages: [msg],
},
})
if (this.activeChat) {
this.activeChat.chat = {
id: chat.id,
messages: [msg],
unseenMsgs: 0,
userId: this.activeChat?.contact.id,
}
}
}
else {
this.activeChat?.chat?.messages.push(msg)
}
// Set Last Message for active contact
const contact = this.chatsContacts.find(c => {
if (this.activeChat)
return c.id === this.activeChat.contact.id
return false
})
contact.chat.lastMessage = msg
},
},
})

View File

@@ -0,0 +1,311 @@
<script setup>
import illustrationJohnDark from '@images/cards/illustration-john-dark.png';
import illustrationJohnLight from '@images/cards/illustration-john-light.png';
import { useTheme } from 'vuetify';
// const panelActive = ref(true);
const panel = ref(0)
onMounted(() => {
// panelActive.value = true;
});
const props = defineProps({
date: {
type: String,
required: true,
},
time: {
type: String,
required: true,
},
timezone: {
type: String,
required: true,
},
})
const orders = ref([
{
icon: 'tabler-circle-check',
type: 'SENDER',
name: 'Myrtle Ullrich',
address: '101 Boulder, California(CA), 95959',
},
{
icon: 'tabler-map-pin',
type: 'RECEIVER',
name: 'Barry Schowalter',
address: '939 Orange, California(CA),92118',
},
]);
const { global } = useTheme()
const illustrationJohn = computed(() => global.name.value === 'dark' ? illustrationJohnDark : illustrationJohnLight)
</script>
<template>
<VCard class="text-center text-sm-start">
<VRow no-gutters>
<VCol>
<VExpansionPanels v-model="panel">
<VExpansionPanel>
<VExpansionPanelTitle variant="tonal" color="secondary">
<span><b>TRT Lab Kit with a Virtual Provider Consultation.</b> <br><br>
<p>{{ date }} Status: InProcess <br>
</p>
<p>Test Kit Tracking : <Routerview to="/"> To you</Routerview> / <Routerview to="/trt"> back to Lab
</Routerview>
</p>
</span>
</VExpansionPanelTitle>
<VExpansionPanelText>
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both" density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Medical History Form Completed</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Online Consultation Scheduled</b><br><br>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon>
3
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>eClinic Schedule is Confirmed for {{ date }}</b>
</div>
</div>
<div class="d-flex justify-space-between align-center flex-wrap">
<!-- 👉 Avatar & Personal Info -->
<div class="d-flex align-center mt-2">
<div class="d-flex flex-column">
<p class="text-sm font-weight-medium text-high-emphasis mb-0">
Your virtual consultation with your HGH provider is set for {{ props.date }}, at {{
props.time
}}
, {{ props.timezone }}. On the appointment day, we will send you an email containing the
link
to join, along
with useful tips for preparation. If you have any inquiries or need to reschedule, feel free
to reach out via text at (223) 124-5533.
</p>
</div>
</div>
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">Go to Meeting</VBtn>
<!-- 👉 Person Actions -->
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>eClicnic Attented</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Ordered</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Shipped</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
7
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Delivered</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
<VCardTitle class="text-start">Latest Labs <RouterLink to="/">
<span>(See all)</span>
</RouterLink>
</VCardTitle>
<VExpansionPanels class="mt-2">
<VExpansionPanel>
<VExpansionPanelTitle variant="tonal" color="secondary">
<span><b>TRT Lab Kit </b> <br><br>
<p>{{ date }} Status: Ordered <br>
</p>
<p>Test Kit Tracking : <Routerview to="/"> To you</Routerview> / <Routerview to="/trt"> back to Lab
</Routerview>
</p>
</span>
</VExpansionPanelTitle>
<VExpansionPanelText>
<h2 class="text-start">Results</h2>
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both" density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Ordered Hormone Test Kit</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Shipped Hormone Test Kit</b><br><br>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Delivered Hormone Test Kit</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" color="rgb(var(--v-theme-yellow))"
icon="tabler-check" size="small">
<template #icon>
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1 ">
<div>
<b>Hormone Test Kit in Transit</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Lab Received Hormone Test Kit</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Provider Reviewed Test Results</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
</VCol>
</VRow>
</VCard>
</template>
<style lang="scss" scoped>
.john-illustration {
inset-block-end: -0.0625rem;
inset-inline-end: 3rem;
}
.v-timeline .v-timeline-divider__inner-dot {
background-color: white !important;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.bg-secondary {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.v-expansion-panel-title--active {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
span.v-expansion-panel-title__icon {
color: #fff
}
</style>

View File

@@ -0,0 +1,262 @@
<script setup>
import VueApexCharts from 'vue3-apexcharts'
import { useTheme } from 'vuetify'
import statsVerticalChart from '@images/cards/chart-success.png'
import statsVerticalPaypal from '@images/cards/paypal-error.png'
import statsVerticalWallet from '@images/cards/wallet-primary.png'
import { hexToRgb } from '@layouts/utils'
const vuetifyTheme = useTheme()
const series = {
income: [{
data: [
24,
21,
30,
22,
42,
26,
35,
29,
],
}],
expenses: [{
data: [
24,
21,
30,
25,
42,
26,
35,
29,
],
}],
profit: [{
data: [
24,
21,
30,
22,
42,
26,
35,
35,
],
}],
}
const currentTab = ref('income')
const tabData = computed(() => {
const data = {
income: {
avatar: statsVerticalWallet,
title: 'Total Income',
stats: '$459.1k',
profitLoss: 65,
profitLossAmount: '6.5k',
compareToLastWeek: '$39k',
},
expenses: {
avatar: statsVerticalPaypal,
title: 'Total Expenses',
stats: '$316.5k',
profitLoss: 27.8,
profitLossAmount: '7.2k',
compareToLastWeek: '$16k',
},
profit: {
avatar: statsVerticalChart,
title: 'Total Profit',
stats: '$147.9k',
profitLoss: 35.1,
profitLossAmount: '4.5k',
compareToLastWeek: '$28k',
},
}
return data[currentTab.value]
})
const chartConfig = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
const variableTheme = vuetifyTheme.current.value.variables
const disabledTextColor = `rgba(${ hexToRgb(String(currentTheme['on-surface'])) },${ variableTheme['disabled-opacity'] })`
const borderColor = `rgba(${ hexToRgb(String(variableTheme['border-color'])) },${ variableTheme['border-opacity'] })`
return {
chart: {
parentHeightOffset: 0,
toolbar: { show: false },
},
dataLabels: { enabled: false },
stroke: {
width: 3,
curve: 'smooth',
},
grid: {
strokeDashArray: 4.5,
borderColor,
padding: {
left: 0,
top: -20,
right: 11,
bottom: 7,
},
},
fill: {
type: 'gradient',
gradient: {
opacityTo: 0.25,
opacityFrom: 0.5,
stops: [
0,
95,
100,
],
shadeIntensity: 0.6,
colorStops: [[
{
offset: 0,
opacity: 0.4,
color: currentTheme.primary,
},
{
offset: 100,
opacity: 0.2,
color: currentTheme.surface,
},
]],
},
},
theme: {
monochrome: {
enabled: true,
shadeTo: 'light',
shadeIntensity: 1,
color: currentTheme.primary,
},
},
xaxis: {
axisTicks: { show: false },
axisBorder: { show: false },
categories: [
'',
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
],
labels: {
style: {
fontSize: '14px',
colors: disabledTextColor,
fontFamily: 'Public Sans',
},
},
},
yaxis: {
min: 10,
max: 50,
show: false,
tickAmount: 4,
},
markers: {
size: 8,
strokeWidth: 6,
strokeOpacity: 1,
hover: { size: 8 },
colors: ['transparent'],
strokeColors: 'transparent',
discrete: [{
size: 8,
seriesIndex: 0,
fillColor: '#fff',
strokeColor: currentTheme.primary,
dataPointIndex: series[currentTab.value][0].data.length - 1,
}],
},
}
})
</script>
<template>
<VCard>
<VCardItem>
<VTabs
v-model="currentTab"
class="v-tabs-pill"
>
<VTab value="income">
Income
</VTab>
<VTab value="expenses">
Expenses
</VTab>
<VTab value="profit">
Profit
</VTab>
</VTabs>
</VCardItem>
<VCardText class="d-flex align-center gap-3">
<VAvatar
size="46"
rounded
:image="tabData.avatar"
/>
<div>
<p class="mb-0">
{{ tabData.title }}
</p>
<div class="d-flex align-center gap-2">
<h6 class="text-h6">
{{ tabData.stats }}
</h6>
<span
class="text-sm"
:class="tabData.profitLoss > 0 ? 'text-success' : 'text-error'"
>
<VIcon
size="24"
icon="bx-chevron-up"
/>
{{ tabData.profitLoss }}%
</span>
</div>
</div>
</VCardText>
<VCardText>
<VueApexCharts
type="area"
:height="241"
:options="chartConfig"
:series="series[currentTab]"
/>
</VCardText>
<VCardText class="d-flex align-center justify-center gap-3">
<VProgressCircular
size="45"
:model-value="tabData.profitLoss"
>
<span class="text-xs text-medium-emphasis">{{ tabData.profitLossAmount }}</span>
</VProgressCircular>
<div>
<h6 class="text-base font-weight-regular">
<span class="text-capitalize">{{ currentTab }}</span>
<span> this week</span>
</h6>
<span class="text-sm text-disabled">{{ tabData.compareToLastWeek }} less than last week</span>
</div>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,118 @@
<script setup>
import VueApexCharts from 'vue3-apexcharts'
import { useTheme } from 'vuetify'
const vuetifyTheme = useTheme()
const series = [{
data: [
30,
70,
35,
55,
45,
70,
],
}]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
return {
chart: {
parentHeightOffset: 0,
toolbar: { show: false },
},
tooltip: { enabled: false },
dataLabels: { enabled: false },
stroke: {
width: 3,
curve: 'smooth',
lineCap: 'round',
},
grid: {
show: false,
padding: {
left: 0,
top: -32,
right: 17,
},
},
fill: {
type: 'gradient',
gradient: {
opacityTo: 0.7,
opacityFrom: 0.5,
shadeIntensity: 1,
stops: [
0,
90,
100,
],
colorStops: [[
{
offset: 0,
opacity: 0.6,
color: currentTheme.success,
},
{
offset: 100,
opacity: 0.1,
color: currentTheme.surface,
},
]],
},
},
theme: {
monochrome: {
enabled: true,
shadeTo: 'light',
shadeIntensity: 1,
color: currentTheme.success,
},
},
xaxis: {
labels: { show: false },
axisTicks: { show: false },
axisBorder: { show: false },
},
yaxis: { show: false },
markers: {
size: 1,
offsetY: 2,
offsetX: -4,
strokeWidth: 4,
strokeOpacity: 1,
colors: ['transparent'],
strokeColors: 'transparent',
discrete: [{
size: 6,
seriesIndex: 0,
fillColor: '#fff',
strokeColor: currentTheme.success,
dataPointIndex: series[0].data.length - 1,
}],
},
}
})
</script>
<template>
<VCard>
<VCardText class="pb-1">
<h6 class="text-base font-weight-regular">
Order
</h6>
<h5 class="text-h5 font-weight-medium">
276k
</h5>
</VCardText>
<VueApexCharts
type="area"
:height="110"
:options="chartOptions"
:series="series"
/>
</VCard>
</template>

View File

@@ -0,0 +1,206 @@
<script setup>
import VueApexCharts from 'vue3-apexcharts'
import { useTheme } from 'vuetify'
import { hexToRgb } from '@layouts/utils'
const vuetifyTheme = useTheme()
const series = [
45,
80,
20,
40,
]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
const variableTheme = vuetifyTheme.current.value.variables
const disabledTextColor = `rgba(${ hexToRgb(String(currentTheme['on-surface'])) },${ variableTheme['disabled-opacity'] })`
const primaryTextColor = `rgba(${ hexToRgb(String(currentTheme['on-surface'])) },${ variableTheme['high-emphasis-opacity'] })`
return {
chart: {
sparkline: { enabled: true },
animations: { enabled: false },
},
stroke: {
width: 6,
colors: [currentTheme.surface],
},
legend: { show: false },
tooltip: { enabled: false },
dataLabels: { enabled: false },
labels: [
'Fashion',
'Electronic',
'Sports',
'Decor',
],
colors: [
currentTheme.success,
currentTheme.primary,
currentTheme.secondary,
currentTheme.info,
],
grid: {
padding: {
top: -7,
bottom: 5,
},
},
states: {
hover: { filter: { type: 'none' } },
active: { filter: { type: 'none' } },
},
plotOptions: {
pie: {
expandOnClick: false,
donut: {
size: '75%',
labels: {
show: true,
name: {
offsetY: 17,
fontSize: '14px',
color: disabledTextColor,
fontFamily: 'Public Sans',
},
value: {
offsetY: -17,
fontSize: '24px',
color: primaryTextColor,
fontFamily: 'Public Sans',
},
total: {
show: true,
label: 'Weekly',
fontSize: '14px',
formatter: () => '38%',
color: disabledTextColor,
fontFamily: 'Public Sans',
},
},
},
},
},
}
})
const orders = [
{
amount: '82.5k',
title: 'Electronic',
avatarColor: 'primary',
subtitle: 'Mobile, Earbuds, TV',
avatarIcon: 'bx-mobile-alt',
},
{
amount: '23.8k',
title: 'Fashion',
avatarColor: 'success',
subtitle: 'Tshirt, Jeans, Shoes',
avatarIcon: 'bx-closet',
},
{
amount: 849,
title: 'Decor',
avatarColor: 'info',
subtitle: 'Fine Art, Dining',
avatarIcon: 'bx-home',
},
{
amount: 99,
title: 'Sports',
avatarColor: 'secondary',
subtitle: 'Football, Cricket Kit',
avatarIcon: 'bx-football',
},
]
const moreList = [
{
title: 'Share',
value: 'Share',
},
{
title: 'Refresh',
value: 'Refresh',
},
{
title: 'Update',
value: 'Update',
},
]
</script>
<template>
<VCard>
<VCardItem class="pb-3">
<VCardTitle class="mb-1">
Order Statistics
</VCardTitle>
<VCardSubtitle>42.82k Total Sales</VCardSubtitle>
<template #append>
<div class="me-n3 mt-n8">
<MoreBtn :menu-list="moreList" />
</div>
</template>
</VCardItem>
<VCardText>
<div class="d-flex align-center justify-space-between mb-3">
<div class="flex-grow-1">
<h4 class="text-h4 mb-1">
8,258
</h4>
<span>Total Orders</span>
</div>
<div>
<VueApexCharts
type="donut"
:height="125"
width="105"
:options="chartOptions"
:series="series"
/>
</div>
</div>
<VList class="card-list mt-7">
<VListItem
v-for="order in orders"
:key="order.title"
>
<template #prepend>
<VAvatar
rounded
variant="tonal"
:color="order.avatarColor"
>
<VIcon :icon="order.avatarIcon" />
</VAvatar>
</template>
<VListItemTitle class="mb-1">
{{ order.title }}
</VListItemTitle>
<VListItemSubtitle class="text-disabled">
{{ order.subtitle }}
</VListItemSubtitle>
<template #append>
<span>{{ order.amount }}</span>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 21px;
}
</style>

View File

@@ -0,0 +1,124 @@
<script setup>
import VueApexCharts from 'vue3-apexcharts'
import {
useDisplay,
useTheme,
} from 'vuetify'
import { hexToRgb } from '@layouts/utils'
const vuetifyTheme = useTheme()
const display = useDisplay()
const series = [{
data: [
30,
58,
35,
53,
50,
68,
],
}]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
return {
chart: {
parentHeightOffset: 0,
toolbar: { show: false },
dropShadow: {
top: 12,
blur: 4,
left: 0,
enabled: true,
opacity: 0.12,
color: currentTheme.warning,
},
},
tooltip: { enabled: false },
colors: [`rgba(${ hexToRgb(String(currentTheme.warning)) }, 1)`],
stroke: {
width: 4,
curve: 'smooth',
lineCap: 'round',
},
grid: {
show: false,
padding: {
top: -21,
left: -5,
bottom: -8,
},
},
xaxis: {
labels: { show: false },
axisTicks: { show: false },
axisBorder: { show: false },
},
yaxis: { labels: { show: false } },
responsive: [
{
breakpoint: display.thresholds.value.lg,
options: {
chart: {
height: 151,
width: '100%',
},
},
},
{
breakpoint: display.thresholds.value.md,
options: {
chart: {
height: 131,
width: '100%',
},
},
},
],
}
})
</script>
<template>
<VCard>
<VCardText class="d-flex justify-space-between h-100">
<div class="d-flex flex-column justify-space-between gap-y-4">
<div>
<h6 class="text-h6 text-no-wrap mb-1">
Profile Report
</h6>
<VChip color="warning">
Year 2022
</VChip>
</div>
<div>
<div class="text-success text-sm">
<VIcon
icon="bx-up-arrow-alt"
size="18"
class="me-1"
/>
<span>68.2%</span>
</div>
<h5 class="text-h5">
$84,686k
</h5>
</div>
</div>
<div class="h-100 d-flex align-center">
<VueApexCharts
type="line"
:height="131"
width="80%"
:options="chartOptions"
:series="series"
/>
</div>
</VCardText>
</VCard>
</template>

View File

@@ -0,0 +1,103 @@
<script setup>
import { hexToRgb } from '@layouts/utils';
import VueApexCharts from 'vue3-apexcharts';
import { useTheme } from 'vuetify';
const vuetifyTheme = useTheme()
const series = [{
data: [
23,
81,
70,
31,
99,
46,
73,
],
}]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
const variableTheme = vuetifyTheme.current.value.variables
const disabledText = `rgba(${hexToRgb(String(currentTheme['on-surface']))},${variableTheme['disabled-opacity']})`
return {
chart: {
parentHeightOffset: 0,
toolbar: { show: false },
},
plotOptions: {
bar: {
borderRadius: 2,
distributed: true,
columnWidth: '10%',
endingShape: 'rounded',
startingShape: 'rounded',
},
},
legend: { show: false },
tooltip: { enabled: false },
dataLabels: { enabled: false },
colors: [
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 1)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
`rgba(${hexToRgb(String(currentTheme.primary))}, 0.16)`,
],
states: {
hover: { filter: { type: 'none' } },
active: { filter: { type: 'none' } },
},
xaxis: {
categories: [
'M',
'T',
'W',
'T',
'F',
'S',
'S',
],
axisTicks: { show: false },
axisBorder: { show: false },
tickPlacement: 'on',
labels: {
style: {
fontSize: '14px',
colors: disabledText,
fontFamily: 'Public Sans',
},
},
},
yaxis: { show: false },
grid: {
show: false,
padding: {
left: 0,
top: -10,
right: 7,
bottom: -3,
},
},
}
})
</script>
<template>
<VCard>
<VCardText class="pb-1">
<h6 class="text-base font-weight-regular">
Revenue
</h6>
<h5 class="text-h5 font-weight-medium">
425k
</h5>
</VCardText>
<VueApexCharts type="bar" :height="110" :options="chartOptions" :series="series" />
</VCard>
</template>

View File

@@ -0,0 +1,332 @@
<script setup>
import VueApexCharts from 'vue3-apexcharts'
import {
useDisplay,
useTheme,
} from 'vuetify'
import { hexToRgb } from '@layouts/utils'
const vuetifyTheme = useTheme()
const display = useDisplay()
const series = [
{
name: `${ new Date().getFullYear() - 1 }`,
data: [
18,
7,
15,
29,
18,
12,
9,
],
},
{
name: `${ new Date().getFullYear() - 2 }`,
data: [
-13,
-18,
-9,
-14,
-5,
-17,
-15,
],
},
]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
const variableTheme = vuetifyTheme.current.value.variables
const disabledTextColor = `rgba(${ hexToRgb(String(currentTheme['on-surface'])) },${ variableTheme['disabled-opacity'] })`
const primaryTextColor = `rgba(${ hexToRgb(String(currentTheme['on-surface'])) },${ variableTheme['high-emphasis-opacity'] })`
const borderColor = `rgba(${ hexToRgb(String(variableTheme['border-color'])) },${ variableTheme['border-opacity'] })`
return {
bar: {
chart: {
stacked: true,
parentHeightOffset: 0,
toolbar: { show: false },
},
dataLabels: { enabled: false },
stroke: {
width: 6,
lineCap: 'round',
colors: [currentTheme.surface],
},
colors: [
`rgba(${ hexToRgb(String(currentTheme.primary)) }, 1)`,
`rgba(${ hexToRgb(String(currentTheme.info)) }, 1)`,
],
legend: {
offsetX: -10,
position: 'top',
fontSize: '14px',
horizontalAlign: 'left',
fontFamily: 'Public Sans',
labels: { colors: currentTheme.secondary },
itemMargin: {
vertical: 4,
horizontal: 10,
},
markers: {
width: 8,
height: 8,
radius: 10,
offsetX: -4,
},
},
states: {
hover: { filter: { type: 'none' } },
active: { filter: { type: 'none' } },
},
grid: {
borderColor,
padding: { bottom: 5 },
},
plotOptions: {
bar: {
borderRadius: 10,
columnWidth: '30%',
endingShape: 'rounded',
startingShape: 'rounded',
},
},
xaxis: {
axisTicks: { show: false },
crosshairs: { opacity: 0 },
axisBorder: { show: false },
categories: [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
],
labels: {
style: {
fontSize: '14px',
colors: disabledTextColor,
fontFamily: 'Public Sans',
},
},
},
yaxis: {
labels: {
style: {
fontSize: '14px',
colors: disabledTextColor,
fontFamily: 'Public Sans',
},
},
},
responsive: [
{
breakpoint: display.thresholds.value.xl,
options: { plotOptions: { bar: { columnWidth: '43%' } } },
},
{
breakpoint: display.thresholds.value.lg,
options: { plotOptions: { bar: { columnWidth: '50%' } } },
},
{
breakpoint: display.thresholds.value.md,
options: { plotOptions: { bar: { columnWidth: '42%' } } },
},
{
breakpoint: display.thresholds.value.sm,
options: { plotOptions: { bar: { columnWidth: '45%' } } },
},
],
},
radial: {
chart: { sparkline: { enabled: true } },
labels: ['Growth'],
stroke: { dashArray: 5 },
colors: [`rgba(${ hexToRgb(String(currentTheme.primary)) }, 1)`],
states: {
hover: { filter: { type: 'none' } },
active: { filter: { type: 'none' } },
},
fill: {
type: 'gradient',
gradient: {
shade: 'dark',
opacityTo: 0.6,
opacityFrom: 1,
shadeIntensity: 0.5,
stops: [
30,
70,
100,
],
inverseColors: false,
gradientToColors: [currentTheme.primary],
},
},
plotOptions: {
radialBar: {
endAngle: 150,
startAngle: -140,
hollow: { size: '55%' },
track: { background: 'transparent' },
dataLabels: {
name: {
offsetY: 25,
fontWeight: 600,
fontSize: '16px',
color: currentTheme.secondary,
fontFamily: 'Public Sans',
},
value: {
offsetY: -15,
fontWeight: 500,
fontSize: '24px',
color: primaryTextColor,
fontFamily: 'Public Sans',
},
},
},
},
responsive: [
{
breakpoint: 900,
options: { chart: { height: 200 } },
},
{
breakpoint: 735,
options: { chart: { height: 200 } },
},
{
breakpoint: 660,
options: { chart: { height: 200 } },
},
{
breakpoint: 600,
options: { chart: { height: 280 } },
},
],
},
}
})
const balanceData = [
{
icon: 'bx-dollar',
amount: '$32.5k',
year: '2023',
color: 'primary',
},
{
icon: 'bx-wallet',
amount: '$41.2k',
year: '2022',
color: 'info',
},
]
</script>
<template>
<VCard>
<VRow no-gutters>
<VCol
cols="12"
sm="7"
xl="8"
:class="$vuetify.display.smAndUp ? 'border-e' : 'border-b'"
>
<VCardItem class="pb-0">
<VCardTitle>Total Revenue</VCardTitle>
<template #append>
<div class="me-n3">
<MoreBtn />
</div>
</template>
</VCardItem>
<!-- bar chart -->
<VueApexCharts
id="bar-chart"
type="bar"
:height="336"
:options="chartOptions.bar"
:series="series"
/>
</VCol>
<VCol
cols="12"
sm="5"
xl="4"
>
<VCardText class="text-center">
<VBtn
size="small"
variant="tonal"
append-icon="bx-chevron-down"
class="mt-4"
>
2023
<VMenu activator="parent">
<VList>
<VListItem
v-for="(item, index) in ['2023', '2022', '2021']"
:key="index"
:value="item"
>
<VListItemTitle>{{ item }}</VListItemTitle>
</VListItem>
</VList>
</VMenu>
</VBtn>
<!-- radial chart -->
<VueApexCharts
type="radialBar"
:height="200"
:options="chartOptions.radial"
:series="[78]"
class="mt-6"
/>
<p class="font-weight-medium text-high-emphasis mb-7">
62% Company Growth
</p>
<div class="d-flex align-center justify-center gap-x-8 gap-y-4 flex-wrap">
<div
v-for="data in balanceData"
:key="data.year"
class="d-flex align-center gap-3"
>
<VAvatar
:icon="data.icon"
:color="data.color"
size="38"
rounded
variant="tonal"
/>
<div class="text-start">
<span class="text-sm"> {{ data.year }}</span>
<h6 class="text-base font-weight-medium">
{{ data.amount }}
</h6>
</div>
</div>
</div>
</VCardText>
</VCol>
</VRow>
</VCard>
</template>
<style lang="scss">
#bar-chart .apexcharts-series[rel="2"] {
transform: translateY(-10px);
}
</style>

View File

@@ -0,0 +1,116 @@
<script setup>
import chartInfo from '@images/cards/chart-info.png'
import creditCardSuccess from '@images/cards/credit-card-success.png'
import creditCardWarning from '@images/cards/credit-card-warning.png'
import paypalError from '@images/cards/paypal-error.png'
import walletPrimary from '@images/cards/wallet-primary.png'
const transactions = [
{
amount: +82.6,
paymentMethod: 'Paypal',
description: 'Send money',
icon: paypalError,
color: 'error',
},
{
paymentMethod: 'Wallet',
amount: +270.69,
description: 'Mac\'D',
icon: walletPrimary,
color: 'primary',
},
{
amount: +637.91,
paymentMethod: 'Transfer',
description: 'Refund',
icon: chartInfo,
color: 'info',
},
{
paymentMethod: 'Credit Card',
amount: -838.71,
description: 'Ordered Food',
icon: creditCardSuccess,
color: 'success',
},
{
paymentMethod: 'Wallet',
amount: +203.33,
description: 'Starbucks',
icon: walletPrimary,
color: 'primary',
},
{
paymentMethod: 'Mastercard',
amount: -92.45,
description: 'Ordered Food',
icon: creditCardWarning,
color: 'warning',
},
]
const moreList = [
{
title: 'Share',
value: 'Share',
},
{
title: 'Refresh',
value: 'Refresh',
},
{
title: 'Update',
value: 'Update',
},
]
</script>
<template>
<VCard title="Transactions">
<template #append>
<div class="me-n3 mt-n2">
<MoreBtn :menu-list="moreList" />
</div>
</template>
<VCardText>
<VList class="card-list">
<VListItem
v-for="item in transactions"
:key="item.paymentMethod"
>
<template #prepend>
<VAvatar
rounded
variant="tonal"
:color="item.color"
:image="item.icon"
class="me-3"
/>
</template>
<VListItemSubtitle class="text-disabled mb-1">
{{ item.paymentMethod }}
</VListItemSubtitle>
<VListItemTitle>
{{ item.description }}
</VListItemTitle>
<template #append>
<VListItemAction>
<span class="me-1">{{ item.amount > 0 ? `+$${Math.abs(item.amount)}` : `-$${Math.abs(item.amount)}` }}</span>
<span class="text-disabled">USD</span>
</VListItemAction>
</template>
</VListItem>
</VList>
</VCardText>
</VCard>
</template>
<style lang="scss" scoped>
.card-list {
--v-card-list-gap: 1.6rem;
}
</style>

View File

@@ -0,0 +1,432 @@
<script setup>
import { hexToRgb } from "@layouts/utils";
import moment from "moment";
import { onBeforeMount, onMounted } from "vue";
import VueApexCharts from "vue3-apexcharts";
import { useTheme } from "vuetify";
import { useStore } from "vuex";
const vuetifyTheme = useTheme();
const store = useStore();
const total_sessions = ref();
const total_call_time = ref();
const avg_session_time = ref(0);
const getAnalytics = ref([]);
const getAnalyticsFilter = ref([]);
const monthly_session_count = ref([]);
const currentMonth = ref();
const refChart = ref(null);
const showGraph = ref(false);
const selectedFilter = ref(null);
const monthListf = ref([]);
const isHover = ref(false);
const currentTheme = "rgb(38 84 129 / 60%)";
const variableTheme = vuetifyTheme.current.value.variables;
const labelColor = `rgba(203 40 225 / 60%)`;
const labelPrimaryColor = `rgba(rgb(132 173 21 / 60%),0.1)`;
const series = ref([
{
data: [],
},
]);
onMounted(async () => {
console.log("refChart", refChart);
});
onBeforeMount(async () => {
currentMonth.value = moment().format("MMMM") + "(Month to date)";
console.log("cm", currentMonth.value);
await store.dispatch("getAnalytics");
getAnalytics.value = store.getters.getAnalytics;
console.log("getAnalytics", getAnalytics.value);
total_sessions.value = getAnalytics.value.total_sessions;
total_call_time.value = getAnalytics.value.total_call_time;
avg_session_time.value = getAnalytics.value.avg_session_time;
// monthListf.value = getAnalytics.value.months_list;
series.value[0].data = getAnalytics.value.data;
const currentTheme = vuetifyTheme.current.value.colors;
const variableTheme = vuetifyTheme.current.value.variables;
const labelColor = `rgba(${hexToRgb(currentTheme["on-background"])})`;
const labelPrimaryColor = `rgba(${hexToRgb(currentTheme.primary)},0.1)`;
chartOptions.value.colors = [
labelPrimaryColor,
labelPrimaryColor,
labelPrimaryColor,
labelPrimaryColor,
`rgba(${hexToRgb(currentTheme.primary)}, 1)`,
labelPrimaryColor,
labelPrimaryColor,
];
chartOptions.value.xaxis.labels.style.colors = labelColor;
chartOptions.value.xaxis.categories = getAnalytics.value.months_list;
showGraph.value = true;
});
const chartOptions1 = computed(() => {
return chartOptions.value;
});
const chartOptions = ref({
chart: {
type: "bar",
toolbar: { show: false },
},
tooltip: { enabled: false },
plotOptions: {
bar: {
barHeight: "60%",
columnWidth: "40%",
startingShape: "rounded",
endingShape: "rounded",
borderRadius: 5,
distributed: true,
},
},
grid: {
show: false,
padding: {
top: -20,
bottom: 0,
left: -10,
right: -10,
},
},
colors: [
"rgba(rgb(132 173 21 / 60%),0.1)",
"rgba(rgb(132 173 21 / 60%),0.1)",
"rgba(rgb(132 173 21 / 60%),0.1)",
"rgba(rgb(132 173 21 / 60%),0.1)",
`rgba('38 84 129 / 60%', 1)`,
"rgba(rgb(132 173 21 / 60%),0.1)",
"rgba(rgb(132 173 21 / 60%),0.1)",
],
dataLabels: { enabled: false },
legend: { show: false },
xaxis: {
categories: [],
axisBorder: { show: false },
axisTicks: { show: false },
labels: {
style: {
colors: `rgba(203 40 225 / 60%)`,
fontSize: "13px",
},
},
},
yaxis: { labels: { show: false } },
});
const filter = [
{
value: "This Month",
key: "current_month",
},
{
value: "Past Month",
key: "1_month",
},
{
value: "Past 2 Month from today",
key: "2_months",
},
{
value: "Past 3 Month from today",
key: "3_months",
},
{
value: "Past 6 Month from today",
key: "6_months",
},
{
value: "Past 12 Month from today",
key: "12_months",
},
{
value: "All Time",
key: "all_time",
},
];
const handleDateInput = async () => {
await store.dispatch("getAnalyticsFilter", {
filter: selectedFilter.value,
});
getAnalyticsFilter.value = store.getters.getAnalyticsFilter;
console.log("getAnalyticsFilter", getAnalyticsFilter.value);
total_sessions.value = getAnalyticsFilter.value.total_sessions;
total_call_time.value = getAnalyticsFilter.value.total_call_time;
avg_session_time.value = getAnalyticsFilter.value.avg_session_time;
store.dispatch("updateIsLoading", false);
};
</script>
<template>
<VRow class="mb-5">
<VCol cols="12">
<v-select
v-model="selectedFilter"
:items="filter"
:label="currentMonth"
item-title="value"
item-value="key"
@update:model-value="handleDateInput"
prepend-inner-icon="mdi-calendar"
density="compact"
clearable
class="custom-select"
>
</v-select>
</VCol>
<VCol cols="12" md="4" sm="6">
<div>
<VCard
class="logistics-card-statistics cursor-pointer"
:style="
isHover
? `border-block-end-color: rgb(var(--v-theme-primary))`
: `border-block-end-color: rgba(var(--v-theme-primary),0.7)`
"
@mouseenter="isHover = true"
@mouseleave="isHover = false"
>
<VCardText>
<div class="d-flex align-center gap-x-4 mb-2">
<VAvatar variant="tonal" color="yellow" rounded>
<VIcon icon="mdi-account-group" size="24" />
</VAvatar>
<h4 class="text-h5">Total Session</h4>
</div>
<h6 class="text-body-1 mb-2"></h6>
<div class="d-flex gap-x-2 align-center">
<div class="text-body-1 font-weight-medium me-2">
{{ total_sessions }}
</div>
<span class="text-sm text-disabled"
>Total session</span
>
</div>
</VCardText>
</VCard>
</div>
</VCol>
<VCol cols="12" md="4" sm="6">
<div>
<VCard
class="logistics-card-statistics cursor-pointer"
:style="
isHover
? `border-block-end-color: rgb(var(--v-theme-warning))`
: `border-block-end-color: rgba(var(--v-theme-warning),0.7)`
"
@mouseenter="isHover = true"
@mouseleave="isHover = false"
>
<VCardText>
<div class="d-flex align-center gap-x-4 mb-2">
<VAvatar variant="tonal" color="yellow" rounded>
<VIcon icon="mdi-timer" size="24" />
</VAvatar>
<h4 class="text-h5">Session Minutes</h4>
</div>
<h6 class="text-body-1 mb-2"></h6>
<div class="d-flex gap-x-2 align-center">
<div class="text-body-1 font-weight-medium me-2">
{{ total_call_time }}
</div>
<span class="text-sm text-disabled"
>Total Call Minutes
</span>
</div>
</VCardText>
</VCard>
</div>
</VCol>
<VCol cols="12" md="4" sm="6">
<div>
<VCard
class="logistics-card-statistics cursor-pointer"
:style="
isHover
? `border-block-end-color: rgb(var(--v-theme-info))`
: `border-block-end-color: rgba(var(--v-theme-info),0.7)`
"
@mouseenter="isHover = true"
@mouseleave="isHover = false"
>
<VCardText>
<div class="d-flex align-center gap-x-4 mb-2">
<VAvatar variant="tonal" color="yellow" rounded>
<VIcon icon="mdi-hourglass" size="24" />
</VAvatar>
<h4 class="text-h5">Avg Session Time</h4>
</div>
<h6 class="text-body-1 mb-2"></h6>
<div class="d-flex gap-x-2 align-center">
<div class="text-body-1 font-weight-medium me-2">
{{ avg_session_time }}
</div>
<span class="text-sm text-disabled"
>Avg Session Time
</span>
</div>
</VCardText>
</VCard>
</div>
</VCol>
</VRow>
<VCard>
<VCardText class="pt-6">
<VRow>
<VDialog
v-model="store.getters.getIsLoading"
width="110"
height="150"
color="primary"
>
<VCardText class="" style="color: white !important">
<div class="demo-space-x">
<VProgressCircular
:size="40"
color="primary"
indeterminate
/>
</div>
</VCardText>
</VDialog>
<VCol cols="12" lg="4" md="4" sm="12" style="display: none">
<div class="d-flex align-center gap-4">
<v-icon size="42" color="rgb(var(--v-theme-yellow))"
>mdi-account-group</v-icon
>
<div class="d-flex flex-column">
<span class="text-h5 font-weight-medium mt-1">{{
total_sessions
}}</span>
<span
class="text-sm"
color="rgb(var(--v-theme-yellow))"
>
Total Session
</span>
</div>
</div>
</VCol>
<VCol cols="12" lg="4" md="4" sm="12" style="display: none">
<div class="d-flex align-center gap-4">
<v-icon size="42" color="rgb(var(--v-theme-yellow))"
>mdi-timer</v-icon
>
<div class="d-flex flex-column">
<span class="text-h5 font-weight-medium">{{
total_call_time
}}</span>
<span class="text-sm"> Session Minutes </span>
</div>
</div>
</VCol>
<VCol cols="12" lg="4" md="4" sm="12" style="display: none">
<div class="d-flex align-center gap-4">
<v-icon size="42" color="rgb(var(--v-theme-yellow))"
>mdi-hourglass</v-icon
>
<div class="d-flex flex-column">
<span class="text-h5 font-weight-medium">{{
avg_session_time
}}</span>
<span class="text-sm"> Avg Session Time </span>
</div>
</div>
</VCol>
<VueApexCharts
v-if="showGraph"
ref="refChart"
:options="chartOptions1"
:series="series"
:height="250"
:width="850"
class="graph-scroll"
/>
</VRow>
</VCardText>
</VCard>
</template>
<style scoped>
@media (max-width: 576px) {
.graph-scroll {
overflow-x: scroll;
overflow-y: hidden;
}
}
.text-h4 {
font-size: 1.5rem !important;
font-weight: 500;
line-height: 2.375rem;
letter-spacing: normal !important;
font-family: Public Sans, sans-serif, -apple-system, blinkmacsystemfont,
Segoe UI, roboto, Helvetica Neue, arial, sans-serif, "Apple Color Emoji",
"Segoe UI Emoji", Segoe UI Symbol;
text-transform: none !important;
}
.text-body-1 {
font-size: 0.9375rem !important;
font-weight: 400;
line-height: 1.375rem;
letter-spacing: normal !important;
font-family: Public Sans, sans-serif, -apple-system, blinkmacsystemfont,
Segoe UI, roboto, Helvetica Neue, arial, sans-serif, "Apple Color Emoji",
"Segoe UI Emoji", Segoe UI Symbol;
text-transform: none !important;
}
.logistics-card-statistics {
border-block-end-style: solid;
border-block-end-width: 2px;
&:hover {
border-block-end-width: 3px;
margin-block-end: -1px;
transition: all 0.1s ease-out;
}
}
.skin--bordered {
.logistics-card-statistics {
&:hover {
margin-block-end: -2px;
}
}
}
.custom-select {
width: 100%;
}
.custom-select :deep(.v-input__control) {
min-height: 40px;
}
.custom-select :deep(.v-select__selection) {
color: var(--v-primary-base);
font-weight: 500;
}
.custom-select :deep(.v-input__slot) {
border-color: var(--v-primary-lighten2) !important;
transition: all 0.3s ease;
}
.custom-select:hover :deep(.v-input__slot) {
border-color: var(--v-primary-base) !important;
box-shadow: 0 0 0 1px var(--v-primary-base);
}
.text-sm {
font-size: 13px;
line-height: 1.25rem;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,110 @@
<script setup>
import axios from '@axios';
import {
requiredValidator
} from '@validators';
const errors = ref({
new_password: undefined,
confirm_passowrd: undefined,
})
const isTonalSnackbarVisible = ref(false)
const patientResponse = ref(false)
const isLoadingVisible = ref(false)
const passwordVForm = ref()
const isNewPasswordVisible = ref(false)
const isConfirmPasswordVisible = ref(false)
const newPassword = ref(null)
const confirmPassword = ref(null)
const matchPasswordsValidator = (value) => {
if (value !== newPassword.value) {
errors.confirm_passowrd = ['Passwords do not match'];
return 'Passwords do not match';
}
return true;
}
const onSubmit = () => {
passwordVForm.value?.validate().then(async ({ valid: isValid }) => {
console.log('isValid ', isValid)
if (isValid)
await changePassword()
})
}
const changePassword = async () => {
isLoadingVisible.value = true;
await axios.post('/api/change-password', {
new_password: newPassword.value,
}).then(r => {
console.log("Change Password", r.data);
isTonalSnackbarVisible.value = true;
patientResponse.value = r.data.message;
isLoadingVisible.value = false;
}).catch(e => {
console.log(e.response);
const { errors: formErrors } = e.response.data.errors;
errors.value = e.response.data.errors;
isLoadingVisible.value = false;
console.error("Error", e.response.data.errors)
});
}
</script>
<template>
<VSnackbar v-model="isTonalSnackbarVisible" :timeout="5000" location="top end" variant="flat" color="success">
{{ patientResponse }}
</VSnackbar>
<VDialog v-model="isLoadingVisible" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog>
<VRow>
<VCol cols="12">
<VCard>
<VCardText>
<VForm ref="passwordVForm" @submit.prevent="onSubmit">
<VCardText>
<VRow>
<VCol cols="12" md="6">
<!-- 👉 new password -->
<VTextField v-model="newPassword" :type="isNewPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isNewPasswordVisible ? 'bx-hide' : 'bx-show'"
label="New Password" placeholder="············"
@click:append-inner="isNewPasswordVisible = !isNewPasswordVisible"
:rules="[requiredValidator]" :error-messages="errors.new_password" />
</VCol>
<VCol cols="12" md="6">
<!-- 👉 confirm password -->
<VTextField v-model="confirmPassword"
:type="isConfirmPasswordVisible ? 'text' : 'password'"
:append-inner-icon="isConfirmPasswordVisible ? 'bx-hide' : 'bx-show'"
label="Re-enter Password" placeholder="············"
@click:append-inner="isConfirmPasswordVisible = !isConfirmPasswordVisible"
:rules="[requiredValidator, matchPasswordsValidator]"
:error-messages="errors.confirm_passowrd" />
</VCol>
</VRow>
</VCardText>
<!-- 👉 Action Buttons -->
<VCardText class="d-flex flex-wrap gap-4">
<VBtn type="submit">Save changes</VBtn>
<!-- <VBtn type="reset" color="secondary" variant="tonal">
Reset
</VBtn> -->
</VCardText>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,211 @@
<script setup>
import axios from '@axios';
import {
requiredState,
requiredValidator,
} from '@validators';
import { onMounted } from 'vue';
const errors = ref({
address: undefined,
city: undefined,
state: undefined,
zipcode: undefined,
country: undefined,
})
const isTonalSnackbarVisible = ref(false)
const patientResponse = ref(false)
const isLoadingVisible = ref(false)
const addressVForm = ref()
const address = ref()
const apt = ref()
const city = ref()
const state = ref()
const zipcode = ref()
const country = ref('United State')
const states = ref([
{ name: 'Howland Island', abbreviation: 'UM-84' },
{ name: 'Delaware', abbreviation: 'DE' },
{ name: 'Maryland', abbreviation: 'MD' },
{ name: 'Baker Island', abbreviation: 'UM-81' },
{ name: 'Kingman Reef', abbreviation: 'UM-89' },
{ name: 'New Hampshire', abbreviation: 'NH' },
{ name: 'Wake Island', abbreviation: 'UM-79' },
{ name: 'Kansas', abbreviation: 'KS' },
{ name: 'Texas', abbreviation: 'TX' },
{ name: 'Nebraska', abbreviation: 'NE' },
{ name: 'Vermont', abbreviation: 'VT' },
{ name: 'Jarvis Island', abbreviation: 'UM-86' },
{ name: 'Hawaii', abbreviation: 'HI' },
{ name: 'Guam', abbreviation: 'GU' },
{ name: 'United States Virgin Islands', abbreviation: 'VI' },
{ name: 'Utah', abbreviation: 'UT' },
{ name: 'Oregon', abbreviation: 'OR' },
{ name: 'California', abbreviation: 'CA' },
{ name: 'New Jersey', abbreviation: 'NJ' },
{ name: 'North Dakota', abbreviation: 'ND' },
{ name: 'Kentucky', abbreviation: 'KY' },
{ name: 'Minnesota', abbreviation: 'MN' },
{ name: 'Oklahoma', abbreviation: 'OK' },
{ name: 'Pennsylvania', abbreviation: 'PA' },
{ name: 'New Mexico', abbreviation: 'NM' },
{ name: 'American Samoa', abbreviation: 'AS' },
{ name: 'Illinois', abbreviation: 'IL' },
{ name: 'Michigan', abbreviation: 'MI' },
{ name: 'Virginia', abbreviation: 'VA' },
{ name: 'Johnston Atoll', abbreviation: 'UM-67' },
{ name: 'West Virginia', abbreviation: 'WV' },
{ name: 'Mississippi', abbreviation: 'MS' },
{ name: 'Northern Mariana Islands', abbreviation: 'MP' },
{ name: 'United States Minor Outlying Islands', abbreviation: 'UM' },
{ name: 'Massachusetts', abbreviation: 'MA' },
{ name: 'Connecticut', abbreviation: 'CT' },
{ name: 'Florida', abbreviation: 'FL' },
{ name: 'District of Columbia', abbreviation: 'DC' },
{ name: 'Midway Atoll', abbreviation: 'UM-71' },
{ name: 'Navassa Island', abbreviation: 'UM-76' },
{ name: 'Indiana', abbreviation: 'IN' },
{ name: 'Wisconsin', abbreviation: 'WI' },
{ name: 'Wyoming', abbreviation: 'WY' },
{ name: 'South Carolina', abbreviation: 'SC' },
{ name: 'Arkansas', abbreviation: 'AR' },
{ name: 'South Dakota', abbreviation: 'SD' },
{ name: 'Montana', abbreviation: 'MT' },
{ name: 'North Carolina', abbreviation: 'NC' },
{ name: 'Palmyra Atoll', abbreviation: 'UM-95' },
{ name: 'Puerto Rico', abbreviation: 'PR' },
{ name: 'Colorado', abbreviation: 'CO' },
{ name: 'Missouri', abbreviation: 'MO' },
{ name: 'New York', abbreviation: 'NY' },
{ name: 'Maine', abbreviation: 'ME' },
{ name: 'Tennessee', abbreviation: 'TN' },
{ name: 'Georgia', abbreviation: 'GA' },
{ name: 'Louisiana', abbreviation: 'LA' },
{ name: 'Nevada', abbreviation: 'NV' },
{ name: 'Iowa', abbreviation: 'IA' },
{ name: 'Idaho', abbreviation: 'ID' },
{ name: 'Rhode Island', abbreviation: 'RI' },
{ name: 'Washington', abbreviation: 'WA' },
{ name: 'Ohio', abbreviation: 'OH' },
// ... (add the rest of the states)
]);
onMounted(async () => {
await getPatientInfo()
})
const getPatientInfo = async () => {
const patient_id = localStorage.getItem('patient_id')
const access_token = localStorage.getItem('access_token');
isLoadingVisible.value = true;
await axios.post('/api/agent-last-appointment-detail/' + patient_id, {
headers: {
'Authorization': `Bearer ${access_token}`,
}
})
.then(response => {
console.log('Response:', response.data);
if (response.data) {
let patientData = response.data.patient
address.value = patientData.address;
city.value = patientData.city
state.value = patientData.state
zipcode.value = patientData.zip_code
isLoadingVisible.value = false;
} else {
isLoadingVisible.value = false;
}
})
.catch(error => {
console.error('Error:', error);
});
}
const onSubmit = () => {
addressVForm.value?.validate().then(async ({ valid: isValid }) => {
console.log('isValid ', isValid)
if (isValid)
await saveAddress()
})
}
const saveAddress = async () => {
isLoadingVisible.value = true;
await axios.post('/api/update-patient-detail', {
address: address.value,
city: city.value,
state: state.value,
zip_code: zipcode.value,
country: country.value,
}).then(r => {
console.log("Address Save", r.data);
isTonalSnackbarVisible.value = true;
patientResponse.value = r.data.message;
isLoadingVisible.value = false;
}).catch(e => {
console.log(e.response);
const { errors: formErrors } = e.response.data.errors;
errors.value = e.response.data.errors;
isLoadingVisible.value = false;
console.error("Error", e.response.data.errors)
});
}
</script>
<template>
<VSnackbar v-model="isTonalSnackbarVisible" :timeout="5000" location="top end" variant="flat" color="success">
{{ patientResponse }}
</VSnackbar>
<VDialog v-model="isLoadingVisible" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog>
<VRow>
<VCol cols="12">
<VCard>
<VCardText>
<VForm ref="addressVForm" @submit.prevent="onSubmit">
<VCardText>
<VRow>
<VCol cols="12" md="12">
<VTextField v-model="address" label="Street Name" :rules="[requiredValidator]"
:error-messages="errors.address" />
</VCol>
<VCol cols="12" md="6">
<VTextField v-model="apt" label="Apt Suit etc" />
</VCol>
<VCol cols="12" md="6">
<v-select v-model="state" label="Select State" :items="states" item-title="name"
item-value="abbreviation" :rules="[requiredState]" :error-messages="errors.state"></v-select>
</VCol>
<VCol cols="12" md="6">
<VTextField v-model="city" label="City" :rules="[requiredValidator]" :error-messages="errors.city" />
</VCol>
<VCol cols="12" md="6">
<VTextField v-model="zipcode" label="ZIP Code" :rules="[requiredValidator]"
:error-messages="errors.zipcode" />
</VCol>
</VRow>
</VCardText>
<!-- 👉 Action Buttons -->
<VCardText class="d-flex flex-wrap gap-4">
<VBtn type="submit">Save changes</VBtn>
<!-- <VBtn type="reset" color="secondary" variant="tonal">
Reset
</VBtn> -->
</VCardText>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,321 @@
<script setup>
import axios from '@axios';
import avatar1 from "@images/avatars/avatar-1.png";
import {
emailValidator,
requiredEmail,
requiredLastName,
requiredName,
requiredPhone,
requiredValidator,
validUSAPhone
} from '@validators';
import { onMounted } from 'vue';
import { useStore } from "vuex";
const getIsTonalSnackbarVisible = ref(false);
const store = useStore();
const errors = ref({
name: undefined,
last_name: undefined,
phone: undefined,
email: undefined,
dob: undefined,
gender: undefined,
marital_status: undefined,
height: undefined,
weight: undefined,
})
const refInputEl = ref();
const isTonalSnackbarVisible = ref(false)
const patientResponse = ref(false)
const isLoadingVisible = ref(false)
const infoVForm = ref()
const name = ref()
const last_name = ref()
const email = ref(null)
const phone = ref(null)
const dob = ref()
const gender = ref()
const martialStatus = ref(null)
const height = ref(null)
const weight = ref(null)
const patientId = ref()
const ImageBase64 = ref();
const accountData = {
avatarImg: avatar1,
};
const accountDataLocal = ref(structuredClone(accountData));
const changeAvatar = async (file) => {
const fileReader = new FileReader();
const { files } = file.target;
if (files && files.length) {
fileReader.readAsDataURL(files[0]);
fileReader.onload = () => {
if (typeof fileReader.result === "string") {
accountDataLocal.value.avatarImg = fileReader.result;
}
ImageBase64.value = fileReader.result.split(",")[1];
store.dispatch("profilePicPatient", {
image: ImageBase64.value, //ecelData,
});
};
}
};
const genders = ref([
{ name: 'Male', abbreviation: 'Male' },
{ name: 'Female', abbreviation: 'Female' },
{ name: 'Other', abbreviation: 'Other' },
]);
const maritalStatuses = ref([
{ name: 'Single', abbreviation: 'Single' },
{ name: 'Married', abbreviation: 'Married' },
{ name: 'Divorced', abbreviation: 'Divorced' },
]);
const heights = ref([
{ name: '5 ft 0 in', abbreviation: '5 ft 0 in' },
{ name: '5 ft 1 in', abbreviation: '5 ft 1 in' },
{ name: '5 ft 2 in', abbreviation: '5 ft 2 in' },
{ name: '5 ft 3 in', abbreviation: '5 ft 3 in' },
{ name: '5 ft 4 in', abbreviation: '5 ft 4 in' },
{ name: '5 ft 5 in', abbreviation: '5 ft 5 in' },
{ name: '5 ft 6 in', abbreviation: '5 ft 6 in' },
{ name: '5 ft 7 in', abbreviation: '5 ft 7 in' },
{ name: '5 ft 8 in', abbreviation: '5 ft 8 in' },
{ name: '5 ft 9 in', abbreviation: '5 ft 9 in' },
{ name: '5 ft 10 in', abbreviation: '5 ft 10 in' },
{ name: '5 ft 11 in', abbreviation: '5 ft 11 in' },
{ name: '6 ft 0 in', abbreviation: '6 ft 0 in' },
{ name: '6 ft 1 in', abbreviation: '6 ft 1 in' },
{ name: '6 ft 2 in', abbreviation: '6 ft 2 in' },
{ name: '6 ft 3 in', abbreviation: '6 ft 3 in' },
{ name: '6 ft 4 in', abbreviation: '6 ft 4 in' },
{ name: '6 ft 5 in', abbreviation: '6 ft 5 in' },
{ name: '6 ft 6 in', abbreviation: '6 ft 6 in' },
{ name: '6 ft 7 in', abbreviation: '6 ft 7 in' },
{ name: '6 ft 8 in', abbreviation: '6 ft 8 in' },
{ name: '6 ft 9 in', abbreviation: '6 ft 9 in' },
{ name: '6 ft 10 in', abbreviation: '6 ft 10 in' },
{ name: '6 ft 11 in', abbreviation: '6 ft 11 in' },
{ name: '7 ft 0 in', abbreviation: '7 ft 0 in' },
]);
onMounted(async () => {
await getPatientInfo()
await store.dispatch("patientDetial");
let list = await store.getters.getPatientDetail;
if (!list.profile_picture) {
accountDataLocal.value.avatarImg = avatar1;
} else {
accountDataLocal.value.avatarImg = list.profile_picture;
}
})
const getPatientInfo = async () => {
const patient_id = localStorage.getItem('patient_id')
const access_token = localStorage.getItem('access_token');
isLoadingVisible.value = true;
await axios.post('/api/agent-last-appointment-detail/' + patient_id, {
headers: {
'Authorization': `Bearer ${access_token}`,
}
})
.then(response => {
console.log('Response:', response.data);
if (response.data) {
let patientData = response.data.patient
name.value = patientData.first_name;
last_name.value = patientData.last_name
email.value = patientData.email
phone.value = patientData.phone_no
dob.value = patientData.dob;
gender.value = patientData.gender;
martialStatus.value = patientData.marital_status;
height.value = patientData.height;
weight.value = patientData.weight;
isLoadingVisible.value = false;
} else {
isLoadingVisible.value = false;
}
})
.catch(error => {
console.error('Error:', error);
});
}
const formatPhoneNumber = () => {
// Remove non-numeric characters from the input
const numericValue = phone.value.replace(/\D/g, '');
// Apply formatting logic
if (numericValue.length <= 10) {
phone.value = 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);
phone.value = truncatedValue.replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}
};
const getCurrentDate = () => {
const today = new Date();
const year = today.getFullYear();
let month = today.getMonth() + 1;
let day = today.getDate();
// Format the date to match the input type="date" format
month = month < 10 ? `0${month}` : month;
day = day < 10 ? `0${day}` : day;
return `${year}-${month}-${day}`;
};
const onSubmit = async () => {
infoVForm.value?.validate().then(async ({ valid: isValid }) => {
console.log('isValid ', isValid)
if (isValid)
await saveInfo()
})
}
const saveInfo = async () => {
isLoadingVisible.value = true;
await axios.post('/api/update-patient-detail', {
first_name: name.value,
last_name: last_name.value,
phone_no: phone.value,
email: email.value,
dob: dob.value,
gender: gender.value,
marital_status: martialStatus.value,
height: height.value,
weight: weight.value,
}).then(r => {
console.log("Info Save", r.data);
isTonalSnackbarVisible.value = true;
patientResponse.value = r.data.message;
isLoadingVisible.value = false;
}).catch(e => {
console.log(e.response);
const { errors: formErrors } = e.response.data.errors;
errors.value = e.response.data.errors;
isLoadingVisible.value = false;
console.error("Error", e.response.data.errors)
});
}
</script>
<template>
<VSnackbar v-model="isTonalSnackbarVisible" :timeout="5000" location="top end" variant="flat" color="success">
{{ patientResponse }}
</VSnackbar>
<VDialog v-model="isLoadingVisible" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog>
<VRow>
<VCol cols="12">
<VCard>
<VCardText>
<!-- 👉 Form -->
<div class="d-flex mb-10">
<VSnackbar v-model="getIsTonalSnackbarVisible" :timeout="5000" location="top end" variant="flat"
color="success">
<VIcon class="ri-success-line success-icon" />
Profile Update Successfully
</VSnackbar>
<!-- 👉 Avatar -->
<VAvatar rounded size="100" class="me-6" :image="accountDataLocal.avatarImg" />
<!-- 👉 Upload Photo -->
<form class="d-flex flex-column justify-center gap-4">
<div class="d-flex flex-wrap gap-4">
<VBtn color="primary" @click="refInputEl?.click()">
<VIcon icon="ri-upload-cloud-line" class="d-sm-none" />
<span class="d-none d-sm-block">Upload Profile Image</span>
</VBtn>
<input ref="refInputEl" type="file" name="file" accept=".jpeg,.png,.jpg,GIF" hidden
@input="changeAvatar" />
</div>
<p class="text-body-1 mb-0">
Allowed JPG, GIF or PNG. Max size of 800K
</p>
</form>
</div>
<VForm class="mt-6" ref="infoVForm" @submit.prevent="onSubmit">
<VRow>
<!-- 👉 First Name -->
<VCol md="4" cols="12">
<VTextField v-model="name" placeholder="John" label="First Name" :rules="[requiredName]"
:error-messages="errors.name" />
</VCol>
<!-- 👉 Last Name -->
<VCol md="4" cols="12">
<VTextField v-model="last_name" placeholder="Doe" label="Last Name"
:rules="[requiredLastName]" :error-messages="errors.last_name" />
</VCol>
<!-- 👉 Email -->
<VCol cols="12" md="4">
<VTextField v-model="email" label="E-mail" placeholder="johndoe@gmail.com" type="email"
:rules="[requiredEmail, emailValidator]" :error-messages="errors.email"
disabled="" />
</VCol>
<!-- 👉 Phone -->
<VCol cols="12" md="4">
<VTextField v-model="phone" label="Phone Number" pattern="^\(\d{3}\) \d{3}-\d{4}$"
:rules="[requiredPhone, validUSAPhone]" :error-messages="errors.phone"
placeholder="(917) 543-9876" @input="formatPhoneNumber" max="14" />
</VCol>
<VCol md="4" cols="12">
<VTextField v-model="dob" :max="getCurrentDate()" label="Date of Birth"
placeholder="Date of Birth" type="date" :rules="[requiredValidator]" />
</VCol>
<VCol md="4" cols="12">
<v-select v-model="gender" label="Select Gender" :items="genders" item-title="name"
item-value="abbreviation" :rules="[requiredValidator]"
:error-messages="errors.gender">
</v-select>
</VCol>
<VCol cols="12" md="4">
<v-select v-model="martialStatus" label="Select Marital Status" :items="maritalStatuses"
item-title="name" item-value="abbreviation" :rules="[requiredValidator]"
:error-messages="errors.martial_status">
</v-select>
</VCol>
<VCol cols="12" md="4">
<v-select v-model="height" label="Select Height" :items="heights" item-title="name"
item-value="abbreviation" :rules="[requiredValidator]"
:error-messages="errors.height">
</v-select>
</VCol>
<VCol cols="12" md="4">
<VTextField v-model="weight" label="Weight" :rules="[requiredValidator]"
:error-messages="errors.weight" />
</VCol>
<!-- 👉 Form Actions -->
<VCol cols="12" class="d-flex flex-wrap gap-4">
<VBtn type="submit">Save changes</VBtn>
<!-- <VBtn color="secondary" variant="tonal" type="reset">
Reset
</VBtn> -->
</VCol>
</VRow>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,45 @@
<script setup>
const cardNumber = ref(null)
const expiry = ref(null)
const cvv = ref(null)
</script>
<template>
<VRow>
<VCol cols="12">
<VCard>
<VCardText>
<VForm>
<VCardText>
<VRow>
<VCol cols="12" md="6">
<VTextField v-model="cardNumber" label="Card Number" />
</VCol>
<VCol cols="12" md="4">
<VTextField v-model="expiry" label="Expiry" />
</VCol>
<VCol cols="12" md="2">
<VTextField v-model="cvv" label="CVV" />
</VCol>
</VRow>
</VCardText>
<!-- 👉 Action Buttons -->
<VCardText class="d-flex flex-wrap gap-4">
<VBtn>Save changes</VBtn>
<!-- <VBtn type="reset" color="secondary" variant="tonal">
Reset
</VBtn> -->
</VCardText>
</VForm>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,38 @@
<script setup>
import { useTheme } from 'vuetify'
const { global } = useTheme()
const authProviders = [
{
icon: 'bxl-facebook',
color: '#4267b2',
colorInDark: '#4267b2',
},
{
icon: 'bxl-twitter',
color: '#1da1f2',
colorInDark: '#1da1f2',
},
{
icon: 'bxl-github',
color: '#272727',
colorInDark: '#fff',
},
{
icon: 'bxl-google',
color: '#db4437',
colorInDark: '#db4437',
},
]
</script>
<template>
<VBtn
v-for="link in authProviders"
:key="link.icon"
:icon="link.icon"
variant="text"
:color="global.name.value === 'dark' ? link.colorInDark : link.color"
/>
</template>

View File

@@ -0,0 +1,473 @@
<script setup>
import avatar1 from '@images/avatars/avatar-1.png'
import avatar2 from '@images/avatars/avatar-2.png'
import avatar3 from '@images/avatars/avatar-3.png'
import avatar4 from '@images/avatars/avatar-4.png'
import eCommerce2 from '@images/eCommerce/2.png'
import pages1 from '@images/pages/1.png'
import pages2 from '@images/pages/2.png'
import pages3 from '@images/pages/3.png'
import pages5 from '@images/pages/5.jpg'
import pages6 from '@images/pages/6.jpg'
const avatars = [
avatar1,
avatar2,
avatar3,
avatar4,
]
const isCardDetailsVisible = ref(false)
</script>
<template>
<VRow>
<!-- 👉 Influencing The Influencer -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard>
<VImg
:src="pages1"
cover
/>
<VCardItem>
<VCardTitle>Influencing The Influencer</VCardTitle>
</VCardItem>
<VCardText>
Cancun is back, better than ever! Over a hundred Mexico resorts have reopened and the state tourism minister predicts Cancun will draw as many visitors in 2006 as it did two years ago.
</VCardText>
</VCard>
</VCol>
<!-- 👉 Robert Meyer -->
<VCol
cols="12"
sm="6"
md="4"
>
<VCard>
<VImg :src="pages2" />
<VCardText class="position-relative">
<!-- User Avatar -->
<VAvatar
size="75"
class="avatar-center"
:image="avatar1"
/>
<!-- Title, Subtitle & Action Button -->
<div class="d-flex justify-space-between flex-wrap pt-8">
<div class="me-2 mb-2">
<VCardTitle class="pa-0">
Robert Meyer
</VCardTitle>
<VCardSubtitle class="text-caption pa-0">
London, UK
</VCardSubtitle>
</div>
<VBtn>send request</VBtn>
</div>
<!-- Mutual Friends -->
<div class="d-flex justify-space-between align-center mt-4">
<span class="font-weight-medium">18 mutual friends</span>
<div class="v-avatar-group">
<VAvatar
v-for="avatar in avatars"
:key="avatar"
:image="avatar"
size="40"
/>
</div>
</div>
</VCardText>
</VCard>
</VCol>
<!-- 👉 Popular Uses Of The Internet -->
<VCol
cols="12"
md="4"
sm="6"
>
<VCard>
<VImg
:src="pages3"
cover
max-height="280"
/>
<VCardItem>
<VCardTitle>Popular Uses Of The Internet</VCardTitle>
</VCardItem>
<VCardText>
<div class="mb-4">
Although cards can support multiple actions, UI controls, and an overflow menu.
</div>
<VBtn
variant="text"
density="comfortable"
@click="isCardDetailsVisible = !isCardDetailsVisible"
>
Details
</VBtn>
</VCardText>
<VExpandTransition>
<div v-show="isCardDetailsVisible">
<VDivider />
<VCardText>
I'm a thing. But, like most politicians, he promised more than he could deliver. You won't have time for sleeping, soldier, not with all the bed making you'll be doing. Then we'll go with that data file! Hey, you add a one and two zeros to that or we walk! You're going to do his laundry? I've got to find a way to escape.
</VCardText>
</div>
</VExpandTransition>
</VCard>
</VCol>
<!-- 👉 Apple iPhone 11 Pro -->
<VCol
sm="6"
cols="12"
>
<VCard>
<div class="d-flex justify-space-between flex-wrap flex-md-nowrap flex-column flex-md-row">
<div class="ma-auto pa-5">
<VImg
width="137"
height="176"
:src="eCommerce2"
/>
</div>
<VDivider :vertical="$vuetify.display.mdAndUp" />
<div>
<VCardItem>
<VCardTitle>Apple iPhone 11 Pro</VCardTitle>
</VCardItem>
<VCardText>
Apple iPhone 11 Pro smartphone. Announced Sep 2019. Features 5.8 display Apple A13 Bionic
</VCardText>
<VCardText class="text-subtitle-1">
<span>Price :</span> <span class="font-weight-medium">$899</span>
</VCardText>
<VCardActions class="justify-space-between">
<VBtn>
<VIcon icon="bx-cart-add" />
<span class="ms-2">Add to cart</span>
</VBtn>
<VBtn
color="secondary"
icon="bx-share-alt"
/>
</VCardActions>
</div>
</div>
</VCard>
</VCol>
<!-- 👉 Stump town Roasters. -->
<VCol
sm="6"
cols="12"
>
<VCard>
<div class="d-flex flex-column-reverse flex-md-row">
<div>
<VCardItem>
<VCardTitle>Stumptown Roasters</VCardTitle>
</VCardItem>
<VCardText class="d-flex align-center flex-wrap text-body-1">
<VRating
:model-value="5"
readonly
class="me-3"
density="compact"
/>
<span>5 Star | 98 reviews</span>
</VCardText>
<VCardText>
Before there was a United States of America, there were coffee houses, because how are you supposed to build.
</VCardText>
<VCardActions>
<VBtn>Location</VBtn>
<VBtn>Reviews</VBtn>
</VCardActions>
</div>
<div class="ma-auto pa-5">
<VImg
:width="176"
:src="pages5"
class="rounded"
/>
</div>
</div>
</VCard>
</VCol>
<!-- 👉 Apple Watch card -->
<VCol
lg="4"
sm="6"
cols="12"
>
<VCard>
<VImg :src="pages6" />
<VCardItem>
<VCardTitle>Apple Watch</VCardTitle>
</VCardItem>
<VCardText>
<p class="font-weight-medium text-base">
$249.40
</p>
<p class="mb-0">
3.1GHz 6-core 10th-generation Intel Core i5 processor, Turbo Boost up to 4.5GHz
</p>
</VCardText>
<VBtn
block
class="rounded-t-0"
>
Add to cart
</VBtn>
</VCard>
</VCol>
<!-- 👉 Lifetime Membership -->
<VCol
md="6"
lg="8"
cols="12"
>
<VCard>
<VRow no-gutters>
<VCol
cols="12"
sm="8"
md="12"
lg="7"
order="2"
order-lg="1"
>
<VCardItem>
<VCardTitle>Lifetime Membership</VCardTitle>
</VCardItem>
<VCardText>
Here, I focus on a range of items and features that we use in life without giving them a second thought such as Coca Cola, body muscles and holding ones own breath. Though, most of these notes are not fundamentally necessary, they are such that you can use them for a good laugh, at a drinks party or for picking up women or men.
</VCardText>
<VCardText>
<VDivider />
</VCardText>
<VCardText class="d-flex justify-center">
<div class="me-auto pe-4">
<p class="d-flex align-center mb-6">
<VIcon
color="primary"
icon="bx-lock-open"
/>
<span class="ms-3">Full Access</span>
</p>
<p class="d-flex align-center mb-0">
<VIcon
color="primary"
icon="bx-user"
/>
<span class="ms-3">15 Members</span>
</p>
</div>
<VDivider
v-if="$vuetify.display.smAndUp"
vertical
inset
/>
<div class="ms-auto ps-4">
<p class="d-flex align-center mb-6">
<VIcon
color="primary"
icon="bx-star"
/>
<span class="ms-3">Access all Features</span>
</p>
<p class="d-flex align-center mb-0">
<VIcon
color="primary"
icon="bx-trending-up"
/>
<span class="ms-3">Lifetime Free Update</span>
</p>
</div>
</VCardText>
</VCol>
<VCol
cols="12"
sm="4"
md="12"
lg="5"
order="1"
order-lg="2"
class="member-pricing-bg text-center"
>
<div class="membership-pricing d-flex flex-column align-center py-14 h-100 justify-center">
<p class="mb-5">
<sub class="text-h5">$</sub>
<sup class="text-h2 font-weight-medium">899</sup>
<sub class="text-h5">USD</sub>
</p>
<p class="text-sm">
5 Tips For Offshore <br> Software Development
</p>
<VBtn class="mt-8">
Contact Now
</VBtn>
</div>
</VCol>
</VRow>
</VCard>
</VCol>
<!-- 👉 Influencing The Influencer -->
<VCol
cols="12"
lg="4"
md="6"
>
<VCard title="Influencing The Influencer">
<VCardText>
Computers have become ubiquitous in almost every facet of our lives. At work, desk jockeys spend hours in front of their desktops, while delivery people scan bar codes with handhelds and workers in the field stay in touch.
</VCardText>
<VCardText>
If you're in the market for new desktops, notebooks, or PDAs, there are a myriad of choices. Here's a rundown of some of the best systems available.
</VCardText>
<VCardActions>
<VBtn>Read More</VBtn>
</VCardActions>
</VCard>
</VCol>
<!-- 👉 The Best Answers -->
<VCol
cols="12"
lg="4"
md="6"
>
<VCard title="The Best Answers">
<VCardText class="d-flex align-center flex-wrap">
<VRating
:model-value="5"
readonly
density="compact"
class="me-3"
/>
<span class="text-subtitle-2">5 Star | 98 reviews</span>
</VCardText>
<VCardText>
<p>
If you are looking for a new way to promote your business that won't cost you more money, maybe printing is one of the options you won't resist.
</p>
<p class="mb-0">
become fast, easy and simple. If you want your promotional material to be an eye-catching
</p>
</VCardText>
<VCardActions>
<VBtn>Location</VBtn>
<VBtn>Reviews</VBtn>
</VCardActions>
</VCard>
</VCol>
<!-- 👉 Support -->
<VCol
cols="12"
md="6"
lg="4"
>
<VCard class="text-center">
<VCardText class="d-flex flex-column justify-center align-center">
<VAvatar
color="primary"
variant="tonal"
size="50"
class="mb-4"
>
<VIcon
size="2rem"
icon="bx-help-circle"
/>
</VAvatar>
<h6 class="text-h6">
Support
</h6>
</VCardText>
<VCardText>
<p>
According to us blisters are a very common thing and we come across them very often in our daily lives. It is a very common occurrence like cold or fever depending upon your lifestyle.
</p>
</VCardText>
<VCardText>
<VBtn variant="elevated">
Contact Now
</VBtn>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss" scoped>
.avatar-center {
position: absolute;
border: 3px solid rgb(var(--v-theme-surface));
inset-block-start: -2rem;
inset-inline-start: 1rem;
}
// membership pricing
.member-pricing-bg {
position: relative;
background-color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity));
}
.membership-pricing {
sup {
inset-block-start: 9px;
}
}
</style>

View File

@@ -0,0 +1,98 @@
<script setup>
const navigationTab = ref('ITEM ONE')
const navigationTab2 = ref('ITEM ONE')
const tabItems = [
'ITEM ONE',
'ITEM TWO',
'ITEM THREE',
]
const tabContent = 'Although cards can support multiple actions, UI controls, and an overflow menu, use restraint and remember that cards...'
</script>
<template>
<VRow>
<VCol
md="6"
cols="12"
>
<VCard>
<VTabs v-model="navigationTab">
<VTab
v-for="item in tabItems"
:key="item"
:value="item"
>
{{ item }}
</VTab>
</VTabs>
<VDivider />
<!-- tabs content -->
<VWindow v-model="navigationTab">
<VWindowItem
v-for="item in tabItems"
:key="item"
:value="item"
>
<VCardItem>
<VCardTitle>Navigation Card</VCardTitle>
</VCardItem>
<VCardText>
{{ tabContent }}
</VCardText>
<VCardText>
<VBtn>Learn More</VBtn>
</VCardText>
</VWindowItem>
</VWindow>
</VCard>
</VCol>
<VCol
md="6"
cols="12"
>
<VCard>
<VTabs
v-model="navigationTab2"
align-tabs="center"
>
<VTab
v-for="item in tabItems"
:key="item"
:value="item"
>
{{ item }}
</VTab>
</VTabs>
<VDivider />
<!-- tabs content -->
<VWindow v-model="navigationTab2">
<VWindowItem
v-for="item in tabItems"
:key="item"
:value="item"
class="text-center"
>
<VCardItem>
<VCardTitle>Navigation Card</VCardTitle>
</VCardItem>
<VCardText>{{ tabContent }}</VCardText>
<VCardText>
<VBtn>Learn More</VBtn>
</VCardText>
</VWindowItem>
</VWindow>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,97 @@
<script setup>
import avatar1 from '@images/avatars/avatar-1.png'
import avatar4 from '@images/avatars/avatar-4.png'
import avatar8 from '@images/avatars/avatar-8.png'
const solidCardData = [
{
cardBg: '#16B1FF',
title: 'Twitter Card',
icon: 'bxl-twitter',
text: '"Turns out semicolon-less style is easier and safer in TS because most gotcha edge cases are type invalid as well."',
avatarImg: avatar4,
avatarName: 'Mary Vaughn',
likes: '1.2k',
share: '80',
},
{
cardBg: '#3B5998',
title: 'Facebook Card',
icon: 'bxl-facebook',
text: 'You\'ve read about the importance of being courageous, rebellious and imaginative. These are all vital ingredients.',
avatarImg: avatar1,
avatarName: 'Eugene Clarke',
likes: '3.2k',
share: '49',
},
{
cardBg: '#007BB6',
title: 'Linkedin Card',
icon: 'bxl-linkedin',
text: 'With the Internet spreading like wildfire and reaching every part of our daily life, more and more traffic is directed.',
avatarImg: avatar8,
avatarName: 'Anne Burke1',
likes: '1.2k',
share: '80',
},
]
</script>
<template>
<VRow>
<VCol
v-for="data in solidCardData"
:key="data.icon"
cols="12"
md="6"
lg="4"
>
<VCard :color="data.cardBg">
<VCardItem>
<template #prepend>
<VIcon
size="1.9rem"
color="white"
:icon="data.icon"
/>
</template>
<VCardTitle class="text-white">
{{ data.title }}
</VCardTitle>
</VCardItem>
<VCardText>
<p class="clamp-text text-white mb-0">
{{ data.text }}
</p>
</VCardText>
<VCardText class="d-flex justify-space-between align-center flex-wrap">
<div class="text-no-wrap">
<VAvatar
size="34"
:image="data.avatarImg"
/>
<span class="text-white ms-2">{{ data.avatarName }}</span>
</div>
<div class="d-flex align-center">
<IconBtn
icon="bx-heart"
color="white"
class="me-1"
/>
<span class="text-subtitle-2 text-white me-4">{{ data.likes }}</span>
<IconBtn
icon="bx-share-alt"
color="white"
class="me-1"
/>
<span class="text-subtitle-2 text-white">{{ data.share }}</span>
</div>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>

View File

@@ -0,0 +1,142 @@
<script setup>
const firstName = ref('')
const email = ref('')
const mobile = ref()
const password = ref()
const checkbox = ref(false)
</script>
<template>
<VForm @submit.prevent="() => {}">
<VRow>
<VCol cols="12">
<VRow no-gutters>
<!-- 👉 First Name -->
<VCol
cols="12"
md="3"
>
<label for="firstName">First Name</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="firstName"
v-model="firstName"
placeholder="John"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<VCol cols="12">
<VRow no-gutters>
<!-- 👉 Email -->
<VCol
cols="12"
md="3"
>
<label for="email">Email</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="email"
v-model="email"
placeholder="johndoe@email.com"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<VCol cols="12">
<VRow no-gutters>
<!-- 👉 Mobile -->
<VCol
cols="12"
md="3"
>
<label for="mobile">Mobile</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="mobile"
v-model="mobile"
type="number"
placeholder="+1 123 456 7890"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<VCol cols="12">
<VRow no-gutters>
<!-- 👉 Password -->
<VCol
cols="12"
md="3"
>
<label for="password">Password</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="password"
v-model="password"
type="password"
placeholder="············"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<!-- 👉 Remember me -->
<VCol
offset-md="3"
cols="12"
md="9"
>
<VCheckbox
v-model="checkbox"
label="Remember me"
/>
</VCol>
<!-- 👉 submit and reset button -->
<VCol
offset-md="3"
cols="12"
md="9"
class="d-flex gap-4"
>
<VBtn type="submit">
Submit
</VBtn>
<VBtn
color="secondary"
variant="tonal"
type="reset"
>
Reset
</VBtn>
</VCol>
</VRow>
</VForm>
</template>

View File

@@ -0,0 +1,146 @@
<script setup>
const firstName = ref('')
const email = ref('')
const mobile = ref()
const password = ref()
const checkbox = ref(false)
</script>
<template>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- 👉 First Name -->
<VCol cols="12">
<VRow no-gutters>
<VCol
cols="12"
md="3"
>
<label for="firstNameHorizontalIcons">First Name</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="firstNameHorizontalIcons"
v-model="firstName"
prepend-inner-icon="bx-user"
placeholder="John"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<!-- 👉 Email -->
<VCol cols="12">
<VRow no-gutters>
<VCol
cols="12"
md="3"
>
<label for="emailHorizontalIcons">Email</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="emailHorizontalIcons"
v-model="email"
prepend-inner-icon="bx-envelope"
placeholder="johndoe@email.com"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<!-- 👉 Mobile -->
<VCol cols="12">
<VRow no-gutters>
<VCol
cols="12"
md="3"
>
<label for="mobileHorizontalIcons">Mobile</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="mobileHorizontalIcons"
v-model="mobile"
type="number"
prepend-inner-icon="bx-mobile"
placeholder="+1 123 456 7890"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<!-- 👉 Password -->
<VCol cols="12">
<VRow no-gutters>
<VCol
cols="12"
md="3"
>
<label for="passwordHorizontalIcons">Password</label>
</VCol>
<VCol
cols="12"
md="9"
>
<VTextField
id="passwordHorizontalIcons"
v-model="password"
prepend-inner-icon="bx-lock"
type="password"
placeholder="············"
persistent-placeholder
/>
</VCol>
</VRow>
</VCol>
<!-- 👉 Checkbox -->
<VCol
offset-md="3"
cols="12"
md="9"
>
<VCheckbox
v-model="checkbox"
label="Remember me"
/>
</VCol>
<!-- 👉 submit and reset button -->
<VCol
offset-md="3"
cols="12"
md="9"
class="d-flex gap-4"
>
<VBtn type="submit">
Submit
</VBtn>
<VBtn
color="secondary"
type="reset"
variant="tonal"
>
Reset
</VBtn>
</VCol>
</VRow>
</VForm>
</template>

View File

@@ -0,0 +1,112 @@
<script setup>
const firstName = ref('')
const lastName = ref('')
const city = ref('')
const country = ref('')
const company = ref('')
const email = ref('')
const checkbox = ref(false)
</script>
<template>
<VForm @submit.prevent="() => {}">
<VRow>
<!-- 👉 First Name -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="firstName"
label="First Name"
placeholder="John"
/>
</VCol>
<!-- 👉 Last Name -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="lastName"
label="Last Name"
placeholder="Doe"
/>
</VCol>
<!-- 👉 Email -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="email"
label="Email"
placeholder="johndoe@email.com"
/>
</VCol>
<!-- 👉 City -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="city"
label="City"
placeholder="New York"
/>
</VCol>
<!-- 👉 Country -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="country"
label="Country"
placeholder="United States"
/>
</VCol>
<!-- 👉 Company -->
<VCol
cols="12"
md="6"
>
<VTextField
v-model="company"
label="Company"
placeholder="Pixinvent"
/>
</VCol>
<!-- 👉 Remember me -->
<VCol cols="12">
<VCheckbox
v-model="checkbox"
label="Remember me"
/>
</VCol>
<VCol
cols="12"
class="d-flex gap-4"
>
<VBtn type="submit">
Submit
</VBtn>
<VBtn
type="reset"
color="secondary"
variant="tonal"
>
Reset
</VBtn>
</VCol>
</VRow>
</VForm>
</template>

View File

@@ -0,0 +1,72 @@
<script setup>
const firstName = ref('')
const email = ref('')
const mobile = ref()
const password = ref()
const checkbox = ref(false)
</script>
<template>
<VForm @submit.prevent="() => {}">
<VRow>
<VCol cols="12">
<VTextField
v-model="firstName"
label="First Name"
placeholder="John"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="email"
label="Email"
type="email"
placeholder="johndoe@example.com"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="mobile"
label="Mobile"
placeholder="+1 123 456 7890"
type="number"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="password"
label="Password"
type="password"
placeholder="············"
/>
</VCol>
<VCol cols="12">
<VCheckbox
v-model="checkbox"
label="Remember me"
/>
</VCol>
<VCol
cols="12"
class="d-flex gap-4"
>
<VBtn type="submit">
Submit
</VBtn>
<VBtn
type="reset"
color="secondary"
variant="tonal"
>
Reset
</VBtn>
</VCol>
</VRow>
</VForm>
</template>

View File

@@ -0,0 +1,76 @@
<script setup>
const firstName = ref('')
const email = ref('')
const mobile = ref()
const password = ref()
const checkbox = ref(false)
</script>
<template>
<VForm @submit.prevent>
<VRow>
<VCol cols="12">
<VTextField
v-model="firstName"
prepend-inner-icon="bx-user"
label="First Name"
placeholder="John"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="email"
prepend-inner-icon="bx-envelope"
label="Email"
type="email"
placeholder="johndoe@example.com"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="mobile"
prepend-inner-icon="bx-mobile"
label="Mobile"
placeholder="+1 123 456 7890"
type="number"
/>
</VCol>
<VCol cols="12">
<VTextField
v-model="password"
prepend-inner-icon="bx-lock"
label="Password"
type="password"
placeholder="············"
/>
</VCol>
<VCol cols="12">
<VCheckbox
v-model="checkbox"
label="Remember me"
/>
</VCol>
<VCol cols="12">
<VBtn
type="submit"
class="me-2"
>
Submit
</VBtn>
<VBtn
color="secondary"
type="reset"
variant="tonal"
>
Reset
</VBtn>
</VCol>
</VRow>
</VForm>
</template>

View File

@@ -0,0 +1,89 @@
<script setup>
import { useRoute, useRouter } from 'vue-router';
const router = useRouter()
const route = useRoute()
const isTopLoadingVisible = ref(false);
const freeAssessment = () => {
isTopLoadingVisible.value = true;
router.push('/plans');
}
</script>
<template>
<VProgressLinear indeterminate color="primary" v-if="isTopLoadingVisible"
style="position: fixed; z-index: 99999999; top: 0;" />
<section id="testosterone" class="landing-faq pt-5">
<div class="container pt-5">
<div class="row">
<div class="col-lg-7">
<h3 class="mb-1"><b>What Are the Benefits of Growth Hormone Therapy?</b></h3>
<p class="mb-5 pb-3">There are many benefits of HGH Therapy for Men</p>
<div class="row">
<div class="col-lg-12">
<div class="accordion" id="accordionExample">
<p>
<strong>Enhanced stamina and energy</strong> Growth hormone, often referred to as
the "fitness hormone," is associated with improved energy levels. HGH therapy
diminishes inflammation, fosters healing, and encourages cellular growth, resulting
in heightened energy levels.
</p>
<p>
<strong>Enhanced Fat Burning and Muscle Building Capability</strong> HGH plays a
vital role in muscle growth.
HGH replacement therapy for men not only enhances fat-burning capacity but also
promotes the development of lean muscle mass.
</p>
<p>
<strong>Enhanced Bone Strength</strong> Growth hormone replacement therapy also
contributes to fortified bones, reducing the likelihood of fractures and
osteoporosis.
</p>
<p>
<strong>Enhanced Libido and Sexual Performance</strong> Growth hormone also
positively impacts testosterone production, resulting in heightened sex drive and
improved sexual performance.
</p>
<p>
<strong>Reduced Risk of Cardiovascular Disease</strong> Research indicates that
HGH therapy positively affects heart health by lowering the risk of cardiovascular
disease, reducing cholesterol levels, and decreasing the likelihood of metabolic
conditions like diabetes.
</p>
<p>
<strong>Enhanced Mood</strong> HGH therapy has been demonstrated to improve mood
and reduce the prevalence of anxiety, depression, and other emotional challenges.
</p>
<p>
<strong>Enhanced Memory and Cognitive Function </strong> Optimizing HGH levels can
lead to improvements in memory, focus, and concentration.
</p>
<p>
<strong>Enhanced Sleep Quality </strong> HGH is generated during deep sleep
phases. HGH replacement therapy aids in facilitating deeper and more rejuvenating
sleep.
</p>
</div>
</div>
<div class="col-lg-6">
<v-btn class="mt-3 mb-3" size="large" @click="freeAssessment()">Get Started</v-btn>
</div>
</div>
</div>
<div class="col-lg-5 d-none d-sm-none d-md-block">
<div class="" style="border: solid 1px #766d6d; border-radius: 5px;">
<img class="img-fluid" :src="'assets/images/benfits.webp'" alt="faq boy with logos"
style="border-radius: 5px;" />
</div>
</div>
</div>
</div>
</section>
</template>
<style>
#testosterone {
background-color: #e8e6e6;
}
</style>

View File

@@ -0,0 +1,164 @@
<script setup>
import { useRoute, useRouter } from 'vue-router';
const router = useRouter()
const route = useRoute()
onBeforeMount(() => initialize());
const date = ref()
const initialize = () => {
date.value = new Date().getFullYear();
}
const gotoTermsCondition = () => {
router.push('/terms-and-conditions');
};
const gotoPrivacyPolicy = () => {
router.push('/privacy-policy');
};
const gotoRefundPolicy = () => {
router.push('/refund-policy');
};
</script>
<template>
<footer id="site-footer" class="site-footer" role="contentinfo">
<div class="footer-container">
<div class="footer-grid">
<div class="footer-grid-column logo-footer">
<!-- <a href="https://welltrustmedical.com"><img
src="https://static.maleexcel.com/wp-content/uploads/2023/11/01100300/logo-welltrust.svg"
class="logo-footer-main" width="229" height="57" alt="Welltrust small white logo" /></a> -->
<!-- <div class="footer-minilogos">
<a href="https://maleexcel.com"><img
src="https://static.maleexcel.com/wp-content/uploads/2023/11/01100259/logo-male-excel.svg"
class="minilogo-footer" width="67" height="9" alt="Maleexcel small white logo" /></a>
<a href="https://femexcelle.com"><img
src="https://static.maleexcel.com/wp-content/uploads/2023/11/01100301/logo-femexcelle.svg"
class="minilogo-footer" width="67" height="9" alt="Femexcelle small white logo" /></a>
<a href="https://aemalabs.com"><img
src="https://static.maleexcel.com/wp-content/uploads/2023/11/01100302/logo-aema-labs.svg"
class="minilogo-footer" width="67" height="9" alt="AEMA Labs small white logo" /></a>
</div> -->
<div class="social-footer">
<h6 class="text-white">Follow Us</h6>
<div class="icons">
<div class="icon"><a href="#" target="_blank"><img
src="https://maleexcel.com/wp-content/uploads/2023/02/facebook.svg" width="25" height="25"
alt="FaceBook logo" /></a></div>
<div class="icon"><a href="#" target="_blank"><img
src="https://static.maleexcel.com/wp-content/uploads/sites/9/2022/04/22082708/twitter-new.svg"
width="25" height="25" alt="Twitter logo" /></a></div>
<div class="icon"><a href="#" target="_blank"><img
src="https://static.maleexcel.com/wp-content/uploads/2023/11/01081416/icon-instagram.svg" width="25"
height="25" alt="Instagram logo" /></a></div>
<div class="icon"><a href="#" target="_blank"><img
src="https://maleexcel.com/wp-content/uploads/2023/02/linkedin.svg" width="25" height="25"
alt="LinkedIn logo" /></a></div>
</div>
</div>
</div>
<div class="footer-grid-column contact-footer">
<div>
<h4>Contact Us</h4>
<p>MonSun: 8am8pm EST</p>
<!-- <span>Message and data rates may apply</span> -->
</div>
<div class="contact-icons">
<img src="https://static.maleexcel.com/wp-content/uploads/2023/09/08114531/contact-icon1.svg" width="23"
height="23" alt="Phone icon" />
<a href="tel:+1 (789) 450-0010<">(789) 450-0010</a>
</div>
<div class="contact-icons">
<img src="https://static.maleexcel.com/wp-content/uploads/2023/09/08114533/contact-icon2.svg" width="23"
height="23" alt="SMS icon" />
<a href="sms:+1 (456) 658-2045">(456) 658-2045</a>
</div>
<div class="contact-icons mb-3">
<img src="https://static.maleexcel.com/wp-content/uploads/2023/09/08114534/contact-icon3.svg" width="23"
height="23" alt="Email icon" />
<a href="mailto:support@hgh.com">support@hgh.com</a>
</div>
</div>
<!-- <div class="footer-grid-column contact-footer">
<div>
<h4>Treatments</h4>
</div>
<div class="contact-icons">
<a href="#">Testosterone Replacement</a>
</div>
<div class="contact-icons">
<a href="#">Thyroid Therapy</a>
</div>
<div class="contact-icons">
<a href="#">Testosterone Test Kit</a>
</div>
<div class="contact-icons">
<a href="#">Testosterone Treatment Pricing</a>
</div>
</div> -->
<div class="footer-grid-column contact-footer">
<div>
<h4>Learn More</h4>
<!-- <span>Message and data rates may apply</span> -->
</div>
<div class="contact-icons">
<a href="#">Contact Us</a>
</div>
<div class="contact-icons">
<a type="button" @click="gotoTermsCondition()">Terms & Conditions</a>
</div>
<div class="contact-icons">
<a type="button" @click="gotoPrivacyPolicy()">Privacy Policy</a>
</div>
<div class="contact-icons">
<a type="button" @click="gotoRefundPolicy()">Refund Policy</a>
</div>
</div>
</div>
<div class="col-lg-7 copyright-footer mt-5">
<p> &copy; Copyright {{ new Date().getFullYear() }}, HGH. All Rights Reserved.</p>
</div>
</div>
</footer>
</template>
<style>
@import "@vendor/css/pages/footer.css";
@import "@vendor/css/pages/theme.css";
.menu-footer-1-new-container {
text-align: left;
/* Align the menu items to the left */
}
.menu {
list-style: none;
padding: 0;
margin: 0;
}
.menu-item {
margin-bottom: 10px;
/* Adjust the spacing between each list item as needed */
}
.menu-item a {
text-decoration: none;
/* Remove underlines from links */
color: #333;
/* Set the color of the links */
font-weight: bold;
/* Make the text bold */
display: block;
/* Make the links fill the entire width of the container */
padding: 5px 0;
/* Add some padding to the links for better readability */
transition: color 0.3s ease;
/* Add a smooth color transition on hover */
}
</style>

View File

@@ -0,0 +1,731 @@
<script setup>
import axios from '@axios';
import '@vendor/js/bootstrap';
import { useRoute, useRouter } from 'vue-router';
const router = useRouter()
const route = useRoute()
const authentication = ref(false)
const getStarted = ref(false)
const isTopLoadingVisible = ref(true);
const isNavbarOpen = ref(false);
const selectMenu = ref('');
const isMemeber = ref(false);
const isStarted = ref(false);
const seetingPlanLogo = ref();
// const isLogin = ref(false)
// const isTopLoadingVisible = ref(false);
const user_role = ref();
const padding = ref('90px 0px');
const isContent = ref();
const scrollFunction = () => {
const scrollPosition = window.scrollY || document.documentElement.scrollTop;
// console.log("scrollPosition", scrollPosition);
if (scrollPosition > 1) {
padding.value = '90px 0px';
} else {
padding.value = '90px 0px';
}
};
const redirectRoute = computed(() => {
user_role.value = localStorage.getItem('user_role');
console.log("user_role", user_role.value);
if (user_role.value === 'agent') {
return '/provider/dashboard';
} else if (user_role.value === 'patient') {
return '/overview';
} else {
// Default route or handle other cases
return '/';
}
});
// Attach scroll event listener
onMounted(async () => {
const baseUrl = window.location.hostname;
if (baseUrl === 'localhost') {
isContent.value = 'd-block';
} else {
isContent.value = 'd-none';
}
const selectedSidebarMenu = localStorage.getItem('selectedSidebarMenu');
if (selectedSidebarMenu == 'memberLogin') {
isMemeber.value = true;
isStarted.value = false;
} else {
isMemeber.value = false;
isStarted.value = true;
}
// iselectedMenu.value = true;
setTimeout(() => {
isTopLoadingVisible.value = false;
}, 500);
window.addEventListener('scroll', scrollFunction);
let setting = await axios.post('/api/settings', {})
// console.log(setting.data)
seetingPlanLogo.value = '/assets/logo/' + setting.data.logo
});
// function closeNavbar() {
// alert('false');
// isNavbarOpen.value = false;
// }
// function toggleNavbar() {
// alert('Test');
// if (isNavbarOpen.value == true)
// isNavbarOpen.value = false
// else
// isNavbarOpen.value = true
// // isNavbarOpen.value = !isNavbarOpen.value;
// }
// Remove scroll event listener on component destroy
onBeforeUnmount(() => {
window.removeEventListener('scroll', scrollFunction);
});
const selectnav = (selectnav) => {
if (selectnav == 'isMemeber') {
localStorage.setItem('selectedSidebarMenu', 'memberLogin');
isMemeber.value = true;
isStarted.value = false;
} else {
localStorage.setItem('selectedSidebarMenu', 'getStarted');
isStarted.value = true;
isMemeber.value = false;
}
}
onBeforeMount(() => initialize());
const initialize = () => {
let token = localStorage.getItem('access_token');
let isLogin = localStorage.getItem('isLogin');
authentication.value = false;
getStarted.value = true;
console.log("authentication", authentication.value);
console.log("token", token);
if (token && isLogin != 'false') {
authentication.value = true;
getStarted.value = false;
}
};
const getStartedFun = () => {
isTopLoadingVisible.value = true
router.replace(route.query.to && route.query.to != '/' ? String(route.query.to) : '/plans')
};
const gotoDashboard = () => {
user_role.value = localStorage.getItem('user_role');
if (user_role.value === 'agent') {
router.push('/provider/dashboard');
} else if (user_role.value === 'patient') {
router.push('/overview');
} else {
router.push('/');
}
};
const isUserAuthenticate = () => {
user_role.value = localStorage.getItem('user_role');
if (user_role.value === 'agent') {
router.push('/provider/dashboard');
} else if (user_role.value === 'patient') {
router.push('/overview');
} else {
window.location.href = window.location.origin;
};
}
</script>
<template>
<nav class="layout-navbar py-0" id="navbar" :style="{ padding }">
<VProgressLinear indeterminate color="primary" v-if="isTopLoadingVisible"
style="position: fixed; z-index: 99999999; top: 0;" />
<div class="">
<div class="navbar navbar-expand-lg landing-navbar px-3 px-md-4">
<!-- Menu logo wrapper: Start -->
<div class="navbar-brand app-brand demo d-flex py-0 py-lg-2 me-4">
<!-- Mobile menu toggle: Start-->
<button class="navbar-toggler border-0 px-0 me-2" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false"
aria-label="Toggle navigation">
<i class="ti ti-menu-2 ti-sm align-middle" @click="isNavbarOpen = true"></i>
</button>
<!-- Mobile menu toggle: End-->
<div class="app-brand-link cursor-pointer">
<span class="app-brand-logo demo">
<VImg :src="seetingPlanLogo" width="250" height="100" @click="isUserAuthenticate"></VImg>
<!-- <svg width="32" height="22" viewBox="0 0 32 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M0.00172773 0V6.85398C0.00172773 6.85398 -0.133178 9.01207 1.98092 10.8388L13.6912 21.9964L19.7809 21.9181L18.8042 9.88248L16.4951 7.17289L9.23799 0H0.00172773Z"
fill="#7367F0" />
<path opacity="0.06" fill-rule="evenodd" clip-rule="evenodd"
d="M7.69824 16.4364L12.5199 3.23696L16.5541 7.25596L7.69824 16.4364Z" fill="#161616" />
<path opacity="0.06" fill-rule="evenodd" clip-rule="evenodd"
d="M8.07751 15.9175L13.9419 4.63989L16.5849 7.28475L8.07751 15.9175Z" fill="#161616" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7.77295 16.3566L23.6563 0H32V6.88383C32 6.88383 31.8262 9.17836 30.6591 10.4057L19.7824 22H13.6938L7.77295 16.3566Z"
fill="#7367F0" />
</svg> -->
</span>
<!-- <span class="app-brand-text demo menu-text fw-bold ms-2 ps-1">HGH</span> -->
</div>
</div>
<!-- Menu logo wrapper: End -->
<!-- Menu wrapper: Start -->
<div class="collapse navbar-collapse landing-nav-menu" :class="{ 'show': isNavbarOpen }"
id="navbarSupportedContent">
<button class="navbar-toggler border-0 text-heading position-absolute end-0 top-0 scaleX-n1-rtl" type="button"
@click="toggleNavbar" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<i class="ti ti-x ti-sm"></i>
</button>
<ul class="navbar-nav me-auto">
<div class="app-brand-link d-lg-none d-block-sm cursor-pointer"
style="text-align: center;display: inline-block;">
<VImg :src="seetingPlanLogo" width="250" height="50" class="logo-img" @click="isUserAuthenticate"></VImg>
<!-- <span class="app-brand-logo text-center demo" style="text-align: center;display: inline-block;">
<svg width="32" height="22" viewBox="0 0 32 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M0.00172773 0V6.85398C0.00172773 6.85398 -0.133178 9.01207 1.98092 10.8388L13.6912 21.9964L19.7809 21.9181L18.8042 9.88248L16.4951 7.17289L9.23799 0H0.00172773Z"
fill="#7367F0" />
<path opacity="0.06" fill-rule="evenodd" clip-rule="evenodd"
d="M7.69824 16.4364L12.5199 3.23696L16.5541 7.25596L7.69824 16.4364Z" fill="#161616" />
<path opacity="0.06" fill-rule="evenodd" clip-rule="evenodd"
d="M8.07751 15.9175L13.9419 4.63989L16.5849 7.28475L8.07751 15.9175Z" fill="#161616" />
<path fill-rule="evenodd" clip-rule="evenodd"
d="M7.77295 16.3566L23.6563 0H32V6.88383C32 6.88383 31.8262 9.17836 30.6591 10.4057L19.7824 22H13.6938L7.77295 16.3566Z"
fill="#7367F0" />
</svg>
</span> -->
<!-- <span class="app-brand-text demo menu-text fw-bold ms-2 ps-1">HGH</span> -->
</div>
<li class="nav-item mt-2" :class="{ 'selectedMenu': isMemeber }" v-if="getStarted"
@click="[isNavbarOpen = false, selectnav('isMemeber')]">
<router-link class="nav-link fw-medium" to="/login">
<VIcon icon="mdi-user" size="20" class="me-0 d-lg-none d-block-sm" />
Member
Login
</router-link>
</li>
<li class="nav-item d-block d-sm-none selectedMenu" v-if="authentication" @click="isNavbarOpen = false">
<!-- <router-link class="nav-link fw-medium" :to="redirectRoute"> -->
<VBtn @click="gotoDashboard()">
<VIcon icon="tabler-smart-home" size="20" class="me-0 d-lg-none d-block-sm" />
Dashboard
</VBtn>
<!-- </router-link> -->
</li>
<div :class="isContent">
<li class="nav-item d-lg-none d-block" :class="{ 'selectedMenu': isStarted }" v-if="getStarted"
@click="[isNavbarOpen = false, selectnav('isStarted')]">
<router-link class="nav-link fw-medium" to="/plans">
<VIcon icon="tabler-arrow-bar-to-right" size="20" class="me-2" />Get
Started
</router-link>
</li>
</div>
</ul>
</div>
<div class="landing-menu-overlay d-lg-none" @click="isNavbarOpen = false"></div>
<!-- Menu wrapper: End -->
<!-- Toolbar: Start -->
<ul class="navbar-nav flex-row align-items-center ms-auto d-none d-lg-block">
<!-- Style Switcher -->
<!-- <li class="nav-item dropdown-style-switcher dropdown me-2 me-xl-0">
<a class="nav-link dropdown-toggle hide-arrow" href="javascript:void(0);" data-bs-toggle="dropdown">
<i class="ti ti-sm"></i>
</a>
<ul class="dropdown-menu dropdown-menu-end dropdown-styles">
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="light">
<span class="align-middle"><i class="ti ti-sun me-2"></i>Light</span>
</a>
</li>
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="dark">
<span class="align-middle"><i class="ti ti-moon me-2"></i>Dark</span>
</a>
</li>
<li>
<a class="dropdown-item" href="javascript:void(0);" data-theme="system">
<span class="align-middle"><i class="ti ti-device-desktop me-2"></i>System</span>
</a>
</li>
</ul>
</li> -->
<!-- / Style Switcher-->
<!-- navbar button: Start -->
<!-- <li class="nav-item loginButton" v-show="loginButton">
<router-link to="/login" class="pr-5">
Login
</router-link>
</li> -->
<li class="nav-item dashboard" v-show="authentication">
<!-- <router-link :to="redirectRoute"> -->
<VBtn block class="text-capitalize text-white" @click="gotoDashboard()">
Dashboard
</VBtn>
<!-- </router-link> -->
</li>
<li class="loginButton rounded-pill waves-effect waves-light" v-show="getStarted">
<!-- <router-link to="/plans"> -->
<!-- <VBtn block class="text-capitalize text-white" @click="getStartedFun()">
Get Started
</VBtn> -->
<!-- </router-link> -->
</li>
</ul>
</div>
</div>
</nav>
</template>
<style>
@import "@vendor/css/pages/front-page.css";
@media (min-width: 575.98px) {
.learnmore-nav {
border-start-end-radius: 0 !important;
border-start-start-radius: 0 !important;
box-shadow: 0 15px 17px #cccc !important;
inset-block-start: 96% !important;
transform: translate(-100%) !important;
}
}
.logo-img {
position: relative;
display: block;
margin: 0 auto;
}
.dropdown-menu {
inline-size: 300px !important;
}
#navbar {
position: fixed;
inline-size: 100%;
transition: 0.4s;
top: 0;
/* z-index: 999; */
}
/* */
.section-py {
padding-block: 5rem;
padding-inline: 0;
}
@media (max-width: 1199.98px) {
.section-py {
padding-block: 4rem;
padding-inline: 0;
}
}
@media (max-width: 768px) {
.section-py {
padding-block: 3rem;
padding-inline: 0;
}
.selectedMenu {
background-color: #e6e2ff !important;
border-radius: 7px !important;
color: #fff8f8 !important;
}
.selectedMenu a {
color: #5764ed !important;
}
}
.first-section-pt {
padding-block-start: 8.84rem;
}
@media (max-width: 1199.98px) {
.first-section-pt {
padding-block-start: 7.5rem;
}
}
.card[class*="card-hover-border-"] {
transition: all 0.2s ease-in-out;
}
.section-title {
position: relative;
z-index: 1;
font-weight: 700;
}
.section-title::after {
position: absolute;
z-index: -1;
background: url("./assets/img/front-pages/icons/section-title-icon.png") no-repeat left bottom;
background-size: contain;
block-size: 100%;
content: "";
inline-size: 120%;
inset-block-end: 0;
inset-inline-start: -12%;
}
.light-style body {
background-color: #fff;
}
.dark-style body {
background-color: #2f3349;
}
nav.layout-navbar {
z-index: 999 !important;
backdrop-filter: unset !important;
block-size: auto !important;
}
nav.layout-navbar::after {
position: absolute;
display: block;
block-size: 100%;
content: "";
inline-size: 100%;
inset-block-start: 0;
inset-inline-start: 0;
}
nav.layout-navbar.navbar-active::after {
backdrop-filter: saturate(100%) blur(6px);
}
.navbar.landing-navbar {
border-width: 2px;
border-style: solid;
border-radius: 0.5rem;
background-color: white !important;
box-shadow: none;
margin-block-start: 1rem;
padding-block: 0.75rem;
transform: unset !important;
transition: all 0.2s ease-in-out;
}
.navbar.landing-navbar .navbar-nav .nav-link {
padding-block: 0.5rem;
padding-inline: 0.9375rem;
}
@media (max-width: 1199.98px) {
.navbar.landing-navbar .navbar-nav .nav-link {
font-size: 18px;
padding-inline: 0.5rem;
}
}
@media (min-width: 992px) {
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown>.dropdown-menu {
inset-block-start: 100%;
inset-inline-start: 50% !important;
max-inline-size: 1300px;
transform: translateX(-50%);
}
.ul-button {
display: none;
}
}
@media (max-width: 991.98px) {
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown>.dropdown-menu {
border: none;
background: transparent;
box-shadow: none;
}
.ul-button {
display: block;
}
}
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown>.dropdown-menu .mega-dropdown-link {
padding-inline: 0;
}
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown>.dropdown-menu .mega-dropdown-link i {
font-size: 0.625rem;
}
.navbar.landing-navbar .navbar-nav .nav-item .nav-img-col,
.navbar.landing-navbar .navbar-nav .nav-item .nav-img-col img {
border-radius: 0.625rem;
}
@media (max-width: 991.98px) {
.navbar.landing-navbar .landing-menu-overlay {
position: fixed;
z-index: 9998;
display: none;
background-color: #fff;
block-size: 100%;
inline-size: 100%;
inset-block-start: 0;
inset-inline-start: 0;
transition: all 0.2s ease-in-out;
}
.navbar.landing-navbar .landing-nav-menu {
position: fixed;
z-index: 9999;
display: block !important;
padding: 1rem;
block-size: 100%;
inline-size: 80%;
inset-block-start: 0;
inset-inline-start: -100%;
max-inline-size: 300px;
overflow-y: auto;
transition: all 0.3s ease-in-out;
}
.navbar.landing-navbar .landing-nav-menu.show {
inset-inline-start: 0;
}
.navbar.landing-navbar .landing-nav-menu.show~.landing-menu-overlay {
display: block;
}
}
.light-style .layout-navbar .navbar.landing-navbar {
border-color: rgba(255, 255, 255, 68%);
background: #fff;
}
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link {
color: #5d596c;
}
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .show>.nav-link,
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .active>.nav-link,
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.show,
.light-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.active {
color: #7367f0 !important;
}
@media (max-width: 991.98px) {
.light-style .layout-navbar .navbar.landing-navbar .landing-nav-menu {
background-color: #fff !important;
}
}
.light-style .layout-navbar.navbar-active .navbar.landing-navbar {
background: #fff;
box-shadow: 0 0.125rem 0.25rem rgba(165, 163, 174, 30%);
}
.light-style .layout-navbar .menu-text {
color: #5d596c;
}
.dark-style .layout-navbar .navbar.landing-navbar {
border-color: rgba(255, 255, 255, 8%);
background-color: rgba(255, 255, 255, 4%);
}
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link {
color: #cfd3ec;
}
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .show>.nav-link,
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .active>.nav-link,
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.show,
.dark-style .layout-navbar .navbar.landing-navbar .navbar-nav .nav-link.active {
color: #7367f0 !important;
}
@media (max-width: 992px) {
.collapse>ul>li.nav-item:hover {
background-color: #e6e2ff !important;
border-radius: 7px !important;
}
.collapse>ul>li>a:hover {
color: #5764ed !important;
}
.dark-style .layout-navbar .navbar.landing-navbar .landing-nav-menu {
background-color: #2f3349;
}
}
.dark-style .layout-navbar .navbar .menu-text {
color: #cfd3ec;
}
.dark-style .layout-navbar.navbar-active .navbar.landing-navbar {
border-color: #2f3349;
background: #2f3349;
box-shadow: 0 0.125rem 0.25rem rgba(15, 20, 34, 40%);
}
@media (min-width: 992px) {
.navbar.landing-navbar .navbar-nav .nav-item.mega-dropdown>.dropdown-menu {
transform: translateX(50%);
}
}
.landing-footer .footer-link {
transition: all 0.2s ease-in-out;
}
.landing-footer .footer-link:hover {
opacity: 0.8;
}
.landing-footer .footer-top {
background-position: right center;
background-repeat: no-repeat;
background-size: cover;
/* border-start-end-radius: 3.75rem; */
/* border-start-start-radius: 3.75rem; */
padding-block: 3.5rem;
padding-inline: 0;
}
.light-style .landing-footer .footer-link,
.light-style .landing-footer .footer-text {
color: #d3d4dc;
}
div#navbarSupportedContent {
background-color: white;
}
@media (max-width: 991px) {
.landing-footer .footer-top {
padding-block: 3rem;
padding-inline: 0;
}
div#navbarSupportedContent {
background-color: white;
}
}
@media (min-width: 992px) {
.landing-footer .footer-logo-description {
color: #d3d4dc;
max-inline-size: 322px;
}
/* div#navbarSupportedContent {
display: none !important;
} */
}
p.footer-text.footer-logo-description.mb-4 {
color: #d3d4dc;
}
.landing-footer .footer-form {
max-inline-size: 22.25rem;
}
.landing-footer .footer-form input {
border-color: #434968;
background-color: #25293c;
color: #d3d4dc;
}
.landing-footer .footer-form input:hover:not([disabled], [focus]) {
border-color: #434968;
}
.landing-footer .footer-form input::placeholder {
color: rgba(211, 212, 220, 50%);
}
.landing-footer .footer-form label {
color: rgba(211, 212, 220, 50%);
}
.light-style .landing-footer .footer-link,
.light-style .landing-footer .footer-text {
color: #d3d4dc;
}
.light-style .landing-footer .footer-title {
color: #fff;
}
.light-style .landing-footer .footer-top {
background-image: url("/assets/img/front-pages/backgrounds/footer-bg-light.png");
}
.light-style .landing-footer .footer-bottom {
background-color: #282c3e;
}
.dark-style .landing-footer .footer-link,
.dark-style .landing-footer .footer-text {
color: #b6bee3;
}
.dark-style .landing-footer .footer-title {
color: #cfd3ec;
}
.dark-style .landing-footer .footer-top {
background-image: url("/assets/img/front-pages/backgrounds/footer-bg-dark.png");
}
/* @media (max-width: 991.98px){
.light-style .layout-navbar .navbar.landing-navbar .landing-nav-menu {
background-color: #fff;
}
} */
.dark-style .landing-footer .footer-bottom {
background-color: #171925;
}
.app-brand-logo.demo {
-ms-flex-align: center;
align-items: center;
-ms-flex-pack: center;
justify-content: center;
display: -ms-flexbox;
display: flex;
width: 150px !important;
height: 30px;
}
</style>

View File

@@ -0,0 +1,5 @@
<template>
<h1>
test
</h1>
</template>

View File

@@ -0,0 +1,128 @@
<template>
<!-- <section id="landingFAQ" class="section-py bg-body landing-faq">
<div class="container">
<h3 class="text-center mb-1"><span class="section-title">Why Choose Us ?</span></h3>
<div class="row gy-5">
<div class="col-lg-5">
<div class="text-center">
<img :src="'assets/images/whychoose.png'" class="d-none d-lg-block" style="width: 450px;">
</div>
</div>
<div class="col-lg-7">
<v-list lines="three" class="mt-10" style="box-shadow: 0 0 19px 0 #ccc;">
<v-list-item :title="'Find a Doctor '"
subtitle="Have a searchable directory where patients can search for doctors by location, specialty, accepted insurance, etc."></v-list-item>
<v-list-item :title="'Make an Appointment'"
subtitle=" Allow patients to book appointments with doctors directly through the site. Build in integration with practice management software."></v-list-item>
<v-list-item :title="'Telehealth Services'"
subtitle="Offer patients the ability to have a video visit with a doctor through the site. This allows access to care without traveling to an office."></v-list-item>
<v-list-item :title="'Health Information/Education'"
subtitle="Articles, videos, animations on health conditions, treatments, wellness topics to educate patients."></v-list-item>
<v-list-item :title="'Symptom Checker'"
subtitle="An interactive tool patients can use to input their symptoms and get possible conditions or suggested next steps."></v-list-item>
</v-list>
</div>
</div>
</div>
</section> -->
<!-- <section id="landingFAQ" class="section-py bg-body landing-faq"> -->
<!-- <div class="container">
<div class="text-center mb-3 pb-1">
<span class="badge bg-label-primary">FAQ</span>
</div>
<h3 class="text-center mb-1">Frequently asked <span class="section-title">questions</span></h3>
<p class="text-center mb-5 pb-3">Browse through these FAQs to find answers to commonly asked questions.</p>
<div class="row gy-5">
<div class="col-lg-7">
<div class="accordion" id="accordionExample">
<div class="card accordion-item active">
<h2 class="accordion-header" id="headingOne">
<button type="button" class="accordion-button" data-bs-toggle="collapse" data-bs-target="#accordionOne"
aria-expanded="true" aria-controls="accordionOne">
How do I make an appointment?
</button>
</h2>
<div id="accordionOne" class="accordion-collapse collapse show" data-bs-parent="#accordionExample">
<div class="accordion-body">
You can easily schedule appointments online through our portal 24/7. Select your preferred doctor,
choose a date/time that works best, and book your visit. New patients should create an account first.
</div>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionTwo" aria-expanded="false" aria-controls="accordionTwo">
What if I need to cancel or reschedule?
</button>
</h2>
<div id="accordionTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo"
data-bs-parent="#accordionExample">
<div class="accordion-body">
Log in to your patient portal and click on My Appointments. You can cancel or reschedule existing
appointments with just a few clicks. Be sure to do so at least 24 hours in advance.
</div>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingThree">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionThree" aria-expanded="false" aria-controls="accordionThree">
What telehealth platforms do you use?
</button>
</h2>
<div id="accordionThree" class="accordion-collapse collapse" aria-labelledby="headingThree"
data-bs-parent="#accordionExample">
<div class="accordion-body">
We conduct secure video visits through both Zoom and Doxy.me. You just need a smartphone, tablet, or
computer with a webcam and internet connection. Virtual visits have the same quality care from the
comfort of your home.
</div>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingFour">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionFour" aria-expanded="false" aria-controls="accordionFour">
Can I get prescription refills online?
</button>
</h2>
<div id="accordionFour" class="accordion-collapse collapse" aria-labelledby="headingFour"
data-bs-parent="#accordionExample">
<div class="accordion-body">
Yes, you can request prescription refills electronically through your patient portal anytime. Once
approved by your doctor, well send the prescription to your preferred pharmacy. Allow 48-72 hours for
processing.
</div>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingFive">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionFive" aria-expanded="false" aria-controls="accordionFive">
Do I need to create an account first?
</button>
</h2>
<div id="accordionFive" class="accordion-collapse collapse" aria-labelledby="headingFive"
data-bs-parent="#accordionExample">
<div class="accordion-body">
Yes, we ask new patients to set up an account prior to making that initial appointment. This securely
stores your medical information and enables convenient access to our patient portal offerings.
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-5">
<div class="text-center">
<img src="assets/images/faq.png" alt="faq boy with logos" class="faq-image d-none d-lg-block"
style="width: 80%;" />
</div>
</div>
</div>
</div> -->
<!-- </section> -->
</template>

View File

@@ -0,0 +1,26 @@
<script setup>
import '@vendor/js/bootstrap';
</script>
<template>
<section class="section-py first-section-pt help-center-header heading">
<div class="col-lg-6 col-xs-12 ">
<h1 class="pl-6 heading-text">
Human Growth Hormone (HGH) Therapy
</h1>
<p class="pl-6 banner-text">
HGH supports the upkeep, growth, and restoration of healthy tissue in the brain and various organs.
It aids in accelerating recovery following an injury and repairing muscle tissue post-exercise, thereby promoting muscle growth,
enhancing metabolism, and facilitating fat loss. Additionally, HGH is believed to improve the skin's quality and appearance.
</p>
</div>
</section>
</template>
<style>
@media (max-width: 567px) {
.heading-text {
font-size: 37px;
}
}
</style>

View File

@@ -0,0 +1,34 @@
<template>
<section id="testosterone" class="section-py landing-faq pb-5">
<div class="container pb-4">
<h class="mb-1"><span>LEADERSHIP</span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="mb-3 pb-5 text-dark"><b>Meet the Medical Experts</b></h1>
</div>
<div class="row gy-5 bg-white">
<div class="col-lg-6 m-0">
<div class="text-center">
<img class="img-fluid" :src="'assets/images/Mask-Group-32.jpg'" alt="Medical Expert Image">
</div>
</div>
<div class="col-lg-6">
<div class="mb-4 text-dark">
<h4 class="mb-1 text-dark"><b>PETER FOTINOS, MD MEDICAL DIRECTOR</b></h4>
</div>
<p class="fs-5 fw-normal">
Dr. Peter Fotinos stands as a prominent TRT physician in the USA, boasting over 13 years of
expertise in bioidentical testosterone and hormone replacement therapy. As one of the original
founders of HGH, he is dedicated to a comprehensive medical approach that focuses on
counteracting the effects of aging through the maintenance of optimal, rather than average, hormone
levels.
</p>
</div>
</div>
</div>
</section>
</template>
<style>
#leadership {
background-color: #e8e6e6 !important;
}
</style>

View File

@@ -0,0 +1,60 @@
<template>
<section id="letstalk1" class="section-py landing-faq mt-0 pb-5">
<div class="container">
<div class="row gy-5" id="letstalk1">
<div class="col-lg-6">
<div class="text-center">
<img class="img-fluid" :src="'assets/images/whychoose.webp'" alt="Medical Expert Image">
</div>
</div>
<div class="col-lg-6">
<div class="mb-4 text-dark">
<h class="mb-1"><span></span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="text-dark"><b>Why Choose Us?</b></h1>
</div>
</div>
<p class="fs-5 fw-normal text-justify p-black">
For numerous years, Hormone Logics has effectively treated men experiencing growth hormone
deficiencies associated with aging.
</p>
<p class="mt-2 text-justify p-black">
According to our growth hormone therapy patients, they feel rejuvenated and reminiscent of their
prime.
This encapsulates the essence of HGH therapy for men restoring hormones to youthful levels to
promote a younger, stronger, and optimal self, regardless of age.
</p>
<p class="m-0 text-justify p-black">
Growth hormone therapy has the potential to mitigate and sometimes even reverse the physical
decline that diminishes men's energy, strength, libido, and mental sharpness.
</p>
<p class="m-0 text-justify p-black">Our experts are committed to assisting you in reclaiming your
vitality and zest for life.</p>
<!-- <div class="">
<div class="mt-4 mb-4 pb-1 text-dark text-justify">
<v-btn outlined size="x-large" color="error">Schedule a Free Call</v-btn>
</div>
</div> -->
<!-- <div class="col-lg-6">
<div class="text-center">
<img class="img-fluid" style="height:200px;width:200px;display: block;position: relative;"
:src="'https://static.maleexcel.com/wp-content/uploads/2022/07/01124938/e_symbol.svg'"
alt="Medical Expert Image">
</div>
</div> -->
</div>
</div>
</div>
</section>
</template>
<style>
#letstalk1 {
background-color: #9dc1ce !important;
}
.p-black {
color: #000 !important;
}
</style>

View File

@@ -0,0 +1,79 @@
<script setup>
import Layer_1 from '@images/svg/Layer_1-2-1.svg';
import iconHeartPersonSketch from '@images/svg/icon-heart-person-sketch-1.svg';
import iconShippingBox from '@images/svg/icon-shipping-box.svg';
import nounDailyCalendar from '@images/svg/noun-daily-calendar-4064786-1.svg';
import ribbon from '@images/svg/ribbon.svg';
</script>
<template>
<section id="landingFeatures" class="section-py landing-features">
<div class="container">
<div class="">
<span class="">Our Value</span>
</div>
<h3 class="">
<span class=""><b>The HGH Difference</b></span>
</h3>
<div class="features-icon-wrapper row gx-0 gy-4 g-sm-5">
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class="mb-3">
<img :src="Layer_1" alt="laptop charging" style="width: 100px;height:72px" />
</div>
<h5 class="mb-3"><b>Evidence-based Treatments</b></h5>
<p class="features-icon-description">
Includes Triclozene, testosterone injections, testosterone cream, Generic Cialis®, and Generic
Viagra®.
</p>
</div>
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class=" mb-3">
<img :src="ribbon" alt="laptop charging" style="width: 100px;height:72px" />
</div>
<h5 class="mb-3"><b>Love It or Leave It Guarantee</b></h5>
<p class="features-icon-description">
Place your order with assurance, cancel anytime.
</p>
</div>
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class=" mb-3">
<img :src="nounDailyCalendar" alt="laptop charging" style="width: 100px; height:72px" />
</div>
<h5 class="mb-3"><b>Daily Testosterone Microdosing</b></h5>
<p class="features-icon-description">
Daily dosing aligns with your body's natural testosterone cycle to optimize your results.
</p>
</div>
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class=" mb-3">
<img :src="'assets/images/doc-laptop.png'" alt="laptop charging" style="width: 100px;height:72px" />
</div>
<h5 class="mb-3"><b>Unlimited Medical Membership</b></h5>
<p class="features-icon-description">Chat with your licensed medical provider online or contact your
Patient Care team via phone or email.
</p>
</div>
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class=" mb-3">
<img :src="iconShippingBox" alt="laptop charging" style="width: 100px;height:72px" />
</div>
<h5 class="mb-3"><b>Easy Delivery</b></h5>
<p class="features-icon-description">
Get your two-month supply of medication delivered to your door.
</p>
</div>
<div class="col-lg-4 col-sm-6 features-icon-box">
<div class=" mb-3">
<img :src="iconHeartPersonSketch" alt="laptop charging" style="width: 100px; height:72px" />
</div>
<h5 class="mb-3"><b>Unmatched Expertise</b></h5>
<p class="features-icon-description">A community of over Thousand's of patients with a remarkable 95%
retention rate.
</p>
</div>
</div>
</div>
</section>
</template>

View File

@@ -0,0 +1,39 @@
<template>
<section id="ourMission" class="section-py bg-body landing-faq mt-5 pb-5 pt-5" style="padding: 0;">
<div class="container">
<div class="">
<span class="text-dark">Our Mission</span>
</div>
<div class="row gy-5">
<div class="col-lg-12">
<div class="col-lg-7 mb-4 text-dark">
<h1 class="mb-1 text-dark"><b>Increasing Accessibility to Life-Changing Healthcare for Men</b>
</h1>
</div>
<div class="col-lg-12 mb-1 mb-4 pb-1 text-dark text-justify">
<p class="fs-5">
Our founders aimed to enhance the accessibility of life-changing healthcare for men across the
United States. Through our established medical protocol, online prescriptions, and convenient
mail-delivered medications, we empower men to thrive as they age. Since 2010, <b>HGH has
assisted over Thousand's patients </b> in effectively addressing low testosterone and
erectile
dysfunctionsafely, simply, and affordably.
</p>
</div>
<div class="row gy-5">
<div class="text-center mb-1 mb-4 pb-1 text-dark text-justify">
<v-btn outlined size="x-large"> Our Story</v-btn>
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<style>
#ourMission {
background-color: #9DC1CE !important;
}
</style>

View File

@@ -0,0 +1,184 @@
<template>
<br />
<section id="landingFAQ" class="section-py bg-body landing-faq mb-5" style="padding: 0;">
<div class="container">
<h1 class="mb-1 mb-4 pb-1"><b>Growth Hormone Therapy FAQs</b> </h1>
<div class="row gy-5">
<div class="col-lg-12">
<div class="accordion" id="accordionExample">
<div class="card accordion-item active">
<h1 class="accordion-header" id="headingOne">
<button type="button" class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#accordionOne" aria-expanded="true" aria-controls="accordionOne">
<b>What is HGH therapy?</b>
</button>
</h1>
<div id="accordionOne" class="accordion-collapse collapse show"
data-bs-parent="#accordionExample">
<ul>
<li class="accordion-body">
The human body naturally produces Human Growth Hormone (HGH) throughout an individual's life. During childhood and adolescence, this hormone plays a crucial role in fueling growth and development. However, as we transition into adulthood, HGH continues to serve an essential function in maintaining the optimal health and functioning of our organs and tissues.
</li>
<li class="accordion-body">
Microdosing testosterone daily aligns with your body's natural hormone cycle,
ensuring consistent benefits around the clock. Less frequent treatment may lead to
undesirable peaks and lows that can be uncomfortable.
</li>
<li class="accordion-body">
Unfortunately, the production of HGH begins to decline around middle age, and in some cases, even earlier for certain individuals. This hormonal imbalance can have far-reaching consequences on various aspects of our well-being.
</li>
<li class="accordion-body">
HGH therapy is a medical intervention designed to replenish and restore optimal hormonal levels, thereby reestablishing a more balanced state within the body. This treatment utilizes a scientifically developed form of HGH, known as "synthetic" or "man-made" human growth hormone.
</li>
<li class="accordion-body">
By introducing this synthetic variant of the naturally occurring hormone, HGH therapy aims to counteract the effects of age-related or premature decline in HGH production. This therapeutic approach provides the body with the necessary hormones to support proper function and maintain overall health and vitality.
</li>
<li class="accordion-body">
Through the carefully controlled administration of synthetic HGH, individuals can potentially experience a revitalization of various bodily processes, promoting improved well-being and potentially mitigating the adverse effects associated with hormonal imbalances.
</li>
</ul>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingTwo">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionTwo" aria-expanded="false" aria-controls="accordionTwo">
<b>What happens when the body starts producing less HGH?</b>
</button>
</h2>
<div id="accordionTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo"
data-bs-parent="#accordionExample">
<ul>
<li class="accordion-body">
In children, a deficiency in Human Growth Hormone (HGH) can lead to stunted growth and a delay in the onset of puberty. However, the impact of HGH depletion in adults can be equally profound and far-reaching. As adults experience a decline in HGH levels, it can trigger a cascade of adverse effects on the body.
</li>
<li class="accordion-body">
One of the most notable consequences is an increase in stored body fat, accompanied by a loss of lean muscle mass and a potential for physical muscle depletion. This imbalance can lead to suboptimal energy levels and a diminished capacity for exercise and physical activity. Furthermore, HGH depletion in adults may contribute to a decline in cardiac function, highlighting the hormone's influential role in maintaining cardiovascular health.
</li>
<li class="accordion-body">
Beyond the physical manifestations, HGH deficiency in adults can also have significant psychological and emotional implications. Extensive research has been conducted on the psychological changes associated with low HGH levels. As HGH levels deplete, adults may experience a reduction in their overall quality of life, including decreased energy levels, diminished sexual drive, and a general lack of motivation and drive.
</li>
<li class="accordion-body">
The impact of HGH deficiency extends beyond physical attributes, affecting an individual's overall well-being and zest for life. Restoring optimal HGH levels through appropriate medical interventions can potentially reverse these detrimental effects, promoting a more balanced and vibrant state of being.
</li>
</ul>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingThree">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionThree" aria-expanded="false" aria-controls="accordionThree">
<b>Do I need a prescription for Growth Hormone Replacement Therapy?</b>
</button>
</h2>
<div id="accordionThree" class="accordion-collapse collapse" aria-labelledby="headingThree"
data-bs-parent="#accordionExample">
<ul>
<li class="accordion-body">
Certainly! It's crucial to understand that there is a single legitimate avenue to obtain growth hormone therapy, and that is through a valid doctor's prescription. The only recognized method to administer genuine HGH therapy is via prescribed growth hormone injections, administered under medical supervision.
</li>
<li class="accordion-body">
Any individual or entity offering purported "HGH products" without a proper prescription, or in forms other than injectable solutions, such as pills, powders, or non-injectable formulations, is not providing authentic Human Growth Hormone. These products are essentially ineffective at best and potentially hazardous at worst.
</li>
<li class="accordion-body">
It's imperative to exercise caution and prioritize your health and well-being by consulting with qualified medical professionals and adhering to prescribed treatment protocols. Attempting to obtain or use non-prescribed or unregulated substances marketed as "HGH" can pose significant risks and should be avoided at all costs.
</li>
</ul>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingFour">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionFour" aria-expanded="false" aria-controls="accordionFour">
<b>What are the benefits of HGH therapy?</b>
</button>
</h2>
<div id="accordionFour" class="accordion-collapse collapse" aria-labelledby="headingFour"
data-bs-parent="#accordionExample">
<ul>
<li class="accordion-body">
There are various reasons why an individual might benefit from undergoing Human Growth Hormone (HGH) therapy. Typically, this treatment is recommended for patients experiencing a growth hormone deficiency that results in undesirable side effects.
</li>
<li class="accordion-body">
When HGH injections are used to address a deficiency, some of the potential benefits can include:
<ul class="list-unstyled">
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Increased energy levels</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Enhanced stamina for exercise and physical activity </h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span>Diminished stamina and exercise capacity</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Facilitated weight loss </h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span>Reduction in body fat</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Improved muscle mass</h5>
</li>
</ul>
</li>
<li class="accordion-body">
When combined with an effective nutrition and fitness plan, HGH therapy can be an excellent option for patients who desire to look and feel their absolute best.
</li>
<li class="accordion-body">
It is important to consider that when an individual can pursue a healthier and happier lifestyle, it can positively impact various aspects of their overall well-being. For instance, they might experience a significant reduction in stress, anxiety, or frustration levels due to improved energy and vitality. Additionally, personal relationships may thrive as a result of increased self-confidence and a more positive outlook on life.
</li>
<li>
For many patients, HGH therapy has proven to be a transformative decision that has profoundly enhanced their quality of life. By addressing hormonal imbalances and facilitating a healthier lifestyle, individuals can experience a multitude of benefits that extend far beyond physical attributes, ultimately leading to a more fulfilling and well-rounded state of being.
</li>
</ul>
</div>
</div>
<div class="card accordion-item">
<h2 class="accordion-header" id="headingFive">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse"
data-bs-target="#accordionFive" aria-expanded="false" aria-controls="accordionFive">
<b>Are there any side effects to growth hormone therapy?</b>
</button>
</h2>
<div id="accordionFive" class="accordion-collapse collapse" aria-labelledby="headingFive"
data-bs-parent="#accordionExample">
<ul>
<li class="accordion-body">
Numerous individuals, both men and women, who have undergone growth hormone therapy can testify to the transformative and life-changing results they have experienced. Their journeys with HGH therapy have been marked by remarkable improvements, often accompanied by minimal discomfort or side effects.
</li>
<li class="accordion-body">
It is important to note that, like any medical treatment, individual responses to growth hormone therapy may vary based on factors such as age, gender, and overall health condition. However, in general, patients can anticipate a safe and positive experience when undergoing HGH therapy under proper medical supervision and guidance.
</li>
<li class="accordion-body">
While acknowledging the potential for individual variations, the overwhelming consensus among those who have embarked on this therapeutic path is one of significant positive outcomes. With the guidance of qualified medical professionals and adherence to prescribed protocols, growth hormone therapy offers the promise of remarkable benefits, with a generally favorable risk-benefit profile.
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</template>

View File

@@ -0,0 +1,5 @@
<template>
<h1>
test
</h1>
</template>

View File

@@ -0,0 +1,34 @@
<script setup>
import '@vendor/js/bootstrap';
</script>
<template>
<section class="section-py first-section-pt our-providers-header heading">
<div class="col-lg-6 col-xs-12 ">
<h1 class="pl-6 heading-text text-white">
Trustworthy Hormone Replacement Therapy Specialists
</h1>
<p class="pl-6 fs-4 text-white">
Our team of HRT providers possesses unparalleled expertise that surpasses any other clinic. Discover more about
our team.
</p>
<p class="pl-6 fs-4 text-designation text-right">
<b>Edward, MD</b>
<br><span class="text-white">MEDICAL DIRECTOR</span>
</p>
</div>
</section>
</template>
<style>
@media(max-width:567px) {
.heading-text {
font-size: 37px;
}
}
.text-designation {
color: brown;
}
</style>

View File

@@ -0,0 +1,5 @@
<template>
<h1>
test
</h1>
</template>

View File

@@ -0,0 +1,130 @@
<script setup>
</script>
<template>
<section id="landingFeatures" class="landing-features">
<div class="container">
<div class="row mt-5 bg-light pt-3 ">
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid " :src="'assets/img/pages/Kelley-Wyant.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5 ">Kelley Wyant, MSN, RN, NP-C</h4>
<p class="text-center fs-6"><b>DIRECTOR OF PATIENT OPERATIONS</b></p>
<p class="text-justify">
I spent many years practicing reactive medicine and caring for patients with acute illnesses
that were often preventable. I believe in HGH mission to provide BHRT for patients
nationwide, with access to care that traditional providers do not always believe is necessary
despite their patients hormonal imbalances.
</p>
</div>
</div>
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid" :src="'assets/img/pages/Michael-Bartuseck.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5">Michael Bartuseck, MSN, FNP-C</h4>
<p class="text-justify">
Hormone Replacement Therapy is the future of medicine. The science of hormones and the effect on
the body as we age is guiding future therapeutic treatment for a multitude of ailments.
Fortunately, HGH is here right now to support our patients and make them feel their best
</p>
</div>
</div>
</div>
<div class="row mt-5 pt-3">
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid " :src="'assets/img/pages/Nicole-Mabardi.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5 ">Nicole Mabardi, MSN, NP-C</h4>
<p class="text-justify">
I dont think people realize how much hormone imbalance contributes to a persons health until
it is corrected. Many people go from one doctor to another trying to figure out whats wrong
with them. HGH has helped so many patients with their health and self-confidence. We
serve patients up-to-date proven treatments from the comfort of their own home.
</p>
</div>
</div>
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid" :src="'assets/img/pages/Ebony-Jenkins.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5">Ebony Jenkins, APRN, FNP-BC, FDN-P</h4>
<p class="text-justify">
I was introduced into HRT while working in Integrative & Functional Medicine settings.
Bio-identical Hormone Replacement Therapy has been the most impactful way for me to improve the
health of my patients. </p>
</div>
</div>
</div>
<div class="row mt-5 pt-3 bg-light">
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid " :src="'assets/img/pages/Meagan-Gregory.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5 ">Meagan Gregory, MSN, APRN, FNP-C</h4>
<p class="text-justify">
HRT allows me to help patients actually improve, rather than just prescribing things to try to
put a band-aid on the problem. Its exciting to see patients who have felt horrible for years
have a complete 180 in how they have been feeling. I chose HGH because I think that they
truly care about improving their patients health and overall well-being.
</p>
</div>
</div>
<div class="col-lg-6 d-flex">
<div class="col-lg-4 col-sm-12 mb-3">
<img class="leadership-img img-fluid" :src="'assets/img/pages/Samantha-Schisler.png'"
alt="Craig Larsen">
</div>
<div class="col-lg-7 col-sm-12 m-2">
<h4 class="text-center text-h fs-5">Samantha Schisler, AGACNP, FNP</h4>
<p class="text-justify">
As a physician, I aim to build relationships that lead to the best possible results and provide
sensitive, customized care to fulfill the health goals of every HGH patient. Medicine is
the most amazing field and Im honored to use my expertise to be a part of my patients
transformation.
</p>
</div>
</div>
</div>
</div>
</section>
</template>
<style>
.leadership-img {
position: relative;
display: block;
margin: 0 auto;
}
@media (max-width:567px) {
.features-icon-box {
text-align: center;
}
}
.text-h {
color: brown;
}
</style>

View File

@@ -0,0 +1,77 @@
<template>
<section id="takeAction" class="section-py landing-faq mt-0 pb-0">
<div class="container">
<div class="row gy-5" id="takeAction">
<div class="col-lg-6">
<div class="text-center">
<img class="discover-image img-fluid" :src="'assets/img/pages/patient-stories.jpg'"
alt="Medical Expert Image">
</div>
</div>
<div class="col-lg-6">
<div class="mb-4">
<h class="mb-1 text-black"><span>TAKE ACTION</span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="text-color"><b>Where to Purchase Testosterone Cypionate Injections</b>
</h1>
</div>
</div>
<p class="fw-normal text-color">If you are facing challenges with low energy, libido, mood, and
metabolism, Testosterone Cypionate injections could potentially offer assistance. To determine if
this is suitable for you, take advantage of a free assessment.
</p>
<div class="">
<div class="text-dark text-justify">
<v-btn class="ml-1" outlined size="x-large" color="error">Take Free Assessment</v-btn>
</div>
</div>
<!-- <div class="col-lg-6">
<div class="text-center">
<img class="img-fluid" style="height:200px;width:200px;display: block;position: relative;"
:src="'https://static.maleexcel.com/wp-content/uploads/2022/07/01124938/e_symbol.svg'"
alt="Medical Expert Image">
</div>
</div> -->
</div>
<div class="col-lg-12 mt-0">
<p>
The content presented on this website is intended for informational purposes only and should not be
considered a replacement for professional medical advice, diagnosis, or treatment. If you have any
questions or concerns regarding your health, it is advisable to consult with your doctor.
</p>
<p>
To obtain prescription hormones from HGH, an online consultation with one of our licensed healthcare
providers is necessary. They will assess your eligibility, discuss the benefits and potential side
effects before prescribing. Depending on DEA and state regulations, your testosterone treatment plan
may necessitate an in-person medical examination. Your HGH provider will provide more details during
your online consultations. Refer to Important Safety Information for further details.
</p>
</div>
</div>
</div>
</section>
</template>
<style>
#takeAction {
background-color: #9DC1CE;
}
.text-color {
color: black;
}
.text-grey {
color: black;
}
.discover-image {
position: relative;
display: block;
margin: 0 0 50px auto;
}
</style>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,36 @@
<script setup>
</script>
<template>
<section id="landingFeatures" class="landing-features">
<div class="container">
<div class="mt-4">
<span class="mt-4">OUR TEAM</span>
</div>
<h1 class="">
<span class=""><b>Meet Our HRT Specialists</b></span>
</h1>
<p class="">
<span class="">Introduce our top-tier, board-licensed physicians and HRT specialists committed to providing
secure, evidence-based treatments for long-term health enhancement. Our providers are carefully selected
and undergo training based on the Fotinos Healthy Aging Formula, an exclusive protocol available solely
to our members.</span>
</p>
<p class="">
<span class="">Our practitioners, certified in ABHRT (Advanced Bioidentical Hormone Replacement Therapy),
possess the education, experience, and credentials required to lead you towards optimal health.</span>
</p>
</div>
</section>
</template>
<style>
@media (max-width:567px) {
.features-icon-box {
text-align: center;
}
}
</style>

View File

@@ -0,0 +1,29 @@
<template>
<section id="ourMission" class="section-py bg-body landing-faq pb-2 pt-4" style="padding: 0;">
<div class="container">
<div class="row gy-5">
<div class="col-lg-12">
<div class="mb-4">
<p>
The information presented on this website is meant solely for informational purposes and should
not be considered a substitute for professional medical advice, diagnosis, or treatment. If you
have any questions or concerns regarding your health, it is recommended to consult with your
doctor.</p>
<p>In order to acquire prescription hormones from HGH, it is essential to undergo an online
consultation with one of our licensed healthcare providers. They will evaluate your eligibility,
discuss the advantages and potential side effects, and then proceed with the prescription
process. Depending on DEA and state regulations, your testosterone treatment plan may require an
in-person medical examination. Additional information will be communicated by your HGH provider
during your online consultations. <span><a class="text-danger" href="#">See Important
Safety</a></span></p>
</div>
</div>
</div>
</div>
</section>
</template>
<style>#ourMission {
background-color: #9DC1CE !important;
}
</style>

View File

@@ -0,0 +1,21 @@
<script setup>
import '@vendor/js/bootstrap';
</script>
<template>
<section class="section-py first-section-pt our-story-header heading">
<div class="col-lg-6 col-xs-12 ">
<h1 class="pl-6 heading-text">
About HGH
</h1>
</div>
</section>
</template>
<style>
@media(max-width:567px) {
.heading-text {
font-size: 37px;
}
}
</style>

View File

@@ -0,0 +1,45 @@
<template>
<section id="testosterone" class="section-py landing-faq pb-5">
<div class="container pb-4 text-center">
<h class="text-center mb-1"><span>OUR EXPERTISE</span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class=" text-center mb-3 pb-5 text-dark"><b>Meet Our Medical Advisory Board</b></h1>
</div>
<div class="row gy-5 bg-white">
<div class="col-lg-6 m-0">
<div class="text-center">
<img class="img-fluid" :src="'assets/images/Mask-Group-32.jpg'" alt="Medical Expert Image">
</div>
</div>
<div class="col-lg-6">
<div class="mb-4 text-dark">
<h4 class="mb-1 text-dark"><b>PETER FOTINOS, MD MEDICAL DIRECTOR</b></h4>
</div>
<p class="fs-5 fw-normal text-justify">
In contrast to conventional medical firms, HGH does not merely aim to address issues temporarily.
Alongside supplying medications for treating erectile dysfunction, we emphasize preventive care
through hormone replacement therapy. While it's typical for testosterone levels to decline with age,
we believe you shouldn't have to accept this decline without intervention. The specialists at HGH
focus on restoring your testosterone and thyroid levels to those of your twenties, promoting a
renewed sense of well-being and optimal functionality.
</p>
</div>
<div class="col-12 mt-3">
<p class="text-justify">
Form many years, my exclusive focus has been on administering hormone replacement therapy,
achieving a success rate exceeding 90% for patients who allow the program sufficient time to yield
results. Some individuals new to HRT may not fully grasp the safety and effectiveness inherent in
our program for reversing aging symptoms and revitalizing their quality of life. Personally, there's
nothing more fulfilling than witnessing patients experience positive transformations in their health
and lives. This is the driving force behind my practice of medicine.
</p>
</div>
</div>
</div>
</section>
</template>
<style>
#leadership {
background-color: #e8e6e6 !important;
}
</style>

View File

@@ -0,0 +1,52 @@
<script setup>
</script>
<template>
<section id="landingFeatures" class="landing-features">
<div class="container">
<div class="text-center ">
<span class="text-center">LEADERSHIP</span>
</div>
<h1 class="text-center">
<span class="text-center"><b>Meet Our Founders</b></span>
</h1>
<div class="text-center mx-7 py-2 mb-5">
<span class="">Together, our founders created an online mens health clinic that uses the power of
proactive
medicine to keep men healthy and performing optimally at every age and every stage of life.</span>
</div>
<div class="row">
<div class="col-lg-6">
<img class="leadership-img img-fluid" :src="'assets/img/pages/about-craig.jpg'">
<h1 class="text-center">Craig Larsen</h1>
<p class="text-center">Co-Founder & CEO</p>
</div>
<div class="col-lg-6">
<img class="leadership-img text-center img-fluid" :src="'assets/img/pages/about-leif.jpg'">
<h1 class="text-center">Craig Larsen</h1>
<p class="text-center">Co-Founder & CEO</p>
</div>
</div>
</div>
</section>
</template>
<style>
.leadership-img {
position: relative;
display: block;
margin: 0 auto;
}
@media (max-width:567px) {
.features-icon-box {
text-align: center;
}
}
</style>

View File

@@ -0,0 +1,68 @@
<template>
<section id="letstalk" class="section-py landing-faq mt-0 pb-0">
<div class="container">
<div class="row gy-5" id="letstalk">
<div class="col-lg-6">
<div class="text-center">
<img class="discover-image img-fluid" :src="'assets/img/pages/about-discover.jpg'"
alt="Medical Expert Image">
</div>
</div>
<div class="col-lg-6">
<div class="mb-4">
<h class="mb-1 text-grey"><span>SEE FOR YOURSELF</span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="text-color"><b>Explore the Benefits of HGH for Yourself</b>
</h1>
</div>
</div>
<p class="fw-normal text-color">Alongside easy-to-use home lab testing, we provide 60-day provisions of
bioidentical Hormone Replacement Therapy, FDA-approved medications for erectile dysfunction,
unrestricted online medical consultations, and personalized treatment from licensed providers based
in the United States.
</p>
<p class="fw-normal text-color">To determine the suitability of HGH treatments for your needs, arrange
your complimentary consultation. Dial 454-555-7899 or click the button below.
</p>
<div class="">
<div class="text-dark text-justify">
<v-btn class="" outlined size="x-large" color="error">
<VIcon icon="tabler-phone-call" />Call Now
</v-btn>
<v-btn class="ml-1" outlined size="x-large" color="primary">Schedule Free
Consult</v-btn>
</div>
</div>
<!-- <div class="col-lg-6">
<div class="text-center">
<img class="img-fluid" style="height:200px;width:200px;display: block;position: relative;"
:src="'https://static.maleexcel.com/wp-content/uploads/2022/07/01124938/e_symbol.svg'"
alt="Medical Expert Image">
</div>
</div> -->
</div>
</div>
</div>
</section>
</template>
<style>
#letstalk {
background-color: #fff;
}
.text-color {
color: black;
}
.text-grey {
color: black;
}
.discover-image {
position: relative;
display: block;
margin: 0 0 50px auto;
}
</style>

View File

@@ -0,0 +1,46 @@
<script setup>
</script>
<template>
<section id="landingFeatures" class="landing-features">
<div class="container">
<div class="">
<span class="">OUR MISSION</span>
</div>
<h1 class="">
<span class=""><b>Delivering Life-Changing Healthcare</b></span>
</h1>
<p class="">
<span class="">Like most men, you likely aspire to maintain good health, stay active, and experience a sense
of well-being throughout your life. Unfortunately, conventional healthcare often falls short in
supporting these goals, primarily focusing on treating illnesses rather than preventing them. The
traditional approach lacks the proactive care necessary to keep your body functioning at its best. In
2019, we revolutionized this paradigm with the introduction of HGH. Our online men's clinic is dedicated
to providing proactive treatments, offering men a transformative path to wellness. HGH has emerged as a
reliable alternative to the shortcomings of America's healthcare system. And our commitment doesn't end
there.</span>
</p>
<p class="">
<span class="">HGH was constructed on a fully online platform, allowing patients to receive treatments and
connect with licensed medical providers from the comfort of their homes. This approach ensures not only
health-optimizing care but also enhances efficiency. At HGH, we take pride in providing a pioneering
clinic, unparalleled in its dedication to preparing you for a lifetime of health, a unique offering not
found elsewhere.</span>
</p>
<div class="mb-3">
<VBtn class="pe-3" color="error"> Get Started</VBtn>
</div>
</div>
</section>
</template>
<style>
@media (max-width:567px) {
.features-icon-box {
text-align: center;
}
}
</style>

View File

@@ -0,0 +1,84 @@
<script setup>
import { defineProps } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useStore } from 'vuex';
const store = useStore()
const router = useRouter()
const route = useRoute()
const props = defineProps({
showPopup: {
type: Boolean,
required: true,
},
})
const startOver = async () => {
const confirmation = window.confirm('Are you sure you want to leave this page?')
if (!confirmation) {
return false
} else {
store.dispatch('updateShowStartOverPupup', false)
// await store.dispatch('deletePatientRegRecord');
localStorage.removeItem('isLogin');
localStorage.removeItem('patient_id');
localStorage.removeItem('user_role');
localStorage.removeItem('access_token');
localStorage.removeItem('userAbilities');
localStorage.removeItem('agent_id');
localStorage.removeItem('appiontment-id');
localStorage.removeItem('patient_appointment_id');
localStorage.removeItem('cominguser');
localStorage.removeItem('currentPage');
localStorage.removeItem('profileCompleted');
localStorage.removeItem('category_name');
localStorage.removeItem('selectedSidebarMenu');
localStorage.removeItem('plan_id');
localStorage.removeItem('plan_image');
localStorage.removeItem('list_sub_title');
localStorage.removeItem('list_one_title');
localStorage.removeItem('list_two_title');
localStorage.removeItem('plan_name');
localStorage.removeItem('plan_price');
localStorage.removeItem('patient_appointment_details');
localStorage.removeItem('selected_time_slot');
const baseUrl = window.location.hostname;
console.log('baseUrl', window.location.origin)
let pathUrl = localStorage.getItem('go_checkout')
if (baseUrl === 'localhost') {
router.push(`${pathUrl}`);
} else {
window.location.href = window.location.origin + pathUrl;
}
}
};
const goWhereLeave = () => {
store.dispatch('updateShowStartOverPupup', false)
};
</script>
<template>
<VDialog v-model="props.showPopup" refs="startOverDialog" width="500">
<!-- <template v-slot:default="{ isActive }"> -->
<v-card>
<v-card-text>
<div class="mt-2 mb-2">
<h5>Do you want to start where you left? or You want to discard the saved data?.</h5>
</div>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<VBtn type="submit" text="Start Over" @click="startOver()"></VBtn>
<VBtn text="Continue" color="success" @click="goWhereLeave()"></VBtn>
</v-card-actions>
</v-card>
<!-- </template> -->
</VDialog>
</template>

View File

@@ -0,0 +1,64 @@
<template>
<br />
<section id="symptoms" class="pb-5">
<div class="container pb-4">
<div class="col-lg-12 mb-4 text-dark">
<h1 class="mb-3 pb-5 text-dark"><b>Signs and Symptoms</b></h1>
</div>
<div class="row gy-5 bg-white pl-6">
<div class="col-lg-12">
<div class="mb-4 text-dark">
<h4 class="mb-1 text-dark"><b>PETER FOTINOS, MD MEDICAL DIRECTOR</b></h4>
</div>
<p class="fs-5 fw-normal">
While HGH is crucial during our formative years, its importance extends into adulthood.
As adults, we still require HGH to replenish damaged cells and uphold optimal muscle mass and bone health throughout our lives.
Unfortunately, HGH levels naturally decline as we enter our 20s. If left unaddressed, age-related growth hormone deficiency can result in various adverse effects, including.
</p>
<div class="row pl-8">
<div class="col-lg-12">
<div class="accordion" id="accordionExample">
<ul class="list-unstyled">
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Abnormal blood cholesterol levels</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Bone loss, reduced muscle mass </h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span>Diminished stamina and exercise capacity</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Fatigue </h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Increased abdominal fat </h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> Heightened risk of heart disease</h5>
</li>
<li>
<h5><span class="badge badge-center rounded-pill bg-primary p-0 me-2"><i
class="ti ti-check ti-xs"></i></span> And a lower life expectancy. </h5>
</li>
</ul>
</div>
</div>
</div>
<p>However, growth hormone therapy can replace what time and nature take away!</p>
</div>
</div>
</div>
</section>
</template>
<style>
#leadership {
background-color: #e8e6e6 !important;
}
</style>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,78 @@
<script setup>
import Group2444 from '@images/svg/Group-2444.svg';
import Group2477 from '@images/svg/Group-2477.svg';
import Group2478 from '@images/svg/Group-2478.svg';
import Group4 from '@images/svg/Group_4.svg';
</script>
<template>
<section id="landingFeatures" class="section-py landing-features">
<div class="container">
<!-- <div class="">
<span class="">OUR PROCESS</span>
</div> -->
<h1 class="">
<span class=""><b>How Does The Process Work?</b></span>
</h1>
<small>Accessing our telemedicine services is simple! Just follow these steps:</small>
<!-- <h2 class="text-center">
<span class="">Achieve an Improved Well-being in 4 Easy Steps.</span>
</h2> -->
<div class="features-icon-wrapper row gx-0 gy-4 g-sm-5">
<div class="col-lg-3 col-sm-6 features-icon-box">
<div class="mb-3">
<img :src="Group2444" alt="laptop charging" style="width: 100px;" />
</div>
<h5 class=""><b>Physical Assessment</b></h5>
<p class="features-icon-description">
Our first step is evaluating your health history to understand your concerns and treatment goals
</p>
</div>
<div class="col-lg-3 col-sm-6 features-icon-box">
<div class=" mb-3 mt-3">
<img :src="Group2477" alt="laptop charging" style="width: 100px;" />
</div>
<h5 class="mb-3"><b>Lab Work</b></h5>
<p class="features-icon-description">
Your healthcare provider can help you schedule a physical examination and arrange any necessary lab work.
</p>
</div>
<div class="col-lg-3 col-sm-6 features-icon-box">
<div class=" mb-3 mt-3">
<img :src="Group2478" alt="laptop charging" style="width: 100px;" />
</div>
<h5 class="mb-3"><b>Results Review</b></h5>
<p class="features-icon-description">
After the evaluation, you will be linked with one of our team members to go over the findings from your lab work and physical examination.
</p>
</div>
<div class="col-lg-3 col-sm-6 features-icon-box">
<div class=" mb-3 mt-3">
<img :src="Group4" alt="laptop charging" style="width: 100px;" />
</div>
<h5 class="mb-3 mt-3"><b>Tailored Care at Your Door</b></h5>
<p class="features-icon-description">
Our experts will create a personalized treatment plan based on your information. Everything you need will be delivered to your doorstep, including medications, instructions, ongoing guidance, and support.
</p>
</div>
</div>
<!-- <p class="text-center">
Regular medical monitoring is essential for all prescription medications. Depending on DEA and state
regulations, your testosterone treatment plan may require an in-person medical examination. Your HGH
provider will provide more details during your online consultations.
</p> -->
</div>
</section>
</template>
<style>
@media (max-width: 567px) {
.features-icon-box {
text-align: center;
}
}
</style>

View File

@@ -0,0 +1,140 @@
<script setup>
import { VRow } from 'vuetify/lib/components/index.mjs';
const props = defineProps({
state: {
type: String,
required: true,
},
patientName: {
type: String,
required: true,
},
selectedDate: {
type: String,
required: true,
},
scheduleDateFormate: {
type: String,
required: true,
},
timezone: {
type: String,
required: true,
},
selectTimeSlot: {
type: String,
required: true,
},
})
</script>
<template>
<VCol cols="12" lg="12" md="6">
<h2 class="text-center mt-2"><span class=" badge badge-center rounded-pill bg-success p-0 me-2"><i
class="ti ti-check ti-xs"></i></span>
Your Order is Complete
</h2>
</VCol>
<div class="v-col v-col-12 text-center w-100">
<img class="img-fluid text-center" src="assets/img/pages/7xm.xyz325616.jpg" alt="Medical Expert Image"
style="width: 100%; max-height: 300px; object-fit: cover;">
</div>
<VCol cols="12">
<VCardText>
<p>We've emailed your order confirmation to you.</p>
<p>When your hormone test kit ships, we'll notify you via email and text. We'll also send you appointment
reminders via email and text before your online
consultation.</p>
<p><b>Please note that we charge a $59 fee for any missed appointments.</b></p>
<p>If you need to reschedule or cancel, please do so at least 24 hours prior to your appointment. For
questions,
text Member Support at (243)-445-0088</p>
</VCardText>
</VCol>
<VCol cols="12">
<h2 class="text-center mt-2"><span class=" badge badge-center rounded-pill bg-success p-0 me-2"><i
class="ti ti-check ti-xs"></i></span>
Your are Schedule
</h2>
<p class="text-center">A calendar invitation has been sent to your email address.</p>
<VCardText class="rounded-0" style="display: flex; flex-direction: column; justify-content: space-between;">
<h2 class="text-center">
{{ state }} Video Consult
</h2>
<v-list class="align-self-center">
<v-list-item>
<template v-slot:prepend>
<v-icon icon="tabler-users"></v-icon>
</template>
<v-list-item-title class="text-wrap">{{ patientName }}</v-list-item-title>
</v-list-item>
<v-list-item>
<template v-slot:prepend>
<v-icon icon="mdi-clock"></v-icon>
</template>
<v-list-item-title class="text-wrap">{{ selectTimeSlot }} , {{ scheduleDateFormate
}}</v-list-item-title>
</v-list-item>
<v-list-item>
<template v-slot:prepend>
<v-icon icon="mdi-clock"></v-icon>
</template>
<v-list-item-title class="text-wrap">{{ timezone }}</v-list-item-title>
</v-list-item>
</v-list>
</VCardText>
<VRow no-gutters>
<VCol cols="12" lg="4" class="p-0 d-none d-md-block">
<VCardText class="pb-0 px-0 position-relative h-100">
<VImg :src="'assets/img/pages/8c8b3766126753c6d098cdb2e42cff49.png'" height="147" width="300"
class="congo-john-img w-100" />
</VCardText>
</VCol>
<VCol cols="12" lg="7" class="p-0">
<VCardText>
<h6 class="text-lg text-no-wrap font-weight-medium">
Access Your HGH Member Portal Inside the portal,<br> you can access:
</h6>
<ul>
<li>
<v-list-item>
<v-list-item-content>
<v-list-item-subtitle>Your treatment plan
</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
</li>
<li>
<v-list-item>
<v-list-item-content>
<v-list-item-subtitle>Medication refill status</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
</li>
<li>
<v-list-item>
<v-list-item-content>
<v-list-item-subtitle> Billing information</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
</li>
</ul>
</VCardText>
</VCol>
</VRow>
</VCol>
<VCol cols="12 mb-3" class="text-center">
<RouterLink to="/overview">
<VBtn> Access Member Portral</VBtn>
</RouterLink>
</VCol>
</template>

View File

@@ -0,0 +1,487 @@
<template>
<section id="termsCon" class="section-py landing-faq mt-0 pb-5">
<div class="container">
<div class="row gy-5" id="termsCon">-
<div class="col-lg-12">
<div class="mb-4 text-dark">
<h class="mb-1"><span></span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="text-dark"><b>Privacy Policy</b></h1>
</div>
</div>
<p class="fs-5 fw-normal text-justify p-black">
<div class="bg-gray-100">
<div class="container mx-auto px-4 py-8">
<p class="mb-4">
This privacy statement explains how HGH gathers and utilizes Personal Data about you via
our mobile
applications, website, email, text messages, and other electronic correspondence.
</p>
<h2 class="text-2xl font-bold mb-2">Introduction</h2>
<p class="mb-4">
At Hgh ("Hgh," "we," "our," or "us"), safeguarding your privacy is of utmost importance
to us, and we are
committed to upholding this principle through our policies. This Privacy Policy outlines
the information we
collect from you or that you provide when using our Website (hgh.codelfi.com) and
Application, as well as
our practices concerning the collection, usage, storage, protection, and sharing of that
information.
This policy encompasses the following information we acquire:
</p>
<ul class="list-disc list-inside mb-4">
<li>On our Website and Application.</li>
<li>Through email, text, and other electronic exchanges between you and our Website and
Application.</li>
<li>When you engage with our advertisements and applications on third-party websites and
services, provided
that those applications or advertisements contain links to this policy.</li>
</ul>
<p>
This policy does not extend to information gathered by:
</p>
<ul class="list-disc list-inside mb-4">
<li>Us offline or through alternative methods, including on any other website managed by
Hgh or any third
party.</li>
<li>Any third party, inclusive of through any application or content (including
advertising) that might link
to or be accessible from or on the Website or Application.</li>
</ul>
<p><b>
Please be aware that HGH is not a medical entity. Any telemedicine consultations
obtained through our
Website or Application are facilitated by independent medical practitioners,
including but not limited
to HGH Medical, P.A. ("HGH Medical"), an independent medical group comprising a
network of healthcare
providers based in the United States (each, a "Provider"). HGH Medical (or your
designated medical
provider if you opt not to use an HGH Medical Provider) is responsible for
furnishing you with a Notice
of Privacy Practices delineating its practices regarding the collection and
utilization of your health
information, not HGH. If you do not consent to adhere to those terms, you are not
authorized to access
or utilize our Website, and you should promptly exit our Website.
</b></p>
<p>
Please carefully review this policy to comprehend our protocols and procedures
concerning your information
and how we intend to handle it. If you disagree with our policies and practices, your
option is to refrain
from using our Website and Applications. By accessing or utilizing our Website and/or
Application, you
consent to this Privacy Policy. Please note that this Privacy Policy may undergo
revisions periodically
(refer to Changes to Our Privacy Policy). Your ongoing use of our Website or Application
following any
modifications constitutes acceptance of those changes, thus we encourage you to
periodically review this
Privacy Policy for updates.
</p>
<h2 class="text-2xl font-bold mb-2">Children Below the Age of 18</h2>
<p class="mb-4">
Our Website and Application are designed for individuals aged 18 and above, and minors
under 18 are not
authorized to use them. Any information pertaining to a child under 18 will be promptly
removed upon our
awareness of it.
</p>
<p class="mb-4">
Our Website and Application are exclusively intended for individuals aged 18 years and
older. Individuals
under the age of 18 are prohibited from providing any information through the Website or
Application. We do
not knowingly gather Personal Data from individuals under 18 years old. If you are under
18, refrain from
using or disclosing any information on our Website or in our Applications, including
your name, address,
phone number, email address, or any screen name or username you might use. Should we
discover that we have
collected Personal Data from a child under 18 without verified parental consent, we will
promptly delete
such information. If you suspect that we may have information from a child under 18,
please contact us at
support@hghcodelfi.com or call us at (822)-122-1192.
</p>
<h2 class="text-2xl font-bold mb-2">The data we gather about you and the methods by which we
obtain it</h2>
<p class="mb-4">
We gather various types of information about you, including details that may directly
identify you,
information related to you but doesn't personally identify you individually, and data
that we merge with
that of our other users. This encompasses information obtained directly from you or
through automated
collection technologies.
</p>
<h2 class="text-2xl font-bold mb-2">In general: </h2>
<p>
We collect various types of information from users of our Website and Application,
including:
</p>
<ul class="list-disc list-inside mb-4">
<li>Personal Data: Information that can personally identify you, such as name, address,
email address, phone
numbers, drivers license number, date of birth, credit/debit card number (solely
for payment purposes),
Social Security Number, medical history, biometrics (e.g., fingerprints), and health
information.</li>
<li>Non-Identifying Information: Data related to you but doesn't individually identify
you, like traffic
data, logs, referring/exit pages, date and time of visits or app usage, error
information, clickstream
data, and other communication data, as well as the resources accessed and used on
the Website or through
the Application.</li>
<li>Connection and Equipment Details: Information regarding your Internet connection,
the devices used to
access our Website or Application, and usage specifics.</li>
</ul>
<p>We gather this information in the following ways:</p>
<ul class="list-disc list-inside mb-4">
<li>Directly from you: When you provide it to us.</li>
<li>Automatically: As you browse through the Website or utilize our Application.
Automatically collected
information may encompass usage specifics, IP addresses, and data obtained via
cookies and other
tracking technologies.</li>
<li>From third parties: Such as our business partners.</li>
</ul>
<h2 class="text-2xl font-bold mb-2">Data Supplied by You </h2>
<p class="mb-4">
The information we gather on or via our Website or Application includes:
</p>
<ul class="list-disc list-inside mb-4">
<li>Details you provide by completing forms on our Website or the Application. This
encompasses information
furnished when registering to use our Application, utilizing our physician
consultation services, making
purchases, or requesting additional services. We may also request information when
you report issues
with our Website or Application.</li>
<li>Records and copies of your communications (including email addresses) if you contact
us.</li>
<li>Transaction details from activities conducted through our Website or Application and
the execution of
your orders. You might need to provide financial details before making a purchase
through our Website or
Application.</li>
</ul>
<p>You may also choose to provide information for publication or display (referred to as
"posted") in public
areas of the Website or Application or transmitted to other users or third parties
(collectively termed as
"User Contributions"). Your User Contributions are shared and transmitted at your own
risk. While we
restrict access to certain pages, it's important to note that no security measures are
entirely foolproof.
Additionally, we cannot govern the actions of other users of the Website and Application
with whom you might
decide to share your User Contributions. Consequently, we cannot guarantee that
unauthorized persons will
not view your User Contributions.</p>
<h2 class="text-2xl font-bold mb-2">Data Obtained via Automated Data Collection Technologies
</h2>
<p class="mb-4">
As you navigate and interact with our Website and Application, we may employ automatic
data collection
technologies to gather specific details about your device, browsing behaviors, and usage
patterns,
including:
</p>
<ul class="list-disc list-inside mb-4">
<li>Visitation details: Such as traffic data, logs, referring/exit pages, date and time
of visits or app
usage, error information, clickstream data, communication data, and the resources
accessed and utilized
on the Website or Application.</li>
<li>Device and connection information: Including your IP address, operating system,
browser type, and
Application version details.</li>
</ul>
<p>
The data collected automatically may include Personal Data, or it may be retained or
linked with Personal
Data obtained through other means or from third parties. This aids us in enhancing our
Website and
Application and providing a more tailored and improved service by enabling us to:
</p>
<ul class="list-disc list-inside mb-4">
<li>Gauge audience size and usage trends</li>
<li>Store information about your preferences to customize our Website and Application
based on your
individual interests.
</li>
<li>Recognize you upon your return to our Website and Application.</li>
</ul>
<p>The technologies utilized for this automatic data collection may comprise:</p>
<ul class="list-disc list-inside mb-4">
<li>Cookies (or browser cookies): Small files stored on the hard drive of your computer
or mobile device.
You can adjust your browser settings to refuse browser cookies, but this may limit
access to certain
parts of our Website or Application.</li>
<li>Google Analytics: Utilized to collect information about your Website usage. Google
Analytics employs
cookies to analyze user behavior on the site. You can learn more about how Google
utilizes data when you
visit our Website by reviewing "How Google uses data when you use our partners
sites or apps" on their
privacy policy page. For additional information about Google Analytics, please visit
Googles website
and relevant pages describing Google Analytics.
</li>
</ul>
<h2 class="text-2xl font-bold mb-2"> Our Utilization of Your Information</h2>
<p>We utilize your Personal Data for various purposes outlined below, which include:</p>
<ul class="list-disc list-inside mb-4">
<li>Provision of our Website or Application to you.</li>
<li>Delivery of products and services to you.</li>
<li>Provision of requested information. Enforcement of contractual rights.</li>
<li>Notification of changes.</li>
<li>Provision of account-related notices.</li>
</ul>
<p class="mb-4">
We use the information collected about you or provided by you, including any Personal
Data, to:
</p>
<ul class="list-disc list-inside mb-4">
<li>Display our Website and their contents to you.</li>
<li>Present our Application.</li>
<li>Provide requested information, products, or services.</li>
<li>Process, fulfill, and manage transactions and orders.</li>
<li>Issue notices regarding your HGH Account.</li>
<li>Respond to your inquiries.</li>
<li>Fulfill any other purposes as specified by you.</li>
<li>Notify you about changes to our Website, Application, or offered products/services.
</li>
<li>Utilize information for purposes stated at the time of data collection.</li>
<li>Employ information for any other purposes with your consent.</li>
</ul>
<p>Additionally, we may use your information to contact you regarding goods and services
that may be of interest
to you, including newsletters. If you prefer not to receive such communications, you can
opt out at any time
by clicking unsubscribe at the bottom of these communications or by visiting your
Account Preferences page.
For further details, refer to Choices About How We Use and Disclose Your Information.
</p>
<h2 class="text-2xl font-bold mb-2">Sharing Your Information</h2>
<p class="mb-4">
We uphold the commitment to not share, sell, or otherwise disclose your Personal Data
for purposes other
than those outlined in this Privacy Policy. However, we do disclose your Personal Data
to a limited number
of third parties, including:
</p>
<ul class="list-disc list-inside mb-4">
<li>Our affiliates and third-party service providers who support our business
operations.</li>
<li>Companies with whom we merge, acquire, or undergo structural changes.</li>
<li>Entities to comply with legal obligations.</li>
<li>Affiliates and third parties for their commercial endeavors.</li>
<li>To enforce our rights and with your consent.</li>
</ul>
<p>We refrain from sharing, selling, or otherwise disclosing your Personal Data beyond the
scope defined in this
Privacy Policy. Nevertheless, we may disclose aggregated user information and
non-identifiable data without
constraints.</p>
<p>We may disclose Personal Data collected or provided by you as follows:</p>
<ul class="list-disc list-inside mb-4">
<li>To affiliates, contractors, service providers, and other third parties assisting our
business
operations. These services include IT support, infrastructure maintenance,
marketing, and payment
processing.</li>
<li>To a buyer or successor in the event of a corporate transaction, where Personal Data
held by HGH about
our users becomes part of the assets transferred.</li>
<li>To fulfill the intended purpose for which you provided the information, such as
disclosing your
personal information to a healthcare Provider.</li>
<li>For purposes explicitly disclosed at the time of data provision or with your
consent.</li>
</ul>
<p>Additionally, we may disclose your Personal Data:</p>
<ul class="list-disc list-inside mb-4">
<li>To comply with legal obligations or governmental requests.</li>
<li>To affiliates and third parties for marketing purposes unless you have opted out of
such disclosures.
</li>
<li>To enforce our agreements, including billing and collection purposes.</li>
<li>If we believe disclosure is necessary to protect the rights, property, or safety of
HGH, our customers,
or others, including fraud protection and credit risk reduction.</li>
</ul>
<h2 class="text-2xl font-bold mb-2">Choices Regarding Your Information</h2>
<p class="mb-4">
We provide options for you to control the use of tracking technology, the disclosure of
your Personal Data
for advertising purposes, and other targeted advertising. However, please note that we
do not oversee the
collection and use of your information by third parties, as described in the "Disclosure
of Your
Information" section. These third parties may combine the information they collect with
data from other
sources for their own purposes.
</p>
<p class="mb-4">
Furthermore, we endeavor to offer you choices regarding the Personal Data you share with
us. We have
implemented mechanisms to grant you control over your Personal Data as follows:
</p>
<ul class="list-disc list-inside mb-4">
<li>Tracking Technologies and Advertising: You can adjust your browser or operating
system settings to
reject all or some cookies, or to receive alerts when cookies are being sent.
However, disabling or
refusing cookies may result in certain parts of our Website or Application being
inaccessible or
functioning improperly.</li>
<li>Promotional Offers from HGH: If you prefer not to receive promotional emails
promoting our products and
services, you can opt out at any time by clicking the unsubscribe link at the bottom
of any marketing
communication you receive from us or by accessing your Account Preferences page.
Please note that this opt-out does not apply to information provided to us as a
result of product
purchases or service usage.
</li>
<li>Disclosure of Your Information to Affiliates and Third Parties: By using our Website
and Application,
you consent to the sharing of your Personal Data with our affiliates and third
parties for promotional
purposes. If you wish to unsubscribe from promotional communications from these
affiliates and third
parties, you can do so by clicking the unsubscribe link at the bottom of any
marketing communication you
receive from them. If you prefer to opt out of this sharing, please adjust your
preferences in your
Account Preferences page or contact us at support@hghcodelfi.com.</li>
</ul>
<h4>Your Rights and Accessing/Correcting Your Information</h4>
<p>You have the right to review and amend your personal information by accessing the Account
Preferences page
within the Application or Website.</p>
<p>To review and amend your Personal Data, simply log into our Website or Application and
navigate to either the
Settings or Account Preferences sections. Alternatively, you can inform us of any
changes or inaccuracies in
your Personal Data by using the Contact Information provided below. This allows us to
ensure that your
information remains complete, accurate, and up to date, or to request the deletion of
your Account. Please
note that we cannot delete your personal information without also deleting your Account.
Additionally, we
may be unable to fulfill your request if we believe it would violate any legal
requirements or cause the
information to become inaccurate.</p>
<h4>Do Not Track Signals</h4>
<p>Presently, we do not employ automated data collection technologies to track users across
websites.
Consequently, we do not currently adhere to "do-not-track" signals that certain browsers
may transmit.</p>
<p>While some web browsers allow users to send a signal to websites and online services
expressing a preference
to opt out of having their online activities tracked, we do not currently honor such
signals. However, it's
important to note that we do not utilize automated data collection technologies to
gather information about
your online activities over time and across third-party websites or online services
(behavioral tracking).
</p>
<h4>Data Security</h4>
<p>While we strive to protect your Personal Data, please be aware that transmitting
information over the
Internet is not entirely secure. However, we employ various measures to safeguard your
Personal Data from
accidental loss and unauthorized access, use, alteration, and disclosure. Encryption
technology is utilized
for transmitting information to and from our systems.</p>
<p>Your cooperation is also crucial in maintaining the safety and security of your
information. You are
responsible for keeping your password to our Website confidential and not sharing it
with anyone.</p>
<p>Although we take steps to protect your Personal Data, we cannot guarantee its absolute
security during
transmission to our Website or Application. Any transmission of Personal Data is done at
your own risk. We
cannot be held responsible for the circumvention of any privacy settings or security
measures contained on
the Website, within your operating system, or in the Application.</p>
<h4>California Privacy Rights</h4>
<p>
Under certain circumstances, California law may grant you the right to receive a list of
third parties (if
any) to whom we have provided your Personal Data for their own direct marketing
purposes. California Civil
Code Section 1798.83 (Californias Shine the Light law) permits California residents
who provide Personal
Data on our Website to request specific information regarding our disclosure of Personal
Data to third
parties for their own direct marketing purposes. You may request this information once
per calendar year. To
make such a request, please contact us using the Contact Information provided below.
</p>
<h4>Changes to Our Privacy Policy</h4>
<p>Any changes made to our Privacy Policy will be posted on our Website. In the event of
significant changes, we
may notify you through your contact information and invite you to review and accept the
updated terms if
necessary.</p>
<p>We reserve the right to modify this Privacy Policy at any time. It is our practice to
post any revisions to
our Privacy Policy on this page, along with a notice that the policy has been updated on
the Websites home
page or the Applications home screen. In case of material changes in how we handle
users Personal Data, we
will notify you via email to the address provided in your Account and/or through a
notice on the Websites
home page or the Applications home screen. The date of the last revision to this
Privacy Policy is
indicated at the top of the page. It is your responsibility to ensure that we have an
up-to-date and
deliverable email address for you and to periodically review this Privacy Policy on the
Application or
Website for any updates.</p>
<p class="mb-4">
<b>This privacy policy is subject to change without notice.</b>
</p>
</div>
</div>
</p>
</div>
</div>
</div>
</section>
</template>
<style>
#letstalk1 {
background-color: #9dc1ce !important;
}
.p-black {
color: #000 !important;
}
</style>

View File

@@ -0,0 +1,45 @@
<template>
<section id="termsCon" class="section-py landing-faq mt-0 pb-5">
<div class="container">
<div class="row gy-5" id="termsCon">-
<div class="col-lg-12">
<div class="mb-4 text-dark">
<h class="mb-1"><span></span></h>
<div class="col-lg-12 mb-4 text-dark">
<h1 class="text-dark text-center"><b>Refund Policy</b></h1>
</div>
</div>
<p class="text-center">
Regrettably, we're unable to authorize returns of prescription items for reuse or resale, thus
all transactions are considered final. Nonetheless, if you believe there's been an error in
fulfilling your prescription, please reach out to us at <b
class="text-primary">(833)625-3392.</b>
</p>
</div>
</div>
</div>
</section>
<section style="background-color: #9DC1CE;">
<VContainer>
<p>The content presented on this website serves informational purposes only and does not replace
professional medical advice, diagnosis, or treatment. Should you have any inquiries or concerns
regarding your health, it is advisable to consult with your doctor.</p>
<p>
To obtain prescription hormones like HGH, you'll need to undergo an online consultation with one of our
licensed healthcare professionals. They will assess your suitability for the treatment, discuss its
benefits and potential side effects, and determine if further medical examinations, as per DEA and state
regulations, are necessary for your testosterone treatment plan. Further details will be provided by
your HGH provider during your online consultations.</p>
</VContainer>
</section>
</template>
<style>
#letstalk1 {
background-color: #9dc1ce !important;
}
.p-black {
color: #000 !important;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
<template>
</template>

View File

@@ -0,0 +1,413 @@
<script setup>
import avatar1 from '@images/avatars/avatar-1.png'
import product21 from '@images/ecommerce-images/product-21.png'
import product22 from '@images/ecommerce-images/product-22.png'
import product23 from '@images/ecommerce-images/product-23.png'
import product24 from '@images/ecommerce-images/product-24.png'
const route = useRoute('apps-ecommerce-order-details-id')
const isConfirmDialogVisible = ref(false)
const isUserInfoEditDialogVisible = ref(false)
const isEditAddressDialogVisible = ref(false)
const headers = [
{
title: 'Product',
key: 'productName',
},
{
title: 'Price',
key: 'price',
},
{
title: 'Quantity',
key: 'quantity',
},
{
title: 'Total',
key: 'total',
sortable: false,
},
]
const orderData = [
{
productName: 'OnePlus 7 Pro',
productImage: product21,
brand: 'OnePlus',
price: 799,
quantity: 1,
},
{
productName: 'Magic Mouse',
productImage: product22,
brand: 'Apple',
price: 89,
quantity: 1,
},
{
productName: 'Wooden Chair',
productImage: product23,
brand: 'insofer',
price: 289,
quantity: 2,
},
{
productName: 'Air Jorden',
productImage: product24,
brand: 'Nike',
price: 299,
quantity: 2,
},
]
</script>
<template>
<div>
<div class="d-flex justify-space-between align-center flex-wrap gap-y-4 mb-6">
<div>
<div class="d-flex gap-2 align-center mb-2 flex-wrap">
<h5 class="text-h5">
Order #{{ route.params.id }}
</h5>
<div class="d-flex gap-x-2">
<VChip
variant="tonal"
color="success"
size="small"
>
Paid
</VChip>
<VChip
variant="tonal"
color="info"
size="small"
>
Ready to Pickup
</VChip>
</div>
</div>
<div>
<span class="text-body-1">
Aug 17, 2020, 5:48 (ET)
</span>
</div>
</div>
<VBtn
variant="outlined"
color="error"
@click="isConfirmDialogVisible = !isConfirmDialogVisible"
>
Delete Order
</VBtn>
</div>
<VRow>
<VCol
cols="12"
md="8"
>
<!-- 👉 Order Details -->
<VCard class="mb-6">
<VCardItem>
<template #title>
<h5 class="text-h5">
Order Details
</h5>
</template>
<template #append>
<span class="text-primary cursor-pointer">Edit</span>
</template>
</VCardItem>
<VDataTable
:headers="headers"
:items="orderData"
item-value="productName"
show-select
class="text-no-wrap"
>
<template #item.productName="{ item }">
<div class="d-flex gap-x-3">
<VAvatar
size="34"
variant="tonal"
:image="item.productImage"
rounded
/>
<div class="d-flex flex-column align-center">
<h6 class="text-h6">
{{ item.productName }}
</h6>
<span class="text-sm text-start align-self-start">
{{ item.brand }}
</span>
</div>
</div>
</template>
<template #item.price="{ item }">
<span>${{ item.price }}</span>
</template>
<template #item.total="{ item }">
<span>
${{ item.price * item.quantity }}
</span>
</template>
<template #bottom />
</VDataTable>
<VDivider />
<VCardText>
<div class="d-flex align-end flex-column">
<table class="text-high-emphasis">
<tbody>
<tr>
<td width="200px">
Subtotal:
</td>
<td class="font-weight-medium">
$2,093
</td>
</tr>
<tr>
<td>Shipping fee: </td>
<td class="font-weight-medium">
$2
</td>
</tr>
<tr>
<td>Tax: </td>
<td class="font-weight-medium">
$28
</td>
</tr>
<tr>
<td class="font-weight-medium">
Total:
</td>
<td class="font-weight-medium">
$2,113
</td>
</tr>
</tbody>
</table>
</div>
</VCardText>
</VCard>
<!-- 👉 Shipping Activity -->
<VCard title="Shipping Activity">
<VCardText>
<VTimeline
truncate-line="both"
align="start"
side="end"
line-inset="10"
line-color="primary"
density="compact"
class="v-timeline-density-compact"
>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Order was placed (Order ID: #32543)</span>
<span class="app-timeline-meta">Tuesday 11:29 AM</span>
</div>
<p class="app-timeline-text mb-0">
Your order has been placed successfully
</p>
</VTimelineItem>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Pick-up</span>
<span class="app-timeline-meta">Wednesday 11:29 AM</span>
</div>
<p class="app-timeline-text mb-0">
Pick-up scheduled with courier
</p>
</VTimelineItem>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Dispatched</span>
<span class="app-timeline-meta">Thursday 8:15 AM</span>
</div>
<p class="app-timeline-text mb-0">
Item has been picked up by courier.
</p>
</VTimelineItem>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Package arrived</span>
<span class="app-timeline-meta">Saturday 15:20 AM</span>
</div>
<p class="app-timeline-text mb-0">
Package arrived at an Amazon facility, NY
</p>
</VTimelineItem>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Dispatched for delivery</span>
<span class="app-timeline-meta">Today 14:12 PM</span>
</div>
<p class="app-timeline-text mb-0">
Package has left an Amazon facility , NY
</p>
</VTimelineItem>
<VTimelineItem
dot-color="primary"
size="x-small"
>
<div class="d-flex justify-space-between align-center mb-3">
<span class="app-timeline-title">Delivery</span>
</div>
<p class="app-timeline-text mb-0">
Package will be delivered by tomorrow
</p>
</VTimelineItem>
</VTimeline>
</VCardText>
</VCard>
</VCol>
<VCol
cols="12"
md="4"
>
<!-- 👉 Customer Details -->
<VCard class="mb-6">
<VCardText class="d-flex flex-column gap-y-6">
<h5 class="text-h5">
Customer Details
</h5>
<div class="d-flex align-center">
<VAvatar
:image="avatar1"
class="me-3"
/>
<div>
<div class="text-body-1 text-high-emphasis font-weight-medium">
Shamus Tuttle
</div>
<span>Customer ID: #47389</span>
</div>
</div>
<div class="d-flex align-center">
<VAvatar
variant="tonal"
color="success"
class="me-3"
>
<VIcon icon="ri-shopping-cart-line" />
</VAvatar>
<h6 class="text-h6">
12 Orders
</h6>
</div>
<div class="d-flex flex-column gap-y-1">
<div class="d-flex justify-space-between gap-1 text-body-2">
<h6 class="text-h6">
Contact Info
</h6>
<span
class="text-base text-primary font-weight-medium cursor-pointer"
@click="isUserInfoEditDialogVisible = !isUserInfoEditDialogVisible"
>
Edit
</span>
</div>
<span>Email: Sheldon88@yahoo.com</span>
<span>Mobile: +1 (609) 972-22-22</span>
</div>
</VCardText>
</VCard>
<!-- 👉 Shipping Address -->
<VCard class="mb-6">
<VCardText>
<div class="d-flex align-center justify-space-between gap-1 mb-6">
<div class="text-body-1 text-high-emphasis font-weight-medium">
Shipping Address
</div>
<span
class="text-base text-primary font-weight-medium cursor-pointer"
@click="isEditAddressDialogVisible = !isEditAddressDialogVisible"
>Edit</span>
</div>
<div>
45 Rocker Terrace <br> Latheronwheel <br> KW5 8NW, London <br> UK
</div>
</VCardText>
</VCard>
<!-- 👉 Billing Address -->
<VCard>
<VCardText>
<div class="d-flex align-center justify-space-between gap-1 mb-3">
<div class="text-body-1 text-high-emphasis font-weight-medium">
Billing Address
</div>
<span
class="text-base text-primary font-weight-medium cursor-pointer"
@click="isEditAddressDialogVisible = !isEditAddressDialogVisible"
>Edit</span>
</div>
<div>
45 Rocker Terrace <br> Latheronwheel <br> KW5 8NW, London <br> UK
</div>
<div class="mt-6">
<h6 class="text-h6 mb-1">
Mastercard
</h6>
<div class="text-base">
Card Number: ******4291
</div>
</div>
</VCardText>
</VCard>
</VCol>
</VRow>
<ConfirmDialog
v-model:isDialogVisible="isConfirmDialogVisible"
confirmation-question="Are you sure to cancel your Order?"
cancel-msg="Order cancelled!!"
cancel-title="Cancelled"
confirm-msg="Your order cancelled successfully."
confirm-title="Cancelled!"
/>
<UserInfoEditDialog v-model:isDialogVisible="isUserInfoEditDialogVisible" />
<AddEditAddressDialog v-model:isDialogVisible="isEditAddressDialogVisible" />
</div>
</template>

View File

@@ -0,0 +1,395 @@
<script setup>
import mastercard from '@images/logos/mastercard.png'
import paypal from '@images/logos/paypal.png'
const widgetData = ref([
{
title: 'Pending Payment',
value: 56,
icon: 'ri-calendar-2-line',
},
{
title: 'Completed',
value: 12689,
icon: 'ri-check-double-line',
},
{
title: 'Refunded',
value: 124,
icon: 'ri-wallet-3-line',
},
{
title: 'Failed',
value: 32,
icon: 'ri-error-warning-line',
},
])
const searchQuery = ref('')
// Data table options
const itemsPerPage = ref(10)
const page = ref(1)
const sortBy = ref()
const orderBy = ref()
// Data table Headers
const headers = [
{
title: 'Order',
key: 'order',
},
{
title: 'Date',
key: 'date',
},
{
title: 'Customers',
key: 'customers',
},
{
title: 'Payment',
key: 'payment',
sortable: false,
},
{
title: 'Status',
key: 'status',
},
{
title: 'Method',
key: 'method',
sortable: false,
},
{
title: 'Actions',
key: 'actions',
sortable: false,
},
]
const updateOptions = options => {
page.value = options.page
sortBy.value = options.sortBy[0]?.key
orderBy.value = options.sortBy[0]?.order
}
const resolvePaymentStatus = status => {
if (status === 1)
return {
text: 'Paid',
color: 'success',
}
if (status === 2)
return {
text: 'Pending',
color: 'warning',
}
if (status === 3)
return {
text: 'Cancelled',
color: 'secondary',
}
if (status === 4)
return {
text: 'Failed',
color: 'error',
}
}
const resolveStatus = status => {
if (status === 'Delivered')
return {
text: 'Delivered',
color: 'success',
}
if (status === 'Out for Delivery')
return {
text: 'Out for Delivery',
color: 'primary',
}
if (status === 'Ready to Pickup')
return {
text: 'Ready to Pickup',
color: 'info',
}
if (status === 'Dispatched')
return {
text: 'Dispatched',
color: 'warning',
}
}
const {
data: ordersData,
execute: fetchOrders,
} = await useApi(createUrl('/apps/ecommerce/orders', {
query: {
q: searchQuery,
page,
itemsPerPage,
sortBy,
orderBy,
},
}))
const orders = computed(() => ordersData.value.orders)
const totalOrder = computed(() => ordersData.value.total)
const deleteOrder = async id => {
await $api(`/apps/ecommerce/orders/${ id }`, { method: 'DELETE' })
fetchOrders()
}
</script>
<template>
<div>
<VCard class="mb-6">
<VCardText class="px-2">
<VRow>
<template
v-for="(data, index) in widgetData"
:key="index"
>
<VCol
cols="12"
sm="6"
md="3"
class="px-6"
>
<div
class="d-flex justify-space-between"
:class="$vuetify.display.xs ? 'product-widget' : $vuetify.display.sm ? index < 2 ? 'product-widget' : '' : ''"
>
<div class="d-flex flex-column gap-y-1">
<h4 class="text-h4">
{{ data.value }}
</h4>
<span class="text-base text-capitalize">
{{ data.title }}
</span>
</div>
<VAvatar
variant="tonal"
rounded
size="42"
>
<VIcon
:icon="data.icon"
size="26"
/>
</VAvatar>
</div>
</VCol>
<VDivider
v-if="$vuetify.display.mdAndUp ? index !== widgetData.length - 1 : $vuetify.display.smAndUp ? index % 2 === 0 : false"
vertical
inset
length="100"
/>
</template>
</VRow>
</VCardText>
</VCard>
<VCard>
<VCardText>
<div class="d-flex justify-sm-space-between align-center justify-start flex-wrap gap-4">
<VTextField
v-model="searchQuery"
placeholder="Search Order"
density="compact"
style=" max-inline-size: 200px; min-inline-size: 200px;"
/>
<VBtn
prepend-icon="ri-upload-2-line"
variant="outlined"
color="secondary"
>
Export
</VBtn>
</div>
</VCardText>
<VDataTableServer
v-model:items-per-page="itemsPerPage"
v-model:page="page"
:headers="headers"
:items="orders"
item-value="order"
:items-length="totalOrder"
show-select
class="text-no-wrap"
@update:options="updateOptions"
>
<!-- Order ID -->
<template #item.order="{ item }">
<RouterLink :to="{ name: 'apps-ecommerce-order-details-id', params: { id: item.order } }">
#{{ item.order }}
</RouterLink>
</template>
<!-- Date -->
<template #item.date="{ item }">
{{ new Date(item.date).toDateString() }}
</template>
<!-- Customers -->
<template #item.customers="{ item }">
<div class="d-flex align-center">
<VAvatar
size="34"
:variant="!item.avatar.length ? 'tonal' : undefined"
:rounded="1"
class="me-4"
>
<VImg
v-if="item.avatar"
:src="item.avatar"
/>
<span
v-else
class="font-weight-medium"
>{{ avatarText(item.customer) }}</span>
</VAvatar>
<div class="d-flex flex-column">
<RouterLink :to="{ name: 'pages-user-profile-tab', params: { tab: 'profile' } }">
<div class="text-high-emphasis font-weight-medium">
{{ item.customer }}
</div>
</RouterLink>
<span class="text-sm">{{ item.email }}</span>
</div>
</div>
</template>
<!-- Payments -->
<template #item.payment="{ item }">
<div
:class="`text-${resolvePaymentStatus(item.payment)?.color}`"
class="d-flex align-center font-weight-medium"
>
<VIcon
size="10"
icon="ri-circle-fill"
class="me-2"
/>
<span>{{ resolvePaymentStatus(item.payment)?.text }}</span>
</div>
</template>
<!-- Status -->
<template #item.status="{ item }">
<VChip
v-bind="resolveStatus(item.status)"
size="small"
/>
</template>
<!-- Method -->
<template #item.method="{ item }">
<div class="d-flex align-start gap-x-2">
<img :src="item.method === 'mastercard' ? mastercard : paypal">
<div>
<VIcon
icon="ri-more-line"
class="me-2"
/>
<span v-if="item.method === 'mastercard'">
{{ item.methodNumber }}
</span>
<span v-else>
@gmail.com
</span>
</div>
</div>
</template>
<!-- Actions -->
<template #item.actions="{ item }">
<IconBtn size="small">
<VIcon icon="ri-more-2-line" />
<VMenu activator="parent">
<VList>
<VListItem value="view">
<RouterLink
:to="{ name: 'apps-ecommerce-order-details-id', params: { id: item.order } }"
class="text-high-emphasis"
>
View
</RouterLink>
</VListItem>
<VListItem
value="delete"
@click="deleteOrder(item.id)"
>
Delete
</VListItem>
</VList>
</VMenu>
</IconBtn>
</template>
<!-- Pagination -->
<template #bottom>
<VDivider />
<div class="d-flex justify-end flex-wrap gap-x-6 px-2 py-1">
<div class="d-flex align-center gap-x-2 text-medium-emphasis text-base">
Rows Per Page:
<VSelect
v-model="itemsPerPage"
class="per-page-select"
variant="plain"
:items="[10, 20, 25, 50, 100]"
/>
</div>
<p class="d-flex align-center text-base text-high-emphasis me-2 mb-0">
{{ paginationMeta({ page, itemsPerPage }, totalOrder) }}
</p>
<div class="d-flex gap-x-2 align-center me-2">
<VBtn
class="flip-in-rtl"
icon="ri-arrow-left-s-line"
variant="text"
density="comfortable"
color="high-emphasis"
:disabled="page <= 1"
@click="page <= 1 ? page = 1 : page--"
/>
<VBtn
class="flip-in-rtl"
icon="ri-arrow-right-s-line"
density="comfortable"
variant="text"
color="high-emphasis"
:disabled="page >= Math.ceil(totalOrder / itemsPerPage)"
@click="page >= Math.ceil(totalOrder / itemsPerPage) ? page = Math.ceil(totalOrder / itemsPerPage) : page++ "
/>
</div>
</div>
</template>
</VDataTableServer>
</VCard>
</div>
</template>
<style lang="scss" scoped>
#customer-link{
&:hover{
color: '#000' !important
}
}
.product-widget{
border-block-end: 1px solid rgba(var(--v-theme-on-surface), var(--v-border-opacity));
padding-block-end: 1rem;
}
</style>

View File

@@ -0,0 +1,287 @@
<script setup>
import { defineProps } from 'vue';
const panel = ref(0)
const error = ref();
const isMark = ref();
const isShipped = ref(true);
const isShippedColor = ref('secondary');
const isDelivered = ref(true);
const isDeliveredColor = ref('secondary');
const isTransit = ref(true);
const isTransitColor = ref('secondary');
const isReceived = ref(true);
const isReceivedColor = ref('secondary');
const isResults = ref(true);
const isResultsColor = ref('secondary');
const props = defineProps({
itemProps: {
type: String,
required: false,
},
})
const isthis = computed(async () => {
if (props.itemProps == 'shipped') {
isShipped.value = false;
isShippedColor.value = "rgb(var(--v-theme-yellow))";
}
if (props.itemProps == 'delivered') {
isShipped.value = false;
isShippedColor.value = "rgb(var(--v-theme-yellow))";
isDelivered.value = false;
isDeliveredColor.value = "rgb(var(--v-theme-yellow))";
}
if (props.itemProps == 'transit') {
isShipped.value = false;
isShippedColor.value = "rgb(var(--v-theme-yellow))";
isDelivered.value = false;
isDeliveredColor.value = "rgb(var(--v-theme-yellow))";
isTransit.value = false;
isTransitColor.value = "rgb(var(--v-theme-yellow))";
}
if (props.itemProps == 'received') {
isShipped.value = false;
isShippedColor.value = "rgb(var(--v-theme-yellow))";
isDelivered.value = false;
isDeliveredColor.value = "rgb(var(--v-theme-yellow))";
isTransit.value = false;
isTransitColor.value = "rgb(var(--v-theme-yellow))";
isReceived.value = false;
isReceivedColor.value = "rgb(var(--v-theme-yellow))";
}
if (props.itemProps == 'result') {
isShipped.value = false;
isShippedColor.value = "rgb(var(--v-theme-yellow))";
isResults.value = false;
isResultsColor.value = "rgb(var(--v-theme-yellow))";
isReceived.value = false;
isReceivedColor.value = "rgb(var(--v-theme-yellow))";
isTransit.value = false;
isTransitColor.value = "rgb(var(--v-theme-yellow))";
isDelivered.value = false;
isDeliveredColor.value = "rgb(var(--v-theme-yellow))";
}
});
</script>
<template>
<!-- <VCard class="text-center text-sm-start"> -->
<VRow no-gutters v-if="isthis">
<VCol>
<VExpansionPanels v-model="panel">
<VExpansionPanel>
<VExpansionPanelTitle variant="tonal">
<span class="font-color"><b>Lab Kit </b> <br><br>
<p> Status:{{ props.itemProps }}
</p>
<p>Test Kit Tracking : To you </p>
</span>
</VExpansionPanelTitle>
<VExpansionPanelText>
<h2 class="text-start">Results</h2>
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both" density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" color="error" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Ordered Hormone Test Kit</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem :dot-color="isShippedColor" :color="isShippedColor" icon="tabler-check"
size="small">
<template #icon v-if="isShipped">
2
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Shipped Hormone Test Kit</b>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem :dot-color="isDeliveredColor" :color="isDeliveredColor"
icon="tabler-check" size="small">
<template #icon v-if="isDelivered">
3
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Delivered Hormone Test Kit</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem :dot-color="isTransitColor" :color="isTransitColor" icon="tabler-check"
size="small">
<template #icon v-if="isTransit">
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1 ">
<div>
<b>Hormone Test Kit in Transit</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem :dot-color="isReceivedColor" :color="isReceivedColor" icon="tabler-check"
size="small">
<template #icon v-if="isReceived">
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Lab Received Hormone Test Kit</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem :dot-color="isResultsColor" :color="isResultsColor" icon="tabler-check"
size="small">
<template #icon v-if="isResults">
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Provider Reviewed Test Results</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
</VCol>
</VRow>
<!-- </VCard> -->
</template>
<style lang="scss" scoped>
.v-timeline .v-timeline-divider__inner-dot {
background-color: white !important;
}
.font-color {
color: #fff;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.bg-secondary {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.v-expansion-panel-title--active {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
span.v-expansion-panel-title__icon {
color: #fff
}
.v-expansion-panel {
background-color: #fff;
border-radius: 16px;
box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);
margin-bottom: 10px;
overflow: hidden;
transition: box-shadow 0.3s ease;
}
.v-expansion-panel:hover {
box-shadow: 0px 6px 16px rgba(0, 0, 0, 0.15);
}
.v-expansion-panel-title {
padding: 15px;
font-size: 13px;
font-weight: 600;
color: #333;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
transition: background-color 0.3s ease, color 0.3s ease;
}
.v-expansion-panel-title.pt-0 {
padding-top: 0;
}
// .v-expansion-panel-title:hover {
// background-color: #f9f9f9;
// color: #222;
// }
.v-expansion-panel-title .mdi {
font-size: 20px;
color: #666;
transition: transform 0.3s ease, color 0.3s ease;
}
.v-expansion-panel-title.v-expansion-panel-title--active .mdi {
transform: rotate(180deg);
color: #222;
}
.v-expansion-panel-text {
padding: 10px 15px;
font-size: 13px;
color: #555;
border-top: 1px solid #eee;
}
.v-expansion-panel-text .d-flex {
margin-bottom: 24px;
}
.v-expansion-panel-text .d-flex>div {
flex: 1;
}
.v-expansion-panel-text p {
margin-bottom: 16px;
font-size: 14px;
}
.v-expansion-panel-text h3 {
font-size: 20px;
font-weight: 600;
margin-bottom: 16px;
color: #333;
}
</style>

View File

@@ -0,0 +1,342 @@
<script setup>
import { computed, defineProps, ref } from 'vue';
const props = defineProps({
date: {
type: String,
required: true,
},
time: {
type: String,
required: true,
},
timezone: {
type: String,
required: true,
},
timeDiff: {
type: String,
//required: true,
},
callEnd: {
type: String,
//required: true,
}
})
const isDisableMeeting = ref(true);
const panel = ref(0)
const isMeetingEnable = computed(() => {
console.log("computed", props.timeDiff);
isAgentCall();
});
const isAgentCall = () => {
let meetingTime = props.timeDiff;
console.log("onMounted", meetingTime);
isDisableMeeting.value = true;
if (meetingTime === "0 days 0 hours 0 minutes 0 seconds") {
console.log("meetingTime", meetingTime);
isDisableMeeting.value = true;
// dsdsf
}
}
</script>
<template>
<VCard class="text-center text-sm-start">
<VRow no-gutters>
<VCol>
<VExpansionPanels v-model="panel">
<VExpansionPanel>
<VExpansionPanelTitle variant="tonal" color="primary">
<span><b>Lab Kit with a Virtual Provider Consultation. {{ isMeetingEnable }}</b> <br><br>
<p>{{ date }} Status: InProcess <br>
</p>
<p>Test Kit Tracking : <Routerview to="/"> To you</Routerview> / <Routerview to="/trt">
back
to Lab
</Routerview>
</p>
</span>
</VExpansionPanelTitle>
<VExpansionPanelText>
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both"
density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Medical History Form Completed</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Online Consultation Scheduled</b><br><br>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<template #icon>
3
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>eClinic Schedule is Confirmed for {{ date }}</b>
</div>
</div>
<div class="d-flex justify-space-between align-center flex-wrap">
<!-- 👉 Avatar & Personal Info -->
<div class="d-flex align-center mt-2">
<div class="d-flex flex-column">
<p class="text-sm font-weight-medium text-high-emphasis mb-0">
Your virtual consultation with your HGH provider is set for
<b>{{
props.date }}, at {{ props.time }} , {{ props.timezone
}}</b> On
the appointment day, we will send you an
email containing the link
to join, along
with useful tips for preparation. If you have any inquiries or
need
to reschedule, feel free
to reach out via text at (223) 124-5533.
</p>
</div>
</div>
<RouterLink v-if="!isDisableMeeting" to="/queue">
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">
Go to Meeting Test{{ callEnd }}
</VBtn>
</RouterLink>
<span v-else>
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to
Meeting Disabled
</VBtn>
</span>
<!-- <RouterLink to="/meeting">
<VBtn class="mt-3" color="error" :disabled="isDisableMeeting">Go to Meeting
</VBtn>
</RouterLink> -->
<!-- Person Actions -->
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))"
color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon>
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>eClicnic Attented</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))"
color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon>
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Ordered</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))"
color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon>
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Shipped</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))"
color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon>
7
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Medication Delivered</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
<VCardTitle class="text-start">Latest Labs <RouterLink to="/">
<span>(See all)</span>
</RouterLink>
</VCardTitle>
<VExpansionPanels class="mt-2">
<VExpansionPanel>
<VExpansionPanelTitle variant="tonal" color="rgb(var(--v-theme-yellow))">
<span><b>Lab Kit </b> <br><br>
<p>{{ date }} Status: Ordered <br>
</p>
<p>Test Kit Tracking : <Routerview to="/"> To you</Routerview> / <Routerview to="/trt">
back
to Lab
</Routerview>
</p>
</span>
</VExpansionPanelTitle>
<VExpansionPanelText>
<h2 class="text-start">Results</h2>
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both"
density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Ordered Hormone Test Kit</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Shipped Hormone Test Kit</b><br><br>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check"
size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Delivered Hormone Test Kit</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" color="error"
icon="tabler-check" size="small">
<template #icon>
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1 ">
<div>
<b>Hormone Test Kit in Transit</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="primary" icon="tabler-check"
size="small">
<template #icon>
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Lab Received Hormone Test Kit</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="primary" icon="tabler-check"
size="small">
<template #icon>
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div>
<b>Provider Reviewed Test Results</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
</VCol>
</VRow>
</VCard>
</template>
<style lang="scss" scoped>
.v-timeline .v-timeline-divider__inner-dot {
background-color: white !important;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.bg-secondary {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
span.v-expansion-panel-title__icon {
color: #fff
}
</style>

View File

@@ -0,0 +1,420 @@
<script setup>
import { computed, defineProps, nextTick, ref } from 'vue';
const isMeetingEnable = ref(false);
const eClinicSchedule = ref(false);
const eClicnicAttented = ref(true)
const eClicnicAttentedColor = ref('secondary')
const isMeetingEnd = ref(true);
const meetingInFuture = ref(true);
const props = defineProps({
date: {
type: String,
required: true,
},
orderid: {
type: String,
required: true,
},
time: {
type: String,
required: true,
},
timezone: {
type: String,
required: true,
},
timeDiff: {
type: String,
//required: true,
},
showShipment: {
type: String,
required: true,
},
iscallEnd: {
type: String,
required: true,
}
})
const panel = ref(0)
const treatmentPlan = computed(() => {
let appDate = formatDateToISO(props.date);
let appTime = convertTo24Hour(props.time);
console.log("PlanCallend", props.iscallEnd, props.timeDiff, props.date, props.time, appDate, appTime, isDateTimeInFuture(props.date, props.time));
meetingInFuture.value = isDateTimeInFuture(props.date, props.time)
iscallEnd();
})
const iscallEnd = async () => {
if (props.iscallEnd && !meetingInFuture.value) {
isMeetingEnable.value = false;
eClinicSchedule.value = false;
eClicnicAttentedColor.value = 'rgb(var(--v-theme-yellow))';
isMeetingEnd.value = false;
console.log('Bth Conditin');
}
else if (props.iscallEnd) { // Call has been end
isMeetingEnable.value = false;
eClinicSchedule.value = false;
isMeetingEnd.value = false;
eClicnicAttentedColor.value = 'rgb(var(--v-theme-yellow))';
console.log('callEnd');
} else if (!meetingInFuture.value) { // Patient can Join Meeting
isMeetingEnable.value = true;
console.log('timeDiff');
} else { // Call has been end
console.log('else');
isMeetingEnable.value = false;
eClinicSchedule.value = true;
isMeetingEnd.value = true;
}
await nextTick();
// isAgentCall();
};
const isDateTimeInFuture = (dateString, timeString) => {
// Combine the date and time strings into a datetime string
const dateTimeString = dateString + " " + timeString;
// Convert the datetime string into a Date object
const eventDateTime = new Date(dateTimeString);
// Get the current date and time
const now = new Date();
// Compare the eventDateTime with the current date and time
return eventDateTime > now;
};
const formatDateToISO = (dateString) => {
const date = new Date(dateString);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
const convertTo24Hour = (time12h) => {
const [time, period] = time12h.split(' ');
const [hours, minutes] = time.split(':');
let hours24;
if (period === 'AM') {
hours24 = hours === '12' ? '00' : hours.padStart(2, '0');
} else {
hours24 = hours === '12' ? '12' : String(parseInt(hours, 10) + 12).padStart(2, '0');
}
return `${hours24}:${minutes}:00`;
};
// const isMeetingEnable = computed(() => {
// console.log("computed", props.timeDiff);
// });
// const isAgentCall = () => {
// let meetingTime = props.timeDiff;
// console.log("onMounted", meetingTime);
// isDisableMeeting.value = true;
// if (meetingTime == "0 days 0 hours 0 minutes 0 seconds") {
// return false;
// console.log("meetingTime", meetingTime);
// } else {
// isDisableMeeting.value = false;
// }
// }
const togglePanel = (index) => {
return panel.value = 0;
}
</script>
<template>
<!-- <VCard class="text-center text-sm-start mb-2"> -->
<VRow no-gutters>
<VCol>
<div v-if="treatmentPlan">
</div>
<VExpansionPanels v-model="panel" bg="rgb(var(--v-theme-yellow))">
<VExpansionPanel @click.native.stop="togglePanel(0)" :disabled="true">
<VExpansionPanelTitle variant=" tonal" color="secondary">
<span class="font-color"><b>Lab Kit with a Virtual Provider Consultation. </b> <br><br>
<p>Order# {{ props.orderid }}</p>
<p>Appiontment: {{ date }} {{ props.time }} <br>
</p>
</span>
</VExpansionPanelTitle collapse-icon="mdi-chevron-right" expand-icon="mdi-chevron-down">
<VExpansionPanelText class="px-0 py-0">
<!-- <VCardText class="pt-0 px-0" variant=" tonal" color="white"
style="background-color: rgb(var(--v-theme-yellow)); padding-left:0">
<span class="font-color"><b>Lab Kit with a Virtual Provider Consultation. </b>
<p>{{ date }} Status: InProcess <br>
</p>
<p>Test Kit Tracking : <Routerview to="/"> To you</Routerview>
</p>
</span>
</VCardText> -->
<VCardText>
<VTimeline side="end" align="start" line-inset="8" truncate-line="both" density="compact">
<!-- SECTION Timeline Item: Flight -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center gap-2 flex-wrap">
<span class="app-timeline-title">
<b>Medical History Form Completed</b><br><br>
</span>
</div>
</VTimelineItem>
<!-- !SECTION -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Online Consultation Scheduled</b><br><br>
</div>
</div>
</VTimelineItem>
<!-- SECTION Timeline Item: Interview Schedule -->
<VTimelineItem dot-color="rgb(var(--v-theme-yellow))" icon="tabler-check" size="small">
<template #icon v-if="eClinicSchedule">
3
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>eClinic Schedule is Confirmed for {{ date }}</b>
</div>
</div>
<div class="justify-space-between align-center flex-wrap" v-if="isMeetingEnd">
<!-- 👉 Avatar & Personal Info -->
<div class="align-center mt-2">
<div class="d-flex flex-column">
<p
class="text-sm font-weight-medium text-high-emphasis mb-0 text-justify">
Your virtual consultation with your HGH provider is set for
<b>{{
props.date }}, at {{ props.time }} , {{ props.timezone
}}</b> On
the appointment day, we will send you an
email containing the link
to join, along
with useful tips for preparation. If you have any inquiries or
need
to reschedule, feel free
to reach out via text at (223) 124-5533.
</p>
</div>
</div>
<!-- <RouterLink v-if="!isDisableMeeting" to="/queue">
<VBtn class="mt-3" color="error">Go to Meeting
</VBtn>
</RouterLink> -->
<RouterLink v-if="isMeetingEnable" to="/queue" target="_blank">
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))">
Go to Meeting
</VBtn>
</RouterLink>
<span v-else>
<VBtn class="mt-3" color="rgb(var(--v-theme-yellow))" disabled>Go to Meeting
</VBtn>
</span>
</div>
</VTimelineItem>
<VTimelineItem :dot-color="eClicnicAttentedColor" :color="eClicnicAttentedColor"
icon="tabler-check" size="small">
<template #icon v-if="eClicnicAttented">
4
</template>
<!-- <template #icon>
<VIcon size="20" icon="tabler-circle-check" color="error" />
</template> -->
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>eClicnic Attented</b><br><br>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
5
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Medication Ordered</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
6
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Medication Shipped</b>
</div>
</div>
</VTimelineItem>
<VTimelineItem dot-color="secondary" color="secondary" icon="tabler-check" size="small">
<template #icon>
7
</template>
<!-- 👉 Header -->
<div class="d-flex justify-space-between align-center flex-wrap mb-1">
<div class="app-timeline-title">
<b>Medication Delivered</b>
</div>
</div>
</VTimelineItem>
<!-- !SECTION -->
</VTimeline>
<VRow class="mt-4" v-if="props.showShipment">
<VCol cols="12" md="8">
<h3 class="mb-4">Treatment Plan</h3>
<VDivider></VDivider>
<h4 class="mt-4">Lab Kit</h4>
</VCol>
<VCol cols="12" md="4">
<h3 class="mb-4">Shipment Address:</h3>
<p>{{ props.showShipment }}</p>
<RouterLink class="text-primary" to="/">
Edit Address
</RouterLink>
</VCol>
</VRow>
</VCardText>
</VExpansionPanelText>
</VExpansionPanel>
</VExpansionPanels>
</VCol>
</VRow>
<!-- </VCard> -->
</template>
<style lang="scss" scoped>
.v-timeline .v-timeline-divider__inner-dot {
background-color: rgb(var(--v-theme-yellow)) !important;
}
.font-color {
color: rgb(var(--v-theme-yellow)) #32475cde;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title.bg-secondary {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
button.v-expansion-panel-title {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
.v-expansion-panel-text__wrapper {
padding: 0 !important;
}
button.v-expansion-panel-title.v-expansion-panel-title--active {
background-color: rgb(var(--v-theme-yellow)) !important;
color: #fff;
}
span.v-expansion-panel-title__icon {
color: rgb(var(--v-theme-yellow)) !important;
display: none !important;
}
.v-expansion-panel {
background-color: #fff;
border-radius: 10px;
box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);
margin-bottom: 10px;
overflow: hidden;
transition: box-shadow 0.3s ease;
}
.v-expansion-panel:hover {
box-shadow: 0px 6px 16px rgba(0, 0, 0, 0.15);
}
.v-expansion-panel-title {
padding: 15px;
font-size: 13px;
font-weight: 600;
color: #333;
cursor: pointer;
display: flex;
justify-content: space-between;
align-items: center;
transition: background-color 0.3s ease, color 0.3s ease;
}
.v-expansion-panel-title.pt-0 {
padding-top: 0;
}
// .v-expansion-panel-title:hover {
// background-color: #f9f9f9;
// color: #222;
// }
.v-expansion-panel-title .mdi {
font-size: 20px;
color: #666;
transition: transform 0.3s ease, color 0.3s ease;
}
.v-expansion-panel-title.v-expansion-panel-title--active .mdi {
transform: rotate(180deg);
color: #222;
}
.v-expansion-panel-text {
padding: 10px 15px;
font-size: 13px;
color: #555;
border-top: 1px solid #eee;
}
.v-expansion-panel-text .d-flex {
margin-bottom: 24px;
}
.v-expansion-panel-text .d-flex>div {
flex: 1;
}
.v-expansion-panel-text p {
margin-bottom: 16px;
font-size: 14px;
}
.v-expansion-panel-text h3 {
font-size: 20px;
font-weight: 600;
margin-bottom: 16px;
color: #333;
}
</style>

View File

@@ -0,0 +1,72 @@
export default {
main_title: 'Choose a Plan',
plans_list: [{
title: 'Semaglutide',
currency: '$',
price: "399.00",
list_one_title: "RX Prescription",
list_two_title: "Semaglutide, generic Ozempic and generic wegovy, is a potent medical weight loss treatment, with users typically experiencing an average loss of 15% of their body weight.",
list_sub_title: "Weight Loss",
image_url:"semaglutide.png"
},
{
title: "Tirzepatide",
currency: "$",
price: "499.00",
list_one_title: "RX Prescription",
list_two_title: "Tirzepatide, generic Zepbound and generic Mounjaro, is a powerful medical weight loss treatment, often enabling individuals to lose 20% or more of their body weight, showcasing its enhanced efficacy compared to Semaglutide.",
list_sub_title: "Weight Loss",
image_url:"Tirzepatide.webp"
},
{
title: "Sermorelin Injections",
currency: '$',
price: "249.00",
list_one_title: "RX Prescription",
list_two_title: "Sermorelin injections stimulate the body's natural production of growth hormone, promoting muscle growth, fat loss, and overall rejuvenation.",
list_sub_title: "Lean Muscle Mass & Fat Loss",
image_url:"Sermorelin.webp"
},
{
title: "PT-141 Injections",
currency: '$',
price: "345.00",
list_one_title: "RX Prescription",
list_two_title: "Sexual health and Performance. Supplies are shipped with treatment",
list_sub_title: "Sexual Performance",
image_url:"PT-141.webp"
},
{
title: "PT-141 Troche",
currency: '$',
price: "418.00",
list_one_title: "RX Prescription",
list_two_title: "Sexual health and Performance. Supplies are shipped with treatment",
list_sub_title: "Sexual Performance",
image_url:"pt-141_troche-2.webp"
},
{
title: "VIP Nasal Spray",
currency: '$',
price: "210.00",
list_one_title: "RX Prescription",
list_two_title: "VIP nasal spray offers targeted delivery of therapeutic hgh to support digestive health, immune function, and circadian regulation.",
list_sub_title: "Systemic Wellness",
image_url:"vip_nasal-spray.webp"
},
{
title: "SS-31 Injections",
currency: '$',
price: "1230.00",
list_one_title: "RX Prescription",
list_two_title: "VIP nasal spray offers targeted delivery of therapeutic hgh to support digestive health, immune function, and circadian regulation.",
list_sub_title: "Longevity & Performance",
image_url:"ss-31_syringes.webp"
}
]
}

View File

@@ -0,0 +1,34 @@
export default {
main_title: 'Choose a Plan',
plans_list: [{
title: 'Basic Plan',
currency: '$',
price: "195.00",
list_one_title: "TRT prescription",
list_two_title: "A nazial mist or a pre-filled syringe for self-injection",
list_sub_title: "Either be cream or oral liquied",
image_url:""
},
{
title: 'Pro Plan',
currency: '$',
price: "195.00",
list_one_title: "TRT prescription",
list_two_title: "A nazial mist or a pre-filled syringe for self-injection",
list_sub_title: "Either be cream or oral liquied",
image_url:""
},
{
title: 'Elite Plan',
currency: '$',
price: "995.00",
list_one_title: "HGH & TRT prescription",
list_two_title: "Growth hormone zinc and magnesium",
list_sub_title: "Everything in Pro Plan",
image_url:""
}
]
}

View File

@@ -0,0 +1,683 @@
<script setup>
import axios from '@axios';
import avatar1 from '@images/avatars/avatar-1.png';
const profileDetail = ref();
const profileName = ref();
const success = ref();
const currentDialoagkey = ref('')
const email = ref();
const fullAddress = ref();
const phone = ref();
const dob = ref();
const gender = ref();
const marital_status = ref();
const isDialogVisible = ref(false)
const height = ref();
const weight = ref();
const planName = ref();
const planAmount = ref();
const finalArray = ref([]);
const answers = ref([]);
const questionAnswer = ref([]);
const isLoadingVisible = ref(false);
const isLoadingMedicalHistoryVisible = ref(true);
onMounted(async () => {
isLoadingVisible.value = true;
await getPatientInfo();
await getPlanInfo();
await getPatientMedicalHistory();
finalArray.value = getFinalArray(questions.value, questionAnswer.value);
console.log("finalArray", finalArray);
isLoadingVisible.value = false;
});
const getFinalArray = (questions, answers) => {
const finalArray = [];
questions.forEach(question => {
const answer = answers.find(answer => answer.question_key === question.question_key);
if (answer) {
finalArray.push({
...question,
answer: answer.answer
});
} else {
finalArray.push({
...question,
answer: "Not Answer"
});
}
});
return finalArray;
};
const getPatientInfo = async () => {
const patient_id = localStorage.getItem('patient_id')
const access_token = localStorage.getItem('access_token');
await axios.post('/api/get-patient-detail/' + patient_id, {
headers: {
'Authorization': `Bearer ${access_token}`,
}
})
.then(response => {
console.log('Response:', response.data);
if (response.data) {
let patientData = response.data.patient
profileName.value = patientData.first_name + ' ' + patientData.last_name
email.value = patientData.email
phone.value = patientData.phone_no
dob.value = patientData.dob
gender.value = patientData.gender
height.value = patientData.height
weight.value = patientData.weight
marital_status.value = patientData.marital_status
fullAddress.value = patientData.city + ' ' + patientData.state + ' ' + patientData.country
} else {
isLoadingVisible.value = false;
}
})
.catch(error => {
console.error('Error:', error);
});
}
const getPlanInfo = async () => {
const patient_id = localStorage.getItem('patient_id')
const access_token = localStorage.getItem('access_token');
isLoadingVisible.value = true;
await axios.post('/api/get-plan-by-patient/' + patient_id, {
headers: {
'Authorization': `Bearer ${access_token}`,
}
})
.then(response => {
console.log('Response:', response.data);
if (response.data) {
let planData = response.data
console.log('plan ', planData)
planName.value = planData.plan_name
planAmount.value = planData.plan_amount
} else {
isLoadingVisible.value = false;
}
})
.catch(error => {
isLoadingVisible.value = false;
console.log('Error:', error);
});
}
const getPatientMedicalHistory = async () => {
isLoadingMedicalHistoryVisible.value = true;
const patient_id = localStorage.getItem('patient_id');
const access_token = localStorage.getItem('access_token');
await axios.post('api/medical-history-question-get/' + patient_id, {
headers: {
'Authorization': `Bearer ${access_token}`,
}
})
.then(response => {
console.log('Response:', response.data);
if (response.data) {
questionAnswer.value = response.data.answers;
console.log("ResponseAnswer", questionAnswer.value);
isLoadingMedicalHistoryVisible.value = false;
} else {
isLoadingVisible.value = false;
}
})
.catch(error => {
console.error('Error:', error);
questionAnswer.value = [];
});
}
// const groupedQuestions = computed(() => {
// const groups = {};
// console.log("QuestionValue", questions.value);
// for (const key in questions.value) {
// if (questions.value.hasOwnProperty(key)) {
// let groupQuestions = questions.value[key];
// groupQuestions.forEach(question => {
// const groupId = question.group_id;
// answers.value[question.id] = question.answer
// if (!groups[groupId]) {
// groups[groupId] = {
// name: key,
// questions: [],
// };
// }
// groups[groupId].questions.push(question);
// });
// }
// }
// console.log("groups", groups);
// return Object.values(groups);
// });
// const parseOptions = (optionsString) => {
// try {
// const optionsArray = phpUnserialize(optionsString);
// return optionsArray.map((option, index) => ({ key: index, value: option }));
// } catch (error) {
// console.error('Error parsing options:', error);
// return [];
// }
// };
const questions = ref([
{
question_key: 'why_interested_hrt',
question: "What aspects of hormone replacement therapy (HRT) intrigue you?",
type: "text",
},
{
question_key: 'goal_loss_weight',
question: "Is your objective with the program to achieve weight loss?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'what_biological_sex',
question: "What is your assigned sex at birth?",
type: "radio",
options: ["Male", "Female"],
},
{
question_key: '3_years_physical_test',
question: "Have you undergone a comprehensive physical examination by a medical professional within the past three years, which included assessments of vital signs such as weight, blood pressure, and heart rate?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'medical_problems',
question: "Did you experience any medical issues? If so, could you please elaborate?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'have_prostate_cancer',
question: "Have you ever received a diagnosis of prostate cancer?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'what_height',
question: "How tall are you?",
type: "dropdown",
options: ["5 ft 1 in",
"5 ft 2 in",
"5 ft 3 in",
"5 ft 4 in",
"5 ft 5 in",
"5 ft 6 in",
"5 ft 7 in",
"5 ft 8 in",
],
},
{
question_key: 'whight',
question: "What is your weight?",
type: "text",
},
// {
// question_key: 'birthdate',
// question: "When were you born?",
// type: "date",
// sub_title: 'To proceed with medication, kindly input your accurate date of birth using the format mm/dd/yyyy.'
// },
{
question_key: 'past_harmone_treatments',
question: "Have you been prescribed any hormone treatments currently or in the past?",
type: "radio",
options: ["thyroid_medication", "testosterone_treatment", "estrogen_blocker", "hgh", "ipamoreline", "colomipheine", "hcg", "other", "none"],
},
{
question_key: 'take_medications',
question: "Are you currently using or have you used any over-the-counter or prescription medications, excluding hormone treatments? (Please note that your responses will be cross-checked against prescription and insurance records. Failure to disclose current prescriptions and/or medical conditions may result in disapproval for your safety.)",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'have_medications_allegies',
question: "Do you have any allergies to medications?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'plan_children',
question: "Do you intend to have children at some point in the future?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'partner_pregnant',
question: "Is your partner currently pregnant or breastfeeding?",
type: "radio",
options: ["Yes", "No", "not applicab_e"],
},
{
question_key: 'experience_ed',
question: "Are you currently experiencing any erectile dysfunction (ED) issues?",
type: "radio",
options: ["never", "almost_never", "occasionally", "almost_always", "always"],
},
{
question_key: 'thyroid_disorders',
question: "Have you ever been diagnosed with thyroid disorders such as hypothyroidism (underactive thyroid), hyperthyroidism (overactive thyroid), Hashimoto's Disease, or Graves' Disease?",
type: "radio",
options: ["Yes", "No"],
},
{
question_key: 'family_history',
question: "Does your family have a history of any of the following disorders?",
type: "radio",
options: ["drug_alcohol", "cancer", "heart_disease", "thyroid_disease", "low_testosterone",
"none"],
},
{
question_key: 'patient_concent',
question: "Please read and accept",
linktext: "Patient Content",
type: "signalCheckbox",
},
{
question_key: 'appointment_cancel',
question: "Please read and accept",
linktext: "Appointment Cancel",
type: "signalCheckbox",
},
{
question_key: 'medicare_disclaimer',
question: "Please read and accept",
linktext: "Medicare Disclaimer",
type: "signalCheckbox",
},
{
question_key: 'telehealth_concent',
question: "Please read and accept",
linktext: "Telehealth Concent",
type: "signalCheckbox",
},
{
question_key: 'secondary_contact',
question: "Please read and accept",
linktext: "Secondary Contact Disclosure(optional)",
type: "signalCheckbox",
},
]);
const getCurrentDate = () => {
const today = new Date();
const year = today.getFullYear();
let month = today.getMonth() + 1;
let day = today.getDate();
// Format the date to match the input type="date" format
month = month < 10 ? `0${month}` : month;
day = day < 10 ? `0${day}` : day;
return `${year}-${month}-${day}`;
};
const openDialog = (question_key) => {
currentDialoagkey.value = question_key;
isDialogVisible.value = true;
window.addEventListener('click', closeDialogOnOutsideClick);
};
const closeDialogOnOutsideClick = (event) => {
const dialogElement = refs.myDialog.$el;
if (!dialogElement.contains(event.target)) {
isDialogVisible.value = false;
window.removeEventListener('click', closeDialogOnOutsideClick);
}
};
const handleContinueClick = (currentDialoagkey) => {
isDialogVisible.value = false; // Hide the dialog
answers.value[currentDialoagkey] = true; // Update the answers object
};
const skill = ref(20)
</script>
<template>
<VRow>
<VCol cols="12" lg="4">
<VCard class="mb-3">
<VCardText class="d-flex">
<!-- 👉 Avatar -->
<VAvatar rounded size="100" class="me-6" :image="avatar1" />
<!-- 👉 Upload Photo -->
<form class="d-flex flex-column justify-center gap-4">
<div class="d-flex flex-wrap gap-0 pt-0">
<h4 class="text-decoration-underline">{{profileName}}</h4>
</div>
<div class="d-flex flex-wrap gap-5">
<h4 class=""></h4>
</div>
</form>
</VCardText>
<VCardText>
<router-link to="/category">
<p class="text-xs text-primary text-decoration-underline">
<h1 class="text-xs text-primary">Complete Your Profile</h1>
</p>
</router-link>
<!-- <router-link to="/update">
<VBtn size="small">
<VIcon icon="tabler-edit" size="20" class="me-2" />Update
</VBtn>
</router-link> -->
<div class="demo-space-y mt-3">
<VProgressLinear v-model="skill" color="success" class="rounded" height="20">
<template #default="{ value }">
<strong>{{ Math.ceil(value) }}%</strong>
</template>
</VProgressLinear>
</div>
</VCardText>
</VCard>
<VCard class="mb-0">
<VCardText>
<p class="text-xs">
<b>ABOUT</b>
</p>
<VList class="card-list text-medium-emphasis">
<VListItem>
<template #prepend>
<VIcon icon="mdi-account" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Full Name:</span>
<span>{{ profileName }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="mdi-email" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Email:</span>
<span>{{ email }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="tabler-calendar" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">DOB:</span>
<span>{{ dob }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="mdi-user" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Gender:</span>
<span>{{ gender }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="tabler-users" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Material Status:</span>
<span>{{ marital_status }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="tabler-arrow-autofit-height" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Height:</span>
<span>{{ height }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="mdi-weight" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">weight:</span>
<span>{{ weight }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="mdi-map-marker" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class=" text-wrap">Address: </span>
<span>{{ fullAddress }}</span>
</VListItemTitle>
</VListItem>
<VDivider class="my-2" />
</VList>
<p class="text-xs mt-5">
<b>CONTACTS</b>
</p>
<VList class="card-list text-medium-emphasis">
<VListItem>
<template #prepend>
<VIcon icon="mdi-phone" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Contact:</span>
<span>{{ phone }}</span>
</VListItemTitle>
</VListItem>
<VDivider class="my-2" />
</VList>
<p class="text-xs mt-5">
<b>OVERVIEW</b>
</p>
<VList class="card-list text-medium-emphasis">
<VListItem>
<template #prepend>
<VIcon icon="tabler-shopping-cart" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Select Plan:</span>
<span> {{ planName }}</span>
</VListItemTitle>
</VListItem>
<VListItem>
<template #prepend>
<VIcon icon="tabler-currency-dollar" size="20" class="me-2" />
</template>
<VListItemTitle>
<span class="font-weight-medium me-1">Amount:</span>
<span> ${{ planAmount }}</span>
</VListItemTitle>
</VListItem>
</VList>
</VCardText>
</VCard>
</VCol>
<VCol cols="12" lg="8">
<VCard class="mb-4 mt-0">
<VCardText>
<VRow class="justify-space-between pb-2">
<Vcol col="auto">
<p class="text-xs">
<b>Medical History</b>
</p>
</Vcol>
<Vcol col="auto">
<router-link to="/update">
<VBtn size="small">
<VIcon icon="tabler-edit" size="20" class="me-2" />Update
</VBtn>
</router-link>
</Vcol>
</VRow>
<div class="spinner-container align-center" v-if="isLoadingMedicalHistoryVisible">
<v-progress-circular indeterminate color="primary"></v-progress-circular>
</div>
<!-- <VDialog v-model="isLoadingMedicalHistoryVisible" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog> -->
<div class="px-4 py-4">
<v-row v-for="(q, index) in finalArray " :key="index">
<v-col cols="12" md="12">
<template v-if="q.type === 'text'">
<p><b class="justify-content">{{ q.question }}</b></p>
<span v-if="q.answer == 'Not Answer'"><b>Answer:</b>
<span class="text-danger">{{ q.answer }}</span></span>
<span v-else><b>Answer:</b> {{ q.answer }}</span>
<!-- <v-text-field class="col-md-4" v-model="q.answer" readonly /> -->
</template>
<template v-if="q.type === 'date'">
<p><b>{{ q.question }}</b></p>
<span><b>Answer:</b> {{ q.answer }}</span>
<!-- <v-text-field class="col-md-4" :max="getCurrentDate()" :type="q.type"
v-model="q.answer" readonly /> -->
</template>
<!-- <template v-if="q.type === 'signalCheckbox'">
<div class="form-check">
<input class="form-check-input" type="checkbox" v-model="q.answer" disabled
@click="openDialog(q.question_key)">
<label class="form-check-label" for="flexCheckDisabled">
{{ q.question }} <b class="text-reset" style="cursor: pointer;"
@click="openDialog(q.question_key)">{{
q.linktext }}</b>
</label>
</div>
</template> -->
<template v-else-if="q.type === 'radio'">
<p><b>{{ q.question }}</b></p>
<span v-if="q.answer == 'Not Answer'" color="error"><b>Answer:</b> <span
class="text-danger">{{ q.answer }}</span></span>
<span v-else><b>Answer:</b> {{ q.answer }}</span>
<!-- <v-checkbox v-for="( option, optionIndex ) in q.options " :key="optionIndex"
v-model="q.answer" :label="option" :value="option" readonly></v-checkbox> -->
</template>
<template v-else-if="q.type === 'dropdown'">
<p><b>{{ q.question }}</b></p>
<span v-if="q.answer == 'Not Answer'"><b>Answer:</b> <span class="text-danger">{{
q.answer }}</span></span>
<span v-else><b>Answer:</b> {{ q.answer }}</span>
<!-- <v-select class="" v-model="q.answer" :items="q.options" label="Select"
readonly></v-select> -->
</template>
<template v-else-if="q.type === 'checkbox'">
<p><b>{{ q.question }}</b></p>
<span v-if="q.answer == 'Not Answer'" color="error"><b>Answer:</b> <span
class="text-danger">{{ q.answer }}</span></span>
<span v-else><b>Answer:</b> {{ q.answer }}</span>
<!-- <v-checkbox v-model="q.answer" :label="q.label" readonly></v-checkbox>
<v-checkbox v-for="( option, optionIndex ) in q.options " :key="optionIndex"
:value="option" v-model="q.answer" :label="option" readonly></v-checkbox> -->
</template>
</v-col>
</v-row>
</div>
</VCardText>
</VCard>
</VCol>
</VRow>
</template>
<style lang="scss">
.text-danger {
color: red;
}
.form-check-input[type=checkbox] {
border-radius: 0.25em;
}
.form-check .form-check-input {
float: left;
margin-right: 0.5em;
}
.form-check-input {
cursor: pointer;
}
.spinner-container {
display: flex;
align-items: center;
justify-content: center;
height: 100px;
/* Set the height as needed */
}
.form-check-input {
width: 1.2em;
height: 1.2em;
margin-top: 0.135em;
vertical-align: top;
background-color: #fff;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
border: 2px solid #dbdade;
appearance: none;
}
.form-check .form-check-input:checked,
.form-check .form-check-input[type=checkbox]:indeterminate {
box-shadow: 0 0.125rem 0.25rem rgba(165, 163, 174, 0.3);
}
.form-check-input:checked[type=checkbox] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='13' viewBox='0 0 15 14' fill='none'%3E%3Cpath d='M3.41667 7L6.33333 9.91667L12.1667 4.08333' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.form-check-input:checked,
.form-check-input[type=checkbox]:indeterminate {
background-color: #7367f0;
border-color: #7367f0;
}
.form-check-input:checked {
background-color: #7367f0;
border-color: #7367f0;
}
.form-check-input[type=checkbox] {
border-radius: 0.25em;
}
</style>

View File

@@ -0,0 +1,85 @@
<script setup>
import { computed, defineProps, onBeforeMount, ref } from 'vue';
import typeJson from './type_parse.json';
const allTypes = ref(typeJson);
const props = defineProps({
type: {
type: String,
required: true,
},
value: {
type: String,
required: false,
},
})
const bgColor = ref(null)
const operator = {
c(obj, value) {
let keys = Object.keys(obj.values)
let prev = 0;
for (let key of keys) {
if (key > prev && key <= value) {
prev = key
}
}
return obj.values[prev]
},
e(obj, value) {
return obj.values[value]
},
}
const progressValue = ref(0); // Initialize progress value with 0
const finalValue = computed(() => {
const singleObject = allTypes.value[props.type];
// console.log('singleObject', singleObject)
if (operator[singleObject.type](singleObject, props.value) > 0 && operator[singleObject.type](singleObject, props.value) <= 33) {
bgColor.value = 'success'
}
if (operator[singleObject.type](singleObject, props.value) > 33 && operator[singleObject.type](singleObject, props.value) <= 50) {
bgColor.value = 'yellow'
}
if (operator[singleObject.type](singleObject, props.value) > 50 && operator[singleObject.type](singleObject, props.value) <= 80) {
bgColor.value = 'warning'
}
if (operator[singleObject.type](singleObject, props.value) > 80 && operator[singleObject.type](singleObject, props.value) <= 100) {
bgColor.value = 'red'
}
return operator[singleObject.type](singleObject, props.value)
})
onBeforeMount(async () => {
await new Promise(resolve => {
setTimeout(() => {
progressValue.value = finalValue.value;
resolve();
}, 500); // Simulating some delay, you can replace this with your actual async logic
});
});
</script>
<template>
<v-progress-linear :model-value="progressValue" :height="22" :color="bgColor" style="">
<!-- <template v-slot:default="{ progressValue }"> -->
<strong class="answer">{{ props.value }}</strong>
<!-- </template> -->
</v-progress-linear>
</template>
<style>
.v-progress-linear__determinate {
border-radius: 0px 5px 5px 0px !important;
}
.answer {
background: rgb(var(--v-theme-yellow));
border-radius: 25px 25px 25px 25px;
padding-left: 7px;
padding-right: 7px;
font-size: 10px;
color: white;
font-weight: 500;
}
</style>

View File

@@ -0,0 +1,303 @@
export default {
steps: {
page0: {
elements: [
'h4',
'day_time_symptoms',
'night_symptoms_copy',
'during_or_after_exersise_symptoms',
'extra_albuterol_use',
],
},
page1: {
elements: [
'h4_1',
'upper_respiratory_symptoms',
'upper_respiratory_symptoms_copy',
],
},
page2: {
elements: [
'h4_2',
'lung_function_test',
'container',
],
},
page3: {
elements: [
'h4_3',
'alergy_symptoms_month',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'COUGH OR WHEEZE SYMPTOMS',
},
day_time_symptoms: {
type: 'checkboxgroup',
items: [
{
value: 'less_than_twice_weekly',
label: 'Less than twice weekly',
},
{
value: 'more_than_twice_weekly',
label: 'More than twice weekly',
},
{
value: 'daily',
label: 'Daily',
},
{
value: 'continuous',
label: 'Continuous',
},
],
label: 'DAYTIME SYMPTOMS',
},
night_symptoms_copy: {
type: 'checkboxgroup',
items: [
{
value: 'less_than_twice_weekly',
label: 'Less than twice weekly',
},
{
value: 'more_than_twice_weekly',
label: 'More than twice weekly',
},
{
value: 'nightly',
label: 'Nightly',
},
],
label: 'NIGHT SYMPTOMS\n',
},
during_or_after_exersise_symptoms: {
type: 'checkboxgroup',
items: [
{
value: 'exercise_symptoms_may_occur',
label: 'Exercise symptoms may occur',
},
{
value: 'less_than_once_weekly',
label: 'Less than once weekly',
},
{
value: 'frequent_exercise_symptoms',
label: 'Frequent exercise symptoms',
},
{
value: 'significant_limitation_activity',
label: 'Significant limitation activity',
},
],
label: 'DURING OR AFTER EXERCISE',
},
extra_albuterol_use: {
type: 'checkboxgroup',
items: [
{
value: 'occasional_use',
label: 'Occasional use',
},
{
value: 'periods_of_daily_use',
label: 'Periods of daily use',
},
{
value: 'daily_use',
label: 'Daily use',
},
{
value: 'frequent_daily_need',
label: 'Frequent daily need',
},
{
value: '_',
label: null,
},
],
label: 'EXTRA ALBUTEROL USE',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'ALLERGY - LIKE SYMPTOMS',
},
upper_respiratory_symptoms: {
type: 'checkboxgroup',
items: [
{
value: 'sneezing',
label: 'Sneezing',
},
{
value: 'sniffing_drippy_nose',
label: 'Sniffing drippy nose',
},
{
value: 'itchy_eyes_nose',
label: 'Itchy eyes/nose',
},
{
value: 'dark_circles_under_eyes',
label: 'Dark circles under eyes',
},
{
value: 'sinus_infection',
label: 'Sinus infection',
},
{
value: 'mouth_breathing_snoring',
label: 'mouth breathing/snoring',
},
{
value: 'congestion',
label: 'Congestion',
},
{
value: 'dry_skin',
label: 'Dry Skin',
},
],
label: 'UPPER RESPIRATORY SYMPTOMS',
},
upper_respiratory_symptoms_copy: {
type: 'checkboxgroup',
items: [
{
value: 'smoke',
label: 'Smoke',
},
{
value: 'fireplace_woodstove',
label: 'Fireplace/woodstove',
},
{
value: 'animals',
label: 'Animals',
},
{
value: 'feather',
label: 'Feather (pillows, stuffed animals)',
},
{
value: 'carpeting',
label: 'Carpeting',
},
{
value: 'bedroom_carpeting',
label: 'Bedroom carpeting',
},
{
value: 'forced_air_heat',
label: 'Forced air heat',
},
{
value: 'mold_in_lower level',
label: 'Mold in lower level',
},
],
label: 'EXPOSURES',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Has the patient ever had a breathing/lung function test?',
},
lung_function_test: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
container: {
type: 'group',
schema: {
text: {
type: 'text',
label: 'When?',
},
},
conditions: [
[
'lung_function_test',
'in',
[
'yes',
],
],
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Please select symptoms month',
},
alergy_symptoms_month: {
type: 'checkboxgroup',
items: [
{
value: '1',
label: 'January',
},
{
value: '2',
label: 'February',
},
{
value: '3',
label: 'March',
},
{
value: '4',
label: 'April',
},
{
value: '5',
label: 'May',
},
{
value: '6',
label: 'June',
},
{
value: '7',
label: 'July',
},
{
value: '8',
label: 'August',
},
{
value: '9',
label: 'September',
},
{
value: '10',
label: 'October',
},
{
value: '11',
label: 'November',
},
{
value: '12',
label: 'December',
},
],
},
},
}

View File

@@ -0,0 +1,618 @@
export default {
steps: {
page0: {
elements: [
'h3',
'h4',
'anti_aging_goals',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h2_1',
'h4_1',
'skin_changes',
'skin_changes_reason',
],
},
page2: {
elements: [
'h2',
'h4_2',
'aging_concerns',
'aging_concerns_reason',
],
},
page3: {
elements: [
'h4_3',
'skin_condition',
],
},
page4: {
elements: [
'h4_4',
'anti_aging_products',
'anti_aging_products_list',
],
},
page5: {
elements: [
'h4_5',
'skin_conditions',
'skin_conditions_reason',
],
},
page6: {
elements: [
'h4_6',
'sensitivities',
'sensitivities_reason',
],
},
page7: {
elements: [
'h4_7',
'hormonal_imbalances',
'hormonal_imbalances_reason',
],
},
page8: {
elements: [
'h4_8',
'hormone_replacement_therapies',
'hormone_replacement_therapies_reason',
],
},
page9: {
elements: [
'h4_9',
'supplements',
'supplements_list',
],
},
page10: {
elements: [
'h4_10',
'caffeine_nicotine_alcohol',
],
},
page11: {
elements: [
'h4_11',
'gastrointestinal_conditions',
'gastrointestinal_conditions_reason',
],
},
page12: {
elements: [
'h4_12',
'prescription_skincare',
'prescription_skincare_reason',
],
},
page13: {
elements: [
'h4_13',
'pregnant',
],
},
},
schema: {
h3: {
type: 'static',
tag: 'h2',
content: 'Anti-Aging Survey',
align: 'left',
},
h4: {
type: 'static',
tag: 'h4',
content: 'Please answer the following questions:',
},
anti_aging_goals: {
type: 'checkboxgroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Improve skin elasticity and texture',
label: 'Improve skin elasticity and texture',
},
{
value: 'Reduce wrinkles and fine lines',
label: 'Reduce wrinkles and fine lines',
},
{
value: 'Boost energy levels',
label: 'Boost energy levels',
},
{
value: 'Enhance hair and nail health',
label: 'Enhance hair and nail health',
},
{
value: 'Improve overall vitality',
label: 'Improve overall vitality',
},
{
value: 'Other',
label: 'Other',
},
],
},
h2_1: {
type: 'static',
tag: 'h2',
content: 'Recent Changes',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Have you noticed any significant changes in your skin, hair, or nails in the past 6 months?',
},
skin_changes: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
skin_changes_reason: {
type: 'text',
label: 'If yes, please describe:',
rules: [
'required',
],
conditions: [
[
'skin_changes',
'in',
[
'Yes',
],
],
],
},
h2: {
type: 'static',
tag: 'h2',
content: 'Aging Concerns',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Do you have concerns related to aging?',
},
aging_concerns: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
aging_concerns_reason: {
type: 'text',
label: 'If yes, please specify:',
rules: [
'required',
],
conditions: [
[
'aging_concerns',
'in',
[
'Yes',
],
],
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'How would you describe your current skin condition?',
},
skin_condition: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Dry',
label: 'Dry',
},
{
value: 'Oily',
label: 'Oily',
},
{
value: 'Combination',
label: 'Combination',
},
{
value: 'Sensitive',
label: 'Sensitive',
},
{
value: 'Normal',
label: 'Normal',
},
],
rules: [
'required',
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Do you currently use any anti-aging skincare products or treatments?',
},
anti_aging_products: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
anti_aging_products_list: {
type: 'text',
label: 'If yes, please list the products or treatments:',
rules: [
'required',
],
conditions: [
[
'anti_aging_products',
'in',
[
'Yes',
],
],
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Do you have a history of skin conditions?',
},
skin_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
skin_conditions_reason: {
type: 'text',
label: 'If yes, please specify:',
rules: [
'required',
],
conditions: [
[
'skin_conditions',
'in',
[
'Yes',
],
],
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Do you have any known sensitivities or allergies?',
},
sensitivities: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
sensitivities_reason: {
type: 'text',
label: 'If yes, please specify:',
rules: [
'required',
],
conditions: [
[
'sensitivities',
'in',
[
'Yes',
],
],
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any hormonal imbalances or endocrine disorders?',
},
hormonal_imbalances: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
hormonal_imbalances_reason: {
type: 'text',
label: 'If yes, please describe:',
rules: [
'required',
],
conditions: [
[
'hormonal_imbalances',
'in',
[
'Yes',
],
],
],
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any hormone replacement therapies?',
},
hormone_replacement_therapies: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
hormone_replacement_therapies_reason: {
type: 'text',
label: 'If yes, please specify:',
rules: [
'required',
],
conditions: [
[
'hormone_replacement_therapies',
'in',
[
'Yes',
],
],
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications or supplements to support anti-aging, skin health, or general wellness?',
},
supplements: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
supplements_list: {
type: 'text',
label: 'If yes, please list the products and dosages:',
rules: [
'required',
],
conditions: [
[
'supplements',
'in',
[
'Yes',
],
],
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Do you consume caffeine, nicotine, or alcohol?',
},
caffeine_nicotine_alcohol: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Do you have any gastrointestinal conditions?',
},
gastrointestinal_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
gastrointestinal_conditions_reason: {
type: 'text',
label: 'If yes, please describe:',
rules: [
'required',
],
conditions: [
[
'gastrointestinal_conditions',
'in',
[
'Yes',
],
],
],
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Do you currently use any prescription-strength skincare products?',
},
prescription_skincare: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
prescription_skincare_reason: {
type: 'text',
label: 'If yes, please specify:',
rules: [
'required',
],
conditions: [
[
'prescription_skincare',
'in',
[
'Yes',
],
],
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Are you pregnant? (Female Specific)',
},
pregnant: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
},
};

View File

@@ -0,0 +1,581 @@
export default {
steps: {
page0: {
elements: [
'h1',
'h2',
'anxiety_level',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h3',
'h4',
'anxiety_duration',
],
},
page2: {
elements: [
'h5',
'h6',
'anxiety_triggers',
],
},
page3: {
elements: [
'h7',
'h8',
'diagnosed_anxiety',
],
},
page4: {
elements: [
'h9',
'h10',
'anxiety_symptoms',
],
},
page5: {
elements: [
'h11',
'h12',
'anxiety_medication',
],
},
page6: {
elements: [
'h13',
'h14',
'anxiety_supplements',
],
},
page7: {
elements: [
'h15',
'h16',
'stress_level',
],
},
page8: {
elements: [
'h17',
'h18',
'seeing_therapist',
],
},
page9: {
elements: [
'h19',
'h20',
'other_conditions',
],
},
page10: {
elements: [
'h21',
'h22',
'adverse_reactions',
],
},
page11: {
elements: [
'h23',
'h24',
'history_mental_health',
],
},
page12: {
elements: [
'h25',
'h26',
'pregnant',
],
},
},
schema: {
h1: {
type: 'static',
tag: 'h2',
content: 'Anxiety Assessment',
align: 'left',
},
h2: {
type: 'static',
tag: 'h4',
content: 'How would you rate your current level of anxiety?',
},
anxiety_level: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Mild',
label: 'Mild',
},
{
value: 'Moderate',
label: 'Moderate',
},
{
value: 'Severe',
label: 'Severe',
},
],
},
h3: {
type: 'static',
tag: 'h4',
content: 'How long have you experienced symptoms of anxiety?',
},
h4: {
type: 'static',
tag: 'h5',
content: 'Select one:',
},
anxiety_duration: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Weeks',
label: 'Weeks',
},
{
value: 'Months',
label: 'Months',
},
{
value: 'Years',
label: 'Years',
},
],
},
h5: {
type: 'static',
tag: 'h4',
content: 'What are the main triggers or situations that cause your anxiety?',
},
h6: {
type: 'static',
tag: 'h5',
content: 'Check all that apply:',
},
anxiety_triggers: {
type: 'checkboxgroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Social situations',
label: 'Social situations',
},
{
value: 'Work-related stress',
label: 'Work-related stress',
},
{
value: 'Family or relationship issues',
label: 'Family or relationship issues',
},
{
value: 'Health concerns',
label: 'Health concerns',
},
{
value: 'Financial problems',
label: 'Financial problems',
},
{
value: 'Other',
label: 'Other',
},
],
},
h7: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with an anxiety disorder?',
},
h8: {
type: 'static',
tag: 'h5',
content: '(e.g., generalized anxiety disorder, panic disorder, social anxiety)',
},
diagnosed_anxiety: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h9: {
type: 'static',
tag: 'h4',
content: 'If yes, please specify the condition.',
},
specified_condition: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
conditions: [
[
'diagnosed_anxiety',
'in',
[
'Yes',
],
],
],
},
h10: {
type: 'static',
tag: 'h4',
content: 'Do you experience the following symptoms?',
},
h11: {
type: 'static',
tag: 'h5',
content: 'Check all that apply:',
},
anxiety_symptoms: {
type: 'checkboxgroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Restlessness or nervousness',
label: 'Restlessness or nervousness',
},
{
value: 'Trouble concentrating',
label: 'Trouble concentrating',
},
{
value: 'Rapid heart rate',
label: 'Rapid heart rate',
},
{
value: 'Sweating',
label: 'Sweating',
},
{
value: 'Difficulty breathing',
label: 'Difficulty breathing',
},
{
value: 'Irritability',
label: 'Irritability',
},
{
value: 'Insomnia or sleep disturbances',
label: 'Insomnia or sleep disturbances',
},
{
value: 'Muscle tension',
label: 'Muscle tension',
},
{
value: 'Nausea or digestive issues',
label: 'Nausea or digestive issues',
},
{
value: 'Other',
label: 'Other',
},
],
},
h12: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications for anxiety?',
},
anxiety_medication: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
medication_details: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
conditions: [
[
'anxiety_medication',
'in',
[
'Yes',
],
],
],
},
h13: {
type: 'static',
tag: 'h4',
content: 'Have you used natural supplements or other therapies for anxiety?',
},
anxiety_supplements: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
supplement_details: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
conditions: [
[
'anxiety_supplements',
'in',
[
'Yes',
],
],
],
},
h14: {
type: 'static',
tag: 'h4',
content: 'How would you rate your current stress levels?',
},
stress_level: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Low',
label: 'Low',
},
{
value: 'Moderate',
label: 'Moderate',
},
{
value: 'High',
label: 'High',
},
{
value: 'Very High',
label: 'Very High',
},
],
},
h15: {
type: 'static',
tag: 'h4',
content: 'Are you currently seeing a therapist or mental health professional for your anxiety?',
},
seeing_therapist: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h16: {
type: 'static',
tag: 'h4',
content: 'Do you have any of the following conditions that may affect your anxiety treatment?',
},
other_conditions: {
type: 'checkboxgroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Heart disease',
label: 'Heart disease',
},
{
value: 'Hypertension',
label: 'Hypertension',
},
{
value: 'Asthma or respiratory conditions',
label: 'Asthma or respiratory conditions',
},
{
value: 'Thyroid disorders',
label: 'Thyroid disorders',
},
{
value: 'Autoimmune conditions',
label: 'Autoimmune conditions',
},
{
value: 'Chronic pain',
label: 'Chronic pain',
},
{
value: 'Other',
label: 'Other',
},
],
},
h17: {
type: 'static',
tag: 'h4',
content: 'Have you experienced any adverse reactions to medications or treatments for anxiety in the past?',
},
adverse_reactions: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
reaction_details: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
conditions: [
[
'adverse_reactions',
'in',
[
'Yes',
],
],
],
},
h18: {
type: 'static',
tag: 'h4',
content: 'Do you have a history of depression, PTSD, or other mental health conditions in addition to anxiety?',
},
history_mental_health: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
mental_health_details: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
conditions: [
[
'history_mental_health',
'in',
[
'Yes',
],
],
],
},
h19: {
type: 'static',
tag: 'h4',
content: 'Are you Pregnant? (Female Specific)',
},
pregnant: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
},
};

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,724 @@
export default{
steps: {
page0: {
elements: [
'h3',
'dizziness_or_fainting',
],
},
page1: {
elements: [
'h3_1',
'falls_that_caused_an_injury',
],
},
page2: {
elements: [
'h3_2',
'stroke',
],
},
page3: {
elements: [
'h3_3',
'shortness_of_breath_when_walking_1_to_2_blocks',
],
},
page4: {
elements: [
'h3_4',
'shortness_of_breath_when_climbing_1_flight_of_stairs',
],
},
page5: {
elements: [
'h3_5',
'shortness_of_breath_when_lying_down',
],
},
page6: {
elements: [
'h3_6',
'lower_leg_cramps_while_walking',
],
},
page7: {
elements: [
'h3_7',
'bleeding_problems_or_low_iron_also _called_anemia',
],
},
page8: {
elements: [
'h3_8',
'blood_clot_in_leg_also_called_phlebitis',
],
},
page9: {
elements: [
'h3_9',
'high_cholesterol',
],
},
page10: {
elements: [
'h3_10',
'diabetes',
],
},
page11: {
elements: [
'h3_11',
'high_blood_pressure',
],
},
page12: {
elements: [
'h3_12',
'heart_murmur_or_abnormal_heart_valve',
],
},
page13: {
elements: [
'h3_13',
'uncomfortable_feeling_in_the_chest',
],
},
page14: {
elements: [
'h3_14',
'chest_pain_with_activity_also_called_angina',
],
},
page15: {
elements: [
'h3_15',
'heart_attack_also_called_myocardial_infarction',
],
},
page16: {
elements: [
'h3_16',
'swollen_legs',
],
},
page17: {
elements: [
'h3_17',
'ankles_or_feet',
],
},
page18: {
elements: [
'h3_18',
'Irregular_heartbeat',
],
},
page19: {
elements: [
'h3_19',
'stress_test_or_treadmill_test',
],
},
page20: {
elements: [
'h3_20',
'cardiac_catheterization_or_angiogram',
],
},
page21: {
elements: [
'h3_21',
'angioplasty_or_stent',
],
},
page22: {
elements: [
'h3_22',
'heart_surgery_If_so_what_kind',
'hurt_surgery_kind_please_explain',
],
},
page23: {
elements: [
'h3_23',
'special_meal_plan_or_diet',
'which_special_meal_plan_or_diet',
],
},
page24: {
elements: [
'h3_24',
'do_you_exercise_regularly',
'exercisy_regularly_how many_days_a_week',
],
},
},
schema: {
h3: {
type: 'static',
tag: 'h3',
content: 'Dizziness or fainting',
},
dizziness_or_fainting: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_1: {
type: 'static',
tag: 'h3',
content: 'Falls that caused an injury',
},
falls_that_caused_an_injury: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_2: {
type: 'static',
tag: 'h3',
content: 'Stroke',
},
stroke: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_3: {
type: 'static',
tag: 'h3',
content: 'Shortness of breath when walking 1 to 2 blocks',
},
shortness_of_breath_when_walking_1_to_2_blocks: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_4: {
type: 'static',
tag: 'h3',
content: 'Shortness of breath when climbing 1 flight of stairs',
},
shortness_of_breath_when_climbing_1_flight_of_stairs: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_5: {
type: 'static',
tag: 'h3',
content: 'Shortness of breath when lying down',
},
shortness_of_breath_when_lying_down: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_6: {
type: 'static',
tag: 'h3',
content: 'Lower leg cramps while walking',
},
lower_leg_cramps_while_walking: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_7: {
type: 'static',
tag: 'h3',
content: 'Bleeding problems or low iron (also called anemia)',
},
'bleeding_problems_or_low_iron_also _called_anemia': {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_8: {
type: 'static',
tag: 'h3',
content: 'Blood clot in leg (also called phlebitis)',
},
blood_clot_in_leg_also_called_phlebitis: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_9: {
type: 'static',
tag: 'h3',
content: 'High cholesterol',
},
high_cholesterol: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_10: {
type: 'static',
tag: 'h3',
content: 'Diabetes',
},
diabetes: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_11: {
type: 'static',
tag: 'h3',
content: 'High blood pressure',
},
high_blood_pressure: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_12: {
type: 'static',
tag: 'h3',
content: 'Heart murmur or abnormal heart valve',
},
heart_murmur_or_abnormal_heart_valve: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_13: {
type: 'static',
tag: 'h3',
content: 'Uncomfortable feeling in the chest',
},
uncomfortable_feeling_in_the_chest: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_14: {
type: 'static',
tag: 'h3',
content: 'Chest pain with activity (also called angina)',
},
chest_pain_with_activity_also_called_angina: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_15: {
type: 'static',
tag: 'h3',
content: 'Heart attack (also called myocardial infarction)',
},
heart_attack_also_called_myocardial_infarction: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_16: {
type: 'static',
tag: 'h3',
content: 'Swollen legs',
},
swollen_legs: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_17: {
type: 'static',
tag: 'h3',
content: 'ankles or feet',
},
ankles_or_feet: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
rules: [
'required',
],
},
h3_18: {
type: 'static',
tag: 'h3',
content: 'Irregular heartbeat',
},
Irregular_heartbeat: {
type: 'radiogroup',
items: [
{
value: 'Within last 30 days',
label: 'Within last 30 days',
},
{
value: 'In the past',
label: 'In the past',
},
],
},
h3_19: {
type: 'static',
tag: 'h3',
content: 'Have you had any of the following tests or procedures?',
},
stress_test_or_treadmill_test: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
label: 'Stress test or treadmill test:',
rules: [
'required',
],
},
h3_20: {
type: 'static',
tag: 'h3',
content: 'Have you had any of the following tests or procedures',
},
cardiac_catheterization_or_angiogram: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
label: 'Cardiac catheterization or angiogram:',
rules: [
'required',
],
},
h3_21: {
type: 'static',
tag: 'h3',
content: 'Have you had any of the following tests or procedures?',
},
angioplasty_or_stent: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
label: 'Angioplasty or stent',
rules: [
'required',
],
},
h3_22: {
type: 'static',
tag: 'h3',
content: 'Have you had any of the following tests or procedures?',
},
heart_surgery_If_so_what_kind: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
label: 'Heart surgery If so, what kind?',
rules: [
'required',
],
},
hurt_surgery_kind_please_explain: {
type: 'textarea',
label: 'Please explain',
conditions: [
[
'heart_surgery_If_so_what_kind',
'in',
[
'yes',
],
],
],
},
h3_23: {
type: 'static',
tag: 'h3',
content: 'Do you follow a special meal plan or diet (such as Atkins®, Weight Watchers®, vegetarian, low fat, or diabetic)?',
},
special_meal_plan_or_diet: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'required',
],
},
which_special_meal_plan_or_diet: {
type: 'text',
label: 'Which meal plan or diet you follow?',
conditions: [
[
'special_meal_plan_or_diet',
'in',
[
'yes',
],
],
],
},
h3_24: {
type: 'static',
tag: 'h3',
content: 'Do you exercise regularly?',
},
do_you_exercise_regularly: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'required',
],
},
'exercisy_regularly_how many_days_a_week': {
type: 'text',
label: 'How many days a week?',
conditions: [
[
'do_you_exercise_regularly',
'in',
[
'yes',
],
],
],
},
},
}

View File

@@ -0,0 +1,255 @@
export default{
steps: {
page0: {
elements: [
'h4',
'how_itchy_skin',
],
},
page1: {
elements: [
'h4_1',
'self_conscious_of_skin',
],
},
page2: {
elements: [
'h4_2',
'leisure_activity_affect_on_skin',
],
},
page3: {
elements: [
'h4_3',
'prevent_from_study_skin',
'container',
],
},
page4: {
elements: [
'h4_5',
'skin_problem_with_partner',
],
},
page5: {
elements: [
'h4_6',
'sexual_difficulty_with_skin',
],
},
page6: {
elements: [
'h4_7',
'treatment_for_skin',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how itchy, sore, painful or stinging has your skin been?\n',
},
how_itchy_skin: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how embarrassed or self conscious have you been because of your skin?',
},
self_conscious_of_skin: {
type: 'radiogroup',
items: [
{
value: 'very_much',
label: 'Very Much',
},
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: 'Not at all',
},
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how much has your skin affected any social or leisure activities?',
},
leisure_activity_affect_on_skin: {
type: 'radiogroup',
items: [
{
value: 'very_much',
label: 'Very Much',
},
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: 'Not at all',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Over the last week, has your skin prevented you from working or studying?',
},
prevent_from_study_skin: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
container: {
type: 'group',
schema: {
h4_4: {
type: 'static',
tag: 'h4',
content: 'Over the last week how much has your skin been a problem at work or studying?',
},
skin_problem_at_work_study: {
type: 'radiogroup',
items: [
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: 'Not at all',
},
],
},
},
conditions: [
[
'prevent_from_study_skin',
'in',
[
'no',
],
],
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how much has your skin created problems with your partner or any of your close friends or relatives?',
},
skin_problem_with_partner: {
type: 'radiogroup',
items: [
{
value: 'very_much',
label: 'Very much',
},
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: ' Not at all',
},
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how much has your skin caused any sexual difficulties?',
},
sexual_difficulty_with_skin: {
type: 'radiogroup',
items: [
{
value: 'very_much',
label: 'Very much',
},
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: 'Not at all',
},
{
value: null,
label: null,
},
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Over the last week, how much of a problem has the treatment for your skin been, for example by making your home messy, or by taking up time?',
},
treatment_for_skin: {
type: 'radiogroup',
items: [
{
value: 'very_much',
label: 'Very much',
},
{
value: 'a_lot',
label: 'A lot',
},
{
value: 'a_little',
label: 'A little',
},
{
value: 'not_at_all',
label: 'Not at all',
},
],
},
},
}

View File

@@ -0,0 +1,644 @@
export default {
steps: {
page0: {
elements: [
'h4',
'dna_damage_cellular_repair',
],
},
page1: {
label: '',
elements: [
'h4_1',
'dna_how_long_dammage',
],
},
page2: {
label: '',
elements: [
'h4_2',
'dna_peptide_treatment',
],
},
page3: {
label: '',
elements: [
'h4_3',
'ag_current_medications',
'caloric_intake',
],
},
page4: {
label: '',
elements: [
'h4_4',
'dna_disorder',
],
},
page5: {
label: '',
elements: [
'h4_6',
'ag_diagnosed_condition',
],
},
page6: {
label: '',
elements: [
'h4_7',
'dna_genetic_disorder',
],
},
page7: {
label: '',
elements: [
'h4_8',
'dna_cjc_1295',
'cjc_dna_repair_describe',
],
},
page8: {
label: '',
elements: [
'h4_9',
'dna_overall_health',
],
},
page9: {
label: '',
elements: [
'h4_10',
'dna_regular_activity',
'smoke_alcohol',
],
},
page10: {
label: '',
elements: [
'h4_11',
'dna_nutritional_plans',
],
},
page11: {
label: '',
elements: [
'h4_12',
'dna_diagnoses',
],
},
page12: {
label: '',
elements: [
'h4_13',
'dna_cjc_1295_sideeffects',
],
},
page13: {
label: '',
elements: [
'h4_14',
'dna_monitor_cjc_1295_response',
],
},
page14: {
label: '',
elements: [
'h4_15',
'dna_enhance_cjc_1295_effectiveness',
],
},
page15: {
label: '',
elements: [
'h4_16',
'dna_adverse_reaction_peptide_therapy',
],
},
page16: {
label: '',
elements: [
'h4_17',
'dna_harmone_imblance',
],
},
page17: {
label: '',
elements: [
'h3',
'dna_autoimmune_diseases',
],
},
page18: {
label: '',
elements: [
'h3_1',
'dna_inflammatory_disorders',
],
},
page19: {
label: '',
elements: [
'h4_5',
'dna_cardiovascular_disease',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'What are your primary concerns regarding DNA damage or cellular repair?',
},
dna_damage_cellular_repair: {
type: 'checkboxgroup',
items: [
{
value: 'aging_related_issues',
label: 'Aging-related issues',
},
{
value: 'environmental_toxin_exposure',
label: 'Environmental toxin exposure',
},
{
value: 'radiation_exposure',
label: 'Radiation exposure',
},
{
value: 'genetic_predisposition',
label: 'Genetic predisposition',
},
{
value: 'dna_other',
label: 'Other (please specify)',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'How long have you been aware of or concerned about DNA damage?',
},
dna_how_long_dammage: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'less_than_6_mnths',
label: 'Less than 6 months',
},
{
value: '6_months_to_one_year',
label: '6 Months to one year',
},
{
value: 'more_than_one_year',
label: 'More than one year',
},
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you previously used any hgh or treatments specifically for DNA repair?',
},
dna_peptide_treatment: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Do you have any known allergies to medications or hgh?',
},
ag_current_medications: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any conditions related to cellular damage or DNA repair (e.g., cancer, genetic disorders)?',
},
dna_disorder: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications or supplements that support DNA repair or cellular health?',
},
ag_diagnosed_condition: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Do you have any family history of genetic disorders or diseases related to DNA damage?\n',
},
dna_genetic_disorder: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'What are your goals for using CJC-1295 for DNA repair?',
},
dna_cjc_1295: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'reduce_signs_of_aging',
label: 'Reduce signs of aging',
},
{
value: 'improve_cellular_health',
label: 'Improve cellular health',
},
{
value: 'prevent_disease',
label: 'Prevent disease',
},
{
value: 'enhance_overall_vitality',
label: 'Enhance overall vitality',
},
{
value: 'other',
label: 'Other (please specify)',
},
],
},
cjc_dna_repair_describe: {
type: 'textarea',
label: 'Please specify',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'dna_cjc_1295',
'in',
[
'other',
],
],
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'How would you rate your current overall health?',
},
dna_overall_health: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'excellent',
label: 'Excellent',
},
{
value: 'good',
label: 'Good',
},
{
value: 'fair',
label: 'Fair',
},
{
value: 'poor',
label: 'Poor',
},
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Do you have a regular routine for exercise and physical activity?',
},
dna_regular_activity: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
smoke_alcohol: {
type: 'radiogroup',
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Do you follow any specific dietary or nutritional plans to support cellular health?\n',
},
dna_nutritional_plans: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Have you had any recent changes in your health status, such as new diagnoses or treatments?',
},
dna_diagnoses: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Do you have any concerns about potential side effects of CJC-1295?',
},
dna_cjc_1295_sideeffects: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'Would you be willing to undergo periodic medical evaluations to monitor your response to CJC-1295 therapy?',
},
dna_monitor_cjc_1295_response: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Are you open to incorporating additional lifestyle changes (e.g., diet, stress management) to enhance the effectiveness of CJC-1295 for DNA repair?',
},
dna_enhance_cjc_1295_effectiveness: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_16: {
type: 'static',
tag: 'h4',
content: '**Have you ever experienced any adverse reactions to hgh treatments in the past?',
},
dna_adverse_reaction_peptide_therapy: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_17: {
type: 'static',
tag: 'h4',
content: 'Do you currently experience any symptoms of hormone imbalance (e.g., fatigue, low libido, mood swings)?',
},
dna_harmone_imblance: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h3: {
type: 'static',
tag: 'h3',
content: 'Have you ever been diagnosed with any autoimmune diseases?',
},
dna_autoimmune_diseases: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h3_1: {
type: 'static',
tag: 'h3',
content: 'Do you have any chronic pain conditions or inflammatory disorders?',
},
dna_inflammatory_disorders: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Do you have a history of cardiovascular disease or uncontrolled high blood pressure?',
},
dna_cardiovascular_disease: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
},
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
import allergyasthma from '@/views/pages/questionere/allergy-asthma-form';
import antiaging from '@/views/pages/questionere/anti-aging-form';
import cardiology from '@/views/pages/questionere/cardiology-form';
import dermatology from '@/views/pages/questionere/dermatology-form';
import dnarepair from '@/views/pages/questionere/dna-repair-form';
import doctorintakerequest from '@/views/pages/questionere/doctor-intake-request-form';
import sleepquality from '@/views/pages/questionere/sleep-quality';
import hairgrowth from '@/views/pages/questionere/hair-growth-form';
import medicalhistory from '@/views/pages/questionere/medical-history-form';
import musclegrowth from '@/views/pages/questionere/muscle-growth-form';
import neurology from '@/views/pages/questionere/neurology-form';
import oncology from '@/views/pages/questionere/oncology-form';
import sexualwellness from '@/views/pages/questionere/sexual-wellness-form';
import urology from '@/views/pages/questionere/urology-form';
import weightloss from '@/views/pages/questionere/weight-loss-form';
import guthealth from '@/views/pages/questionere/gut-health-form';
import anxiety from '@/views/pages/questionere/anxiety-form';
import injuryrepair from '@/views/pages/questionere/injury-repair-form';
import menopause from '@/views/pages/questionere/menopause-form';
export default {
cardiology,
neurology,
oncology,
dermatology,
medicalhistory,
urology,
doctorintakerequest,
allergyasthma,
weightloss,
musclegrowth,
sexualwellness,
hairgrowth,
antiaging,
dnarepair,
sleepquality,
guthealth,
anxiety,
injuryrepair,
menopause
}

View File

@@ -0,0 +1,535 @@
<script setup>
// import { Vueform } from '@vueform/vueform';
// import cardiologyFormData from './cardiology-form.js'
import { defineProps, nextTick, onBeforeMount, onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { useStore } from 'vuex';
const store = useStore()
const router = useRouter()
const route = useRoute()
const vueFormRef = ref(null);
const percentage = ref(0);
const currentTab = ref(0);
const question_length = ref(0);
const modelData = ref({})
const userRole = localStorage.getItem('user_role'); // Fetch user role from local storage
const isPatient = computed(() => userRole.toLowerCase() === 'patient');
const isAgent = computed(() => userRole.toLowerCase() === 'agent');
const isDisqualified = ref(false)
console.log('---', isPatient, isAgent)
const props = defineProps({
steps: {
type: Object,
required: true,
},
schema: {
type: Object,
required: true,
},
redirectTo: {
type: String,
required: false,
},
redirectBack: {
type: String,
required: false,
},
finishLabel: {
type: String,
required: false,
},
questionCategory: {
type: String,
required: false,
},
newForm: {
type: String,
required: false,
},
returningUser: {
type: String,
required: false,
},
})
const handleDisqualifyStep = () => {
// Logic to move to the disqualify step
console.log('vueFormRef.value>>>>')
// vueFormRef.value.stepper.goToStep('disqualification')
};
const isEmpty = (obj) => Object.keys(obj).length === 0;
onBeforeMount(async () => {
console.log('>>>>>>>questionCategory', props.questionCategory)
if (props.finishLabel) {
const stepKeys = Object.keys(props.steps);
let step = stepKeys[stepKeys.length - 1]
props.steps[step].labels = {
next: props.finishLabel
}
}
store.dispatch('updateIsLoading', true)
if (isAgent.value) {
await store.dispatch('getAgentQuestionsAnswers')
}
if (isPatient.value) {
await store.dispatch('getPatientQuestionsAnswers')
}
console.log('Question Form Data', props.newForm, store.getters.getPatientAnswers, isEmpty(store.getters.getPatientAnswers))
if (props.returningUser && !isEmpty(store.getters.getPatientAnswers)) {
// console.log('Question Form Data', props.newForm, store.getters.getPatientAnswers, isEmpty(store.getters.getPatientAnswers))
modelData.value = store.getters.getPatientAnswers
for (const key in store.getters.getPatientAnswers) {
// Check if the objects object has the same key
if (vueFormRef.value.form$.data.hasOwnProperty(key)) {
// Assign the value from the response to the corresponding key in the objects object
vueFormRef.value.form$.data[key] = store.getters.getPatientAnswers[key];
}
}
}
console.log(modelData.value, store.getters.getPatientAnswers)
store.dispatch('updateIsLoading', false)
})
onMounted(async () => {
console.log(vueFormRef.value)
question_length.value = vueFormRef.value.steps$.steps$Array.length
vueFormRef.value.steps$.on('select', onSelect)
vueFormRef.value.steps$.on('finish', onFinish)
})
const onSelect = async (currentStep) => {
console.log('Form >>', vueFormRef.value.form$)
let disqualify = vueFormRef.value.form$.$el.getAttribute('disqualify')
if (disqualify) {
vueFormRef.value.form$.$el.removeAttribute('disqualify')
vueFormRef.value.form$.$el.setAttribute('disqualified', true)
store.dispatch('updateIsDisqualified', true)
await nextTick()
vueFormRef.value.form$.steps$.goTo('disqualification')
}
console.log('disqualify', disqualify, vueFormRef.value.form$.steps$)
currentTab.value = currentStep.index
percentage.value = calculatePercentage(currentTab.value, question_length.value);
console.log('current ', currentStep.index, vueFormRef.value.steps$.steps$Array.length, percentage.value, vueFormRef.value, currentStep)
}
const onFinish = async () => {
console.log('Finish questions ')
percentage.value = 100
store.dispatch('updateIsLoading', true)
console.log(vueFormRef.value.form$.data)
if (isPatient.value) {
await store.dispatch('saveQuestionAnswers', {
category: props.questionCategory,
answers: vueFormRef.value.form$.data
})
if (props.redirectTo) {
router.replace(route.query.to && route.query.to != '/questionere' ? String(route.query.to) : props.redirectTo)
} else {
router.replace(route.query.to && route.query.to != '/questionere' ? String(route.query.to) : '/category')
}
}
store.dispatch('updateIsLoading', false)
}
const calculatePercentage = (part, whole) => {
return (part / whole) * 100;
}
const backTab = () => {
if (isAgent.value) {
router.replace(route.query.to && route.query.to != '/provider/questionere' ? String(route.query.to) : '/provider/question-categories')
} else {
if (props.redirectBack)
router.replace(route.query.to && route.query.to != '/questionere' ? String(route.query.to) : props.redirectBack)
else
router.replace(route.query.to && route.query.to != '/questionere' ? String(route.query.to) : '/category')
}
}
</script>
<template>
<VDialog v-model="store.getters.getIsLoading" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog>
<!-- <VCard> -->
<!-- <VCardItem> -->
<p class="mb-4" v-if="!props.newForm">
<a class="mb-4 text-primary" @click="backTab" style="cursor: pointer;"><v-icon class="mb-0" color="primary"
icon="mdi-arrow-left" size="20"></v-icon> Back</a>
</p>
<div class="d-flex align-items-center mb-4">
<VProgressLinear v-model="percentage" height="3" width="100" color="success" :rounded="true" />
</div>
<div class="pt-2 pb-3 text-end" v-if="!props.newForm">{{ currentTab + 1 }}/{{ question_length }}</div>
<Vueform v-model="modelData" :sync="true" ref="vueFormRef" :steps="props.steps" :schema="props.schema">
</Vueform>
<!-- </VCardItem> -->
<!-- </VCard> -->
</template>
<style lang="scss">
@import "./../node_modules/bootstrap/scss/bootstrap";
@import "./../node_modules/@vueform/vueform/themes/bootstrap/scss/index.scss";
.bg-success {
background-color: rgb(var(--v-theme-yellow)) !important;
}
.vf-steps-container {
display: none;
}
.vf-steps-controls {
flex-direction: column-reverse;
gap: 10px;
}
.vf-steps-controls {
padding: 5px;
}
.vf-btn.vf-btn-primary {
background-color: rgb(var(--v-theme-yellow-theme-button));
}
/* Your component styles here */
a {
text-decoration: none;
}
.vf-static-tag-h4 h4,
.vf-static-tag-h4 .h4 {
font-family: Roboto, sans-serif !important;
line-height: 2rem !important;
text-transform: none !important;
font-size: 1.5rem !important;
font-weight: 500;
line-height: 2rem;
letter-spacing: normal !important;
text-transform: none !important;
}
span.vf-radio-text {
font-size: 1rem;
letter-spacing: .009375em;
font-family: Public Sans, sans-serif, -apple-system, blinkmacsystemfont, Segoe UI, roboto, Helvetica Neue, arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", Segoe UI Symbol;
}
</style>
<style>
*,
*:before,
*:after,
:root {
--bs-heading-color: #32475c;
--vf-primary: rgb(var(--v-theme-yellow));
--vf-primary-darker: #012740;
--vf-color-on-primary: #ffffff;
--vf-danger: #ef4444;
--vf-danger-lighter: #fee2e2;
--vf-success: rgb(var(--v-theme-yellow));
--vf-success-lighter: #d1fae5;
--vf-gray-50: #f9fafb;
--vf-gray-100: #f3f4f6;
--vf-gray-200: #e5e7eb;
--vf-gray-300: #d1d5db;
--vf-gray-400: #9ca3af;
--vf-gray-500: #6b7280;
--vf-gray-600: #4b5563;
--vf-gray-700: #374151;
--vf-gray-800: #1f2937;
--vf-gray-900: #111827;
--vf-dark-50: #EFEFEF;
--vf-dark-100: #DCDCDC;
--vf-dark-200: #BDBDBD;
--vf-dark-300: #A0A0A0;
--vf-dark-400: #848484;
--vf-dark-500: #737373;
--vf-dark-600: #393939;
--vf-dark-700: #323232;
--vf-dark-800: #262626;
--vf-dark-900: #191919;
--vf-ring-width: 2px;
--vf-ring-color: #07bf9b66;
--vf-link-color: var(--vf-primary);
--vf-link-decoration: inherit;
--vf-font-size: 1rem;
--vf-font-size-sm: 0.875rem;
--vf-font-size-lg: 1rem;
--vf-font-size-small: 0.875rem;
--vf-font-size-small-sm: 0.8125rem;
--vf-font-size-small-lg: 0.875rem;
--vf-font-size-h1: 2.125rem;
--vf-font-size-h1-sm: 2.125rem;
--vf-font-size-h1-lg: 2.125rem;
--vf-font-size-h2: 1.875rem;
--vf-font-size-h2-sm: 1.875rem;
--vf-font-size-h2-lg: 1.875rem;
--vf-font-size-h3: 1.5rem;
--vf-font-size-h3-sm: 1.5rem;
--vf-font-size-h3-lg: 1.5rem;
--vf-font-size-h4: 1.25rem;
--vf-font-size-h4-sm: 1.25rem;
--vf-font-size-h4-lg: 1.25rem;
--vf-font-size-h1-mobile: 1.5rem;
--vf-font-size-h1-mobile-sm: 1.5rem;
--vf-font-size-h1-mobile-lg: 1.5rem;
--vf-font-size-h2-mobile: 1.25rem;
--vf-font-size-h2-mobile-sm: 1.25rem;
--vf-font-size-h2-mobile-lg: 1.25rem;
--vf-font-size-h3-mobile: 1.125rem;
--vf-font-size-h3-mobile-sm: 1.125rem;
--vf-font-size-h3-mobile-lg: 1.125rem;
--vf-font-size-h4-mobile: 1rem;
--vf-font-size-h4-mobile-sm: 1rem;
--vf-font-size-h4-mobile-lg: 1rem;
--vf-font-size-blockquote: 1rem;
--vf-font-size-blockquote-sm: 0.875rem;
--vf-font-size-blockquote-lg: 1rem;
--vf-line-height: 1.5rem;
--vf-line-height-sm: 1.25rem;
--vf-line-height-lg: 1.5rem;
--vf-line-height-small: 1.25rem;
--vf-line-height-small-sm: 1.125rem;
--vf-line-height-small-lg: 1.25rem;
--vf-line-height-headings: 1.2;
--vf-line-height-headings-sm: 1.2;
--vf-line-height-headings-lg: 1.2;
--vf-line-height-blockquote: 1.5rem;
--vf-line-height-blockquote-sm: 1.25rem;
--vf-line-height-blockquote-lg: 1.5rem;
--vf-letter-spacing: 0px;
--vf-letter-spacing-sm: 0px;
--vf-letter-spacing-lg: 0px;
--vf-letter-spacing-small: 0px;
--vf-letter-spacing-small-sm: 0px;
--vf-letter-spacing-small-lg: 0px;
--vf-letter-spacing-headings: 0px;
--vf-letter-spacing-headings-sm: 0px;
--vf-letter-spacing-headings-lg: 0px;
--vf-letter-spacing-blockquote: 0px;
--vf-letter-spacing-blockquote-sm: 0px;
--vf-letter-spacing-blockquote-lg: 0px;
--vf-gutter: 1rem;
--vf-gutter-sm: 0.5rem;
--vf-gutter-lg: 1rem;
--vf-min-height-input: 2.375rem;
--vf-min-height-input-sm: 2.125rem;
--vf-min-height-input-lg: 2.875rem;
--vf-py-input: 0.375rem;
--vf-py-input-sm: 0.375rem;
--vf-py-input-lg: 0.625rem;
--vf-px-input: 0.75rem;
--vf-px-input-sm: 0.5rem;
--vf-px-input-lg: 0.875rem;
--vf-py-btn: 0.375rem;
--vf-py-btn-sm: 0.375rem;
--vf-py-btn-lg: 0.625rem;
--vf-px-btn: 0.875rem;
--vf-px-btn-sm: 0.75rem;
--vf-px-btn-lg: 1.25rem;
--vf-py-btn-small: 0.25rem;
--vf-py-btn-small-sm: 0.25rem;
--vf-py-btn-small-lg: 0.375rem;
--vf-px-btn-small: 0.625rem;
--vf-px-btn-small-sm: 0.625rem;
--vf-px-btn-small-lg: 0.75rem;
--vf-py-group-tabs: 0.375rem;
--vf-py-group-tabs-sm: 0.375rem;
--vf-py-group-tabs-lg: 0.625rem;
--vf-px-group-tabs: 0.75rem;
--vf-px-group-tabs-sm: 0.5rem;
--vf-px-group-tabs-lg: 0.875rem;
--vf-py-group-blocks: 0.75rem;
--vf-py-group-blocks-sm: 0.625rem;
--vf-py-group-blocks-lg: 0.875rem;
--vf-px-group-blocks: 1rem;
--vf-px-group-blocks-sm: 1rem;
--vf-px-group-blocks-lg: 1rem;
--vf-py-tag: 0px;
--vf-py-tag-sm: 0px;
--vf-py-tag-lg: 0px;
--vf-px-tag: 0.4375rem;
--vf-px-tag-sm: 0.4375rem;
--vf-px-tag-lg: 0.4375rem;
--vf-py-slider-tooltip: 0.125rem;
--vf-py-slider-tooltip-sm: 0.0625rem;
--vf-py-slider-tooltip-lg: 0.1875rem;
--vf-px-slider-tooltip: 0.375rem;
--vf-px-slider-tooltip-sm: 0.3125rem;
--vf-px-slider-tooltip-lg: 0.5rem;
--vf-py-blockquote: 0.25rem;
--vf-py-blockquote-sm: 0.25rem;
--vf-py-blockquote-lg: 0.25rem;
--vf-px-blockquote: 0.75rem;
--vf-px-blockquote-sm: 0.75rem;
--vf-px-blockquote-lg: 0.75rem;
--vf-py-hr: 0.25rem;
--vf-space-addon: 0px;
--vf-space-addon-sm: 0px;
--vf-space-addon-lg: 0px;
--vf-space-checkbox: 0.375rem;
--vf-space-checkbox-sm: 0.375rem;
--vf-space-checkbox-lg: 0.375rem;
--vf-space-tags: 0.1875rem;
--vf-space-tags-sm: 0.1875rem;
--vf-space-tags-lg: 0.1875rem;
--vf-space-static-tag-1: 1rem;
--vf-space-static-tag-2: 2rem;
--vf-space-static-tag-3: 3rem;
--vf-floating-top: 0rem;
--vf-floating-top-sm: 0rem;
--vf-floating-top-lg: 0.6875rem;
--vf-bg-input: #ffffff;
--vf-bg-input-hover: #ffffff;
--vf-bg-input-focus: #ffffff;
--vf-bg-input-danger: #ffffff;
--vf-bg-input-success: #ffffff;
--vf-bg-checkbox: #ffffff;
--vf-bg-checkbox-hover: #ffffff;
--vf-bg-checkbox-focus: #ffffff;
--vf-bg-checkbox-danger: #ffffff;
--vf-bg-checkbox-success: #ffffff;
--vf-bg-disabled: var(--vf-gray-200);
--vf-bg-selected: #1118270d;
--vf-bg-passive: var(--vf-gray-300);
--vf-bg-icon: var(--vf-gray-500);
--vf-bg-danger: var(--vf-danger-lighter);
--vf-bg-success: var(--vf-success-lighter);
--vf-bg-tag: var(--vf-primary);
--vf-bg-slider-handle: var(--vf-primary);
--vf-bg-toggle-handle: #ffffff;
--vf-bg-date-head: var(--vf-gray-100);
--vf-bg-addon: #ffffff00;
--vf-bg-btn: var(--vf-primary);
--vf-bg-btn-danger: var(--vf-danger);
--vf-bg-btn-secondary: var(--vf-gray-200);
--vf-color-input: var(--vf-gray-800);
--vf-color-input-hover: var(--vf-gray-800);
--vf-color-input-focus: var(--vf-gray-800);
--vf-color-input-danger: var(--vf-gray-800);
--vf-color-input-success: var(--vf-gray-800);
--vf-color-disabled: var(--vf-gray-400);
--vf-color-placeholder: var(--vf-gray-300);
--vf-color-passive: var(--vf-gray-700);
--vf-color-muted: var(--vf-gray-500);
--vf-color-floating: var(--vf-gray-500);
--vf-color-floating-focus: var(--vf-gray-500);
--vf-color-floating-success: var(--vf-gray-500);
--vf-color-floating-danger: var(--vf-gray-500);
--vf-color-danger: var(--vf-danger);
--vf-color-success: var(--vf-success);
--vf-color-tag: var(--vf-color-on-primary);
--vf-color-addon: var(--vf-gray-800);
--vf-color-date-head: var(--vf-gray-700);
--vf-color-btn: var(--vf-color-on-primary);
--vf-color-btn-danger: #ffffff;
--vf-color-btn-secondary: var(--vf-gray-700);
--vf-border-color-input: var(--vf-gray-300);
--vf-border-color-input-hover: var(--vf-gray-300);
--vf-border-color-input-focus: var(--vf-primary);
--vf-border-color-input-danger: var(--vf-gray-300);
--vf-border-color-input-success: var(--vf-gray-300);
--vf-border-color-checkbox: var(--vf-gray-300);
--vf-border-color-checkbox-focus: var(--vf-primary);
--vf-border-color-checkbox-hover: var(--vf-gray-300);
--vf-border-color-checkbox-danger: var(--vf-gray-300);
--vf-border-color-checkbox-success: var(--vf-gray-300);
--vf-border-color-checked: var(--vf-primary);
--vf-border-color-passive: var(--vf-gray-300);
--vf-border-color-slider-tooltip: var(--vf-primary);
--vf-border-color-tag: var(--vf-primary);
--vf-border-color-btn: var(--vf-primary);
--vf-border-color-btn-danger: var(--vf-danger);
--vf-border-color-btn-secondary: var(--vf-gray-200);
--vf-border-color-blockquote: var(--vf-gray-300);
--vf-border-color-hr: var(--vf-gray-300);
--vf-border-width-input-t: 1px;
--vf-border-width-input-r: 1px;
--vf-border-width-input-b: 1px;
--vf-border-width-input-l: 1px;
--vf-border-width-radio-t: 1px;
--vf-border-width-radio-r: 1px;
--vf-border-width-radio-b: 1px;
--vf-border-width-radio-l: 1px;
--vf-border-width-checkbox-t: 1px;
--vf-border-width-checkbox-r: 1px;
--vf-border-width-checkbox-b: 1px;
--vf-border-width-checkbox-l: 1px;
--vf-border-width-dropdown: 1px;
--vf-border-width-btn: 1px;
--vf-border-width-toggle: 0.125rem;
--vf-border-width-tag: 1px;
--vf-border-width-blockquote: 3px;
--vf-shadow-input: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-input-hover: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-input-focus: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-handles: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-handles-hover: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-handles-focus: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-btn: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-shadow-dropdown: 0px 0px 0px 0px rgba(0, 0, 0, 0);
--vf-radius-input: 0.25rem;
--vf-radius-input-sm: 0.25rem;
--vf-radius-input-lg: 0.25rem;
--vf-radius-btn: 0.25rem;
--vf-radius-btn-sm: 0.25rem;
--vf-radius-btn-lg: 0.25rem;
--vf-radius-small: 0.25rem;
--vf-radius-small-sm: 0.25rem;
--vf-radius-small-lg: 0.25rem;
--vf-radius-large: 0.25rem;
--vf-radius-large-sm: 0.25rem;
--vf-radius-large-lg: 0.25rem;
--vf-radius-tag: 0.25rem;
--vf-radius-tag-sm: 0.25rem;
--vf-radius-tag-lg: 0.25rem;
--vf-radius-checkbox: 0.25rem;
--vf-radius-checkbox-sm: 0.25rem;
--vf-radius-checkbox-lg: 0.25rem;
--vf-radius-slider: 0.25rem;
--vf-radius-slider-sm: 0.25rem;
--vf-radius-slider-lg: 0.25rem;
--vf-radius-image: 0.25rem;
--vf-radius-image-sm: 0.25rem;
--vf-radius-image-lg: 0.25rem;
--vf-radius-gallery: 0.25rem;
--vf-radius-gallery-sm: 0.25rem;
--vf-radius-gallery-lg: 0.25rem;
--vf-checkbox-size: 1rem;
--vf-checkbox-size-sm: 0.875rem;
--vf-checkbox-size-lg: 1rem;
--vf-gallery-size: 6rem;
--vf-gallery-size-sm: 5rem;
--vf-gallery-size-lg: 7rem;
--vf-toggle-width: 3rem;
--vf-toggle-width-sm: 2.75rem;
--vf-toggle-width-lg: 3rem;
--vf-toggle-height: 1.25rem;
--vf-toggle-height-sm: 1rem;
--vf-toggle-height-lg: 1.25rem;
--vf-slider-height: 0.375rem;
--vf-slider-height-sm: 0.3125rem;
--vf-slider-height-lg: 0.5rem;
--vf-slider-height-vertical: 20rem;
--vf-slider-height-vertical-sm: 20rem;
--vf-slider-height-vertical-lg: 20rem;
--vf-slider-handle-size: 1rem;
--vf-slider-handle-size-sm: 0.875rem;
--vf-slider-handle-size-lg: 1.25rem;
--vf-slider-tooltip-distance: 0.5rem;
--vf-slider-tooltip-distance-sm: 0.375rem;
--vf-slider-tooltip-distance-lg: 0.5rem;
--vf-slider-tooltip-arrow-size: 0.3125rem;
--vf-slider-tooltip-arrow-size-sm: 0.3125rem;
--vf-slider-tooltip-arrow-size-lg: 0.3125rem;
}
</style>

View File

@@ -0,0 +1,702 @@
export default {
steps: {
page0: {
elements: [
'h3',
'h4',
'digestive_health',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h2_1',
'h4_1',
'symptoms',
],
},
page2: {
elements: [
'h2',
'h4_2',
'gastrointestinal_conditions',
],
},
page3: {
elements: [
'h4_3',
'diet_description',
],
},
page4: {
elements: [
'h2_4',
'h4_4',
'dietary_restrictions',
],
},
page5: {
elements: [
'h4_5',
'bowel_movements',
],
},
page6: {
elements: [
'h2_6',
'h4_6',
'stool_consistency',
],
},
page7: {
elements: [
'h4_7',
'gut_health_therapies',
],
},
page8: {
elements: [
'h2_8',
'h4_8',
'prescription_medications',
],
},
page9: {
elements: [
'h4_9',
'current_medications',
],
},
page10: {
elements: [
'h2_10',
'h4_10',
'other_conditions',
],
},
page11: {
elements: [
'h4_11',
'chronic_constipation_diarrhea',
],
},
page12: {
elements: [
'h2_12',
'h4_12',
'consumption_habits',
],
},
page13: {
elements: [
'h4_13',
'lactose_intolerance',
],
},
page14: {
elements: [
'h4_14',
'pregnant',
],
},
},
schema: {
h3: {
type: 'static',
tag: 'h2',
content: 'Digestive Health',
align: 'left',
},
h4: {
type: 'static',
tag: 'h4',
content: 'How would you describe your overall digestive health?',
},
digestive_health: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Excellent',
label: 'Excellent',
},
{
value: 'Good',
label: 'Good',
},
{
value: 'Fair',
label: 'Fair',
},
{
value: 'Poor',
label: 'Poor',
},
],
},
h2_1: {
type: 'static',
tag: 'h2',
content: 'Symptoms',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Do you experience any of the following symptoms regularly?',
},
symptoms: {
type: 'checkboxgroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Bloating',
label: 'Bloating',
},
{
value: 'Gas',
label: 'Gas',
},
{
value: 'Abdominal pain or cramping',
label: 'Abdominal pain or cramping',
},
{
value: 'Constipation',
label: 'Constipation',
},
{
value: 'Diarrhea',
label: 'Diarrhea',
},
{
value: 'Heartburn or acid reflux',
label: 'Heartburn or acid reflux',
},
{
value: 'Nausea',
label: 'Nausea',
},
{
value: 'Food sensitivities',
label: 'Food sensitivities',
},
{
value: 'Other',
label: 'Other',
},
],
},
h2: {
type: 'static',
tag: 'h2',
content: 'Gastrointestinal Conditions',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any gastrointestinal conditions?',
},
gastrointestinal_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
gastrointestinal_conditions_reason: {
type: 'text',
label: 'If yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'gastrointestinal_conditions',
'in',
[
'Yes',
],
],
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'How would you describe your current diet?',
},
diet_description: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Balanced',
label: 'Balanced',
},
{
value: 'High-carb',
label: 'High-carb',
},
{
value: 'Low-carb',
label: 'Low-carb',
},
{
value: 'High-fiber',
label: 'High-fiber',
},
{
value: 'Low-fiber',
label: 'Low-fiber',
},
{
value: 'Gluten-free',
label: 'Gluten-free',
},
{
value: 'Other',
label: 'Other',
},
],
rules: [
'required',
],
},
h2_4: {
type: 'static',
tag: 'h2',
content: 'Dietary Restrictions',
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Do you follow any specific dietary plans or restrictions?',
},
dietary_restrictions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
dietary_restrictions_description: {
type: 'text',
label: 'If yes, please describe.',
rules: [
'required',
],
conditions: [
[
'dietary_restrictions',
'in',
[
'Yes',
],
],
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'How regular are your bowel movements?',
},
bowel_movements: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Daily',
label: 'Daily',
},
{
value: 'Every other day',
label: 'Every other day',
},
{
value: 'Once a week',
label: 'Once a week',
},
{
value: 'Less than once a week',
label: 'Less than once a week',
},
],
rules: [
'required',
],
},
h2_6: {
type: 'static',
tag: 'h2',
content: 'Stool Consistency',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'How would you describe the consistency of your stools?',
},
stool_consistency: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Hard',
label: 'Hard',
},
{
value: 'Loose',
label: 'Loose',
},
{
value: 'Normal',
label: 'Normal',
},
{
value: 'Mixed',
label: 'Mixed',
},
],
rules: [
'required',
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Have you previously used gut health therapies?',
},
gut_health_therapies: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
gut_health_therapies_description: {
type: 'text',
label: 'If yes, please list the therapies and describe your experience.',
rules: [
'required',
],
conditions: [
[
'gut_health_therapies',
'in',
[
'Yes',
],
],
],
},
h2_8: {
type: 'static',
tag: 'h2',
content: 'Prescription Medications',
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Have you ever taken prescription medications for gut health?',
},
prescription_medications: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
prescription_medications_description: {
type: 'text',
label: 'If yes, please list the medications and their effectiveness.',
rules: [
'required',
],
conditions: [
[
'prescription_medications',
'in',
[
'Yes',
],
],
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications or supplements for gut health?',
},
current_medications: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
current_medications_description: {
type: 'text',
label: 'If yes, please list the products and dosages.',
rules: [
'required',
],
conditions: [
[
'current_medications',
'in',
[
'Yes',
],
],
],
},
h2_10: {
type: 'static',
tag: 'h2',
content: 'Other Conditions',
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any of the following conditions?',
},
other_conditions: {
type: 'checkboxgroup',
view: 'blocks',
items: [
{
value: 'Irritable Bowel Syndrome (IBS)',
label: 'Irritable Bowel Syndrome (IBS)',
},
{
value: 'Inflammatory Bowel Disease (IBD)',
label: 'Inflammatory Bowel Disease (IBD)',
},
{
value: 'Crohns Disease',
label: 'Crohns Disease',
},
{
value: 'Ulcerative Colitis',
label: 'Ulcerative Colitis',
},
{
value: 'Celiac Disease',
label: 'Celiac Disease',
},
{
value: 'Diverticulitis',
label: 'Diverticulitis',
},
{
value: 'Small Intestinal Bacterial Overgrowth (SIBO)',
label: 'Small Intestinal Bacterial Overgrowth (SIBO)',
},
{
value: 'Other',
label: 'Other',
},
],
rules: [
'required',
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Do you suffer from chronic constipation or diarrhea?',
},
chronic_constipation_diarrhea: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
chronic_constipation_diarrhea_description: {
type: 'text',
label: 'If yes, please describe.',
rules: [
'required',
],
conditions: [
[
'chronic_constipation_diarrhea',
'in',
[
'Yes',
],
],
],
},
h2_12: {
type: 'static',
tag: 'h2',
content: 'Consumption Habits',
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Do you consume caffeine, nicotine, or alcohol?',
},
consumption_habits: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
consumption_habits_description: {
type: 'text',
label: 'If yes, please specify.',
rules: [
'required',
],
conditions: [
[
'consumption_habits',
'in',
[
'Yes',
],
],
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Do you have any history of lactose intolerance or sensitivities to sugar alcohols?',
},
lactose_intolerance: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
lactose_intolerance_description: {
type: 'text',
label: 'If yes, please describe.',
rules: [
'required',
],
conditions: [
[
'lactose_intolerance',
'in',
[
'Yes',
],
],
],
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'Are you pregnant? (Female Specific)',
},
pregnant: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
},
};

View File

@@ -0,0 +1,652 @@
export default {
steps: {
page0: {
elements: [
'h4',
'dna_damage_cellular_repair',
],
},
page1: {
label: '',
elements: [
'h4_1',
'hg_hair_loss',
],
},
page2: {
label: '',
elements: [
'h4_2',
'hg_treatment_hair_loss',
],
},
page3: {
label: '',
elements: [
'h4_3',
'hg_tried_treatment_yes',
'textarea',
'caloric_intake',
],
},
page4: {
label: '',
elements: [
'h4_4',
'hg_family_history_hair_loss',
],
},
page5: {
label: '',
elements: [
'h4_6',
'hg_current_medications',
],
},
page6: {
label: '',
elements: [
'h4_7',
'hg_current_medication',
],
},
page7: {
label: '',
elements: [
'h4_8',
'hg_chronic_conditions',
],
},
page8: {
label: '',
elements: [
'h4_9',
'hg_hormonal_imblance',
],
},
page9: {
label: '',
elements: [
'h4_10',
'hg_scalp_issues',
'smoke_alcohol',
],
},
page10: {
label: '',
elements: [
'h4_11',
'hg_undergoing_treatments',
],
},
page11: {
label: '',
elements: [
'h4_12',
'hg_tobbaco_products',
],
},
page12: {
label: '',
elements: [
'h4_13',
'hg_consume_alchol',
],
},
page13: {
label: '',
elements: [
'h4_14',
'hg_diet_describe',
],
},
page14: {
label: '',
elements: [
'h4_15',
'hg_exersice_rutine',
],
},
page15: {
label: '',
elements: [
'h4_16',
'hg_stress_levels',
],
},
page16: {
label: '',
elements: [
'h4_17',
'hg_peptide_side_effects',
],
},
page17: {
label: '',
elements: [
'h3',
'hg_evaluation_response',
],
},
page18: {
label: '',
elements: [
'h3_1',
'hg_hair_growth_treatment',
],
},
page19: {
label: '',
elements: [
'h4_5',
'hg_using_peptide_therapy',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'What are your primary concerns regarding hair loss?',
},
dna_damage_cellular_repair: {
type: 'checkboxgroup',
items: [
{
value: 'thinning_hair',
label: 'Thinning hair',
},
{
value: 'receding_hairline',
label: 'Receding hairline',
},
{
value: 'bald_spots',
label: 'Bald spots',
},
{
value: 'general_hair_health',
label: 'General hair health',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'How long have you been experiencing hair loss?',
},
hg_hair_loss: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'less_than_6_mnths',
label: 'Less than 6 months',
},
{
value: '6_months_to_one_year',
label: '6 Months to one year',
},
{
value: 'more_than_one_year',
label: 'More than one year',
},
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you tried any treatments for hair loss before?',
},
hg_treatment_hair_loss: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'If yes, what treatments have you tried?',
},
hg_tried_treatment_yes: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'minoxidil',
label: 'Minoxidil',
},
{
value: 'finasteride',
label: 'Finasteride',
},
{
value: 'prp_therapy',
label: 'PRP therapy',
},
{
value: 'natural_remedies',
label: 'Natural remedies',
},
{
value: 'Other',
label: 'Other (please specify)',
},
],
},
textarea: {
type: 'textarea',
label: 'Textarea',
conditions: [
[
'hg_tried_treatment_yes',
'in',
[
'Other',
],
],
],
rules: [
'validateTextArea',
],
fieldName: ' ',
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Do you have any family history of hair loss or baldness?',
},
hg_family_history_hair_loss: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications or supplements?',
},
hg_current_medications: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Do you have any known allergies to medications or Hgh?\n',
},
hg_current_medication: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Do you have any chronic health conditions?',
},
hg_chronic_conditions: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any hormonal imbalances (e.g., thyroid issues, PCOS)?',
},
hg_hormonal_imblance: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Do you experience any scalp issues (e.g., dandruff, psoriasis, eczema)?',
},
hg_scalp_issues: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
smoke_alcohol: {
type: 'radiogroup',
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Have you undergone any recent medical treatments or surgeries?\n',
},
hg_undergoing_treatments: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Do you smoke or use tobacco products?',
},
hg_tobbaco_products: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Do you consume alcohol?',
},
hg_consume_alchol: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'never',
label: 'Never',
},
{
value: 'occasinally',
label: 'Occasionally',
},
{
value: 'regulalry',
label: 'Regularly',
},
],
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'How would you describe your diet?',
},
hg_diet_describe: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'balance_and_healthy',
label: 'Balance and healthy',
},
{
value: 'average',
label: 'Average',
},
{
value: 'poor',
label: 'Poor',
},
],
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Do you have a regular exercise routine?',
},
hg_exersice_rutine: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_16: {
type: 'static',
tag: 'h4',
content: 'How would you rate your stress levels?',
},
hg_stress_levels: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'low',
label: 'Low',
},
{
value: 'moderate',
label: 'Moderate',
},
{
value: 'high',
label: 'High',
},
],
},
h4_17: {
type: 'static',
tag: 'h4',
content: 'Do you have any concerns about potential side effects of hgh treatments for hair growth?',
},
hg_peptide_side_effects: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h3: {
type: 'static',
tag: 'h3',
content: 'Would you be willing to undergo periodic medical evaluations to monitor your response to treatment?',
},
hg_evaluation_response: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h3_1: {
type: 'static',
tag: 'h3',
content: 'Are you open to combining hgh therapy with other hair growth treatments or lifestyle changes?',
},
hg_hair_growth_treatment: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'What are your goals for using hgh therapy for hair growth?',
},
hg_using_peptide_therapy: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'increase_hair_density',
label: 'Increase hair density',
},
{
value: 'regrow_hair_in_bald_spots',
label: 'Regrow hair in bald spots',
},
{
value: 'strengthen_existing_hair',
label: 'Strengthen existing hair',
},
{
value: 'overall_hair_health_improvement',
label: 'Overall hair health improvement',
},
],
},
},
}

View File

@@ -0,0 +1,487 @@
export default {
"steps": {
"page0": {
"elements": [
"h3",
"h4",
"injury_type"
],
"buttons": {
"previous": false
}
},
"page1": {
"elements": [
"h2_1",
"h4_1",
"injury_time",
"pain_level"
]
},
"page2": {
"elements": [
"h2",
"h4_2",
"chronic_conditions",
"chronic_conditions_reason"
]
},
"page3": {
"elements": [
"h4_3",
"serious_injuries",
"serious_injuries_description"
]
},
"page4": {
"elements": [
"h2_2",
"h4_4",
"current_medications"
]
},
"page5": {
"elements": [
"h4_5",
"swelling",
"swelling_description"
]
},
"page6": {
"elements": [
"h2_3",
"h4_6",
"mobility_issues"
]
},
"page7": {
"elements": [
"h4_7",
"rehabilitation_services",
"rehabilitation_services_description"
]
},
"page8": {
"elements": [
"h2_4",
"h4_8",
"previous_peptide_therapies",
"previous_peptide_therapies_description"
]
},
"page9": {
"elements": [
"h4_9",
"peptide_sensitivities"
]
},
"page10": {
"elements": [
"h4_10",
"pregnant"
]
}
},
"schema": {
"h3": {
"type": "static",
"tag": "h2",
"content": "Injury Repair",
"align": "left"
},
"h4": {
"type": "static",
"tag": "h4",
"content": "What type of injury are you seeking treatment for?"
},
"injury_type": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "muscle strain",
"label": "Muscle Strain"
},
{
"value": "joint injury",
"label": "Joint Injury"
},
{
"value": "ligament tear",
"label": "Ligament Tear"
},
{
"value": "other",
"label": "Other"
}
]
},
"h2_1": {
"type": "static",
"tag": "h2",
"content": "Injury Details"
},
"h4_1": {
"type": "static",
"tag": "h4",
"content": "How long ago did the injury occur?"
},
"injury_time": {
"type": "text",
"inputType": "text",
"rules": [
"required"
]
},
"pain_level": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "1",
"label": "1 (Mild)"
},
{
"value": "2",
"label": "2"
},
{
"value": "3",
"label": "3"
},
{
"value": "4",
"label": "4"
},
{
"value": "5",
"label": "5"
},
{
"value": "6",
"label": "6"
},
{
"value": "7",
"label": "7"
},
{
"value": "8",
"label": "8"
},
{
"value": "9",
"label": "9"
},
{
"value": "10",
"label": "10 (Severe)"
}
]
},
"h2": {
"type": "static",
"tag": "h2",
"content": "Medical History"
},
"h4_2": {
"type": "static",
"tag": "h4",
"content": "Have you been diagnosed with any chronic medical conditions (e.g., diabetes, heart disease)?"
},
"chronic_conditions": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"chronic_conditions_reason": {
"type": "text",
"label": "If yes, please specify the condition.",
"rules": [
"required"
],
"conditions": [
[
"chronic_conditions",
"in",
[
"Yes"
]
]
]
},
"h4_3": {
"type": "static",
"tag": "h4",
"content": "Do you have a history of any serious injuries or surgeries?"
},
"serious_injuries": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"serious_injuries_description": {
"type": "text",
"label": "If yes, please describe.",
"rules": [
"required"
],
"conditions": [
[
"serious_injuries",
"in",
[
"Yes"
]
]
]
},
"h2_2": {
"type": "static",
"tag": "h2",
"content": "Current Medications"
},
"h4_4": {
"type": "static",
"tag": "h4",
"content": "Are you currently taking any medications or supplements?"
},
"current_medications": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_5": {
"type": "static",
"tag": "h4",
"content": "Are you experiencing any swelling, bruising, or redness in the affected area?"
},
"swelling": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"swelling_description": {
"type": "text",
"label": "If yes, please describe.",
"rules": [
"required"
],
"conditions": [
[
"swelling",
"in",
[
"Yes"
]
]
]
},
"h2_3": {
"type": "static",
"tag": "h2",
"content": "Mobility Issues"
},
"h4_6": {
"type": "static",
"tag": "h4",
"content": "Are you having any issues with mobility or range of motion in the affected area?"
},
"mobility_issues": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_7": {
"type": "static",
"tag": "h4",
"content": "Have you undergone any physical therapy, chiropractic care, or other rehabilitation services for this injury?"
},
"rehabilitation_services": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"rehabilitation_services_description": {
"type": "text",
"label": "If yes, please describe.",
"rules": [
"required"
],
"conditions": [
[
"rehabilitation_services",
"in",
[
"Yes"
]
]
]
},
"h2_4": {
"type": "static",
"tag": "h2",
"content": "Previous Treatments"
},
"h4_8": {
"type": "static",
"tag": "h4",
"content": "Have you used any other peptide therapies or similar treatments in the past?"
},
"previous_peptide_therapies": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"previous_peptide_therapies_description": {
"type": "text",
"label": "If yes, please describe the results.",
"rules": [
"required"
],
"conditions": [
[
"previous_peptide_therapies",
"in",
[
"Yes"
]
]
]
},
"h4_9": {
"type": "static",
"tag": "h4",
"content": "Do you have any known sensitivities to peptide-based therapies?"
},
"peptide_sensitivities": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_10": {
"type": "static",
"tag": "h4",
"content": "Are you Pregnant? (Female Specific)"
},
"pregnant": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
}
}
}

View File

@@ -0,0 +1,314 @@
export default {
steps: {
page0: {
elements: [
'h4',
'blood_pressure',
'divider_1',
],
// conditions: [
// [
// 'heart_attack',
// 'empty',
// ],
// ],
},
page1: {
elements: [
'h1',
'heart_attack',
],
},
page2: {
elements: [
'h1_1',
'high_cholesterol',
],
},
page3: {
elements: [
'h4_21',
'stroke',
'container_1',
],
},
page4: {
elements: [
'h4_2',
'atrial_fib_arrhythmia ',
],
},
page5: {
elements: [
'h4_3',
'hole_in_heart',
],
},
page6: {
elements: [
'h4_4',
'cancer',
],
},
page7: {
elements: [
'h4_5',
'clotting_disorder',
],
},
page8: {
elements: [
'h4_6',
'diabetes',
],
},
page9: {
elements: [
'h4_7',
'kidney_disease',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'High blood pressure',
},
blood_pressure: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
divider_1: {
type: 'static',
tag: 'hr',
},
h1: {
type: 'static',
tag: 'h4',
content: 'Heart attack?',
},
heart_attack: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'required',
],
},
h1_1: {
type: 'static',
tag: 'h4',
content: 'High cholesterol?',
},
high_cholesterol: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'required',
],
},
h4_21: {
type: 'static',
tag: 'h4',
content: 'Stroke ?',
},
stroke: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
container_1: {
type: 'group',
schema: {
h4_1: {
type: 'static',
tag: 'h4',
content: 'Stroke/TIA',
},
stroke_tia: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_22: {
type: 'static',
tag: 'h4',
content: 'Mini Stroke',
},
mini_stroke: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
},
conditions: [
[
'stroke',
'in',
[
'yes',
],
],
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Atrial Fib/Arrhythmia ',
},
'atrial_fib_arrhythmia ': {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'PFO/ Hole in Heart',
},
hole_in_heart: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Cancer',
},
cancer: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Coagulopathy/Clotting disorder',
},
clotting_disorder: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Diabetes ',
},
diabetes: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Kidney disease',
},
kidney_disease: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
},
}

View File

@@ -0,0 +1,516 @@
export default {
"steps": {
"page0": {
"elements": [
"h3",
"h4",
"menopause_symptoms"
],
"buttons": {
"previous": false
}
},
"page1": {
"elements": [
"h2_1",
"h4_1",
"menopause_diagnosis"
]
},
"page2": {
"elements": [
"h2",
"h4_2",
"menopause_goals"
]
},
"page3": {
"elements": [
"h4_3",
"last_menstrual_period"
]
},
"page4": {
"elements": [
"h2_2",
"h4_4",
"irregular_periods"
]
},
"page5": {
"elements": [
"h4_5",
"menopause_symptoms_list"
]
},
"page6": {
"elements": [
"h2_3",
"h4_6",
"most_bothersome_symptom"
]
},
"page7": {
"elements": [
"h4_7",
"hrt_experience"
]
},
"page8": {
"elements": [
"h2_4",
"h4_8",
"bioidentical_hormone_treatment"
]
},
"page9": {
"elements": [
"h4_9",
"hormone_imbalances"
]
},
"page10": {
"elements": [
"h2_5",
"h4_10",
"bone_loss"
]
},
"page11": {
"elements": [
"h4_11",
"current_medications"
]
},
"page12": {
"elements": [
"h2_6",
"h4_12",
"dietary_plans"
]
},
"page13": {
"elements": [
"h4_13",
"hormone_sensitive_conditions"
]
},
"page14": {
"elements": [
"h2_7",
"h4_14",
"peptide_sensitivities"
]
}
},
"schema": {
"h3": {
"type": "static",
"tag": "h2",
"content": "Menopause",
"align": "left"
},
"h4": {
"type": "static",
"tag": "h4",
"content": "Are you currently experiencing symptoms of menopause?"
},
"menopause_symptoms": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2_1": {
"type": "static",
"tag": "h2",
"content": "Menopause Diagnosis"
},
"h4_1": {
"type": "static",
"tag": "h4",
"content": "Have you been officially diagnosed as being in menopause or perimenopause by a healthcare provider?"
},
"menopause_diagnosis": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2": {
"type": "static",
"tag": "h2",
"content": "Menopause Goals"
},
"h4_2": {
"type": "static",
"tag": "h4",
"content": "What is your primary goal for menopause therapy?"
},
"menopause_goals": {
"type": "checkboxgroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Manage hot flashes",
"label": "Manage hot flashes"
},
{
"value": "Improve mood and emotional well-being",
"label": "Improve mood and emotional well-being"
},
{
"value": "Boost energy levels",
"label": "Boost energy levels"
},
{
"value": "Reduce menopause-related weight gain",
"label": "Reduce menopause-related weight gain"
},
{
"value": "Improve skin elasticity and collagen production",
"label": "Improve skin elasticity and collagen production"
},
{
"value": "Other",
"label": "Other"
}
]
},
"h4_3": {
"type": "static",
"tag": "h4",
"content": "When was your last menstrual period?"
},
"last_menstrual_period": {
"type": "text",
"inputType": "text",
"rules": [
"required"
]
},
"h2_2": {
"type": "static",
"tag": "h2",
"content": "Menstrual Cycle"
},
"h4_4": {
"type": "static",
"tag": "h4",
"content": "Do you experience irregular periods or spotting?"
},
"irregular_periods": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_5": {
"type": "static",
"tag": "h4",
"content": "Which menopause symptoms are you currently experiencing?"
},
"menopause_symptoms_list": {
"type": "checkboxgroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Hot flashes",
"label": "Hot flashes"
},
{
"value": "Night sweats",
"label": "Night sweats"
},
{
"value": "Mood swings or irritability",
"label": "Mood swings or irritability"
},
{
"value": "Fatigue",
"label": "Fatigue"
},
{
"value": "Insomnia",
"label": "Insomnia"
},
{
"value": "Vaginal dryness or discomfort",
"label": "Vaginal dryness or discomfort"
},
{
"value": "Decreased libido",
"label": "Decreased libido"
},
{
"value": "Weight gain (especially around the abdomen)",
"label": "Weight gain (especially around the abdomen)"
},
{
"value": "Hair thinning or loss",
"label": "Hair thinning or loss"
},
{
"value": "Skin dryness or reduced elasticity",
"label": "Skin dryness or reduced elasticity"
},
{
"value": "Other",
"label": "Other"
}
]
},
"h2_3": {
"type": "static",
"tag": "h2",
"content": "Most Bothersome Symptom"
},
"h4_6": {
"type": "static",
"tag": "h4",
"content": "Which of these symptoms is the most bothersome to you?"
},
"most_bothersome_symptom": {
"type": "text",
"inputType": "text",
"rules": [
"required"
]
},
"h4_7": {
"type": "static",
"tag": "h4",
"content": "Have you been on hormone replacement therapy (HRT) before?"
},
"hrt_experience": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2_4": {
"type": "static",
"tag": "h2",
"content": "Bioidentical Hormone Treatment"
},
"h4_8": {
"type": "static",
"tag": "h4",
"content": "Have you used any bioidentical hormone treatments, including estrogen/progesterone-collagen therapy?"
},
"bioidentical_hormone_treatment": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_9": {
"type": "static",
"tag": "h4",
"content": "Do you have a history of irregular periods, heavy menstrual bleeding, or hormone imbalances (e.g., PCOS)?"
},
"hormone_imbalances": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2_5": {
"type": "static",
"tag": "h2",
"content": "Bone Loss"
},
"h4_10": {
"type": "static",
"tag": "h4",
"content": "Have you experienced any bone loss, osteoporosis, or frequent fractures?"
},
"bone_loss": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_11": {
"type": "static",
"tag": "h4",
"content": "Are you currently taking any medications or supplements for menopause symptoms or hormone balance?"
},
"current_medications": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2_6": {
"type": "static",
"tag": "h2",
"content": "Dietary Plans"
},
"h4_12": {
"type": "static",
"tag": "h4",
"content": "Do you follow any specific dietary plans or restrictions?"
},
"dietary_plans": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h4_13": {
"type": "static",
"tag": "h4",
"content": "Do you have any history of hormone-sensitive conditions (e.g., breast cancer, endometriosis)?"
},
"hormone_sensitive_conditions": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
},
"h2_7": {
"type": "static",
"tag": "h2",
"content": "Peptide Sensitivities"
},
"h4_14": {
"type": "static",
"tag": "h4",
"content": "Do you have any known sensitivities to peptide-based therapies?"
},
"peptide_sensitivities": {
"type": "radiogroup",
"rules": [
"required"
],
"view": "blocks",
"items": [
{
"value": "Yes",
"label": "Yes"
},
{
"value": "No",
"label": "No"
}
]
}
}
}

View File

@@ -0,0 +1,668 @@
export default {
steps: {
page0: {
elements: [
'h4_5',
'p',
'm_g_weight_lb',
'm_g_height_feet',
'm_g_height_inches',
],
},
page1: {
elements: [
'h4',
'm_g_expecting',
],
},
page2: {
label: '',
elements: [
'h4_1',
'm_g_cond_symptoms_tb_500',
],
},
page3: {
label: '',
elements: [
'h4_2',
'm_g_peptide_tehrapies',
],
},
page4: {
label: '',
elements: [
'h4_3',
'm_g_injury_cond',
'caloric_intake',
],
},
page5: {
label: '',
elements: [
'h4_4',
'm_g_long_exp_issue',
],
},
page6: {
label: '',
elements: [
'h4_6',
'm_g_severity_symptoms',
],
},
page7: {
label: '',
elements: [
'h4_7',
'm_g_medical_treatments',
'm_g_treatments_describe',
],
},
page8: {
label: '',
elements: [
'h4_8',
'm_g_chronic_health_cond',
],
},
page9: {
label: '',
elements: [
'h4_9',
'm_g_known_allergies',
'm_g_known_allergies_describe',
],
},
page10: {
label: '',
elements: [
'h4_10',
'm_g_other_medications',
'm_g_other_medications_describe',
'smoke_alcohol',
],
},
page11: {
label: '',
elements: [
'h4_11',
'm_g_physical_activity',
],
},
page12: {
label: '',
elements: [
'h4_12',
'm_g_typical_diet',
],
},
page13: {
label: '',
elements: [
'h4_13',
'm_g_sleep_quality',
],
},
page14: {
label: '',
elements: [
'h4_14',
'm_g_in_person_med_evealuation',
],
},
page15: {
label: '',
elements: [
'h4_15',
'm_g_tests_completed',
],
},
page16: {
label: '',
elements: [
'h4_16',
'm_g_gastrointestinal_or_metabolic_conditions',
'm_g_gastrointestinal_or_metabolic_conditions_describe',
],
},
page17: {
label: '',
elements: [
'h4_17',
'm_g_thyroid_issues_or_diabetes',
'm_g_thyroid_issues_or_diabetes_describe',
],
},
page18: {
label: '',
elements: [
'h3',
'm_g_systolic_diastolic',
],
},
page19: {
label: '',
elements: [
'h3_1',
'm_g_tb_500_therapy',
],
},
},
schema: {
h4_5: {
type: 'static',
tag: 'h4',
content: 'We require that you provide a recent blood pressure measurement within the last six months.',
},
p: {
type: 'static',
tag: 'p',
content: 'Blood pressure should be listed as follows: Systolic (top number) / Diastolic (bottom number).\nIf you are not sure, please go have your blood pressure obtained (often free at your local pharmacy).\n',
},
m_g_weight_lb: {
type: 'text',
label: 'Weight (lb) (Optional)',
},
m_g_height_feet: {
type: 'text',
label: 'Height (feet) (Optional)',
fieldName: ' ',
columns: {
container: 6,
},
},
m_g_height_inches: {
type: 'text',
label: 'Height (inches) (Optional)',
fieldName: ' ',
columns: {
container: 6,
},
},
h4: {
type: 'static',
tag: 'h4',
content: 'Are you pregnant or expecting to be?',
},
m_g_expecting: {
type: 'radiogroup',
items: [
{
value: 'pregnant',
label: 'Pregnant',
},
{
value: 'breastfeeding ',
label: 'Breastfeeding or lactating',
},
{
value: 'expecting_pregnant',
label: 'Expecting to be pregnant',
},
{
value: 'not_applicable',
label: 'No or Not Applicable',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'What specific conditions or symptoms are you seeking treatment for with TB-500?',
},
m_g_cond_symptoms_tb_500: {
type: 'checkboxgroup',
items: [
{
value: 'muscle_injuries',
label: 'Muscle injuries',
},
{
value: 'joint_pain',
label: 'Joint pain',
},
{
value: 'tendonitis',
label: 'Tendonitis',
},
{
value: 'wound_healing',
label: 'Wound healing',
},
{
value: 'inflammation',
label: 'Inflammation',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you previously used TB-500 or any other hgh therapies',
},
m_g_peptide_tehrapies: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Describe the nature of your injury or condition:',
},
m_g_injury_cond: {
type: 'text',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'How long have you been experiencing this issue?',
},
m_g_long_exp_issue: {
type: 'text',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Can you rate the severity of your symptoms on a scale from 1 to 10?',
},
m_g_severity_symptoms: {
type: 'text',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Have you had any recent surgeries or medical treatments for this condition?\n',
},
m_g_medical_treatments: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
m_g_treatments_describe: {
type: 'textarea',
label: 'Please Describe',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'm_g_medical_treatments',
'in',
[
'yes',
],
],
],
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Do you have any chronic health conditions?',
},
m_g_chronic_health_cond: {
type: 'checkboxgroup',
items: [
{
value: 'high_blood_pressure',
label: 'High blood pressure',
},
{
value: 'diabetes',
label: 'Diabetes',
},
{
value: 'cardiovascular_disease',
label: 'Cardiovascular disease',
},
{
value: 'chronic_renal_failure',
label: 'Chronic renal failure',
},
{
value: 'none_of_the_above',
label: 'None of the above',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Do you have any known allergies, particularly to medications or hgh?',
},
m_g_known_allergies: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
m_g_known_allergies_describe: {
type: 'textarea',
label: 'Please Describe',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'm_g_known_allergies',
'in',
[
'yes',
],
],
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any other medications or supplements?',
},
m_g_other_medications: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
m_g_other_medications_describe: {
type: 'textarea',
label: 'Please Describe',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'm_g_other_medications',
'in',
[
'yes',
],
],
],
},
smoke_alcohol: {
type: 'radiogroup',
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'What is your current level of physical activity?',
},
m_g_physical_activity: {
type: 'checkboxgroup',
items: [
{
value: 'sedentary',
label: 'Sedentary',
},
{
value: 'light_exercise',
label: 'Light exercise (1-2 days per week)',
},
{
value: 'moderate_exercise',
label: 'Moderate exercise (3-4 days per week)',
},
{
value: 'intense_exercise',
label: 'Intense exercise (5-7 days per week)',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Describe your typical diet and any dietary restrictions:',
},
m_g_typical_diet: {
type: 'textarea',
rules: [
'validateTextArea',
],
fieldName: ' ',
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'How would you describe your sleep quality and patterns?',
},
m_g_sleep_quality: {
type: 'textarea',
rules: [
'validateTextArea',
],
fieldName: ' ',
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'When was the last time you had an in-person medical evaluation?',
},
m_g_in_person_med_evealuation: {
type: 'checkboxgroup',
items: [
{
value: 'less_than_a_year_ago',
label: 'Less than a year ago',
},
{
value: '1_to_2_years_ago',
label: '1 to 2 years ago',
},
{
value: 'more_than_2_years_ago',
label: 'More than 2 years ago',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Have you had any lab tests completed within the last 12 months that you would like to share with your doctor?',
},
m_g_tests_completed: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No, not at this time',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_16: {
type: 'static',
tag: 'h4',
content: 'Does anyone in your family have a history of gastrointestinal or metabolic conditions?',
},
m_g_gastrointestinal_or_metabolic_conditions: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
m_g_gastrointestinal_or_metabolic_conditions_describe: {
type: 'textarea',
label: 'Please Describe',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'm_g_gastrointestinal_or_metabolic_conditions',
'in',
[
'yes',
],
],
],
},
h4_17: {
type: 'static',
tag: 'h4',
content: 'Does anyone in your family have a history of thyroid issues or diabetes?',
},
m_g_thyroid_issues_or_diabetes: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
m_g_thyroid_issues_or_diabetes_describe: {
type: 'textarea',
rules: [
'validateTextArea',
],
fieldName: ' ',
conditions: [
[
'm_g_thyroid_issues_or_diabetes',
'in',
[
'yes',
],
],
],
},
h3: {
type: 'static',
tag: 'h3',
content: 'We require that you provide a recent blood pressure measurement within the last six months. Blood pressure should be listed as follows: Systolic (top number) / Diastolic (bottom number). If you are not sure, please go have your blood pressure obtained (often free at your local pharmacy).',
},
m_g_systolic_diastolic: {
type: 'text',
label: 'Blood Pressure (Systolic/Diastolic):',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
h3_1: {
type: 'static',
tag: 'h3',
content: 'Is there any other relevant information or concerns you would like to discuss with your doctor regarding TB-500 therapy?',
},
m_g_tb_500_therapy: {
type: 'text',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
},
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,367 @@
export default{
steps: {
page0: {
elements: [
'h4',
'lumps_under_skin1',
],
},
page1: {
elements: [
'h4_1',
'jaundice',
],
},
page2: {
elements: [
'h4_2',
'phlegm',
],
},
page3: {
elements: [
'h4_3',
'balance_problem',
],
},
page4: {
elements: [
'h4_4',
'pain_now',
'container',
],
},
page5: {
elements: [
'h4_10',
'hospice_visit_at_home',
],
},
page6: {
elements: [
'h4_11',
'normal_activities',
],
},
page7: {
elements: [
'h4_12',
'weight_los_gain',
],
},
page8: {
elements: [
'h4_13',
'blurry_double_vision',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'Lumps under the skin?',
},
lumps_under_skin1: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Yellowing of eyes or skin (jaundice)?',
},
jaundice: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Serious cough that brings up a lot of mucus or phlegm?',
},
phlegm: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Problems with balance?',
},
balance_problem: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Are you having pain now?',
},
pain_now: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
container: {
type: 'group',
schema: {
h4_5: {
type: 'static',
tag: 'h4',
content: 'Where is your pain?',
},
where_pain: {
type: 'text',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'How often are you in pain?',
},
how_often_pain: {
type: 'text',
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'When did your pain start?',
},
when_did_pain_start: {
type: 'text',
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'How would you describe your pain on a scale from 0 to 10, with 0 being no pain and 10 being worst pain ever?',
},
pain_scale: {
type: 'radiogroup',
items: [
{
value: '0',
label: '0',
},
{
value: '1',
label: '1',
},
{
value: '2',
label: '2',
},
{
value: '3',
label: '3',
},
{
value: '4',
label: '4',
},
{
value: '5',
label: '5',
},
{
value: '6',
label: '6',
},
{
value: '7',
label: '7',
},
{
value: '8',
label: '8',
},
{
value: '9',
label: '9',
},
{
value: '10',
label: '10',
},
{
value: null,
label: null,
},
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Are you controlling your pain with medicine?',
},
controling_pain: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_10_1: {
type: 'static',
tag: 'h4',
content: 'What pain medicine do you take?',
},
container_1: {
type: 'group',
schema: {
what_medicine_take_pain: {
type: 'text',
},
h4_10_1_copy: {
type: 'static',
tag: 'h4',
content: 'How often do you take this pain medicine?',
},
how_often_take_med_pain: {
type: 'text',
},
},
conditions: [
[
'container.controling_pain',
'in',
[
'yes',
],
],
],
},
},
conditions: [
[
'pain_now',
'in',
[
'yes',
],
],
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Does anyone from Home Health or Hospice visit you at home?',
},
hospice_visit_at_home: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Have you been able to continue most of your normal activities?',
},
normal_activities: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Unexplained weight loss/Gain',
},
weight_los_gain: {
type: 'radiogroup',
items: [
{
value: 'loss',
label: 'Loss',
},
{
value: 'gain',
label: 'Gain',
},
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Blurry vision/Double vision',
},
blurry_double_vision: {
type: 'radiogroup',
items: [
{
value: 'blury_vision',
label: 'Blurry Vision',
},
{
value: 'double_vision',
label: 'Double Vision',
},
],
},
},
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,514 @@
export default {
steps: {
page0: {
elements: [
'h3',
'h4',
'primary_goals',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h2_1',
'h4_1',
'current_libido',
],
},
page2: {
elements: [
'h2',
'h4_2',
'recent_changes',
],
},
page3: {
elements: [
'h4_3',
'hormonal_imbalances',
],
},
page4: {
elements: [
'h4_4',
'hormone_replacement_therapy',
],
},
page5: {
elements: [
'h4_5',
'medications_for_sexual_health',
],
},
page6: {
elements: [
'h4_6',
'medications_for_other_conditions',
],
},
page7: {
elements: [
'h4_7',
'erectile_difficulty',
],
},
page8: {
elements: [
'h4_8',
'premature_ejaculation',
],
},
page9: {
elements: [
'h4_9',
'vaginal_discomfort',
],
},
page10: {
elements: [
'h4_10',
'stress_impact',
],
},
page11: {
elements: [
'h4_11',
'cardiovascular_history',
],
},
page12: {
elements: [
'h4_12',
'growth_hormone_conditions',
],
},
page13: {
elements: [
'h4_13',
'allergies',
],
},
page14: {
elements: [
'h4_14',
'pregnant',
],
},
},
schema: {
h3: {
type: 'static',
tag: 'h2',
content: 'Sexual Wellness',
align: 'left',
},
h4: {
type: 'static',
tag: 'h4',
content: 'What are your primary goals for improving sexual wellness? (Check all that apply)',
},
primary_goals: {
type: 'checkbox',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Increase libido (sexual desire)',
label: 'Increase libido (sexual desire)',
},
{
value: 'Improve sexual performance or stamina',
label: 'Improve sexual performance or stamina',
},
{
value: 'Improve erectile function (for males)',
label: 'Improve erectile function (for males)',
},
{
value: 'Enhance sexual satisfaction',
label: 'Enhance sexual satisfaction',
},
{
value: 'Address hormonal imbalances affecting sexual function',
label: 'Address hormonal imbalances affecting sexual function',
},
{
value: 'Other',
label: 'Other',
},
],
},
h2_1: {
type: 'static',
tag: 'h2',
content: 'Sexual Desire',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'How would you describe your current sexual desire (libido)?',
},
current_libido: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Low',
label: 'Low',
},
{
value: 'Moderate',
label: 'Moderate',
},
{
value: 'High',
label: 'High',
},
],
},
h2: {
type: 'static',
tag: 'h2',
content: 'Recent Changes',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you noticed any recent changes in your sexual function or desire?',
},
recent_changes: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any hormonal imbalances that affect sexual health (e.g., low testosterone, estrogen dominance, growth hormone deficiency)?',
},
hormonal_imbalances: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Are you currently undergoing hormone replacement therapy (e.g., testosterone, estrogen, progesterone)?',
},
hormone_replacement_therapy: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any medications or supplements for sexual health (e.g., Viagra/Sildenafil, Cialis/Tadalafil, testosterone therapy)?',
},
medications_for_sexual_health: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Are you taking any medications for other conditions that could affect sexual function (e.g., antidepressants, blood pressure medications)?',
},
medications_for_other_conditions: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Do you experience difficulty achieving or maintaining an erection? (Male Specific)',
},
erectile_difficulty: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Never',
label: 'Never',
},
{
value: 'Rarely',
label: 'Rarely',
},
{
value: 'Sometimes',
label: 'Sometimes',
},
{
value: 'Often',
label: 'Often',
},
{
value: 'Always',
label: 'Always',
},
],
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Do you experience premature ejaculation or difficulty with ejaculation? (Male Specific)',
},
premature_ejaculation: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Do you experience a lack of sexual desire (libido)? (Female Specific)',
},
lack_of_libido: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Never',
label: 'Never',
},
{
value: 'Rarely',
label: 'Rarely',
},
{
value: 'Sometimes',
label: 'Sometimes',
},
{
value: 'Often',
label: 'Often',
},
{
value: 'Always',
label: 'Always',
},
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Do you experience vaginal dryness or discomfort during sexual activity? (Female Specific)',
},
vaginal_discomfort: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Do you believe that stress, lifestyle, or relationship issues are impacting your sexual health?',
},
stress_impact: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Do you have a history of high blood pressure or cardiovascular issues?',
},
cardiovascular_history: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Do you have any history of growth hormone-related conditions or endocrine disorders?',
},
growth_hormone_conditions: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'Do you have any allergies or sensitivities to nasal sprays or hormone therapies?',
},
allergies: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Are you Pregnant? (Female Specific)',
},
pregnant: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
},
},
};

View File

@@ -0,0 +1,680 @@
export default {
steps: {
page0: {
elements: [
'h3',
'h4',
'current_sleep_quality',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h2_1',
'h4_1',
'hours_sleep_per_night',
],
},
page2: {
elements: [
'h2',
'h4_2',
'diagnosed_sleep_disorders',
'diagnosed_sleep_disorders_reason',
],
},
page3: {
elements: [
'h4_3',
'prescribed_sleep_medications',
],
},
page4: {
elements: [
'h4_4',
'over_the_counter_sleep_aids',
'over_the_counter_sleep_aids_reason',
],
},
page5: {
elements: [
'h4_5',
'other_medications_affect_sleep',
],
},
page6: {
elements: [
'h4_6',
'consume_caffeine_nicotine_alcohol',
],
},
page7: {
elements: [
'h4_7',
'regular_physical_activity',
],
},
page8: {
elements: [
'h4_8',
'high_stress_anxiety',
],
},
page9: {
elements: [
'h4_9',
'nasal_sinus_issues',
'nasal_sinus_issues_reason',
],
},
page10: {
elements: [
'h4_10',
'used_nasal_sprays',
'nasal_sprays_side_effects',
],
},
page11: {
elements: [
'h4_11',
'prescribed_peptide_therapies',
'peptide_therapies_side_effects',
],
},
page12: {
elements: [
'h4_12',
'using_hormone_peptide_treatments',
'hormone_peptide_treatments_reason',
],
},
page13: {
elements: [
'h4_13',
'known_allergies',
'allergies_list',
],
},
page14: {
elements: [
'h4_14',
'diagnosed_chronic_conditions',
'chronic_conditions_reason',
],
},
page15: {
elements: [
'h4_15',
'respiratory_conditions',
],
},
page16: {
elements: [
'h4_16',
'primary_goals',
],
},
page17: {
elements: [
'h4_17',
'pregnant',
],
},
},
schema: {
h3: {
type: 'static',
tag: 'h2',
content: 'Sleep Quality',
align: 'left',
},
h4: {
type: 'static',
tag: 'h4',
content: 'How would you describe your current sleep quality?',
},
current_sleep_quality: {
type: 'radiogroup',
rules: [
'required',
],
view: 'blocks',
items: [
{
value: 'Poor',
label: 'Poor',
},
{
value: 'Fair',
label: 'Fair',
},
{
value: 'Good',
label: 'Good',
},
{
value: 'Excellent',
label: 'Excellent',
},
],
},
h2_1: {
type: 'static',
tag: 'h2',
content: 'Sleep Quality',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'On average, how many hours do you sleep per night?',
},
hours_sleep_per_night: {
type: 'text',
inputType: 'text',
rules: [
'required',
],
},
h2: {
type: 'static',
tag: 'h2',
content: 'Sleep Quality',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Do you suffer from any diagnosed sleep disorders (e.g., insomnia, sleep apnea)?',
},
diagnosed_sleep_disorders: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
diagnosed_sleep_disorders_reason: {
type: 'text',
label: ' \n \t\nIf yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'diagnosed_sleep_disorders',
'in',
[
'Yes',
],
],
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Have you ever been prescribed any sleep medications or therapies in the past?',
},
prescribed_sleep_medications: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Do you take any over-the-counter sleep aids, such as melatonin or herbal supplements?',
},
over_the_counter_sleep_aids: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
over_the_counter_sleep_aids_reason: {
type: 'text',
label: ' \n \t\nIf yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'over_the_counter_sleep_aids',
'in',
[
'Yes',
],
],
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Are you currently taking any other medications or supplements that affect your sleep?',
},
other_medications_affect_sleep: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Do you consume caffeine, nicotine, or alcohol?',
},
consume_caffeine_nicotine_alcohol: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Do you engage in regular physical activity or exercise?',
},
regular_physical_activity: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Do you experience high levels of stress or anxiety that impact your sleep?',
},
high_stress_anxiety: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Do you have a history of nasal or sinus issues (e.g., chronic congestion, allergies)?',
},
nasal_sinus_issues: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
nasal_sinus_issues_reason: {
type: 'text',
label: ' \n \t\nIf yes, please describe.',
rules: [
'required',
],
conditions: [
[
'nasal_sinus_issues',
'in',
[
'Yes',
],
],
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Have you used nasal sprays or inhalers before?',
},
used_nasal_sprays: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
nasal_sprays_side_effects: {
type: 'text',
label: ' \n \t\nIf yes, did you experience any side effects?',
rules: [
'required',
],
conditions: [
[
'used_nasal_sprays',
'in',
[
'Yes',
],
],
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Have you been prescribed peptide therapies (like PE 22-28 or DHHB) before?',
},
prescribed_peptide_therapies: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
peptide_therapies_side_effects: {
type: 'text',
label: ' \n \t\nIf yes, did you experience any side effects?',
rules: [
'required',
],
conditions: [
[
'prescribed_peptide_therapies',
'in',
[
'Yes',
],
],
],
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Are you currently using any other hormone or peptide-based treatments?',
},
using_hormone_peptide_treatments: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
hormone_peptide_treatments_reason: {
type: 'text',
label: ' \n \t\nIf yes, please specify.',
rules: [
'required',
],
conditions: [
[
'using_hormone_peptide_treatments',
'in',
[
'Yes',
],
],
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Do you have any known allergies to medications or supplements?',
},
known_allergies: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
allergies_list: {
type: 'text',
label: ' \n \t\nIf yes, please list the allergies.',
rules: [
'required',
],
conditions: [
[
'known_allergies',
'in',
[
'Yes',
],
],
],
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'Have you been diagnosed with any chronic conditions (e.g., diabetes, hypertension, heart disease) that may affect sleep?',
},
diagnosed_chronic_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
chronic_conditions_reason: {
type: 'text',
label: ' \n \t\nIf yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'diagnosed_chronic_conditions',
'in',
[
'Yes',
],
],
],
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Do you suffer from any respiratory conditions (e.g., asthma, COPD) that could interfere with nasal spray use?',
},
respiratory_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
h4_16: {
type: 'static',
tag: 'h4',
content: 'What are your primary goals for improving sleep quality with this therapy?',
},
primary_goals: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Falling asleep faster',
label: 'Falling asleep faster',
},
{
value: 'Staying asleep throughout the night',
label: 'Staying asleep throughout the night',
},
{
value: 'Reducing nighttime awakenings',
label: 'Reducing nighttime awakenings',
},
{
value: 'Feeling more rested upon waking',
label: 'Feeling more rested upon waking',
},
{
value: 'Other',
label: 'Other',
},
],
rules: [
'required',
],
},
h4_17: {
type: 'static',
tag: 'h4',
content: 'Are you Pregnant? (Female Specific)',
},
pregnant: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
},
{
value: 'No',
label: 'No',
},
],
rules: [
'required',
],
},
},
};

View File

@@ -0,0 +1,47 @@
{
"bp_match": {
"type": "c",
"values": {
"0": 100,
"60": 80,
"70": 60
}
},
"exact_match": {
"type": "e",
"values": {
"yes": 100,
"no": 2,
"high": 2,
"never": 2,
"almost_never": 30,
"occasionally": 66,
"almost_always": 75,
"always": 100,
"very_much": 66,
"a_lot": 100,
"a_little": 30,
"not_at_all": 2,
"not_applicable": 2,
"rarely": 30,
"sometimes": 66,
"often": 75,
"unsure": 2,
"less_than_6_hrs": 100,
"six_to_eight_hrs": 66,
"more_than_eight": 33,
"before_penetrate": 100,
"ejaculate_early": 66,
"no_issue_with_ejaculation": 2,
"no_issue": 2,
"usually_difficult": 100,
"low": 100,
"medium": 66,
"none_of_above_them": 2,
"0": 2,
"1": 33,
"2": 66,
"3": 100
}
}
}

View File

@@ -0,0 +1,187 @@
export default {
steps: {
page0: {
elements: [
'h4',
'instaiable_hunger',
],
},
page1: {
elements: [
'h4_1',
'genital_pain',
],
},
page2: {
elements: [
'h4_2',
'sensation_of_pain_burning',
],
},
page3: {
elements: [
'h4_3',
'urinary_incontinence_problem?',
],
},
page4: {
elements: [
'h4_4',
'genital_sore',
],
},
page5: {
elements: [
'h4_5',
'sexual_active',
'container',
],
},
},
schema: {
h4: {
type: 'static',
tag: 'h4',
content: 'Extreme and insatiable&nbsp;hunger',
},
instaiable_hunger: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'genital pain',
},
genital_pain: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'The sensation of pain and/or burning',
},
sensation_of_pain_burning: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Urinary incontinence problem?',
},
'urinary_incontinence_problem?': {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Genital Sore?',
},
genital_sore: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Are you Sexual active ?',
},
sexual_active: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
},
container: {
type: 'group',
schema: {
h4_6: {
type: 'static',
tag: 'h4',
content: 'Your Partner?\n',
},
sexual_partner: {
type: 'radiogroup',
items: [
{
value: 'male',
label: 'Male',
},
{
value: 'female',
label: 'Female',
},
{
value: 'both',
label: 'Both',
},
],
},
},
conditions: [
[
'sexual_active',
'in',
[
'yes',
],
],
],
},
},
}

View File

@@ -0,0 +1,478 @@
export default {
steps: {
page0: {
elements: [
'h4_5',
'weight_lb',
'height_feet',
'height_inches',
],
},
page1: {
elements: [
'h4',
'p_4',
'expecting',
],
},
page2: {
label: '',
elements: [
'h4_1',
'p_5',
'evaluate_weight_loss',
],
},
page3: {
label: '',
elements: [
'h4_2',
'weight_management',
],
},
page4: {
label: '',
elements: [
'h4_3',
'caloric_intake',
],
},
page5: {
label: '',
elements: [
'h4_4',
'physical_activity',
],
},
page6: {
label: '',
elements: [
'h4_6',
'weightloss_goal',
],
},
page7: {
label: '',
elements: [
'h4_7',
'p_6',
'medical_evaluation',
],
},
page8: {
label: '',
elements: [
'h4_8',
'lab_tests_completed',
],
},
page9: {
label: '',
elements: [
'h4_9',
'p_7',
'comorbidities',
],
},
page10: {
label: '',
elements: [
'h4_10',
'chronic_pancreatitis',
'smoke_alcohol',
],
},
page11: {
label: '',
elements: [
'h4_11',
'family_history_thyroid_cancer',
],
},
page12: {
label: '',
elements: [
'h4_12',
'kindney_history',
],
},
},
schema: {
h4_5: {
type: 'static',
tag: 'h4',
content: "Let's get your numbers",
},
weight_lb: {
type: 'text',
label: 'Weight (lb) (Optional)',
},
height_feet: {
type: 'text',
label: 'Height (feet) (Optional)',
columns: {
container: 6,
},
},
height_inches: {
type: 'text',
label: 'Height (inches) (Optional)',
columns: {
container: 6,
},
},
h4: {
type: 'static',
tag: 'h4',
content: 'Are you pregnant or expecting to be?',
},
p_4: {
type: 'static',
tag: 'p',
content: 'Medications on your treatment plan might not be recommended for pregnant women.',
},
expecting: {
type: 'radiogroup',
items: [
{
value: 'pregnant',
label: 'Pregnant',
},
{
value: 'breastfeeding ',
label: 'Breastfeeding or lactating',
},
{
value: 'expecting_pregnant',
label: 'Expecting to be pregnant',
},
{
value: 'not_applicable',
label: 'No or Not Applicable',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Are you here to be evaluated for weight loss?',
},
p_5: {
type: 'static',
tag: 'p',
content: 'All responses will be evaluated by a board-certified physician. Medication may be prescribed for appropriate candidates.',
},
evaluate_weight_loss: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Have you ever attempted to lose weight in a weight management program?\nExamples may include caloric restriction through diet, exercise, or behavior modification.\n',
},
weight_management: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No, this would be my first time',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_3: {
type: 'static',
tag: 'h4',
content: 'Are you willing to reduce your caloric intake alongside medication?',
},
caloric_intake: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Are you willing to increase your physical activity alongside medication?',
},
physical_activity: {
type: 'radiogroup',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'What is your goal weight?',
},
weightloss_goal: {
type: 'text',
rules: [
'validateTextBox',
],
fieldName: ' ',
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'When was the last time you had an in person medical evaluation?\n',
},
p_6: {
type: 'static',
tag: 'p',
content: 'We want to make sure you have recently been evaluated in person by a healthcare provider.',
},
medical_evaluation: {
type: 'radiogroup',
items: [
{
value: 'less_then_a_year_ago',
label: 'Less than a year ago',
},
{
value: '1_to_2_years',
label: '1 to 2 years',
},
{
value: 'more_than_2_years_ago',
label: 'More than 2 years ago',
},
],
rules: [
'validateRadio',
],
fieldName: ' ',
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Have you had any lab tests completed within the last 12 months that you would like to share with your doctor?',
},
lab_tests_completed: {
type: 'radiogroup',
rules: [
'validateRadio',
],
fieldName: ' ',
items: [
{
value: 'yes',
label: 'Yes',
},
{
value: 'no',
label: 'No, not at this time',
},
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Do you have any of the following?',
},
p_7: {
type: 'static',
tag: 'p',
content: "These are considered 'comorbidities' by the American Board of Obesity Medicine. While you may not need to have one of these for treatment, your doctor would like to know.",
},
comorbidities: {
type: 'checkboxgroup',
items: [
{
value: 'high_cholesterol',
label: 'High cholesterol',
},
{
value: 'fatty_liver_disease',
label: 'Fatty Liver Disease',
},
{
value: 'high_blood_pressure',
label: 'High Blood Pressure',
},
{
value: 'pre_diabetes',
label: 'Pre-diabetes/ Type 2 Diabetes / Hba1c above 5.7',
},
{
value: 'polycystic_ovarian',
label: 'Polycystic Ovarian Syndrome (PCOS)',
},
{
value: 'none_of_the_above',
label: 'None of the above',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Do you have any of the following?',
},
chronic_pancreatitis: {
type: 'checkboxgroup',
items: [
{
value: 'chronic_pancreatitis_glp1',
label: 'Chronic pancreatitis or previous episode of pancreatitis due to GLP-1',
},
{
value: 'history_of_type1_diabetes',
label: 'History of type 1 diabetes',
},
{
value: 'history_of_severe_gl',
label: 'History of severe GI disease (Ex: chrons disease, or ulcerative colits)',
},
{
value: 'history_of_diabetic_retinopathy',
label: 'History of diabetic retinopathy',
},
{
value: 'history_of_medullary_thyroid_cancer',
label: 'History of medullary thyroid cancer',
},
{
value: 'previous_bariatric_surgery_or_other_gl_surgery',
label: 'Previous bariatric surgery or other GI surgery',
},
{
value: 'history_of_men_2',
label: 'History of MEN-2 (multiple endocrine neoplasia syndrome type 2)',
},
{
value: 'history_of_gallbladder_disease',
label: 'History of gallbladder disease (not including gallbladder removal/cholecystectomy)',
},
{
value: 'none_of_the_above',
label: 'NONE of the above',
},
],
rules: [
'required',
],
fieldName: ' ',
},
smoke_alcohol: {
type: 'radiogroup',
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Does anyone in your family have a history of...',
},
family_history_thyroid_cancer: {
type: 'checkboxgroup',
items: [
{
value: 'men2',
label: 'MEN2 (multiple endocrine neoplasia syndrome type 2)',
},
{
value: 'medullary_thyroid_cancer',
label: 'Medullary thyroid cancer',
},
{
value: 'none_of_above_them',
label: 'NONE of the above',
},
],
rules: [
'required',
],
fieldName: ' ',
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Do you have any of the following?',
},
kindney_history: {
type: 'checkboxgroup',
items: [
{
value: 'history_of_kidney_failure',
label: 'History of kidney failure',
},
{
value: 'history_of_chronic_renal_failure',
label: 'History of chronic renal failure',
},
{
value: 'appointment_or_consultation_with ',
label: 'Had an appointment or consultation with a kidney specialist in the past 12 months',
},
{
value: 'history_of_solitary_kidney_or_kidney_transplant',
label: 'History of solitary kidney, or kidney transplant',
},
{
value: 'none_of_teh_above',
label: 'None of the above ',
},
],
rules: [
'required',
],
fieldName: ' ',
},
},
}

View File

@@ -0,0 +1,877 @@
export default {
steps: {
page0: {
elements: [
'h4_3',
'p',
'weight_loss_weight',
'weight_loss_height',
],
buttons: {
previous: false,
},
},
page1: {
elements: [
'h4_4',
'p_1',
'weight_loss_target_weight',
],
},
page2: {
elements: [
'h4_5',
'p_2',
'weight_loss_weight_changes_in_past',
'weight_loss_weight_changes_in_past_reason',
],
},
page3: {
elements: [
'h4',
'p_3',
'weight_loss_diagnosed_related_conditions',
'weight_loss_diagnosed_related_conditions_reason',
],
},
page4: {
elements: [
'h2',
'p_4',
'weight_loss_good_allergies',
'weight_loss_good_allergies_reason',
],
},
page5: {
elements: [
'h4_1',
'p_5',
'weight_loss_physical_activity_exercise',
],
},
page6: {
elements: [
'h4_2',
'p_6',
'weight_loss_used_medications_before',
'weight_loss_used_medications_before_explanation',
],
},
page7: {
elements: [
'h4_6',
'p_7',
'weight_loss_taking_affecting_medications',
'weight_loss_taking_affecting_medications_reason',
],
},
page8: {
elements: [
'h4_7',
'p_8',
'weight_loss_have_allergies_to_medications',
'weight_loss_have_allergies_to_medications_reason',
],
},
page9: {
elements: [
'h4_8',
'p_9',
'weight_loss_some_serious_conditions',
'weight_loss_some_serious_conditions_others',
],
},
page10: {
elements: [
'h4_9',
'p_10',
'weight_loss_history_gastrointestinal_disorders',
'weight_loss_history_gastrointestinal_disorders_reason',
],
},
page11: {
elements: [
'h4_10',
'p_11',
'weight_loss_diagnosed_with_any_hormonal_imbalances',
'weight_loss_diagnosed_with_any_hormonal_imbalances_reason',
],
},
page12: {
elements: [
'h4_11',
'p_12',
'weight_loss_consume_alcohol',
],
},
page13: {
elements: [
'h4_12',
'p_13',
'weight_loss_family_history_of_thyroid_cancer',
'weight_loss_family_history_of_thyroid_cancer_reason',
],
},
page14: {
elements: [
'h4_13',
'p_14',
'weight_loss_experienced_nausea_vomiting',
'weight_loss_experienced_nausea_vomiting_reason',
],
},
page15: {
elements: [
'h4_14',
'p_15',
'weight_loss_used_anti_inflammatory',
'weight_loss_used_anti_inflammatory_reason',
],
},
page16: {
elements: [
'h4_15',
'p_16',
'weight_loss_affecting_your_growth_hormone_levels',
'weight_loss_affecting_your_growth_hormone_levels_reason',
],
},
page17: {
elements: [
'h4_16',
'p_17',
'weight_loss_are_you_pregnant',
],
},
},
schema: {
h4_3: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p: {
type: 'static',
tag: 'p',
content: 'What is your current weight and height?\n',
},
weight_loss_weight: {
type: 'text',
label: 'Weight (lbs or kg)',
inputType: 'number',
rules: [
'required',
],
},
weight_loss_height: {
type: 'text',
label: 'Height (feet/inches or cm)',
inputType: 'number',
rules: [
'required',
],
},
h4_5: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_2: {
type: 'static',
tag: 'p',
content: 'Have you experienced significant weight changes (gain/loss) in the past 6 months?',
},
weight_loss_weight_changes_in_past: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_weight_changes_in_past_reason: {
type: 'text',
label: 'If yes, please describe.',
rules: [
'required',
],
conditions: [
[
'weight_loss_weight_changes_in_past',
'in',
[
'Yes',
],
],
],
},
h4_4: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_1: {
type: 'static',
tag: 'p',
content: 'What is your target weight?\n',
},
weight_loss_target_weight: {
type: 'text',
inputType: 'number',
rules: [
'required',
],
},
h4: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_3: {
type: 'static',
tag: 'p',
content: 'Have you been diagnosed with any weight-related conditions (e.g., obesity, metabolic syndrome, type 2 diabetes)?',
},
weight_loss_diagnosed_related_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_diagnosed_related_conditions_reason: {
type: 'text',
label: 'If yes, please specify the condition.',
conditions: [
[
'weight_loss_diagnosed_related_conditions',
'in',
[
'Yes',
],
],
],
rules: [
'required',
],
},
h2: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_4: {
type: 'static',
tag: 'p',
content: 'Do you have any known food allergies or intolerances?',
},
weight_loss_good_allergies: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_good_allergies_reason: {
type: 'text',
label: 'If yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'weight_loss_good_allergies',
'in',
[
'Yes',
],
],
],
},
h4_1: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_5: {
type: 'static',
tag: 'p',
content: 'How often do you engage in physical activity or exercise?',
},
weight_loss_physical_activity_exercise: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Never',
label: 'Never',
description: '',
},
{
value: '1-2 times a week',
label: '1-2 times a week',
description: '',
},
{
value: '3-4 times a week',
label: '3-4 times a week',
description: null,
},
{
value: '5+ times a week',
label: '5+ times a week',
description: null,
},
],
rules: [
'required',
],
},
h4_2: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_6: {
type: 'static',
tag: 'p',
content: 'Have you used medications for weight loss before?',
},
weight_loss_used_medications_before: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_used_medications_before_explanation: {
type: 'text',
label: 'If yes, what medications have you tried, and were they effective?',
conditions: [
[
'weight_loss_used_medications_before',
'in',
[
'Yes',
],
],
],
rules: [
'required',
],
},
h4_6: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_7: {
type: 'static',
tag: 'p',
content: 'Are you taking medications that may affect your weight (e.g., insulin, antidepressants, thyroid medication)?\n',
},
weight_loss_taking_affecting_medications: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_taking_affecting_medications_reason: {
type: 'text',
label: 'If yes, please specify',
rules: [
'required',
],
conditions: [
[
'weight_loss_taking_affecting_medications',
'in',
[
'Yes',
],
],
],
},
h4_7: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_8: {
type: 'static',
tag: 'p',
content: 'Do you have any known sensitivities or allergies to peptides or other medications?',
},
weight_loss_have_allergies_to_medications: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_have_allergies_to_medications_reason: {
type: 'text',
label: 'If yes, please specify the condition.',
rules: [
'required',
],
conditions: [
[
'weight_loss_have_allergies_to_medications',
'in',
[
'Yes',
],
],
],
},
h4_8: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_9: {
type: 'static',
tag: 'p',
content: 'Do you have any of the following conditions?',
},
weight_loss_some_serious_conditions: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Type 2 diabetes',
label: 'Type 2 diabetes',
description: '',
},
{
value: 'High blood pressure (Hypertension)',
label: 'High blood pressure (Hypertension)',
description: '',
},
{
value: 'Heart disease',
label: 'Heart disease',
description: null,
},
{
value: 'Thyroid disorders',
label: 'Thyroid disorders',
description: null,
},
{
value: 'Liver or kidney disease',
label: 'Liver or kidney disease',
description: null,
},
{
value: 'Other chronic conditions',
label: 'Other chronic conditions',
description: null,
},
],
},
weight_loss_some_serious_conditions_others: {
type: 'text',
label: 'Write other conditions',
rules: [
'required',
],
conditions: [
[
'weight_loss_some_serious_conditions',
'in',
[
'Other chronic conditions',
],
],
],
},
h4_9: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_10: {
type: 'static',
tag: 'p',
content: 'Do you have a history of gastrointestinal disorders (e.g., GERD, IBS, or gallbladder issues)?',
},
weight_loss_history_gastrointestinal_disorders: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_history_gastrointestinal_disorders_reason: {
type: 'text',
label: 'If yes, please describe',
rules: [
'required',
],
conditions: [
[
'weight_loss_history_gastrointestinal_disorders',
'in',
[
'Yes',
],
],
],
},
h4_10: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_11: {
type: 'static',
tag: 'p',
content: 'Have you been diagnosed with any hormonal imbalances that affect weight (e.g., hypothyroidism, Cushing\&#39;s syndrome)?',
},
weight_loss_diagnosed_with_any_hormonal_imbalances: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
},
weight_loss_diagnosed_with_any_hormonal_imbalances_reason: {
type: 'text',
label: 'If yes, please describe',
rules: [
'required',
],
conditions: [
[
'weight_loss_diagnosed_with_any_hormonal_imbalances',
'in',
[
'Yes',
],
],
],
},
h4_11: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_12: {
type: 'static',
tag: 'p',
content: 'Do you consume caffeine, nicotine, or alcohol?',
},
weight_loss_consume_alcohol: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
},
h4_12: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_13: {
type: 'static',
tag: 'p',
content: 'Do you have a personal or family history of thyroid cancer or multiple endocrine neoplasia (MEN2)?',
},
weight_loss_family_history_of_thyroid_cancer: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_family_history_of_thyroid_cancer_reason: {
type: 'text',
label: 'If yes, please describe',
rules: [
'required',
],
conditions: [
[
'weight_loss_family_history_of_thyroid_cancer',
'in',
[
'Yes',
],
],
],
},
h4_13: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_14: {
type: 'static',
tag: 'p',
content: 'Have you experienced nausea, vomiting, or digestive issues in the past while using weight loss medications?',
},
weight_loss_experienced_nausea_vomiting: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
},
weight_loss_experienced_nausea_vomiting_reason: {
type: 'text',
rules: [
'required',
],
conditions: [
[
'weight_loss_experienced_nausea_vomiting',
'in',
[
'Yes',
],
],
],
label: 'If yes, please specify the medication and side effects',
},
h4_14: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_15: {
type: 'static',
tag: 'p',
content: 'Have you ever used anti-inflammatory or immune-modulating medications, such as Amlexanox?',
},
weight_loss_used_anti_inflammatory: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
},
weight_loss_used_anti_inflammatory_reason: {
type: 'text',
label: 'If yes, please describe the effects:',
rules: [
'required',
],
conditions: [
[
'weight_loss_used_anti_inflammatory',
'in',
[
'Yes',
],
],
],
},
h4_15: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_16: {
type: 'static',
tag: 'p',
content: 'Have you been diagnosed with conditions affecting your growth hormone levels (e.g., growth hormone deficiency)?',
},
weight_loss_affecting_your_growth_hormone_levels: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
rules: [
'required',
],
},
weight_loss_affecting_your_growth_hormone_levels_reason: {
type: 'text',
label: 'If yes, please describe',
rules: [
'required',
],
conditions: [
[
'weight_loss_affecting_your_growth_hormone_levels',
'in',
[
'Yes',
],
],
],
},
h4_16: {
type: 'static',
tag: 'h4',
content: 'Weight Loss',
},
p_17: {
type: 'static',
tag: 'p',
content: 'Are you Pregnant? (Female Specific)',
},
weight_loss_are_you_pregnant: {
type: 'radiogroup',
view: 'blocks',
items: [
{
value: 'Yes',
label: 'Yes',
description: '',
},
{
value: 'No',
label: 'No',
description: '',
},
],
},
},
};

View File

@@ -0,0 +1,320 @@
<script setup>
import axios from '@axios';
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
import { computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
const queueUsers = ref([]);
const router = useRouter()
const route = useRoute()
const isLoadingVisible = ref(false);
const usertime = ref(null);
const agentId = ref(localStorage.getItem('agent_id'))
const recordVid = ref(true)
const enableAi = ref(true)
const currentQueue = computed(() => {
return queueUsers.value.findIndex(user => user.id == localStorage.getItem('userData'))
});
const registrationTimeAgo = () => {
const currentDate = new Date();
const registrationDate = new Date(usertime.value * 1000);
const timeDifference = currentDate - registrationDate;
const seconds = Math.floor(timeDifference / 1000);
const minutes = Math.floor(seconds / 60);
const hours = Math.floor(minutes / 60);
const days = Math.floor(hours / 24);
if (seconds < 60) {
return `${seconds} second${seconds !== 1 ? 's' : ''} ago`;
} else if (minutes < 60) {
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
} else if (hours < 24) {
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
} else if (days < 7) {
return `${days} day${days !== 1 ? 's' : ''} ago`;
}
}
const count = ref();
const states = ref([
{ name: 'Howland Island', abbreviation: 'UM-84' },
{ name: 'Delaware', abbreviation: 'DE' },
{ name: 'Maryland', abbreviation: 'MD' },
{ name: 'Baker Island', abbreviation: 'UM-81' },
{ name: 'Kingman Reef', abbreviation: 'UM-89' },
{ name: 'New Hampshire', abbreviation: 'NH' },
{ name: 'Wake Island', abbreviation: 'UM-79' },
{ name: 'Kansas', abbreviation: 'KS' },
{ name: 'Texas', abbreviation: 'TX' },
{ name: 'Nebraska', abbreviation: 'NE' },
{ name: 'Vermont', abbreviation: 'VT' },
{ name: 'Jarvis Island', abbreviation: 'UM-86' },
{ name: 'Hawaii', abbreviation: 'HI' },
{ name: 'Guam', abbreviation: 'GU' },
{ name: 'United States Virgin Islands', abbreviation: 'VI' },
{ name: 'Utah', abbreviation: 'UT' },
{ name: 'Oregon', abbreviation: 'OR' },
{ name: 'California', abbreviation: 'CA' },
{ name: 'New Jersey', abbreviation: 'NJ' },
{ name: 'North Dakota', abbreviation: 'ND' },
{ name: 'Kentucky', abbreviation: 'KY' },
{ name: 'Minnesota', abbreviation: 'MN' },
{ name: 'Oklahoma', abbreviation: 'OK' },
{ name: 'Pennsylvania', abbreviation: 'PA' },
{ name: 'New Mexico', abbreviation: 'NM' },
{ name: 'American Samoa', abbreviation: 'AS' },
{ name: 'Illinois', abbreviation: 'IL' },
{ name: 'Michigan', abbreviation: 'MI' },
{ name: 'Virginia', abbreviation: 'VA' },
{ name: 'Johnston Atoll', abbreviation: 'UM-67' },
{ name: 'West Virginia', abbreviation: 'WV' },
{ name: 'Mississippi', abbreviation: 'MS' },
{ name: 'Northern Mariana Islands', abbreviation: 'MP' },
{ name: 'United States Minor Outlying Islands', abbreviation: 'UM' },
{ name: 'Massachusetts', abbreviation: 'MA' },
{ name: 'Connecticut', abbreviation: 'CT' },
{ name: 'Florida', abbreviation: 'FL' },
{ name: 'District of Columbia', abbreviation: 'DC' },
{ name: 'Midway Atoll', abbreviation: 'UM-71' },
{ name: 'Navassa Island', abbreviation: 'UM-76' },
{ name: 'Indiana', abbreviation: 'IN' },
{ name: 'Wisconsin', abbreviation: 'WI' },
{ name: 'Wyoming', abbreviation: 'WY' },
{ name: 'South Carolina', abbreviation: 'SC' },
{ name: 'Arkansas', abbreviation: 'AR' },
{ name: 'South Dakota', abbreviation: 'SD' },
{ name: 'Montana', abbreviation: 'MT' },
{ name: 'North Carolina', abbreviation: 'NC' },
{ name: 'Palmyra Atoll', abbreviation: 'UM-95' },
{ name: 'Puerto Rico', abbreviation: 'PR' },
{ name: 'Colorado', abbreviation: 'CO' },
{ name: 'Missouri', abbreviation: 'MO' },
{ name: 'New York', abbreviation: 'NY' },
{ name: 'Maine', abbreviation: 'ME' },
{ name: 'Tennessee', abbreviation: 'TN' },
{ name: 'Georgia', abbreviation: 'GA' },
{ name: 'Louisiana', abbreviation: 'LA' },
{ name: 'Nevada', abbreviation: 'NV' },
{ name: 'Iowa', abbreviation: 'IA' },
{ name: 'Idaho', abbreviation: 'ID' },
{ name: 'Rhode Island', abbreviation: 'RI' },
{ name: 'Washington', abbreviation: 'WA' },
{ name: 'Ohio', abbreviation: 'OH' },
// ... (add the rest of the states)
]);
const selectedStateName = (stateName) => {
console.log('queueUsers', stateName);
const selectedState = states.value.find(s => s.abbreviation === stateName);
return selectedState ? selectedState.name : '';
};
onMounted(async () => {
isLoadingVisible.value = true;
window.Pusher = Pusher;
const key = 'bc8bffbbbc49cfa39818';
const cluster = 'mt1';
let echo = new Echo({
broadcaster: 'pusher',
key: key,
cluster: cluster,
forceTLS: true,
auth: {
headers: {
Authorization: 'Bearer ' + localStorage.getItem('access_token'),
},
},
});
//presence channel ((user bio show))
echo.join(`dhkjkiplqe84sdaqf17nqg`)
.here((users) => { //existing user/ including current user
users.forEach((user, index) => {
usertime.value = user.time;
user.waitingTime = registrationTimeAgo();
user.state = selectedStateName(user.state);
});
queueUsers.value = users.filter(user => user.type == "patient");
console.log("alluser", users);
})
.joining((user) => {
//new user
console.log('joining', user);
if (user.type != "patient")
return
usertime.value = user.time;
user.waitingTime = registrationTimeAgo();
user.state = selectedStateName(user.state);
queueUsers.value.push(user);
})
.leaving((user) => {
console.log('leaving', user.name);
queueUsers.value = queueUsers.value.filter(u => u.id !== user.id);
console.log("CurrentUser", queueUsers);
if (user.type != "patient")
return
})
.error((error) => {
console.error(error);
});
isLoadingVisible.value = false;
await axios.post('/agent/api/patient-recording-switch-get/' + agentId.value)
.then(response => {
console.log('rec ', response.data.recording_switch)
if (response.data.recording_switch == 1)
recordVid.value = true
else
recordVid.value = false
})
.catch(error => {
console.error('error recording ', error.response.data);
});
await axios.post('/agent/api/patient-ai-transcript-switch-get/' + agentId.value)
.then(response => {
console.log('enable ai ', response.data.ai_switch)
if (response.data.ai_switch == 1)
enableAi.value = true
else
enableAi.value = false
})
.catch(error => {
console.error('error enableAi ', error.response.data);
});
});
const recordVideo = async () => {
if (recordVid.value == true) {
await axios.post('/agent/api/patient-recording-switch/' + agentId.value + '/1',)
.catch(error => {
console.error('error recording ', error.response.data);
});
} else {
await axios.post('/agent/api/patient-recording-switch/' + agentId.value + '/0',)
.catch(error => {
console.error('error recording ', error.response.data);
});
}
}
const enableAiFun = async () => {
if (enableAi.value == true) {
await axios.post('/agent/api/patient-ai-transcript-switch/' + agentId.value + '/1',)
.catch(error => {
console.error('error recording ', error.response.data);
});
} else {
await axios.post('/agent/api/patient-ai-transcript-switch/' + agentId.value + '/0',)
.catch(error => {
console.error('error recording ', error.response.data);
});
}
}
const joinCall = async (patient_id, appiontment_id) => {
console.log('Join call');
localStorage.setItem('patient_id', patient_id);
isLoadingVisible.value = true;
const agent_id = localStorage.getItem('agent_id');
const access_token = localStorage.getItem('access_token');
// const patient_appiontment_id = localStorage.getItem('patient_appiontment_id');
console.log(access_token);
await axios.post('/agent/api/start-call/' + patient_id + '/' + agent_id + '/' + appiontment_id, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${access_token}`
}
})
.then(response => {
console.log("Start Call", response.data);
localStorage.setItem('agent_meeting_id', response.data.meeting_id);
localStorage.setItem('patient_appiontment_id', response.data.appointment_id);
console.log('Aegnt_meetingId', response.data.meeting_id);
router.push('/conference');
})
.catch(error => {
console.error(error.response.data);
isLoadingVisible.value = false;
});
}
</script>
<template>
<VDialog v-model="isLoadingVisible" width="110" height="150" color="primary">
<VCardText class="" style="color: white !important;">
<div class="demo-space-x">
<VProgressCircular :size="40" color="primary" indeterminate />
</div>
</VCardText>
</VDialog>
<VRow>
<VCol cols="12">
<v-switch v-model="enableAi" @change="enableAiFun" label="Enable AI?"
style="float:right;margin-right: 20px;"></v-switch>
<v-switch v-model="recordVid" @change="recordVideo" label="Record Video?"
style="float:right;margin-right: 20px;"></v-switch>
</VCol>
</VRow>
<VList density="compact">
<div class="px-4 border text-center" v-if="queueUsers.length === 0">
<span class="text-center">
<p class="mt-3 fs-0">No data available</p>
</span>
</div>
<div class="px-4" v-else v-for="(user, index) of queueUsers" :key="index">
<VListItem :value="user.id" border class="py-3" @click="joinCall(user.id, user.appointments.id)">
<template #prepend>
<VListItemAction start>
<!-- Your prepend content -->
</VListItemAction>
</template>
<VListItemTitle>{{ user.name }}</VListItemTitle>
<VListItemSubtitle class="py-1 user-item" style="">
<span v-if="user.address">{{ user.address }}, </span>
<span v-if="user.city">{{ user.city }}, </span>
<span v-if="user.state">{{ user.state }} &nbsp;</span>
<span v-if="user.zip_code">{{ user.zip_code }}, </span>
<span v-if="user.country">{{ user.country }}</span>
</VListItemSubtitle>
<VListItemSubtitle>{{ user.waitingTime }}</VListItemSubtitle>
</VListItem>
</div>
</VList>
</template>
<style>
@media (min-width: 320px) and (max-width: 768px) {
.user-item {
min-height: 60px;
}
}
</style>
<style scoped>
.green-button {
background-color: #16ba16e8;
color: white !important;
/* Optionally set text color */
}
.red-button {
background-color: #ff0000;
color: white !important;
/* Optionally set text color */
}
</style>

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More