fix: enhance layout and styling for TicketNotes, TicketPackage components
gitea/salix-front/pipeline/head This commit looks good Details

This commit is contained in:
Javier Segarra 2025-04-23 15:09:26 +02:00
parent 7ec9c44130
commit c8a9661d50
3 changed files with 164 additions and 152 deletions

View File

@ -55,73 +55,75 @@ async function handleSave(e) {
auto-load auto-load
url="ObservationTypes" url="ObservationTypes"
/> />
<div class="flex justify-center"> <div class="full-width flex justify-center">
<CrudModel <QPage class="card-width q-pa-lg">
ref="ticketNotesCrudRef" <CrudModel
data-key="TicketNotes" class="fit"
url="TicketObservations" ref="ticketNotesCrudRef"
model="TicketNotes" data-key="TicketNotes"
:filter="crudModelFilter" url="TicketObservations"
:data-required="crudModelRequiredData" model="TicketNotes"
:default-remove="false" :filter="crudModelFilter"
auto-load :data-required="crudModelRequiredData"
style="max-width: 800px" :default-remove="false"
> auto-load
<template #body="{ rows }"> >
<QCard class="q-px-lg q-py-md"> <template #body="{ rows }">
<div <QCard class="q-px-lg q-py-md">
v-for="(row, index) in rows" <div
:key="index" v-for="(row, index) in rows"
class="q-mb-md row q-gutter-x-md" :key="index"
> class="q-mb-md row items-center q-gutter-x-md"
<VnSelect
:label="t('ticketNotes.observationType')"
:options="observationTypes"
hide-selected
option-label="description"
option-value="id"
v-model="row.observationTypeFk"
:disable="!!row.id"
data-cy="ticketNotesObservationType"
/>
<VnInput
:label="t('basicData.description')"
v-model="row.description"
class="col"
@keydown.enter.stop="handleSave"
autogrow
data-cy="ticketNotesDescription"
/>
<QIcon
name="delete"
size="sm"
class="cursor-pointer"
color="primary"
@click="handleDelete(row)"
data-cy="ticketNotesRemoveNoteBtn"
> >
<QTooltip> <VnSelect
{{ t('ticketNotes.removeNote') }} :label="t('ticketNotes.observationType')"
</QTooltip> :options="observationTypes"
</QIcon> hide-selected
</div> option-label="description"
<VnRow v-if="observationTypes.length > rows.length"> option-value="id"
<QBtn v-model="row.observationTypeFk"
icon="add_circle" :disable="!!row.id"
v-shortcut="'+'" data-cy="ticketNotesObservationType"
flat />
class="fill-icon-on-hover q-ml-md" <VnInput
color="primary" :label="t('basicData.description')"
@click="ticketNotesCrudRef.insert()" v-model="row.description"
data-cy="ticketNotesAddNoteBtn" class="col"
> @keydown.enter.stop="handleSave"
<QTooltip> autogrow
{{ t('ticketNotes.addNote') }} data-cy="ticketNotesDescription"
</QTooltip> />
</QBtn> <QIcon
</VnRow> name="delete"
</QCard> size="sm"
</template> class="cursor-pointer"
</CrudModel> color="primary"
@click="handleDelete(row)"
data-cy="ticketNotesRemoveNoteBtn"
>
<QTooltip>
{{ t('ticketNotes.removeNote') }}
</QTooltip>
</QIcon>
</div>
<VnRow v-if="observationTypes.length > rows.length">
<QBtn
icon="add_circle"
v-shortcut="'+'"
flat
class="fill-icon-on-hover q-ml-md"
color="primary"
@click="ticketNotesCrudRef.insert()"
data-cy="ticketNotesAddNoteBtn"
>
<QTooltip>
{{ t('ticketNotes.addNote') }}
</QTooltip>
</QBtn>
</VnRow>
</QCard>
</template>
</CrudModel>
</QPage>
</div> </div>
</template> </template>

View File

@ -49,88 +49,95 @@ watch(
<FetchData <FetchData
@on-fetch="(data) => (listPackagingsOptions = data)" @on-fetch="(data) => (listPackagingsOptions = data)"
auto-load auto-load
:filter="{ fields: ['packagingFk', 'name'], order: 'name ASC' }"
url="Packagings/listPackaging" url="Packagings/listPackaging"
:filter="{
fields: ['packagingFk', 'name'],
order: ['name ASC'],
}"
/> />
<div class="flex justify-center"> <div class="full-width flex justify-center">
<CrudModel <QPage class="card-width q-pa-lg">
ref="ticketPackagingsCrudRef" <CrudModel
data-key="TicketPackagings" ref="ticketPackagingsCrudRef"
url="TicketPackagings" data-key="TicketPackagings"
model="TicketPackagings" url="TicketPackagings"
:filter="crudModelFilter" model="TicketPackagings"
:data-required="crudModelRequiredData" :filter="crudModelFilter"
:default-remove="false" :data-required="crudModelRequiredData"
auto-load :default-remove="false"
style="max-width: 800px" auto-load
> >
<template #body="{ rows, validate }"> <template #body="{ rows, validate }">
<QCard class="q-px-lg q-py-md"> <QCard class="q-px-lg q-py-md">
<div <div
v-for="(row, index) in rows" v-for="(row, index) in rows"
:key="index" :key="index"
class="q-mb-md row items-center q-gutter-x-md" class="q-mb-md row items-center q-gutter-x-md"
>
<VnSelect
:label="t('package.package')"
:options="listPackagingsOptions"
hide-selected
option-label="name"
option-value="packagingFk"
v-model="row.packagingFk"
> >
<template #option="scope"> <VnSelect
<QItem v-bind="scope.itemProps"> :label="t('package.package')"
<QItemSection> :options="listPackagingsOptions"
<QItemLabel> hide-selected
{{ scope.opt?.name }} option-label="name"
</QItemLabel> option-value="packagingFk"
<QItemLabel caption> v-model="row.packagingFk"
#{{ scope.opt?.itemFk }} >
</QItemLabel> <template #option="scope">
</QItemSection> <QItem v-bind="scope.itemProps">
</QItem> <QItemSection>
</template> <QItemLabel>
</VnSelect> {{ scope.opt?.name }}
<VnInput </QItemLabel>
:label="t('basicData.quantity')" <QItemLabel caption>
v-model.number="row.quantity" #{{ scope.opt?.itemFk }}
class="col" </QItemLabel>
type="number" </QItemSection>
min="1" </QItem>
:required="true" </template>
@update:model-value="handleInputQuantityClear(row)" </VnSelect>
:rules="validate('TicketPackaging.quantity')" <VnInput
/> :label="t('basicData.quantity')"
<VnInputDate :label="t('package.added')" v-model="row.created" /> v-model.number="row.quantity"
<QIcon class="col"
name="delete" type="number"
size="sm" min="1"
class="cursor-pointer" :required="true"
color="primary" @update:model-value="handleInputQuantityClear(row)"
@click="ticketPackagingsCrudRef.remove([row])" :rules="validate('TicketPackaging.quantity')"
> />
<QTooltip> <VnInputDate
{{ t('package.removePackage') }} :label="t('package.added')"
</QTooltip> v-model="row.created"
</QIcon> />
</div> <QIcon
<VnRow> name="delete"
<QBtn size="sm"
icon="add_circle" class="cursor-pointer"
v-shortcut="'+'" color="primary"
flat @click="ticketPackagingsCrudRef.remove([row])"
class="fill-icon-on-hover q-ml-md" >
color="primary" <QTooltip>
@click="ticketPackagingsCrudRef.insert()" {{ t('package.removePackage') }}
> </QTooltip>
<QTooltip> </QIcon>
{{ t('package.addPackage') }} </div>
</QTooltip> <VnRow>
</QBtn> <QBtn
</VnRow> icon="add_circle"
</QCard> v-shortcut="'+'"
</template> flat
</CrudModel> class="fill-icon-on-hover q-ml-md"
color="primary"
@click="ticketPackagingsCrudRef.insert()"
>
<QTooltip>
{{ t('package.addPackage') }}
</QTooltip>
</QBtn>
</VnRow>
</QCard>
</template>
</CrudModel>
</QPage>
</div> </div>
</template> </template>

View File

@ -385,7 +385,12 @@ watch(
if (!$el) return; if (!$el) return;
const head = $el.querySelector('thead'); const head = $el.querySelector('thead');
const firstRow = $el.querySelector('thead > tr'); const firstRow = $el.querySelector('thead > tr');
const headSelectionCol = $el.querySelector(
'thead tr.bg-header th.q-table--col-auto-width',
);
if (headSelectionCol) {
headSelectionCol.classList.add('horizontal-separator');
}
const newRow = document.createElement('tr'); const newRow = document.createElement('tr');
destinationElRef.value = document.createElement('th'); destinationElRef.value = document.createElement('th');
originElRef.value = document.createElement('th'); originElRef.value = document.createElement('th');
@ -394,8 +399,8 @@ watch(
destinationElRef.value.classList.add('text-uppercase', 'color-vn-label'); destinationElRef.value.classList.add('text-uppercase', 'color-vn-label');
originElRef.value.classList.add('text-uppercase', 'color-vn-label'); originElRef.value.classList.add('text-uppercase', 'color-vn-label');
destinationElRef.value.setAttribute('colspan', '7'); destinationElRef.value.setAttribute('colspan', '10');
originElRef.value.setAttribute('colspan', '9'); originElRef.value.setAttribute('colspan', '10');
destinationElRef.value.textContent = `${t( destinationElRef.value.textContent = `${t(
'advanceTickets.destination', 'advanceTickets.destination',
@ -490,8 +495,6 @@ watch(
selection: 'multiple', selection: 'multiple',
}" }"
v-model:selected="selectedTickets" v-model:selected="selectedTickets"
:pagination="{ rowsPerPage: 0 }"
:no-data-label="$t('globals.noResults')"
:right-search="false" :right-search="false"
:order="['futureTotalWithVat ASC']" :order="['futureTotalWithVat ASC']"
auto-load auto-load