fix: ui actions in proposals & load publish

This commit is contained in:
Alexandro Uc Santos
2025-07-25 20:57:35 -06:00
parent ea41ec3e0c
commit ba630fb1de
5 changed files with 49 additions and 12 deletions

View File

@@ -53,7 +53,7 @@
<VehicleInfo <VehicleInfo
v-if="load.vehicle" v-if="load.vehicle"
:vehicle="load.vehicle" :vehicle="load.vehicle"
:driver="load.driver" :driver="load?.driver"
/> />
</div> </div>
</div> </div>

View File

@@ -14,8 +14,6 @@ import { useI18n } from 'vue-i18n';
} }
}) })
console.log(props.vehicle)
const { t } = useI18n() const { t } = useI18n()
const isShow = ref(false); const isShow = ref(false);
@@ -26,10 +24,13 @@ import { useI18n } from 'vue-i18n';
const driver = computed(() => { const driver = computed(() => {
if(props?.driver) { if(props?.driver) {
return !props?.driver ? 'No definido' return !props?.driver
: props?.driver.first_name + ' ' + props?.driver.last_name ? 'No definido'
: props?.driver?.first_name + ' ' + props?.driver?.last_name
} else { } else {
return props.vehicle.driver.first_name + ' ' + props.vehicle.driver.last_name; return !props.vehicle?.driver?.first_name
? 'No definido'
: props.vehicle?.driver?.first_name + ' ' + props.vehicle?.driver?.last_name;
} }
}); });
</script> </script>

View File

@@ -277,6 +277,9 @@
product: formLoad.terms?.length <= 0 ? null : formLoad.terms, product: formLoad.terms?.length <= 0 ? null : formLoad.terms,
origin_warehouse: locationLoadSelected.value, origin_warehouse: locationLoadSelected.value,
destination_warehouse: locationDownloadSelected.value, destination_warehouse: locationDownloadSelected.value,
carrier: loadStore?.currentLoad?.carrier || null,
vehicle: loadStore?.currentLoad?.vehicle || null,
driver: loadStore?.currentLoad?.driver || null,
}; };
if(resp) { if(resp) {
const index = loadStore.loads.findIndex((load) => load._id === resp._id); const index = loadStore.loads.findIndex((load) => load._id === resp._id);
@@ -614,9 +617,11 @@
<button <button
type="button" type="button"
class="btn btn-dark" class="btn btn-dark"
:class="[loadStore.currentLoad?.status !== 'Draft' ? 'btn-primary-sm radius-sm' : '']"
@click="handleSave" @click="handleSave"
>{{ t('buttons.save') }}</button> >{{ t('buttons.save') }}</button>
<button <button
v-if="loadStore.currentLoad?.status === 'Draft'"
type="submit" type="submit"
@click.prevent="handlePostLoad" @click.prevent="handlePostLoad"
class="btn-primary-sm radius-sm" class="btn-primary-sm radius-sm"

View File

@@ -42,8 +42,6 @@
vehicle: proposal.vehicle._id, vehicle: proposal.vehicle._id,
} }
console.log(proposal)
isLoadingActions.value = true; isLoadingActions.value = true;
let load = await loadsStore.updateLoad(load_id, loadData); let load = await loadsStore.updateLoad(load_id, loadData);
if(load != null) { if(load != null) {

View File

@@ -6,6 +6,7 @@
import { useAuthStore } from '../../../stores/auth'; import { useAuthStore } from '../../../stores/auth';
import { useLoadsStore } from '../../../stores/loads'; import { useLoadsStore } from '../../../stores/loads';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { computed } from 'vue';
const props = defineProps({ const props = defineProps({
proposal: { proposal: {
@@ -77,13 +78,16 @@
loadsStore.currentLoad = props.proposal.load; loadsStore.currentLoad = props.proposal.load;
loadsStore.openAttachmentsModal = true; loadsStore.openAttachmentsModal = true;
} }
const enablePermission = computed(() => props.proposal?.load?.load_status === 'Published'
&& (authStore.user?.job_role === 'owner' || authStore.user?.job_role === 'manager'));
</script> </script>
<template> <template>
<div class="card-fixed card-load mt-4"> <div class="card-fixed card-load mt-4">
<br> <br>
<div class="box-proposal"> <div class="box-proposal">
<div class=""> <div v-if="proposal.vehicle">
<p v-if="proposal.vehicle"><span>{{ t('labels.codeId') }}:</span> {{proposal.vehicle.vehicle_code?.toUpperCase()}}</p> <p v-if="proposal.vehicle"><span>{{ t('labels.codeId') }}:</span> {{proposal.vehicle.vehicle_code?.toUpperCase()}}</p>
<p v-if="proposal.load"><span>{{ t('global.segment') }}:</span> {{proposal.load.categories?.map((e) => e.name).join(', ')}}</p> <p v-if="proposal.load"><span>{{ t('global.segment') }}:</span> {{proposal.load.categories?.map((e) => e.name).join(', ')}}</p>
<p v-if="proposal.vehicle"><span>{{ t('directory.typeTruck') }}:</span> {{proposal.vehicle.truck_type}}</p> <p v-if="proposal.vehicle"><span>{{ t('directory.typeTruck') }}:</span> {{proposal.vehicle.truck_type}}</p>
@@ -91,10 +95,16 @@
<p v-if="proposal.vehicle?.is_available"><span>{{ t('labels.dateAvailable') }}:</span> {{ getDateOnly(proposal.vehicle.available_date) }}</p> <p v-if="proposal.vehicle?.is_available"><span>{{ t('labels.dateAvailable') }}:</span> {{ getDateOnly(proposal.vehicle.available_date) }}</p>
<p v-if="proposal.vehicle?.is_available"><span>{{ t('vehicles.availableIn') }}:</span> {{proposal.vehicle.city}}<template v-if="proposal.vehicle.state">, {{proposal.vehicle.state}}</template></p> <p v-if="proposal.vehicle?.is_available"><span>{{ t('vehicles.availableIn') }}:</span> {{proposal.vehicle.city}}<template v-if="proposal.vehicle.state">, {{proposal.vehicle.state}}</template></p>
<p v-if="proposal.vehicle"><span>{{ t('loads.destination') }}:</span> {{proposal.vehicle?.destino.replace(';', ', ')}}</p> <p v-if="proposal.vehicle"><span>{{ t('loads.destination') }}:</span> {{proposal.vehicle?.destino.replace(';', ', ')}}</p>
<p><span>{{ t('vehicles.truckPlates') }}:</span> {{ proposal.vehicle.circulation_serial_number }}</p> <p v-if="proposal.vehicle?.circulation_serial_number"><span>{{ t('vehicles.truckPlates') }}:</span> {{ proposal.vehicle?.circulation_serial_number }}</p>
<p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 1:</span> {{proposal.vehicle.trailer_plate_1}}</p> <p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 1:</span> {{proposal.vehicle.trailer_plate_1}}</p>
<p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 2:</span> {{proposal.vehicle.trailer_plate_2}}</p> <p v-if="proposal.vehicle"><span>{{ t('vehicles.trailerPlates') }} 2:</span> {{proposal.vehicle.trailer_plate_2}}</p>
</div> </div>
<div v-else
class="no-data"
>
<i class="fa-regular fa-face-frown"></i>
<p>Sin vehiculo asignado o el vehiculo ya no existe</p>
</div>
<div class="" v-if="proposal.load"> <div class="" v-if="proposal.load">
<p v-if="proposal.load"> <span>{{ t('loads.loadCode') }}: </span> <p v-if="proposal.load"> <span>{{ t('loads.loadCode') }}: </span>
@@ -128,6 +138,12 @@
<p v-if="proposal._driver">{{ t('labels.operator') }}: {{proposal._driver}}</p> <p v-if="proposal._driver">{{ t('labels.operator') }}: {{proposal._driver}}</p>
</div> </div>
<div v-else
class="no-data"
>
<i class="fa-regular fa-face-frown"></i>
<p>La carga fue eliminada</p>
</div>
</div> </div>
<div class="btn-row"> <div class="btn-row">
<button <button
@@ -145,7 +161,7 @@
</div> </div>
<button <button
v-else v-else
v-if="authStore.user?.job_role === 'owner' || authStore.user?.job_role === 'manager'" v-if="enablePermission"
type="button" type="button"
class="btn btn-danger radius-sm" class="btn btn-danger radius-sm"
@click="handleWithdrawnProposal" @click="handleWithdrawnProposal"
@@ -154,7 +170,7 @@
{{ t('proposals.withdraw') }} {{ t('proposals.withdraw') }}
</button> </button>
<button <button
v-if="authStore.user?.job_role === 'owner' || authStore.user?.job_role === 'manager'" v-if="enablePermission"
class="btn-primary-sm radius-sm" class="btn-primary-sm radius-sm"
@click="$emit('set-proposal', {proposal: proposal, modal: 'edit'})" @click="$emit('set-proposal', {proposal: proposal, modal: 'edit'})"
data-toggle="modal" data-target="#makeProposalModal" data-toggle="modal" data-target="#makeProposalModal"
@@ -235,6 +251,23 @@
border-radius: 13px; border-radius: 13px;
} }
.no-data {
align-content: center;
text-align: center;
gap: 1rem;
padding: 1rem;
}
.no-data p{
margin-top: 1rem;
font-size: 1.2rem;
color: gray;
}
.no-data i{
font-size: 2.5rem;
color: #e3a11e;
}
@media (max-width: 768px) { @media (max-width: 768px) {
.box-proposal { .box-proposal {
flex-direction: column-reverse; flex-direction: column-reverse;