Merge branch 'dev' into 8406-crudModelUpdate
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
gitea/salix-front/pipeline/pr-dev This commit looks good
Details
This commit is contained in:
commit
0502abfca5
|
@ -35,6 +35,7 @@ const $props = defineProps({
|
||||||
selectType: { type: Boolean, default: false },
|
selectType: { type: Boolean, default: false },
|
||||||
justInput: { type: Boolean, default: false },
|
justInput: { type: Boolean, default: false },
|
||||||
goTo: { type: String, default: '' },
|
goTo: { type: String, default: '' },
|
||||||
|
useUserRelation: { type: Boolean, default: true },
|
||||||
});
|
});
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -54,6 +55,26 @@ const defaultObservationType = computed(
|
||||||
let savedNote = false;
|
let savedNote = false;
|
||||||
let originalText;
|
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) {
|
function handleClick(e) {
|
||||||
if (e.shiftKey && e.key === 'Enter') return;
|
if (e.shiftKey && e.key === 'Enter') return;
|
||||||
if ($props.justInput) confirmAndUpdate();
|
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]) {
|
function fetchData([data]) {
|
||||||
newNote.text = data?.notes;
|
newNote.text = data?.notes;
|
||||||
originalText = data?.notes;
|
originalText = data?.notes;
|
||||||
|
@ -137,16 +142,38 @@ const handleObservationTypes = (data) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
nextTick(() => (componentIsRendered.value = true));
|
|
||||||
});
|
|
||||||
|
|
||||||
async function saveAndGo() {
|
async function saveAndGo() {
|
||||||
savedNote = false;
|
savedNote = false;
|
||||||
await insert();
|
await insert();
|
||||||
await savedNote;
|
|
||||||
router.push({ path: $props.goTo });
|
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>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Teleport
|
<Teleport
|
||||||
|
@ -242,7 +269,7 @@ async function saveAndGo() {
|
||||||
:url="$props.url"
|
:url="$props.url"
|
||||||
order="created DESC"
|
order="created DESC"
|
||||||
:limit="0"
|
:limit="0"
|
||||||
:user-filter="userFilter"
|
:user-filter="getUserFilter()"
|
||||||
:filter="filter"
|
:filter="filter"
|
||||||
auto-load
|
auto-load
|
||||||
ref="vnPaginateRef"
|
ref="vnPaginateRef"
|
||||||
|
@ -261,15 +288,15 @@ async function saveAndGo() {
|
||||||
<QCardSection horizontal>
|
<QCardSection horizontal>
|
||||||
<VnAvatar
|
<VnAvatar
|
||||||
:descriptor="false"
|
:descriptor="false"
|
||||||
:worker-id="note.workerFk"
|
:worker-id="note.user?.id"
|
||||||
size="md"
|
size="md"
|
||||||
:title="note.worker?.user.nickname"
|
:title="note.user?.nickname"
|
||||||
/>
|
/>
|
||||||
<div class="full-width row justify-between q-pa-xs">
|
<div class="full-width row justify-between q-pa-xs">
|
||||||
<div>
|
<div>
|
||||||
<VnUserLink
|
<VnUserLink
|
||||||
:name="`${note.worker.user.name}`"
|
:name="`${note.user?.name}`"
|
||||||
:worker-id="note.worker.id"
|
:worker-id="note.user?.id"
|
||||||
/>
|
/>
|
||||||
<QBadge
|
<QBadge
|
||||||
class="q-ml-xs"
|
class="q-ml-xs"
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import { useState } from 'src/composables/useState';
|
|
||||||
import VnNotes from 'src/components/ui/VnNotes.vue';
|
import VnNotes from 'src/components/ui/VnNotes.vue';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const state = useState();
|
|
||||||
const user = state.getUser();
|
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
id: { type: [Number, String], default: null },
|
id: { type: [Number, String], default: null },
|
||||||
|
@ -15,25 +12,14 @@ const $props = defineProps({
|
||||||
const claimId = computed(() => $props.id || route.params.id);
|
const claimId = computed(() => $props.id || route.params.id);
|
||||||
|
|
||||||
const claimFilter = {
|
const claimFilter = {
|
||||||
fields: ['id', 'created', 'workerFk', 'text'],
|
fields: ['id', 'created', 'userFk', 'text'],
|
||||||
include: {
|
include: {
|
||||||
relation: 'worker',
|
relation: 'user',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'firstName', 'lastName'],
|
fields: ['id', 'nickname', 'name'],
|
||||||
include: {
|
|
||||||
relation: 'user',
|
|
||||||
scope: {
|
|
||||||
fields: ['id', 'nickname', 'name'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const body = {
|
|
||||||
claimFk: claimId.value,
|
|
||||||
workerFk: user.value.id,
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -43,7 +29,9 @@ const body = {
|
||||||
:add-note="$props.addNote"
|
:add-note="$props.addNote"
|
||||||
:user-filter="claimFilter"
|
:user-filter="claimFilter"
|
||||||
:filter="{ where: { claimFk: claimId } }"
|
:filter="{ where: { claimFk: claimId } }"
|
||||||
:body="body"
|
:body="{
|
||||||
|
claimFk: claimId,
|
||||||
|
}"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
style="overflow-y: auto"
|
style="overflow-y: auto"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import VnNotes from 'src/components/ui/VnNotes.vue';
|
import VnNotes from 'src/components/ui/VnNotes.vue';
|
||||||
|
import { useState } from 'src/composables/useState';
|
||||||
|
const state = useState();
|
||||||
|
const user = state.getUser();
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VnNotes
|
<VnNotes
|
||||||
url="clientObservations"
|
url="clientObservations"
|
||||||
:add-note="true"
|
:add-note="true"
|
||||||
:filter="{ where: { clientFk: $route.params.id } }"
|
:filter="{ where: { clientFk: $route.params.id } }"
|
||||||
:body="{ clientFk: $route.params.id }"
|
:body="{ clientFk: $route.params.id, userFk: user.id }"
|
||||||
style="overflow-y: auto"
|
style="overflow-y: auto"
|
||||||
:select-type="true"
|
:select-type="true"
|
||||||
required
|
required
|
||||||
|
|
|
@ -76,7 +76,7 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
name: 'workerFk',
|
name: 'userFk',
|
||||||
label: t('Author'),
|
label: t('Author'),
|
||||||
tooltip: t('Worker who made the last observation'),
|
tooltip: t('Worker who made the last observation'),
|
||||||
columnFilter: {
|
columnFilter: {
|
||||||
|
@ -155,7 +155,7 @@ function exprBuilder(param, value) {
|
||||||
return { [`c.${param}`]: value };
|
return { [`c.${param}`]: value };
|
||||||
case 'payMethod':
|
case 'payMethod':
|
||||||
return { [`c.payMethodFk`]: value };
|
return { [`c.payMethodFk`]: value };
|
||||||
case 'workerFk':
|
case 'userFk':
|
||||||
return { [`co.${param}`]: value };
|
return { [`co.${param}`]: value };
|
||||||
case 'departmentFk':
|
case 'departmentFk':
|
||||||
return { [`c.${param}`]: value };
|
return { [`c.${param}`]: value };
|
||||||
|
@ -229,10 +229,10 @@ function exprBuilder(param, value) {
|
||||||
<DepartmentDescriptorProxy :id="row.departmentFk" />
|
<DepartmentDescriptorProxy :id="row.departmentFk" />
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template #column-workerFk="{ row }">
|
<template #column-userFk="{ row }">
|
||||||
<span class="link" @click.stop>
|
<span class="link" @click.stop>
|
||||||
{{ row.workerName }}
|
{{ row.workerName }}
|
||||||
<WorkerDescriptorProxy :id="row.workerFk" />
|
<WorkerDescriptorProxy :id="row.userFk" />
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</VnTable>
|
</VnTable>
|
||||||
|
|
|
@ -18,7 +18,7 @@ const noteFilter = computed(() => {
|
||||||
|
|
||||||
const body = {
|
const body = {
|
||||||
vehicleFk: vehicleId.value,
|
vehicleFk: vehicleId.value,
|
||||||
workerFk: user.value.id,
|
userFk: user.value.id,
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,26 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
|
import { useState } from 'src/composables/useState';
|
||||||
import VnNotes from 'src/components/ui/VnNotes.vue';
|
import VnNotes from 'src/components/ui/VnNotes.vue';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const state = useState();
|
||||||
|
const user = state.getUser();
|
||||||
|
|
||||||
const userFilter = {
|
const userFilter = {
|
||||||
order: 'created DESC',
|
order: 'created DESC',
|
||||||
|
|
||||||
include: {
|
include: {
|
||||||
relation: 'worker',
|
relation: 'user',
|
||||||
scope: {
|
scope: {
|
||||||
fields: ['id', 'firstName', 'lastName'],
|
fields: ['id', 'nickname', 'name'],
|
||||||
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>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|
Loading…
Reference in New Issue