595 lines
16 KiB
JavaScript
595 lines
16 KiB
JavaScript
import Vue from "vue";
|
|
import Router from "vue-router";
|
|
|
|
Vue.use(Router);
|
|
/* Xeslint-disable */
|
|
|
|
// scrollBehavior:
|
|
// - only available in html5 history mode
|
|
// - defaults to no scroll behavior
|
|
// - return false to prevent scroll
|
|
const scrollBehavior = function(to, from, savedPosition) {
|
|
if (savedPosition) {
|
|
// savedPosition is only available for popstate navigations.
|
|
return savedPosition;
|
|
} else {
|
|
const position = {};
|
|
|
|
// scroll to anchor by returning the selector
|
|
if (to.hash) {
|
|
position.selector = to.hash;
|
|
|
|
// specify offset of the element
|
|
if (to.hash === "#anchor2") {
|
|
position.offset = { y: 100 };
|
|
}
|
|
|
|
if (document.querySelector(to.hash)) {
|
|
return position;
|
|
}
|
|
|
|
// if the returned position is falsy or an empty object,
|
|
// will retain current scroll position.
|
|
|
|
return false;
|
|
}
|
|
|
|
// eslint-disable-next-line
|
|
return new Promise((resolve) => {
|
|
// check if any matched route config has meta that requires scrolling to top
|
|
// eslint-disable-next-line
|
|
if (to.matched.some((m) => m.meta.scrollToTop)) {
|
|
// coords will be used if no selector is provided,
|
|
// or if the selector didn't match any element.
|
|
position.x = 0;
|
|
position.y = 0;
|
|
}
|
|
|
|
// wait for the out transition to complete (if necessary)
|
|
this.app.$root.$once("triggerScroll", () => {
|
|
// if the resolved position is falsy or an empty object,
|
|
// will retain current scroll position.
|
|
|
|
resolve(position);
|
|
});
|
|
});
|
|
}
|
|
};
|
|
/**
|
|
* https://router.vuejs.org/guide/advanced/lazy-loading.html#grouping-components-in-the-same-chunk
|
|
*
|
|
*
|
|
*/
|
|
export default new Router({
|
|
mode: "history",
|
|
base: process.env.BASE_URL,
|
|
scrollBehavior,
|
|
routes: [
|
|
{
|
|
path: "/login",
|
|
name: "login",
|
|
meta: { scrollToTop: true }, //KEEP THIS AS AN EXAMPLE OF HOW TO USE WITH CODE ABOVE
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/login.vue")
|
|
},
|
|
{
|
|
path: "/home-dashboard",
|
|
name: "home-dashboard",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-dashboard.vue")
|
|
},
|
|
{
|
|
path: "/home-search/:ayatype?",
|
|
name: "home-search",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-search.vue")
|
|
},
|
|
{ path: "/", redirect: "/login" }, //If someone goes blindly to the root of the app, then it should go to login
|
|
{
|
|
path: "/home-schedule",
|
|
name: "home-schedule",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-schedule.vue")
|
|
},
|
|
{
|
|
path: "/home-memos",
|
|
name: "home-memos",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-memos.vue")
|
|
},
|
|
{
|
|
path: "/home-notifications",
|
|
name: "home-notifications",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/home-notifications.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/home-notify-direct/:userIdList?",
|
|
name: "home-notify-direct",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/home-notify-direct.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/home-reminders",
|
|
name: "home-reminders",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-reminders.vue")
|
|
},
|
|
{
|
|
path: "/home-user-settings",
|
|
name: "home-user-settings",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/home-user-settings.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/home-reset",
|
|
name: "home-reset",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-reset.vue")
|
|
},
|
|
{
|
|
path: "/home-password",
|
|
name: "home-password",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/home-password.vue")
|
|
},
|
|
{
|
|
path: "/home-notify-subscriptions",
|
|
name: "home-notify-subscriptions",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/home-notify-subscriptions.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/home-notify-subscriptions/:recordid",
|
|
name: "home-notify-subscription",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/home-notify-subscription.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/cust-customers",
|
|
name: "cust-customers",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-customers.vue")
|
|
},
|
|
{
|
|
path: "/cust-customers/:recordid",
|
|
name: "customer-edit",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-customer.vue")
|
|
},
|
|
{
|
|
path: "/cust-customer-notes/:customerid",
|
|
name: "customer-notes",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-customer-notes.vue")
|
|
},
|
|
{
|
|
path: "/cust-customer-note/:recordid",
|
|
name: "customer-note-edit",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-customer-note.vue")
|
|
},
|
|
{
|
|
path: "/cust-headoffices",
|
|
name: "cust-headoffices",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-headoffices.vue")
|
|
},
|
|
{
|
|
path: "/cust-users",
|
|
name: "cust-users",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-users.vue")
|
|
},
|
|
{
|
|
path: "/cust-users/:recordid",
|
|
name: "cust-user",
|
|
component: () =>
|
|
import(/* webpackChunkName: "cust" */ "./views/cust-user.vue")
|
|
},
|
|
{
|
|
path: "/svc-schedule",
|
|
name: "svc-schedule",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-schedule.vue")
|
|
},
|
|
{
|
|
path: "/svc-workorders",
|
|
name: "svc-workorders",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-workorders.vue")
|
|
},
|
|
{
|
|
path: "/svc-workorder-templates",
|
|
name: "svc-workorder-templates",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "svc" */ "./views/svc-workorder-templates.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/svc-quotes",
|
|
name: "svc-quotes",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-quotes.vue")
|
|
},
|
|
{
|
|
path: "/svc-quote-templates",
|
|
name: "svc-quote-templates",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-quote-templates.vue")
|
|
},
|
|
{
|
|
path: "/svc-pm-list",
|
|
name: "svc-pm-list",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-pm-list.vue")
|
|
},
|
|
{
|
|
path: "/svc-pm-templates",
|
|
name: "svc-pm-templates",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-pm-templates.vue")
|
|
},
|
|
{
|
|
path: "/svc-units",
|
|
name: "svc-units",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-units.vue")
|
|
},
|
|
{
|
|
path: "/svc-unit-models",
|
|
name: "svc-unit-models",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-unit-models.vue")
|
|
},
|
|
{
|
|
path: "/svc-loaners",
|
|
name: "svc-loaners",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-loaners.vue")
|
|
},
|
|
{
|
|
path: "/svc-contracts",
|
|
name: "svc-contracts",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-contracts.vue")
|
|
},
|
|
{
|
|
path: "/svc-csr-list",
|
|
name: "svc-csr-list",
|
|
component: () =>
|
|
import(/* webpackChunkName: "svc" */ "./views/svc-csr-list.vue")
|
|
},
|
|
{
|
|
path: "/inv-parts",
|
|
name: "inv-parts",
|
|
component: () =>
|
|
import(/* webpackChunkName: "inv" */ "./views/inv-parts.vue")
|
|
},
|
|
|
|
{
|
|
path: "/inv-part-inventory",
|
|
name: "inv-part-inventory",
|
|
component: () =>
|
|
import(/* webpackChunkName: "inv" */ "./views/inv-part-inventory.vue")
|
|
},
|
|
|
|
{
|
|
path: "/inv-part-requests",
|
|
name: "inv-part-requests",
|
|
component: () =>
|
|
import(/* webpackChunkName: "inv" */ "./views/inv-part-requests.vue")
|
|
},
|
|
|
|
{
|
|
path: "/inv-purchase-orders",
|
|
name: "inv-purchase-orders",
|
|
component: () =>
|
|
import(/* webpackChunkName: "inv" */ "./views/inv-purchase-orders.vue")
|
|
},
|
|
|
|
{
|
|
path: "/inv-purchase-order-receipts",
|
|
name: "inv-purchase-order-receipts",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "inv" */ "./views/inv-purchase-order-receipts.vue"
|
|
)
|
|
},
|
|
|
|
{
|
|
path: "/inv-adjustments",
|
|
name: "inv-adjustments",
|
|
component: () =>
|
|
import(/* webpackChunkName: "inv" */ "./views/inv-adjustments.vue")
|
|
},
|
|
{
|
|
path: "/vendors",
|
|
name: "vendors",
|
|
component: () =>
|
|
import(/* webpackChunkName: "vendors" */ "./views/vendors.vue")
|
|
},
|
|
|
|
{
|
|
path: "/acc-accounting",
|
|
name: "acc-accounting",
|
|
component: () =>
|
|
import(/* webpackChunkName: "acc" */ "./views/acc-accounting.vue")
|
|
},
|
|
|
|
{
|
|
path: "/adm-global-settings",
|
|
name: "adm-global-settings",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-global-settings.vue")
|
|
},
|
|
{
|
|
path: "/adm-global-select-templates",
|
|
name: "adm-global-select-templates",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "adm" */ "./views/adm-global-select-templates.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/adm-global-logo",
|
|
name: "adm-global-logo",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-global-logo.vue")
|
|
},
|
|
{
|
|
path: "/adm-license",
|
|
name: "adm-license",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-license.vue")
|
|
},
|
|
{
|
|
path: "/adm-users",
|
|
name: "adm-users",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-users.vue")
|
|
},
|
|
{
|
|
path: "/adm-users/:recordid",
|
|
name: "adm-user",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-user.vue")
|
|
},
|
|
{
|
|
path: "/adm-translations",
|
|
name: "adm-translations",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-translations.vue")
|
|
},
|
|
{
|
|
path: "/adm-translations/:recordid",
|
|
name: "adm-translation",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-translation.vue")
|
|
},
|
|
|
|
{
|
|
path: "/adm-report-templates",
|
|
name: "adm-report-templates",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-report-templates.vue")
|
|
},
|
|
{
|
|
path: "/report-edit/:recordid", //Route to edit a report template
|
|
name: "ay-report-edit",
|
|
component: () =>
|
|
import(
|
|
//it gets it's own chunk name because it's huge and rarely used
|
|
/* webpackChunkName: "ay-report-edit" */ "./views/ay-report-edit.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/adm-attachments",
|
|
name: "adm-attachments",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-attachments.vue")
|
|
},
|
|
|
|
{
|
|
path: "/adm-history",
|
|
name: "adm-history",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-history.vue")
|
|
},
|
|
|
|
{
|
|
path: "/adm-import",
|
|
name: "adm-import",
|
|
component: () =>
|
|
import(/* webpackChunkName: "adm" */ "./views/adm-import.vue")
|
|
},
|
|
|
|
{
|
|
path: "/ops-backup",
|
|
name: "ops-backup",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-backup.vue")
|
|
},
|
|
|
|
{
|
|
path: "/ops-server-state",
|
|
name: "ops-server-state",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-server-state.vue")
|
|
},
|
|
|
|
{
|
|
path: "/ops-jobs",
|
|
name: "ops-jobs",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-jobs.vue")
|
|
},
|
|
|
|
{
|
|
path: "/ops-log",
|
|
name: "ops-log",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-log.vue")
|
|
},
|
|
{
|
|
path: "/ops-view-configuration",
|
|
name: "ops-view-configuration",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ops" */ "./views/ops-view-configuration.vue"
|
|
)
|
|
},
|
|
|
|
{
|
|
path: "/ops-metrics",
|
|
name: "ops-metrics",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-metrics.vue")
|
|
},
|
|
{
|
|
path: "/ops-profile",
|
|
name: "ops-profile",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-profile.vue")
|
|
},
|
|
{
|
|
path: "/ops-notify-queue",
|
|
name: "ops-notify-queue",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ops" */ "./views/ops-notify-queue.vue")
|
|
},
|
|
{
|
|
path: "/ops-notification-settings",
|
|
name: "ops-notification-settings",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ops" */ "./views/ops-notification-settings.vue"
|
|
)
|
|
},
|
|
|
|
//**********************************CUSTOMER PAGES */
|
|
{
|
|
path: "/customer-workorders",
|
|
name: "customer-workorders",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "customer" */ "./views/customer-workorders.vue"
|
|
)
|
|
},
|
|
{
|
|
path: "/customer-csr-list",
|
|
name: "customer-csr-list",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "customer" */ "./views/customer-csr-list.vue"
|
|
)
|
|
},
|
|
|
|
//**********************************GENERAL */
|
|
{
|
|
path: "/open/:ayatype/:recordid",
|
|
name: "ay-open",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-open.vue")
|
|
},
|
|
{
|
|
path: "/about",
|
|
name: "ay-about",
|
|
// route level code-splitting
|
|
// this generates a separate chunk (about.[hash].js) for this route
|
|
// which is lazy-loaded when the route is visited.
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-about.vue")
|
|
},
|
|
{
|
|
path: "/applog",
|
|
name: "ay-log",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-log.vue")
|
|
},
|
|
{
|
|
path: "/customize/:formCustomTemplateKey",
|
|
name: "ay-customize",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-customize.vue")
|
|
},
|
|
{
|
|
path: "/data-list-view/:dataListKey/:formKey/:listViewId",
|
|
name: "ay-data-list-view",
|
|
component: () =>
|
|
import(
|
|
/* webpackChunkName: "ay-common" */ "./views/ay-data-list-view.vue"
|
|
)
|
|
},
|
|
|
|
{
|
|
path: "/review/:ayatype/:recordid",
|
|
name: "ay-review",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-review.vue")
|
|
},
|
|
{
|
|
path: "/history/:ayatype/:recordid/:userlog?",
|
|
name: "ay-history",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/ay-history.vue")
|
|
},
|
|
//SPECIAL ROUTES
|
|
{
|
|
//REPORT VIEW FROM URL
|
|
path: "/viewreport",
|
|
beforeEnter: (to, from, next) => {
|
|
(async function() {
|
|
//open report links have a query string /viewreport?oid=[objectid]&rid=[reportid]
|
|
let objectId = parseInt(to.query.oid);
|
|
let reportId = parseInt(to.query.rid);
|
|
await window.$gz.api.renderReport(objectId, reportId, true);
|
|
})();
|
|
|
|
next(false);
|
|
}
|
|
},
|
|
|
|
//TEST TEST TEST TEST TEST
|
|
{
|
|
//NEW TEST GZ DATA TABLE
|
|
path: "/widgets",
|
|
name: "widget-list",
|
|
component: () =>
|
|
import(/* webpackChunkName: "widget" */ "./views/widgets.vue")
|
|
},
|
|
|
|
{
|
|
//TEST WIDGET EDIT FORM
|
|
path: "/widgets/:recordid",
|
|
name: "widget-edit",
|
|
component: () =>
|
|
import(/* webpackChunkName: "widget" */ "./views/widget.vue")
|
|
},
|
|
{
|
|
path: "/ay-evaluate",
|
|
name: "ay-evaluate",
|
|
component: () =>
|
|
import(/* webpackChunkName: "evaluate" */ "./views/ay-evaluate.vue")
|
|
},
|
|
{
|
|
//404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404 404
|
|
path: "*",
|
|
name: "notfound",
|
|
component: () =>
|
|
import(/* webpackChunkName: "ay-common" */ "./views/notfound.vue")
|
|
}
|
|
]
|
|
});
|