feat: refs #8440 add VehicleNotes component and update routing #1364

Open
jtubau wants to merge 5 commits from 8440-createVehicleNotes into dev
3 changed files with 81 additions and 17 deletions

View File

@ -25,13 +25,9 @@ const $attrs = computed(() => {
return rest;
});
const isRequired = computed(() => {
return Object.keys($attrs).includes('required')
});
const $props = defineProps({
url: { type: String, default: null },
saveUrl: {type: String, default: null},
saveUrl: { type: String, default: null },
filter: { type: Object, default: () => {} },
body: { type: Object, default: () => {} },
addNote: { type: Boolean, default: false },
@ -52,6 +48,11 @@ function handleClick(e) {
else insert();
}
async function deleteNote(e) {
Review

test de front

test de front
await axios.delete(`${$props.url}/${e.id}`);
await vnPaginateRef.value.fetch();
}
async function insert() {
if (!newNote.text || ($props.selectType && !newNote.observationTypeFk)) return;
@ -65,7 +66,7 @@ async function insert() {
}
function confirmAndUpdate() {
if(!newNote.text && originalText)
if (!newNote.text && originalText)
quasar
.dialog({
component: VnConfirm,
@ -88,11 +89,17 @@ async function update() {
...body,
...{ notes: newNote.text },
};
await axios.patch(`${$props.saveUrl ?? `${$props.url}/${$props.body.workerFk}`}`, newBody);
await axios.patch(
`${$props.saveUrl ?? `${$props.url}/${$props.body.workerFk}`}`,
newBody,
);
}
onBeforeRouteLeave((to, from, next) => {
if ((newNote.text && !$props.justInput) || (newNote.text !== originalText) && $props.justInput)
if (
(newNote.text && !$props.justInput) ||
(newNote.text !== originalText && $props.justInput)
)
quasar.dialog({
component: VnConfirm,
componentProps: {
@ -104,12 +111,11 @@ onBeforeRouteLeave((to, from, next) => {
else next();
});
function fetchData([ data ]) {
function fetchData([data]) {
newNote.text = data?.notes;
originalText = data?.notes;
emit('onFetch', data);
}
</script>
<template>
<FetchData
@ -126,8 +132,8 @@ function fetchData([ data ]) {
@on-fetch="fetchData"
auto-load
/>
<QCard
class="q-pa-xs q-mb-lg full-width"
<QCard
class="q-pa-xs q-mb-lg full-width"
:class="{ 'just-input': $props.justInput }"
v-if="$props.addNote || $props.justInput"
>
@ -143,7 +149,7 @@ function fetchData([ data ]) {
v-model="newNote.observationTypeFk"
option-label="description"
style="flex: 0.15"
:required="isRequired"
:required="Object.keys($attrs).includes('required')"
Review

copilot dice: 'required' in $attrs

copilot dice: ```'required' in $attrs```
@keyup.enter.stop="insert"
/>
<VnInput
@ -151,10 +157,9 @@ function fetchData([ data ]) {
type="textarea"
:label="$props.justInput && newNote.text ? '' : t('Add note here...')"
filled
size="lg"
autogrow
@keyup.enter.stop="handleClick"
:required="isRequired"
:required="Object.keys($attrs).includes('required')"
Review

Lo mismo de arriba

Lo mismo de arriba
clearable
>
<template #append>
@ -218,12 +223,27 @@ function fetchData([ data ]) {
>
{{
observationTypes.find(
(ot) => ot.id === note.observationTypeFk
(ot) => ot.id === note.observationTypeFk,
)?.description
}}
</QBadge>
</div>
<span v-text="toDateHourMin(note.created)" />
<div>
<QIcon
v-if="Object.keys($attrs).includes('deletable')"
Review

Lo mismo de arriba.

Lo mismo de arriba.
name="delete"
size="sm"
class="cursor-pointer"
color="primary"
@click="deleteNote(note)"
data-cy="ticketNotesRemoveNoteBtn"
>
<QTooltip>
{{ t('ticketNotes.removeNote') }}
</QTooltip>
</QIcon>
</div>
</div>
</QCardSection>
<QCardSection class="q-pa-xs q-my-none q-py-none">

View File

@ -0,0 +1,35 @@
<script setup>
import { computed } from 'vue';
import { useRoute } from 'vue-router';
import { useState } from 'src/composables/useState';
import VnNotes from 'src/components/ui/VnNotes.vue';
const route = useRoute();
const state = useState();
const user = state.getUser();
const vehicleId = computed(() => route.params.id);
Review

Verificar si realmente hace falta o se puede poner directamente route.params.id en noteFilter,

Verificar si realmente hace falta o se puede poner directamente route.params.id en noteFilter,
const noteFilter = computed(() => {
return {
order: 'created DESC',
where: { vehicleFk: vehicleId.value },
};
});
const body = {
vehicleFk: vehicleId.value,
workerFk: user.value.id,
};
</script>
<template>
<VnNotes
url="vehicleObservations"
:add-note="true"
:filter="noteFilter"
:body="body"
style="overflow-y: auto"
required
deletable
/>
</template>

View File

@ -166,7 +166,7 @@ const vehicleCard = {
component: () => import('src/pages/Route/Vehicle/Card/VehicleCard.vue'),
redirect: { name: 'VehicleSummary' },
meta: {
menu: ['VehicleBasicData'],
menu: ['VehicleBasicData', 'VehicleNotes'],
},
children: [
{
@ -187,6 +187,15 @@ const vehicleCard = {
},
component: () => import('src/pages/Route/Vehicle/Card/VehicleBasicData.vue'),
},
{
name: 'VehicleNotes',
path: 'notes',
meta: {
title: 'notes',
icon: 'vn:notes',
},
component: () => import('src/pages/Route/Vehicle/Card/VehicleNotes.vue'),
}
],
};