Merge branch 'dev' into 8406-crudModelUpdate
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Pau Rovira 2025-05-08 14:17:54 +00:00
commit 0502abfca5
6 changed files with 77 additions and 61 deletions

View File

@ -35,6 +35,7 @@ const $props = defineProps({
selectType: { type: Boolean, default: false },
justInput: { type: Boolean, default: false },
goTo: { type: String, default: '' },
useUserRelation: { type: Boolean, default: true },
});
const { t } = useI18n();
@ -54,6 +55,26 @@ const defaultObservationType = computed(
let savedNote = false;
let originalText;
onBeforeRouteLeave((to, from, next) => {
if (
(newNote.text && !$props.justInput) ||
(newNote.text !== originalText && $props.justInput)
)
quasar.dialog({
component: VnConfirm,
componentProps: {
title: t('globals.unsavedPopup.title'),
message: t('globals.unsavedPopup.subtitle'),
promise: () => next(),
},
});
else next();
});
onMounted(() => {
nextTick(() => (componentIsRendered.value = true));
});
function handleClick(e) {
if (e.shiftKey && e.key === 'Enter') return;
if ($props.justInput) confirmAndUpdate();
@ -108,22 +129,6 @@ async function update() {
);
}
onBeforeRouteLeave((to, from, next) => {
if (
(newNote.text && !$props.justInput) ||
(newNote.text !== originalText && $props.justInput)
)
quasar.dialog({
component: VnConfirm,
componentProps: {
title: t('globals.unsavedPopup.title'),
message: t('globals.unsavedPopup.subtitle'),
promise: () => next(),
},
});
else next();
});
function fetchData([data]) {
newNote.text = data?.notes;
originalText = data?.notes;
@ -137,16 +142,38 @@ const handleObservationTypes = (data) => {
}
};
onMounted(() => {
nextTick(() => (componentIsRendered.value = true));
});
async function saveAndGo() {
savedNote = false;
await insert();
await savedNote;
router.push({ path: $props.goTo });
}
function getUserFilter() {
const newUserFilter = $props.userFilter ?? {};
const userInclude = {
relation: 'user',
scope: {
fields: ['id', 'nickname', 'name'],
},
};
if (newUserFilter.include) {
if (Array.isArray(newUserFilter.include)) {
newUserFilter.include.push(userInclude);
} else {
newUserFilter.include = [userInclude, newUserFilter.include];
}
} else {
newUserFilter.include = userInclude;
}
if ($props.useUserRelation) {
return {
...newUserFilter,
...$props.userFilter,
};
}
return $props.filter;
}
</script>
<template>
<Teleport
@ -242,7 +269,7 @@ async function saveAndGo() {
:url="$props.url"
order="created DESC"
:limit="0"
:user-filter="userFilter"
:user-filter="getUserFilter()"
:filter="filter"
auto-load
ref="vnPaginateRef"
@ -261,15 +288,15 @@ async function saveAndGo() {
<QCardSection horizontal>
<VnAvatar
:descriptor="false"
:worker-id="note.workerFk"
:worker-id="note.user?.id"
size="md"
:title="note.worker?.user.nickname"
:title="note.user?.nickname"
/>
<div class="full-width row justify-between q-pa-xs">
<div>
<VnUserLink
:name="`${note.worker.user.name}`"
:worker-id="note.worker.id"
:name="`${note.user?.name}`"
:worker-id="note.user?.id"
/>
<QBadge
class="q-ml-xs"

View File

@ -1,12 +1,9 @@
<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 $props = defineProps({
id: { type: [Number, String], default: null },
@ -15,24 +12,13 @@ const $props = defineProps({
const claimId = computed(() => $props.id || route.params.id);
const claimFilter = {
fields: ['id', 'created', 'workerFk', 'text'],
include: {
relation: 'worker',
scope: {
fields: ['id', 'firstName', 'lastName'],
fields: ['id', 'created', 'userFk', 'text'],
include: {
relation: 'user',
scope: {
fields: ['id', 'nickname', 'name'],
},
},
},
},
};
const body = {
claimFk: claimId.value,
workerFk: user.value.id,
};
</script>
@ -43,7 +29,9 @@ const body = {
:add-note="$props.addNote"
:user-filter="claimFilter"
:filter="{ where: { claimFk: claimId } }"
:body="body"
:body="{
claimFk: claimId,
}"
v-bind="$attrs"
style="overflow-y: auto"
/>

View File

@ -1,12 +1,15 @@
<script setup>
import VnNotes from 'src/components/ui/VnNotes.vue';
import { useState } from 'src/composables/useState';
const state = useState();
const user = state.getUser();
</script>
<template>
<VnNotes
url="clientObservations"
:add-note="true"
:filter="{ where: { clientFk: $route.params.id } }"
:body="{ clientFk: $route.params.id }"
:body="{ clientFk: $route.params.id, userFk: user.id }"
style="overflow-y: auto"
:select-type="true"
required

View File

@ -76,7 +76,7 @@ const columns = computed(() => [
},
{
align: 'left',
name: 'workerFk',
name: 'userFk',
label: t('Author'),
tooltip: t('Worker who made the last observation'),
columnFilter: {
@ -155,7 +155,7 @@ function exprBuilder(param, value) {
return { [`c.${param}`]: value };
case 'payMethod':
return { [`c.payMethodFk`]: value };
case 'workerFk':
case 'userFk':
return { [`co.${param}`]: value };
case 'departmentFk':
return { [`c.${param}`]: value };
@ -229,10 +229,10 @@ function exprBuilder(param, value) {
<DepartmentDescriptorProxy :id="row.departmentFk" />
</span>
</template>
<template #column-workerFk="{ row }">
<template #column-userFk="{ row }">
<span class="link" @click.stop>
{{ row.workerName }}
<WorkerDescriptorProxy :id="row.workerFk" />
<WorkerDescriptorProxy :id="row.userFk" />
</span>
</template>
</VnTable>

View File

@ -18,7 +18,7 @@ const noteFilter = computed(() => {
const body = {
vehicleFk: vehicleId.value,
workerFk: user.value.id,
userFk: user.value.id,
};
</script>

View File

@ -1,28 +1,26 @@
<script setup>
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 userFilter = {
order: 'created DESC',
include: {
relation: 'worker',
scope: {
fields: ['id', 'firstName', 'lastName'],
include: {
relation: 'user',
scope: {
fields: ['id', 'nickname', 'name'],
},
},
},
},
};
const body = { workerFk: route.params.id };
const body = {
workerFk: route.params.id,
userFk: user.value.id,
};
</script>
<template>