diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index c26a9c4a5..d5d8e2a91 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -148,7 +148,7 @@ async function onSubmit() { await saveChanges($props.saveFn ? formData.value : null); } -async function onSumbitAndGo() { +async function onSubmitAndGo() { await onSubmit(); push({ path: $props.goTo }); } @@ -339,7 +339,7 @@ watch(formUrl, async () => { /> <QBtnDropdown v-if="$props.goTo && $props.defaultSave" - @click="onSumbitAndGo" + @click="onSubmitAndGo" :label="tMobile('globals.saveAndContinue')" :title="t('globals.saveAndContinue')" :disable="!hasChanges" diff --git a/src/components/common/VnPopup.vue b/src/components/common/VnPopup.vue new file mode 100644 index 000000000..7dcb08f53 --- /dev/null +++ b/src/components/common/VnPopup.vue @@ -0,0 +1,23 @@ +<script setup> +defineProps({ + title: { type: String, default: null }, + content: { type: [String, Number], default: null }, +}); +</script> +<template> + <QPopupProxy> + <QCard> + <slot name="title"> + <div + class="header q-px-sm q-py-xs q-ma-none text-white text-bold bg-primary" + v-text="title" + /> + </slot> + <slot name="content"> + <QCardSection class="change-detail q-pa-sm"> + {{ content }} + </QCardSection> + </slot> + </QCard> + </QPopupProxy> +</template> diff --git a/src/components/ui/CardDescriptor.vue b/src/components/ui/CardDescriptor.vue index b2084479d..8bb2a603e 100644 --- a/src/components/ui/CardDescriptor.vue +++ b/src/components/ui/CardDescriptor.vue @@ -39,6 +39,7 @@ const $props = defineProps({ }); const state = useState(); +const route = useRoute(); const { t } = useI18n(); const { viewSummary } = useSummaryDialog(); let arrayData; @@ -57,7 +58,7 @@ onBeforeMount(async () => { store = arrayData.store; entity = computed(() => (Array.isArray(store.data) ? store.data[0] : store.data)); // It enables to load data only once if the module is the same as the dataKey - if ($props.dataKey !== useRoute().meta.moduleName) await getData(); + if ($props.dataKey !== route.meta.moduleName || !route.params.id) await getData(); watch( () => [$props.url, $props.filter], async () => await getData() diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 515f8dd80..1b51799db 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -113,6 +113,7 @@ globals: name: Name new: New comment: Comment + observations: Observations errors: statusUnauthorized: Access denied statusInternalServerError: An internal server error has ocurred diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index 762f641e0..55b6e4667 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -114,6 +114,7 @@ globals: name: Nombre new: Nuevo comment: Comentario + observations: Observaciones errors: statusUnauthorized: Acceso denegado statusInternalServerError: Ha ocurrido un error interno del servidor diff --git a/src/pages/Travel/ExtraCommunity.vue b/src/pages/Travel/ExtraCommunity.vue index 639c7d894..98648512f 100644 --- a/src/pages/Travel/ExtraCommunity.vue +++ b/src/pages/Travel/ExtraCommunity.vue @@ -2,7 +2,6 @@ import { onMounted, ref, computed, watch } from 'vue'; import { QBtn } from 'quasar'; import { useI18n } from 'vue-i18n'; -import { useRouter } from 'vue-router'; import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue'; import TravelDescriptorProxy from 'src/pages/Travel/Card/TravelDescriptorProxy.vue'; @@ -19,8 +18,8 @@ import { usePrintService } from 'composables/usePrintService'; import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue'; import axios from 'axios'; import RightMenu from 'src/components/common/RightMenu.vue'; +import VnPopup from 'src/components/common/VnPopup.vue'; -const router = useRouter(); const stateStore = useStateStore(); const { t } = useI18n(); const { openReport } = usePrintService(); @@ -125,6 +124,10 @@ const tableColumnComponents = { component: 'span', attrs: {}, }, + notes: { + component: 'span', + attrs: {}, + }, }; const columns = computed(() => [ @@ -250,6 +253,14 @@ const columns = computed(() => [ sortable: true, format: (value) => toDate(value), }, + { + label: t('notes'), + field: '', + name: 'notes', + align: 'center', + showValue: false, + sortable: true, + }, ]); async function getData() { @@ -298,10 +309,6 @@ const saveFieldValue = async (val, field, index) => { } }; -const navigateToTravelId = (id) => { - router.push({ path: `/travel/${id}` }); -}; - const stopEventPropagation = (event, col) => { // Detener la propagación del evento de los siguientes elementos para evitar el click sobre la row que dispararía la función navigateToTravelId if (!['ref', 'id', 'cargoSupplierNickname', 'kg'].includes(col.name)) return; @@ -486,7 +493,7 @@ const getColor = (percentage) => { <QTr :props="props" class="cursor-pointer bg-travel" - @click="navigateToTravelId(props.row.id)" + @click="$router.push({ path: `/travel/${props.row.id}` })" @dragenter="handleDragEnter($event, props.rowIndex)" @dragover.prevent @drop="handleDrop()" @@ -607,6 +614,20 @@ const getColor = (percentage) => { <QTd /> <QTd /> <QTd /> + <QTd> + <QBtn + v-if="entry.evaNotes" + icon="comment" + size="sm" + flat + color="primary" + > + <VnPopup + :title="t('globals.observations')" + :content="entry.evaNotes" + /> + </QBtn> + </QTd> </QTr> </template> </QTable>