752 lines
26 KiB
JavaScript
752 lines
26 KiB
JavaScript
// import { setupLayouts } from 'virtual:generated-layouts';
|
|
import { createRouter, createWebHistory } from "vue-router";
|
|
import { useStore } from "vuex";
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes: [
|
|
{
|
|
path: "/home",
|
|
component: () => import("../pages/home.vue"),
|
|
alias: "/",
|
|
},
|
|
{
|
|
path: "/",
|
|
component: () => import("../layouts/agentCallDefault.vue"),
|
|
children: [
|
|
{
|
|
path: "/provider/patient-profile",
|
|
component: () => import("../pages/PatientProfile.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/telehealth",
|
|
component: () => import("../pages/conference.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/question-categories",
|
|
component: () => import("../pages/question-categories.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/prescriptions",
|
|
component: () => import("../pages/PrescriptionPatient.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/lab-kit-order",
|
|
component: () =>
|
|
import("../pages/patient-lab-kit-order.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/provider/notes",
|
|
component: () => import("../pages/NotesPatient.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "provider/questionere/:categoryLink",
|
|
component: () => import("../pages/questionere.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
{
|
|
path: "/",
|
|
component: () => import("../layouts/default.vue"),
|
|
children: [
|
|
{
|
|
path: "overview",
|
|
component: () => import("../pages/overview.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "queue",
|
|
component: () => import("../pages/queue.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/questionere/:categoryLink",
|
|
component: () => import("../pages/questionere.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/dashboard",
|
|
component: () => import("../pages/provider/dashboard.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/meeting-history",
|
|
component: () =>
|
|
import("../pages/provider/meeting-history.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/detail-history/:patient_id/:id",
|
|
component: () =>
|
|
import("../pages/provider/detail-history.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "testfile",
|
|
component: () => import("../pages/testfile.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/appointments",
|
|
component: () => import("../pages/appointments.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/queue-users",
|
|
component: () => import("../pages/queue-users.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/join-meeting",
|
|
component: () => import("../pages/join-meeting.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/telehealth",
|
|
component: () => import("../pages/conference.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "book-slot",
|
|
component: () => import("../pages/book-slot.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/doctor-appiontments",
|
|
component: () => import("../pages/doctor-appiontment.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
|
|
// requiresRole:'agent'
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/appiontments-detail",
|
|
component: () =>
|
|
import("../pages/doctor-appiontment-detail.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
|
|
// requiresRole:'agent'
|
|
},
|
|
},
|
|
{
|
|
path: "/doctor-appiontments",
|
|
component: () => import("../pages/doctor-appiontment.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
|
|
// requiresRole:'agent'
|
|
},
|
|
},
|
|
{
|
|
path: "/doctor-appiontments",
|
|
component: () => import("../pages/doctor-appiontment.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
|
|
// requiresRole:'agent'
|
|
},
|
|
},
|
|
{
|
|
path: "/schedules",
|
|
component: () => import("../pages/patient/schedules.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "patient",
|
|
},
|
|
},
|
|
{
|
|
path: "/complete",
|
|
component: () =>
|
|
import("../pages/patient/complete-appiontments.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "patient",
|
|
},
|
|
},
|
|
{
|
|
path: "/patient/complete-appintment-detail/:appiontment_id",
|
|
component: () =>
|
|
import(
|
|
"../pages/patient/complete-appintment-detail.vue"
|
|
),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/prescriptions",
|
|
component: () =>
|
|
import("../pages/patient/prescriptions-history.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
|
|
// requiresRole:'agent'
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/patient/prescription-history/:appiontment_id",
|
|
component: () =>
|
|
import("../pages/patient/prescription-detail.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/profile",
|
|
component: () =>
|
|
import("../pages/patient/AccountSettingsAccount.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/change-password",
|
|
component: () =>
|
|
import("../pages/patient/AccountSettingsSecurity.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/order-detail/:id",
|
|
name: "order-detail",
|
|
component: () =>
|
|
import("../pages/patient/main-orders-detail-tabs.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
activeParent: "patient-order-list",
|
|
},
|
|
},
|
|
{
|
|
path: "/subscriptions",
|
|
component: () =>
|
|
import("../pages/patient/subscription.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "/subscriptions-detail/:id",
|
|
component: () =>
|
|
import("../pages/patient/subscriptionDetail.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/provider/patient-labkit-detail",
|
|
component: () =>
|
|
import("../pages/patient-labkit-detail.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/order-detail/:id",
|
|
name: "provider-order-detail",
|
|
component: () =>
|
|
import("../pages/provider/main-orders-detail-tabs.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "/provider/orders-list-new",
|
|
name: "provider-orders-list-new",
|
|
component: () =>
|
|
import("../pages/provider/orders-list-new.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/orders-list",
|
|
name: "provider-order-list",
|
|
component: () =>
|
|
import("../pages/provider/orders-list-new.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/patient-profile-detail/:id",
|
|
name: "provider-patient-profile-detail",
|
|
component: () =>
|
|
import(
|
|
"../pages/provider/patient-profile/patient-profile.vue"
|
|
),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
layout: "default",
|
|
},
|
|
},
|
|
{
|
|
path: "/provider/chat",
|
|
name: "provider-chat",
|
|
component: () => import("../pages/provider/chat.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "agent",
|
|
},
|
|
},
|
|
{
|
|
path: "profile",
|
|
component: () => import("../pages/profile.vue"),
|
|
},
|
|
{
|
|
path: "update",
|
|
component: () =>
|
|
import("../pages/update-medical-profile.vue"),
|
|
},
|
|
{
|
|
path: "category",
|
|
component: () => import("../pages/category.vue"),
|
|
},
|
|
{
|
|
path: "preceptions",
|
|
component: () => import("../pages/preceptions.vue"),
|
|
},
|
|
{
|
|
path: "category-group",
|
|
component: () => import("../pages/category-group.vue"),
|
|
},
|
|
{
|
|
path: "/category-question/:categoryLink",
|
|
component: () => import("../pages/category-questions.vue"),
|
|
props: true,
|
|
},
|
|
|
|
{
|
|
path: "treatment-plan",
|
|
component: () => import("../pages/treatment-plan.vue"),
|
|
},
|
|
|
|
{
|
|
path: "complete-patient-details",
|
|
component: () =>
|
|
import("../pages/complete-patient-details.vue"),
|
|
},
|
|
{
|
|
path: "membership",
|
|
component: () => import("../pages/membership.vue"),
|
|
},
|
|
{
|
|
path: "labs",
|
|
component: () => import("../pages/labs.vue"),
|
|
},
|
|
{
|
|
path: "orders-list",
|
|
name: "patient-order-list",
|
|
component: () => import("../pages/patient/orders-list.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
},
|
|
},
|
|
{
|
|
path: "orders-detail1/:id",
|
|
name: "order-detail1",
|
|
component: () =>
|
|
import("../pages/patient/orders-detail.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
activeParent: "patient-order-list",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "lab-kits",
|
|
component: () => import("../pages/lab-kits.vue"),
|
|
},
|
|
{
|
|
path: "account-settings",
|
|
component: () => import("../pages/account-settings.vue"),
|
|
},
|
|
{
|
|
path: "contactus",
|
|
component: () => import("../pages/contactus.vue"),
|
|
},
|
|
{
|
|
path: "typography",
|
|
component: () => import("../pages/typography.vue"),
|
|
},
|
|
{
|
|
path: "icons",
|
|
component: () => import("../pages/icons.vue"),
|
|
},
|
|
{
|
|
path: "cards",
|
|
component: () => import("../pages/cards.vue"),
|
|
},
|
|
|
|
{
|
|
path: "tables",
|
|
component: () => import("../pages/tables.vue"),
|
|
},
|
|
{
|
|
path: "form-layouts",
|
|
component: () => import("../pages/form-layouts.vue"),
|
|
},
|
|
],
|
|
},
|
|
|
|
{
|
|
path: "/",
|
|
component: () => import("../layouts/blank.vue"),
|
|
children: [
|
|
{
|
|
path: "login",
|
|
component: () => import("../pages/login.vue"),
|
|
},
|
|
{
|
|
path: "/forgot",
|
|
component: () => import("../pages/forgot.vue"),
|
|
},
|
|
// {
|
|
// path: '/reset-password?token=:token',
|
|
// component: () => import("../pages/reset.vue"),
|
|
// },
|
|
{
|
|
path: "/password-reset",
|
|
name: "ResetPassword",
|
|
component: () => import("../pages/reset.vue"),
|
|
props: (route) => ({ token: route.query.token }),
|
|
},
|
|
{
|
|
path: "/home",
|
|
component: () => import("../pages/home.vue"),
|
|
alias: "/",
|
|
},
|
|
{
|
|
path: "/terms-and-conditions",
|
|
component: () => import("../pages/terms-conditions.vue"),
|
|
},
|
|
{
|
|
path: "/privacy-policy",
|
|
component: () => import("../pages/privacy-policy.vue"),
|
|
},
|
|
{
|
|
path: "/refund-policy",
|
|
component: () => import("../pages/refund-policy.vue"),
|
|
},
|
|
{
|
|
path: "provider/login",
|
|
component: () => import("../pages/agent-login.vue"),
|
|
},
|
|
{
|
|
path: "provider/register",
|
|
component: () => import("../pages/agent-register.vue"),
|
|
},
|
|
{
|
|
path: "provider/thank-you",
|
|
component: () =>
|
|
import("../pages/success-provider-register.vue"),
|
|
},
|
|
|
|
{
|
|
path: "not-authorized",
|
|
component: () => import("../pages/not-authorized.vue"),
|
|
},
|
|
|
|
{
|
|
path: "pre-register",
|
|
component: () => import("../pages/pre-register.vue"),
|
|
},
|
|
|
|
{
|
|
path: "register",
|
|
component: () => import("../pages/register.vue"),
|
|
},
|
|
{
|
|
path: "go/checkout",
|
|
component: () => import("../pages/go-checkout.vue"),
|
|
query: {
|
|
cart: "cart",
|
|
},
|
|
},
|
|
{
|
|
path: "checkout",
|
|
component: () => import("../pages/checkout.vue"),
|
|
},
|
|
{
|
|
path: "form-checkout",
|
|
component: () => import("../pages/form-checkout.vue"),
|
|
},
|
|
{
|
|
path: "form-checkout-2",
|
|
component: () => import("../pages/form-checkout-2.vue"),
|
|
},
|
|
{
|
|
path: "plans",
|
|
component: () => import("../pages/plans.vue"),
|
|
query: {
|
|
slug: "slug",
|
|
id: "id",
|
|
},
|
|
},
|
|
|
|
{
|
|
path: "book-appointment",
|
|
component: () => import("../pages/book-appointment.vue"),
|
|
},
|
|
{
|
|
path: "invoice",
|
|
component: () => import("../pages/invoice.vue"),
|
|
},
|
|
{
|
|
path: "review-appointment",
|
|
component: () => import("../pages/review-appointment.vue"),
|
|
},
|
|
{
|
|
path: "additional-information",
|
|
component: () =>
|
|
import("../pages/additional-information.vue"),
|
|
},
|
|
{
|
|
path: "shipping-information",
|
|
component: () =>
|
|
import("../pages/shipping-information.vue"),
|
|
},
|
|
{
|
|
path: "process-payment",
|
|
component: () => import("../pages/process-payment.vue"),
|
|
},
|
|
{
|
|
path: "register-assessment",
|
|
component: () =>
|
|
import(
|
|
"../pages/register-assessment/register-assessment.vue"
|
|
),
|
|
},
|
|
|
|
{
|
|
path: "trt",
|
|
component: () => import("../pages/trt/get-started-trt.vue"),
|
|
},
|
|
{
|
|
path: "our-story",
|
|
component: () => import("../pages/nav/OurStory.vue"),
|
|
},
|
|
{
|
|
path: "our-providers",
|
|
component: () => import("../pages/nav/OurProviders.vue"),
|
|
},
|
|
{
|
|
path: "our-protocols",
|
|
component: () => import("../pages/nav/OurProtocols.vue"),
|
|
},
|
|
{
|
|
path: "health-guid",
|
|
component: () => import("../pages/nav/HealthGuid.vue"),
|
|
},
|
|
|
|
// {
|
|
// path: 'queue',
|
|
// component: () =>
|
|
// import ('../pages/queue.vue'),
|
|
// meta: {
|
|
// requiresAuth: true,
|
|
// requiresRole: 'patient',
|
|
// },
|
|
|
|
// },
|
|
{
|
|
path: "thankyou",
|
|
component: () => import("../pages/thankyou.vue"),
|
|
},
|
|
{
|
|
path: "meeting",
|
|
component: () => import("../pages/meeting.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "patient",
|
|
},
|
|
},
|
|
{
|
|
path: "telehealth",
|
|
component: () => import("../pages/call.vue"),
|
|
meta: {
|
|
requiresAuth: true,
|
|
requiresRole: "patient",
|
|
},
|
|
},
|
|
{
|
|
path: "/:pathMatch(.*)*",
|
|
component: () => import("../pages/[...all].vue"),
|
|
},
|
|
],
|
|
},
|
|
|
|
// ...setupLayouts(routes),
|
|
],
|
|
});
|
|
|
|
const auth = {
|
|
isAuthenticated() {
|
|
return localStorage.getItem("access_token") !== null;
|
|
},
|
|
getUserRole() {
|
|
return localStorage.getItem("user_role");
|
|
},
|
|
isLogin() {
|
|
return localStorage.getItem("isLogin");
|
|
},
|
|
profileStatus() {
|
|
return localStorage.getItem("profileCompleted");
|
|
},
|
|
currentPage() {
|
|
const currentPageValue = localStorage.getItem("currentPage");
|
|
console.log("currentPageValue", currentPageValue);
|
|
return currentPageValue;
|
|
},
|
|
};
|
|
|
|
router.beforeEach((to, from, next) => {
|
|
const loginCheck = auth.isLogin();
|
|
const userRole = auth.getUserRole();
|
|
const profileStatusCheck = auth.profileStatus();
|
|
const currentPageCheck = auth.currentPage();
|
|
|
|
// If the route requires authentication or the user is authenticated
|
|
if (
|
|
to.matched.some(
|
|
(record) => record.meta.requiresAuth || auth.isAuthenticated()
|
|
)
|
|
) {
|
|
if (!auth.isAuthenticated()) {
|
|
console.log("for login", to.path);
|
|
// If the user is not authenticated, redirect to the login page
|
|
next("/login");
|
|
} else {
|
|
if (to.meta.requiresRole && userRole !== to.meta.requiresRole) {
|
|
// If the route requires a specific role and the user doesn't have it, redirect to the not-authorized page
|
|
next("/not-authorized");
|
|
} else if (to.path === "/login" && userRole === "patient") {
|
|
console.log("q");
|
|
// If the user is a patient and tries to access the login page, redirect to the queue page
|
|
next("/queue");
|
|
} else if (
|
|
userRole === "patient" &&
|
|
profileStatusCheck === "0" &&
|
|
to.path !== "/complete-patient-details" &&
|
|
to.path !== "/register-assessment"
|
|
) {
|
|
// If the user is a patient with incomplete profile and tries to access a page other than complete-patient-details, redirect to it
|
|
next("/complete-patient-details");
|
|
}
|
|
// else if(userRole === 'patient'
|
|
// && currentPageCheck === 'process-payment'
|
|
// && to.path === '/thankyou'){
|
|
|
|
// console.log('/'+currentPageCheck,to.path)
|
|
// next()
|
|
|
|
// }
|
|
else if (
|
|
userRole === "patient" &&
|
|
currentPageCheck &&
|
|
currentPageCheck !== "plans" &&
|
|
currentPageCheck !== "register" &&
|
|
currentPageCheck !== "pre-register" &&
|
|
currentPageCheck !== "thankyou" &&
|
|
// && to.path !== '/plans'
|
|
// && to.path !== '/register'
|
|
to.path !== "/book-appointment" &&
|
|
to.path !== "/review-appointment" &&
|
|
to.path !== "/shipping-information" &&
|
|
to.path !== "/checkout" &&
|
|
to.path !== "/additional-information" &&
|
|
to.path !== "/process-payment" &&
|
|
to.path !== "/thankyou"
|
|
) {
|
|
console.log("here >><<" + currentPageCheck, to.path);
|
|
const store = useStore();
|
|
store.dispatch("updateShowStartOverPupup", true);
|
|
next(currentPageCheck);
|
|
} else {
|
|
next();
|
|
}
|
|
}
|
|
} else {
|
|
// If the route doesn't require authentication, proceed with the navigation
|
|
next();
|
|
}
|
|
});
|
|
|
|
export default router;
|