179 lines
6.5 KiB
Vue
179 lines
6.5 KiB
Vue
<script setup>
|
|
import { onMounted, reactive, ref } from 'vue';
|
|
import Spiner from '../ui/Spiner.vue';
|
|
import NotificationBadge from './NotificationBadge.vue';
|
|
import Segments from './Segments.vue';
|
|
import TruckTypes from './TruckTypes.vue';
|
|
import Cities from './Cities.vue';
|
|
import States from './States.vue';
|
|
import Custominput from './CustomInput.vue';
|
|
import { useCompanyStore } from '../../stores/company';
|
|
import { useNotificationsStore } from '../../stores/notifications';
|
|
import { useI18n } from 'vue-i18n';
|
|
|
|
const companyStore = useCompanyStore()
|
|
const notifications = useNotificationsStore()
|
|
const loading = ref(false);
|
|
const msgError = ref('');
|
|
const companyCategories = ref([]);
|
|
const companyStates = ref([]);
|
|
const companyCity = ref([]);
|
|
const companyTruckType = ref([]);
|
|
const { t } = useI18n()
|
|
|
|
onMounted(() => {
|
|
if(companyStore.company){
|
|
companyCategories.value = companyStore.company.categories;
|
|
}
|
|
if(companyStore.company){
|
|
companyStates.value = companyStore.company.company_state.map(m =>{
|
|
return { state_name: m };
|
|
});
|
|
}
|
|
if(companyStore.company){
|
|
companyCity.value = companyStore.company.company_city.map(m =>{
|
|
return { city_name: m };
|
|
});
|
|
}
|
|
if(companyStore.company){
|
|
companyTruckType.value = companyStore.company.truck_type.map(m =>{
|
|
return { meta_value: m };
|
|
});
|
|
}
|
|
})
|
|
const company = reactive({
|
|
segments: companyCategories,
|
|
states: companyStates,
|
|
cities: companyCity,
|
|
truckTypes: companyTruckType,
|
|
description: companyStore.company?.company_description ?? '',
|
|
});
|
|
|
|
const handleSave = async() => {
|
|
// const resp = editCompany()
|
|
const resp = validations();
|
|
if(resp !== '') {
|
|
msgError.value = resp;
|
|
clearMessages();
|
|
} else {
|
|
loading.value = true;
|
|
let companyData = {
|
|
is_company: companyStore.company._id,
|
|
company_type: companyStore.company.company_type,
|
|
meta_data: companyStore.company.meta_data,
|
|
categories: company.segments.map((e) => e),
|
|
company_city: company.cities.map((e) => e.city_name),
|
|
company_state: company.states.map((e) => e.state_name),
|
|
truck_type: company.truckTypes.map((e) => e.meta_value),
|
|
company_description: company.description
|
|
};
|
|
// console.log( companyData )
|
|
const result = await companyStore.editCompany(companyData);
|
|
loading.value = false;
|
|
if(result === 'success') {
|
|
document.getElementById('btnCloseEditCompany').click();
|
|
notifications.show = true;
|
|
notifications.text = t('messages.updateCompany');
|
|
} else {
|
|
msgError.value === result;
|
|
clearMessages();
|
|
}
|
|
}
|
|
}
|
|
|
|
const clearMessages = () => {
|
|
setTimeout(() => {
|
|
msgError.value = '';
|
|
}, 3000);
|
|
}
|
|
|
|
const validations = () => {
|
|
if(company.segments.length === 0) {
|
|
return t('errors.segments');
|
|
}else if(company.states.length === 0) {
|
|
return t('errors.states');
|
|
} else if( company.cities.length === 0) {
|
|
msgError.value = t('errors.cities');
|
|
} else if(company.truckTypes.length === 0){
|
|
msgError.value = t('errors.trucks');
|
|
} else {
|
|
return '';
|
|
}
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
<template>
|
|
<div class="modal fade" id="editcompanymodal" tabindex="-1" role="dialog" aria-labelledby="editcompany" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered modal-xl" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h2 class="title mt-2 mb-3">{{ t('company.edit') }}</h2>
|
|
<button id="btnCloseEditCompany" type="button" class="close bg-white" data-dismiss="modal" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form @submit.prevent="handleSave" class="view-form">
|
|
<NotificationBadge :msg="msgError" v-if="msgError != ''"/>
|
|
<div class="mb-4 mt-3">
|
|
<label class="custom-label">{{ t('labels.segmentsCompany') }}</label>
|
|
<Segments
|
|
v-model="company.segments"
|
|
:multiple="true"
|
|
/>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="custom-label">{{ t('labels.locationLoadState') }}</label>
|
|
<States
|
|
v-model="company.states"
|
|
:multiple="true"
|
|
/>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="custom-label">{{ t('labels.locationLoadCity') }}</label>
|
|
<Cities
|
|
v-model="company.cities"
|
|
:multiple="true"
|
|
/>
|
|
</div>
|
|
<div class="mb-4">
|
|
<label class="custom-label">{{ t('labels.truckUsed') }}</label>
|
|
<TruckTypes
|
|
v-model="company.truckTypes"
|
|
:multiple="true"
|
|
/>
|
|
</div>
|
|
<Custominput
|
|
:label=" t('labels.infoCompany')"
|
|
type="text"
|
|
name="description"
|
|
:filled="false"
|
|
v-model:field="company.description"
|
|
/>
|
|
<Spiner v-if="loading"/>
|
|
<input
|
|
v-else
|
|
type="submit"
|
|
:value="t('buttons.save')" class="btn-primary-lg btn-lg-block my-4">
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-dark" data-dismiss="modal">{{t('buttons.close')}}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
/* .modal-width{
|
|
width: 1500px !important;
|
|
} */
|
|
|
|
.view-form {
|
|
padding: 1rem 4rem;
|
|
}
|
|
</style> |