2022-11-24 06:21:45 +00:00
|
|
|
import axios from 'axios';
|
2022-11-29 13:45:48 +00:00
|
|
|
import { ref } from 'vue';
|
2022-11-24 06:21:45 +00:00
|
|
|
import { defineStore } from 'pinia';
|
2022-11-29 13:45:48 +00:00
|
|
|
import { toLowerCamel } from 'src/filters';
|
|
|
|
import { useRole } from 'src/composables/useRole';
|
|
|
|
import routes from 'src/router/modules';
|
2022-11-24 06:21:45 +00:00
|
|
|
|
2022-11-29 06:10:04 +00:00
|
|
|
export const useNavigationStore = defineStore('navigationStore', () => {
|
2022-11-24 06:21:45 +00:00
|
|
|
const modules = ['customer', 'claim', 'ticket'];
|
2022-11-29 13:45:48 +00:00
|
|
|
const pinnedModules = ref([]);
|
|
|
|
const role = useRole();
|
2022-11-24 06:21:45 +00:00
|
|
|
|
2022-11-29 13:45:48 +00:00
|
|
|
function getModules() {
|
|
|
|
const modulesRoutes = ref([]);
|
2022-12-02 08:54:49 +00:00
|
|
|
console.log('routes', routes);
|
2022-11-29 13:45:48 +00:00
|
|
|
for (const module of modules) {
|
|
|
|
const moduleDef = routes.find((route) => toLowerCamel(route.name) === module);
|
|
|
|
const item = addMenuItem(module, moduleDef, modulesRoutes.value);
|
|
|
|
if (!item) continue;
|
|
|
|
|
|
|
|
item.module = module;
|
|
|
|
item.isPinned = false;
|
|
|
|
|
|
|
|
if (pinnedModules.value.includes(module)) {
|
|
|
|
item.isPinned = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return modulesRoutes;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getPinnedModules() {
|
|
|
|
const modules = getModules();
|
|
|
|
|
2022-12-02 08:54:49 +00:00
|
|
|
return modules && modules.value.filter((item) => item.isPinned);
|
2022-11-29 13:45:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function addMenuItem(module, route, parent) {
|
|
|
|
const { meta } = route;
|
|
|
|
|
|
|
|
if (meta && meta.roles && role.hasAny(meta.roles) === false) return;
|
|
|
|
|
|
|
|
const item = {
|
|
|
|
name: route.name,
|
|
|
|
};
|
|
|
|
|
|
|
|
if (meta) {
|
|
|
|
item.title = `${module}.pageTitles.${meta.title}`;
|
|
|
|
item.icon = meta.icon;
|
|
|
|
}
|
|
|
|
|
|
|
|
parent.push(item);
|
|
|
|
|
|
|
|
return item;
|
|
|
|
}
|
2022-11-29 06:10:04 +00:00
|
|
|
|
2022-11-24 06:21:45 +00:00
|
|
|
async function fetchPinned() {
|
2022-11-29 13:45:48 +00:00
|
|
|
if (pinnedModules.value.length) return;
|
2022-11-24 06:21:45 +00:00
|
|
|
|
2022-11-29 13:45:48 +00:00
|
|
|
const response = await axios.get('StarredModules/getStarredModules');
|
|
|
|
pinnedModules.value = response.data.map((row) => row.moduleFk);
|
2022-11-24 06:21:45 +00:00
|
|
|
}
|
|
|
|
|
2022-11-29 06:10:04 +00:00
|
|
|
function togglePinned(module) {
|
2022-11-29 13:45:48 +00:00
|
|
|
if (pinnedModules.value.includes(module)) {
|
|
|
|
const index = pinnedModules.value.indexOf(module);
|
|
|
|
pinnedModules.value.splice(index, 1);
|
2022-11-29 06:10:04 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-11-29 13:45:48 +00:00
|
|
|
pinnedModules.value.push(module);
|
2022-11-29 06:10:04 +00:00
|
|
|
}
|
|
|
|
|
2022-11-24 06:21:45 +00:00
|
|
|
return {
|
|
|
|
modules,
|
2022-11-29 13:45:48 +00:00
|
|
|
pinnedModules,
|
|
|
|
getModules,
|
|
|
|
getPinnedModules,
|
|
|
|
fetchPinned,
|
2022-11-29 06:10:04 +00:00
|
|
|
togglePinned,
|
2022-11-29 13:45:48 +00:00
|
|
|
addMenuItem,
|
2022-11-24 06:21:45 +00:00
|
|
|
};
|
|
|
|
});
|