fix: ticketBasicData haveNegatives and style
gitea/salix-front/pipeline/head This commit looks good Details

This commit is contained in:
Alex Moreno 2024-12-11 09:47:07 +01:00
parent 86ccbecc47
commit 19f91e73a3
4 changed files with 46 additions and 68 deletions

View File

@ -264,6 +264,10 @@ input::-webkit-inner-spin-button {
.shrink {
max-width: 75px;
}
.number {
text-align: right;
width: 96px;
}
.expand {
max-width: 400px;
}

View File

@ -1,5 +1,5 @@
<script setup>
import { ref, computed, onMounted, onUnmounted, watch } from 'vue';
import { ref, computed, onMounted, onUnmounted, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
@ -10,37 +10,15 @@ import { useStateStore } from 'stores/useStateStore';
import { toCurrency } from 'filters/index';
import { useRole } from 'src/composables/useRole';
const $props = defineProps({
formData: {
type: Object,
required: true,
},
haveNegatives: {
type: Boolean,
required: true,
default: false,
},
});
const emit = defineEmits(['updateForm', 'update:haveNegatives']);
const haveNegatives = defineModel('haveNegatives', { type: Boolean, required: true });
const formData = defineModel({ type: Object, required: true });
const stateStore = useStateStore();
const { t } = useI18n();
const { hasAny } = useRole();
const _ticketData = ref($props.formData);
const ticketUpdateActions = ref(null);
const haveNegatives = computed({
get: () => $props.haveNegatives,
set: (val) => emit('update:haveNegatives', val),
});
const rows = computed(() => _ticketData.value?.sale?.items || []);
watch(
() => _ticketData.value,
(val) => emit('updateForm', val),
{ deep: true }
);
const rows = computed(() => formData.value?.sale?.items || []);
const columns = computed(() => [
{
@ -57,24 +35,28 @@ const columns = computed(() => [
align: 'left',
hidden: true,
},
{
name: 'subName',
align: 'left',
required: true,
},
{
label: t('basicData.movable'),
name: 'movable',
align: 'left',
},
{
required: true,
label: t('basicData.quantity'),
name: 'quantity',
field: 'quantity',
align: 'left',
classes: 'number',
},
{
required: true,
label: t('basicData.pricePPU'),
name: 'price',
field: 'price',
align: 'left',
classes: 'number',
format: (val) => toCurrency(val),
},
{
@ -82,7 +64,7 @@ const columns = computed(() => [
label: t('basicData.newPricePPU'),
name: 'newPrice',
field: (row) => row.component.newPrice,
align: 'left',
classes: 'number',
format: (val) => toCurrency(val),
},
{
@ -90,14 +72,15 @@ const columns = computed(() => [
label: t('basicData.difference'),
name: 'difference',
field: (row) => row.component.difference,
align: 'left',
classes: 'number',
format: (val) => toCurrency(val),
autoWidth: true,
},
]);
const loadDefaultTicketAction = () => {
const isSalesAssistant = hasAny(['salesAssistant']);
_ticketData.value.option = isSalesAssistant ? 'mana' : 'renewPrices';
formData.value.option = isSalesAssistant ? 'mana' : 'renewPrices';
};
const totalPrice = computed(() => {
@ -115,24 +98,25 @@ const totalDifference = computed(() => {
return rows.value.reduce((acc, item) => acc + item.component?.difference || 0, 0);
});
const showMovableColumn = computed(() => (haveDifferences.value > 0 ? ['movable'] : []));
const haveDifferences = computed(() => _ticketData.value.sale?.haveDifferences);
const ticketHaveNegatives = () => {
const haveDifferences = computed(() => formData.value.sale?.haveDifferences);
async function ticketHaveNegatives() {
let _haveNegatives = false;
let haveNotNegatives = false;
_ticketData.value.withoutNegatives = false;
_ticketData.value?.sale?.items.forEach((item) => {
formData.value.withoutNegatives = false;
formData.value?.sale?.items.forEach((item) => {
if (item.quantity > item.movable) _haveNegatives = true;
else haveNotNegatives = true;
});
haveNegatives.value = _haveNegatives && haveNotNegatives && haveDifferences.value;
if (haveNegatives.value) _ticketData.value.withoutNegatives = true;
};
await nextTick();
if (haveNegatives.value) formData.value.withoutNegatives = true;
}
onMounted(() => {
onMounted(async () => {
stateStore.rightDrawer = true;
loadDefaultTicketAction();
ticketHaveNegatives();
await ticketHaveNegatives();
});
onUnmounted(() => (stateStore.rightDrawer = false));
@ -191,7 +175,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
horizontal
>
<QRadio
v-model="_ticketData.option"
v-model="formData.option"
:val="action.code"
:label="action.description"
dense
@ -208,7 +192,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
<QCardSection horizontal class="flex row items-center">
<QCheckbox
:label="t('basicData.withoutNegatives')"
v-model="_ticketData.withoutNegatives"
v-model="formData.withoutNegatives"
:toggle-indeterminate="false"
/>
<QIcon name="info" size="xs" class="q-ml-sm">
@ -225,7 +209,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
:columns="columns"
row-key="id"
:pagination="{ rowsPerPage: 0 }"
class="full-width q-mt-md"
class="full-width"
:no-data-label="t('globals.noResults')"
flat
>
@ -238,21 +222,27 @@ onUnmounted(() => (stateStore.rightDrawer = false));
</QTd>
</template>
<template #body-cell-description="{ row }">
<QTd style="display: contents">
<div class="column">
<QTd style="min-width: 120px; max-width: 120px">
<div class="column q-pb-xs" style="min-width: 120px">
<span>{{ row.item.name }}</span>
<span class="color-vn-label">{{ row.item.subName }}</span>
<FetchedTags :item="row.item" />
<FetchedTags :item="row.item" class="full-width" />
</div>
</QTd>
</template>
<template #body-cell-movable="{ row }">
<template #body-cell-subName="{ row }">
<QTd>
<QBadge
v-if="_ticketData?.sale?.haveDifferences"
<span class="color-vn-label">{{ row.item.subName }}</span>
</QTd>
</template>
<template #body-cell-movable="{ row }">
<QTd class="number">
<QChip
v-if="formData?.sale?.haveDifferences"
:text-color="row.quantity > row.movable ? 'black' : 'white'"
:color="row.quantity > row.movable ? 'negative' : 'transparent'"
:label="row.movable"
dense
square
/>
</QTd>
</template>

View File

@ -21,7 +21,6 @@ const formData = defineModel({
required: true,
});
const emit = defineEmits(['updateForm']);
const { validate } = useValidator();
const { notify } = useNotify();
const router = useRouter();
@ -33,18 +32,11 @@ const canEditZone = useAcl().hasAny([
const agencyFetchRef = ref();
const warehousesOptions = ref([]);
const companiesOptions = ref([]);
const currenciesOptions = ref([]);
const agenciesOptions = ref([]);
const zonesOptions = ref([]);
const addresses = ref([]);
const zoneSelectRef = ref();
watch(
() => formData.value,
(val) => emit('updateForm', val),
{ deep: true }
);
onMounted(() => onFormModelInit());
const agencyByWarehouseFilter = computed(() => ({

View File

@ -155,18 +155,10 @@ onBeforeMount(async () => await getTicketData());
}"
>
<QStep :name="1" :title="t('globals.pageTitles.basicData')" :done="step > 1">
<TicketBasicDataForm
v-if="initialDataLoaded"
@update-form="($event) => (formData = $event)"
v-model="formData"
/>
<TicketBasicDataForm v-if="initialDataLoaded" v-model="formData" />
</QStep>
<QStep :name="2" :title="t('basicData.priceDifference')">
<TicketBasicData
:form-data="formData"
v-model:haveNegatives="haveNegatives"
@update-form="($event) => (formData = $event)"
/>
<TicketBasicData v-model="formData" v-model:have-negatives="haveNegatives" />
</QStep>
<template #navigation>
<QStepperNavigation class="flex justify-between">