feat: refs #8322 added RouteRoadmap and Agency

This commit is contained in:
PAU ROVIRA ROSALENY 2025-01-23 10:56:37 +01:00
parent c8bbb7c08b
commit f01ed28d95
10 changed files with 232 additions and 185 deletions

View File

@ -2,11 +2,12 @@
import { computed } from 'vue'; import { computed } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
import VnTable from 'components/VnTable/VnTable.vue'; import VnTable from 'components/VnTable/VnTable.vue';
import VnSection from 'src/components/common/VnSection.vue';
const { t } = useI18n(); const { t } = useI18n();
const router = useRouter(); const router = useRouter();
const dataKey = 'AgencyList';
function navigate(id) { function navigate(id) {
router.push({ path: `/agency/${id}` }); router.push({ path: `/agency/${id}` });
} }
@ -67,26 +68,32 @@ const columns = computed(() => [
]); ]);
</script> </script>
<template> <template>
<VnSearchbar <VnSection
:info="t('You can search by name')" :data-key="dataKey"
:label="t('Search agency')" :columns="columns"
data-key="AgencyList" prefix="agency"
:expr-builder="exprBuilder" :right-filter="false"
/> :array-data-props="{
<div class="list-container"> url: 'Agencies',
<div class="list"> order: 'name',
<VnTable exprBuilder,
data-key="AgencyList" }"
url="Agencies" >
order="name" <template #body>
:columns="columns" <div class="list-container">
:right-search="false" <div class="list">
:use-model="true" <VnTable
redirect="agency" :data-key="dataKey"
default-mode="card" :columns="columns"
/> :right-search="false"
:use-model="true"
redirect="agency"
default-mode="card"
/>
</div>
</div> </div>
</div> </template>
</VnSection>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.list { .list {
@ -104,8 +111,6 @@ const columns = computed(() => [
es: es:
isOwn: Tiene propietario isOwn: Tiene propietario
isAnyVolumeAllowed: Permite cualquier volumen isAnyVolumeAllowed: Permite cualquier volumen
Search agency: Buscar agencia
You can search by name: Puedes buscar por nombre
en: en:
isOwn: Has owner isOwn: Has owner
isAnyVolumeAllowed: Allows any volume isAnyVolumeAllowed: Allows any volume

View File

@ -1,17 +1,7 @@
<script setup> <script setup>
import AgencyDescriptor from 'pages/Route/Agency/Card/AgencyDescriptor.vue'; import AgencyDescriptor from 'pages/Route/Agency/Card/AgencyDescriptor.vue';
import VnCard from 'components/common/VnCard.vue'; import VnCardBeta from 'src/components/common/VnCardBeta.vue';
</script> </script>
<template> <template>
<VnCard <VnCardBeta data-key="Agency" base-url="Agencies" :descriptor="AgencyDescriptor" />
data-key="Agency"
base-url="Agencies"
:descriptor="AgencyDescriptor"
search-data-key="AgencyList"
:searchbar-props="{
url: 'Agencies',
label: 'agency.searchBar.label',
info: 'agency.searchBar.info',
}"
/>
</template> </template>

View File

@ -1,4 +1,6 @@
agency: agency:
search: Search agency
searchInfo: You can search by name
isOwn: Own isOwn: Own
isAnyVolumeAllowed: Any volume allowed isAnyVolumeAllowed: Any volume allowed
notification: notification:

View File

@ -1,4 +1,6 @@
agency: agency:
search: Buscar agencia
searchInfo: Puedes buscar por nombre
isOwn: Propio isOwn: Propio
isAnyVolumeAllowed: Cualquier volumen isAnyVolumeAllowed: Cualquier volumen
removeItem: Agencia eliminada correctamente removeItem: Agencia eliminada correctamente

View File

@ -1,19 +1,7 @@
<script setup> <script setup>
import VnCard from 'components/common/VnCard.vue'; import VnCardBeta from 'components/common/VnCardBeta.vue';
import RoadmapDescriptor from 'pages/Route/Roadmap/RoadmapDescriptor.vue'; import RoadmapDescriptor from 'pages/Route/Roadmap/RoadmapDescriptor.vue';
import RoadmapFilter from 'pages/Route/Roadmap/RoadmapFilter.vue';
</script> </script>
<template> <template>
<VnCard <VnCardBeta data-key="Roadmap" base-url="Roadmaps" :descriptor="RoadmapDescriptor" />
data-key="Roadmap"
base-url="Roadmaps"
:descriptor="RoadmapDescriptor"
:filter-panel="RoadmapFilter"
search-data-key="RoadmapList"
:searchbar-props="{
url: 'Roadmaps',
label: 'Search roadmap',
info: 'You can search by roadmap id or customer name',
}"
/>
</template> </template>

View File

@ -15,11 +15,13 @@ import RoadmapSummary from 'pages/Route/Roadmap/RoadmapSummary.vue';
import VnConfirm from 'components/ui/VnConfirm.vue'; import VnConfirm from 'components/ui/VnConfirm.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import VnInputTime from 'src/components/common/VnInputTime.vue'; import VnInputTime from 'src/components/common/VnInputTime.vue';
import VnSection from 'src/components/common/VnSection.vue';
const { viewSummary } = useSummaryDialog(); const { viewSummary } = useSummaryDialog();
const { t } = useI18n(); const { t } = useI18n();
const quasar = useQuasar(); const quasar = useQuasar();
const selectedRows = ref([]); const selectedRows = ref([]);
const dataKey = 'RoadmapList';
const columns = computed(() => [ const columns = computed(() => [
{ {
align: 'left', align: 'left',
@ -112,7 +114,7 @@ const removeSelection = async () => {
await Promise.all( await Promise.all(
selectedRows.value.map((roadmap) => { selectedRows.value.map((roadmap) => {
axios.delete(`Roadmaps/${roadmap.id}`); axios.delete(`Roadmaps/${roadmap.id}`);
}) }),
); );
}; };
@ -131,11 +133,6 @@ function confirmRemove() {
</script> </script>
<template> <template>
<VnSearchbar
data-key="RoadmapList"
:label="t('Search roadmaps')"
:info="t('You can search by roadmap reference')"
/>
<QDialog v-model="isCloneDialogOpen"> <QDialog v-model="isCloneDialogOpen">
<QCard style="min-width: 350px"> <QCard style="min-width: 350px">
<QCardSection> <QCardSection>
@ -177,39 +174,49 @@ function confirmRemove() {
</QBtn> </QBtn>
</template> </template>
</VnSubToolbar> </VnSubToolbar>
<VnTable <VnSection
ref="tableRef" :data-key="dataKey"
data-key="RoadmapList"
url="roadmaps"
:columns="columns" :columns="columns"
:right-search="true" prefix="route.roadmap"
:use-model="true" :array-data-props="{
default-mode="table" url: 'roadmaps',
v-model:selected="selectedRows"
table-height="85vh"
:table="{
selection: 'multiple',
}" }"
redirect="route/roadmap"
:create="{
urlCreate: 'Roadmaps',
title: t('Create routemap'),
onDataSaved: ({ id }) => tableRef.redirect(id),
formInitialData: {},
}"
:disable-option="{ card: true }"
> >
<template #column-etd="{ row }"> <template #body>
{{ toDateHourMin(row.etd) }} <VnTable
ref="tableRef"
:data-key="dataKey"
:columns="columns"
:right-search="true"
:use-model="true"
default-mode="table"
v-model:selected="selectedRows"
table-height="85vh"
:table="{
selection: 'multiple',
}"
redirect="route/roadmap"
:create="{
urlCreate: 'Roadmaps',
title: t('Create routemap'),
onDataSaved: ({ id }) => tableRef.redirect(id),
formInitialData: {},
}"
:disable-option="{ card: true }"
>
<template #column-etd="{ row }">
{{ toDateHourMin(row.etd) }}
</template>
<template #column-supplierFk="{ row }">
{{ row.supplierFk }}
</template>
<template #more-create-dialog="{ data }">
<VnInputDate v-model="data.etd" />
<VnInputTime v-model="data.etd" />
</template>
</VnTable>
</template> </template>
<template #column-supplierFk="{ row }"> </VnSection>
{{ row.supplierFk }}
</template>
<template #more-create-dialog="{ data }">
<VnInputDate v-model="data.etd" />
<VnInputTime v-model="data.etd" />
</template>
</VnTable>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -1,4 +1,7 @@
route: route:
roadmap:
search: Search roadmap
searchInfo: You can search by roadmap reference
params: params:
etd: ETD etd: ETD
tractorPlate: Plate tractorPlate: Plate

View File

@ -1,4 +1,7 @@
route: route:
roadmap:
search: Buscar troncales
searchInfo: Puedes buscar por referencia del troncal
params: params:
agencyModeName: Agencia Ruta agencyModeName: Agencia Ruta
agencyAgreement: Agencia Acuerdo agencyAgreement: Agencia Acuerdo

View File

@ -1,91 +1,112 @@
import { RouterView } from 'vue-router'; import { RouterView } from 'vue-router';
const agencyCard = {
path: ':id',
name: 'AgencyCard',
component: () => import('src/pages/Route/Agency/Card/AgencyCard.vue'),
redirect: { name: 'AgencySummary' },
meta: {
menu: ['AgencyBasicData', 'AgencyModes', 'AgencyWorkCenters', 'AgencyLog'],
},
children: [
{
name: 'AgencySummary',
path: 'summary',
meta: {
title: 'summary',
icon: 'view_list',
},
component: () => import('src/pages/Route/Agency/Card/AgencySummary.vue'),
},
{
name: 'AgencyBasicData',
path: 'basic-data',
meta: {
title: 'basicData',
icon: 'vn:settings',
},
component: () => import('pages/Route/Agency/Card/AgencyBasicData.vue'),
},
{
path: 'workCenter',
name: 'AgencyWorkCenterCard',
redirect: { name: 'AgencyWorkCenters' },
children: [
{
path: '',
name: 'AgencyWorkCenters',
meta: {
icon: 'apartment',
title: 'workCenters',
},
component: () =>
import('src/pages/Route/Agency/Card/AgencyWorkcenter.vue'),
},
],
},
{
path: 'modes',
name: 'AgencyModesCard',
redirect: { name: 'AgencyModes' },
children: [
{
path: '',
name: 'AgencyModes',
meta: {
icon: 'format_list_bulleted',
title: 'modes',
},
component: () =>
import('src/pages/Route/Agency/Card/AgencyModes.vue'),
},
],
},
{
name: 'AgencyLog',
path: 'log',
meta: {
title: 'log',
icon: 'history',
},
component: () => import('src/pages/Route/Agency/Card/AgencyLog.vue'),
},
],
};
export default { export default {
path: '/agency',
name: 'Agency', name: 'Agency',
path: '/agency',
meta: { meta: {
title: 'agency', title: 'agency',
icon: 'garage_home', icon: 'garage_home',
moduleName: 'Agency', moduleName: 'Agency',
}, },
component: RouterView, component: RouterView,
redirect: { name: 'AgencyCard' }, redirect: { name: 'RouteMain' },
menus: {
main: [],
card: ['AgencyBasicData', 'AgencyModes', 'AgencyWorkCenters', 'AgencyLog'],
},
children: [ children: [
{ {
path: '/agency/:id', name: 'AgencyMain',
name: 'AgencyCard', path: '',
component: () => import('src/pages/Route/Agency/Card/AgencyCard.vue'), component: () => import('src/components/common/VnModule.vue'),
redirect: { name: 'AgencySummary' }, redirect: { name: 'AgencyIndexMain' },
children: [ children: [
{ {
name: 'AgencySummary', name: 'AgencyIndexMain',
path: 'summary', path: '',
meta: { redirect: { name: 'AgencyList' },
title: 'summary', component: () => import('src/pages/Route/Agency/AgencyList.vue'),
icon: 'view_list',
},
component: () =>
import('src/pages/Route/Agency/Card/AgencySummary.vue'),
},
{
name: 'AgencyBasicData',
path: 'basic-data',
meta: {
title: 'basicData',
icon: 'vn:settings',
},
component: () =>
import('pages/Route/Agency/Card/AgencyBasicData.vue'),
},
{
path: 'workCenter',
name: 'AgencyWorkCenterCard',
redirect: { name: 'AgencyWorkCenters' },
children: [ children: [
{ {
path: '', name: 'AgencyList',
name: 'AgencyWorkCenters', path: 'list',
meta: { meta: {
icon: 'apartment', title: 'list',
title: 'workCenters', icon: 'view_list',
}, },
component: () =>
import(
'src/pages/Route/Agency/Card/AgencyWorkcenter.vue'
),
}, },
agencyCard,
], ],
}, },
{
path: 'modes',
name: 'AgencyModesCard',
redirect: { name: 'AgencyModes' },
children: [
{
path: '',
name: 'AgencyModes',
meta: {
icon: 'format_list_bulleted',
title: 'modes',
},
component: () =>
import('src/pages/Route/Agency/Card/AgencyModes.vue'),
},
],
},
{
name: 'AgencyLog',
path: 'log',
meta: {
title: 'log',
icon: 'history',
},
component: () => import('src/pages/Route/Agency/Card/AgencyLog.vue'),
},
], ],
}, },
], ],

View File

@ -1,5 +1,44 @@
import { RouterView } from 'vue-router'; import { RouterView } from 'vue-router';
const roadmapCard = {
path: ':id',
name: 'RoadmapCard',
component: () => import('src/pages/Route/Roadmap/RoadmapCard.vue'),
redirect: { name: 'RoadmapSummary' },
meta: {
menu: ['RoadmapBasicData', 'RoadmapStops'],
},
children: [
{
name: 'RoadmapSummary',
path: 'summary',
meta: {
title: 'summary',
icon: 'open_in_new',
},
component: () => import('pages/Route/Roadmap/RoadmapSummary.vue'),
},
{
name: 'RoadmapBasicData',
path: 'basic-data',
meta: {
title: 'basicData',
icon: 'vn:settings',
},
component: () => import('pages/Route/Roadmap/RoadmapBasicData.vue'),
},
{
name: 'RoadmapStops',
path: 'stops',
meta: {
title: 'stops',
icon: 'vn:lines',
},
component: () => import('pages/Route/Roadmap/RoadmapStops.vue'),
},
],
};
export default { export default {
path: '/route/roadmap', path: '/route/roadmap',
name: 'Roadmap', name: 'Roadmap',
@ -9,43 +48,30 @@ export default {
moduleName: 'Roadmap', moduleName: 'Roadmap',
}, },
component: RouterView, component: RouterView,
redirect: { name: 'RouteMain' }, redirect: { name: 'RoadmapMain' },
menus: {
card: ['RoadmapBasicData', 'RoadmapStops'],
},
children: [ children: [
{ {
name: 'RouteRoadmapCard', name: 'RoadmapMain',
path: ':id', path: '',
component: () => import('src/pages/Route/Roadmap/RoadmapCard.vue'), component: () => import('src/components/common/VnModule.vue'),
redirect: { name: 'RoadmapSummary' }, redirect: { name: 'RoadmapIndexMain' },
children: [ children: [
{ {
name: 'RoadmapSummary', name: 'RoadmapIndexMain',
path: 'summary', path: '',
meta: { redirect: { name: 'RoadmapList' },
title: 'summary', component: () => import('src/pages/Route/RouteRoadmap.vue'),
icon: 'open_in_new', children: [
}, {
component: () => import('pages/Route/Roadmap/RoadmapSummary.vue'), name: 'RoadmapList',
}, path: 'list',
{ meta: {
name: 'RoadmapBasicData', title: 'roadmapList',
path: 'basic-data', icon: 'view_list',
meta: { },
title: 'basicData', },
icon: 'vn:settings', roadmapCard,
}, ],
component: () => import('pages/Route/Roadmap/RoadmapBasicData.vue'),
},
{
name: 'RoadmapStops',
path: 'stops',
meta: {
title: 'stops',
icon: 'vn:lines',
},
component: () => import('pages/Route/Roadmap/RoadmapStops.vue'),
}, },
], ],
}, },