Solucion a comentarios 8
gitea/salix-front/pipeline/pr-dev There was a failure building this commit
Details
gitea/salix-front/pipeline/pr-dev There was a failure building this commit
Details
This commit is contained in:
parent
08e072100b
commit
ab20ec1738
|
@ -21,7 +21,7 @@ const props = defineProps({
|
|||
},
|
||||
template: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: false,
|
||||
},
|
||||
locale: {
|
||||
type: String,
|
||||
|
@ -49,7 +49,7 @@ updateMessage();
|
|||
|
||||
function updateMessage() {
|
||||
const params = props.data;
|
||||
const key = `templates['${props.template}']`;
|
||||
const key = props.template ? `templates['${props.template}']` : '';
|
||||
|
||||
message.value = t(key, params, { locale: locale.value });
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ export default {
|
|||
markAll: 'Mark all',
|
||||
noResults: 'No results',
|
||||
system: 'System',
|
||||
notificationSent: 'Notification sent',
|
||||
},
|
||||
errors: {
|
||||
statusUnauthorized: 'Access denied',
|
||||
|
@ -158,6 +159,7 @@ export default {
|
|||
debt: 'Debt',
|
||||
isDisabled: 'Customer is disabled',
|
||||
isFrozen: 'Customer is frozen',
|
||||
webAccountInactive: 'Web account inactive',
|
||||
hasDebt: 'Customer has debt',
|
||||
notChecked: 'Customer not checked',
|
||||
noWebAccess: 'Web access is disabled',
|
||||
|
|
|
@ -64,6 +64,7 @@ export default {
|
|||
markAll: 'Marcar todo',
|
||||
noResults: 'Sin resultados',
|
||||
system: 'Sistema',
|
||||
notificationSent: 'Notificación enviada',
|
||||
},
|
||||
errors: {
|
||||
statusUnauthorized: 'Acceso denegado',
|
||||
|
@ -157,6 +158,7 @@ export default {
|
|||
debt: 'Riesgo',
|
||||
isDisabled: 'El cliente está desactivado',
|
||||
isFrozen: 'El cliente está congelado',
|
||||
webAccountInactive: 'Sin acceso web',
|
||||
hasDebt: 'El cliente tiene riesgo',
|
||||
notChecked: 'El cliente no está comprobado',
|
||||
noWebAccess: 'El acceso web está desactivado',
|
||||
|
|
|
@ -12,7 +12,7 @@ const router = useRouter();
|
|||
|
||||
const provincesLocation = ref([]);
|
||||
|
||||
const consigneeFilter = {
|
||||
const addressFilter = {
|
||||
fields: [
|
||||
'id',
|
||||
'isDefaultAddress',
|
||||
|
@ -51,16 +51,16 @@ const setProvince = (provinceFk) => {
|
|||
return result[0]?.name || '';
|
||||
};
|
||||
|
||||
const toCustomerConsigneeCreate = () => {
|
||||
router.push({ name: 'CustomerConsigneeCreate' });
|
||||
const toCustomerAddressCreate = () => {
|
||||
router.push({ name: 'CustomerAddressCreate' });
|
||||
};
|
||||
|
||||
const toCustomerConsigneeEdit = (consigneeId) => {
|
||||
const toCustomerAddressEdit = (addressId) => {
|
||||
router.push({
|
||||
name: 'CustomerConsigneeEdit',
|
||||
name: 'CustomerAddressEdit',
|
||||
params: {
|
||||
id: route.params.id,
|
||||
consigneeId,
|
||||
addressId,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
@ -75,21 +75,21 @@ const toCustomerConsigneeEdit = (consigneeId) => {
|
|||
|
||||
<QCard class="q-pa-lg">
|
||||
<VnPaginate
|
||||
data-key="CustomerConsignees"
|
||||
data-key="CustomerAddress"
|
||||
:url="`Clients/${route.params.id}/addresses`"
|
||||
order="id"
|
||||
auto-load
|
||||
:filter="consigneeFilter"
|
||||
:filter="addressFilter"
|
||||
>
|
||||
<template #body="{ rows }">
|
||||
<QCard
|
||||
v-for="(item, index) in rows"
|
||||
:key="index"
|
||||
:class="{
|
||||
'consignees-card': true,
|
||||
'address-card': true,
|
||||
'q-mb-md': index < rows.length - 1,
|
||||
}"
|
||||
@click="toCustomerConsigneeEdit(item.id)"
|
||||
@click="toCustomerAddressEdit(item.id)"
|
||||
>
|
||||
<div class="q-ml-xs q-mr-md flex items-center">
|
||||
<QIcon name="star" size="md" color="primary" />
|
||||
|
@ -142,7 +142,7 @@ const toCustomerConsigneeEdit = (consigneeId) => {
|
|||
</QCard>
|
||||
|
||||
<QPageSticky :offset="[18, 18]">
|
||||
<QBtn @click.stop="toCustomerConsigneeCreate()" color="primary" fab icon="add" />
|
||||
<QBtn @click.stop="toCustomerAddressCreate()" color="primary" fab icon="add" />
|
||||
<QTooltip>
|
||||
{{ t('New consignee') }}
|
||||
</QTooltip>
|
||||
|
@ -150,7 +150,7 @@ const toCustomerConsigneeEdit = (consigneeId) => {
|
|||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.consignees-card {
|
||||
.address-card {
|
||||
border: 2px solid var(--vn-light-gray);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
|
@ -66,6 +66,7 @@ const onSubmit = async () => {
|
|||
try {
|
||||
await axios.post('ClientContacts/crud', payload);
|
||||
notes = [];
|
||||
notify('globals.dataCreated', 'positive');
|
||||
await getData();
|
||||
} catch (error) {
|
||||
notify('errors.create', 'negative');
|
||||
|
@ -89,7 +90,12 @@ const onSubmit = async () => {
|
|||
</div>
|
||||
|
||||
<div class="col">
|
||||
<VnInput :label="t('Phone')" clearable v-model="note.phone" />
|
||||
<VnInput
|
||||
:label="t('Phone')"
|
||||
clearable
|
||||
type="number"
|
||||
v-model="note.phone"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
|
|
|
@ -10,6 +10,7 @@ import useCardDescription from 'src/composables/useCardDescription';
|
|||
import CardDescriptor from 'components/ui/CardDescriptor.vue';
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
import VnUserLink from 'src/components/ui/VnUserLink.vue';
|
||||
import CustomerDescriptorMenu from './CustomerDescriptorMenu.vue';
|
||||
|
||||
const $props = defineProps({
|
||||
id: {
|
||||
|
@ -44,6 +45,9 @@ const setData = (entity) => (data.value = useCardDescription(entity.name, entity
|
|||
:summary="$props.summary"
|
||||
data-key="customerData"
|
||||
>
|
||||
<template #menu="{ entity }">
|
||||
<CustomerDescriptorMenu :customer="entity" />
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv v-if="entity.salesPersonUser" :label="t('customer.card.salesPerson')">
|
||||
<template #value>
|
||||
|
@ -79,6 +83,14 @@ const setData = (entity) => (data.value = useCardDescription(entity.name, entity
|
|||
>
|
||||
<QTooltip>{{ t('customer.card.isFrozen') }}</QTooltip>
|
||||
</QIcon>
|
||||
<QIcon
|
||||
color="primary"
|
||||
name="vn:noweb"
|
||||
size="sm"
|
||||
v-if="entity.account.active == false"
|
||||
>
|
||||
<QTooltip>{{ t('customer.card.webAccountInactive') }}</QTooltip>
|
||||
</QIcon>
|
||||
<QIcon
|
||||
v-if="entity.debt > entity.credit"
|
||||
name="vn:risk"
|
||||
|
@ -98,9 +110,6 @@ const setData = (entity) => (data.value = useCardDescription(entity.name, entity
|
|||
</QCardActions>
|
||||
</template>
|
||||
<template #actions="{ entity }">
|
||||
<div class="flex justify-center q-mb-md">
|
||||
<QIcon color="primary" name="vn:noweb" size="sm" />
|
||||
</div>
|
||||
<QCardActions class="flex justify-center">
|
||||
<QBtn
|
||||
:to="{
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
<script setup>
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
import axios from 'axios';
|
||||
import { useQuasar } from 'quasar';
|
||||
|
||||
import useNotify from 'src/composables/useNotify';
|
||||
|
||||
import VnSmsDialog from 'src/components/common/VnSmsDialog.vue';
|
||||
|
||||
const $props = defineProps({
|
||||
customer: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const { notify } = useNotify();
|
||||
const { t } = useI18n();
|
||||
const quasar = useQuasar();
|
||||
const route = useRoute();
|
||||
|
||||
const showSmsDialog = () => {
|
||||
console.log('showSmsDialog()');
|
||||
quasar.dialog({
|
||||
component: VnSmsDialog,
|
||||
componentProps: {
|
||||
phone: $props.customer.phone,
|
||||
promise: sendSms,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const sendSms = async (payload) => {
|
||||
payload.destinationFk = route.params.id;
|
||||
try {
|
||||
await axios.post(`Clients/${route.params.id}/sendSms`, payload);
|
||||
notify('globals.notificationSent', 'positive');
|
||||
} catch (error) {
|
||||
notify(error.message, 'positive');
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QItem v-ripple clickable>
|
||||
<QItemSection>
|
||||
<RouterLink :to="{ name: 'TicketCreate' }" class="color-vn-text">
|
||||
{{ t('Simple ticket') }}
|
||||
</RouterLink>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem v-ripple clickable>
|
||||
<QItemSection @click="showSmsDialog()">{{ t('Send SMS') }}</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Simple ticket: Ticket simple
|
||||
Send SMS: Enviar SMS
|
||||
</i18n>
|
|
@ -162,14 +162,6 @@ const toCustomerGreugeCreate = () => {
|
|||
</QPageSticky>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
.consignees-card {
|
||||
border: 2px solid var(--vn-light-gray);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Total: Total
|
||||
|
|
|
@ -59,18 +59,6 @@ const toCustomerNoteCreate = () => {
|
|||
{{ t('globals.noResults') }}
|
||||
</h5>
|
||||
</div>
|
||||
|
||||
<QPageSticky :offset="[18, 18]">
|
||||
<QBtn
|
||||
@click.stop="toCustomerNoteCreate()"
|
||||
color="primary"
|
||||
fab
|
||||
icon="add"
|
||||
/>
|
||||
<QTooltip>
|
||||
{{ t('New consignee') }}
|
||||
</QTooltip>
|
||||
</QPageSticky>
|
||||
</template>
|
||||
</VnPaginate>
|
||||
</QCard>
|
||||
|
@ -78,7 +66,7 @@ const toCustomerNoteCreate = () => {
|
|||
<QPageSticky :offset="[18, 18]">
|
||||
<QBtn @click.stop="toCustomerNoteCreate()" color="primary" fab icon="add" />
|
||||
<QTooltip>
|
||||
{{ t('New consignee') }}
|
||||
{{ t('New note') }}
|
||||
</QTooltip>
|
||||
</QPageSticky>
|
||||
</template>
|
||||
|
@ -90,3 +78,8 @@ const toCustomerNoteCreate = () => {
|
|||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
New note: Nueva nota
|
||||
</i18n>
|
||||
|
|
|
@ -118,14 +118,6 @@ const toCustomerRecoverieCreate = () => {
|
|||
</QPageSticky>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
.consignees-card {
|
||||
border: 2px solid var(--vn-light-gray);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Since: Desde
|
||||
|
|
|
@ -128,14 +128,6 @@ const toCustomerSamplesCreate = () => {
|
|||
</QPageSticky>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
.consignees-card {
|
||||
border: 2px solid var(--vn-light-gray);
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Sent: Enviado
|
||||
|
|
|
@ -53,9 +53,9 @@ const refreshData = () => {
|
|||
getCustomsAgents();
|
||||
};
|
||||
|
||||
const toCustomerConsignees = () => {
|
||||
const toCustomerAddress = () => {
|
||||
router.push({
|
||||
name: 'CustomerConsignees',
|
||||
name: 'CustomerAddress',
|
||||
params: {
|
||||
id: route.params.id,
|
||||
},
|
||||
|
@ -92,7 +92,7 @@ const toCustomerConsignees = () => {
|
|||
:form-initial-data="formInitialData"
|
||||
:observe-form-changes="false"
|
||||
:url-create="urlCreate"
|
||||
@on-data-saved="toCustomerConsignees()"
|
||||
@on-data-saved="toCustomerAddress()"
|
||||
model="client"
|
||||
>
|
||||
<template #form="{ data, validate }">
|
|
@ -31,7 +31,7 @@ const observationTypes = ref([]);
|
|||
const notes = ref([]);
|
||||
|
||||
onBeforeMount(() => {
|
||||
urlUpdate.value = `Clients/${route.params.id}/updateAddress/${route.params.consigneeId}`;
|
||||
urlUpdate.value = `Clients/${route.params.id}/updateAddress/${route.params.addressId}`;
|
||||
});
|
||||
|
||||
const onPostcodeCreated = async ({ code, provinceFk, townFk }, formData) => {
|
||||
|
@ -48,7 +48,7 @@ const getData = async (observations) => {
|
|||
if (observationTypes.value.length) {
|
||||
const filter = {
|
||||
fields: ['id', 'addressFk', 'observationTypeFk', 'description'],
|
||||
where: { addressFk: `${route.params.consigneeId}` },
|
||||
where: { addressFk: `${route.params.addressId}` },
|
||||
};
|
||||
const { data } = await axios.get('AddressObservations', {
|
||||
params: { filter: JSON.stringify(filter) },
|
||||
|
@ -65,7 +65,7 @@ const getData = async (observations) => {
|
|||
$isNew: false,
|
||||
$oldData: null,
|
||||
$orgIndex: null,
|
||||
addressFk: `${route.params.consigneeId}`,
|
||||
addressFk: `${route.params.addressId}`,
|
||||
description: observation.description,
|
||||
observationTypeFk: type.id,
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ const addNote = () => {
|
|||
$isNew: true,
|
||||
$oldData: null,
|
||||
$orgIndex: null,
|
||||
addressFk: `${route.params.consigneeId}`,
|
||||
addressFk: `${route.params.addressId}`,
|
||||
description: '',
|
||||
observationTypeFk: '',
|
||||
});
|
||||
|
@ -133,7 +133,7 @@ const onDataSaved = () => {
|
|||
<FormModel
|
||||
:observe-form-changes="false"
|
||||
:url-update="urlUpdate"
|
||||
:url="`Addresses/${route.params.consigneeId}`"
|
||||
:url="`Addresses/${route.params.addressId}`"
|
||||
@on-data-saved="onDataSaved()"
|
||||
auto-load
|
||||
model="client"
|
|
@ -21,7 +21,7 @@ export default {
|
|||
'CustomerBasicData',
|
||||
'CustomerFiscalData',
|
||||
'CustomerBillingData',
|
||||
'CustomerConsignees',
|
||||
'CustomerAddress',
|
||||
'CustomerNotes',
|
||||
'CustomerCredits',
|
||||
'CustomerGreuges',
|
||||
|
@ -151,45 +151,45 @@ export default {
|
|||
import('src/pages/Customer/Card/CustomerBillingData.vue'),
|
||||
},
|
||||
{
|
||||
path: 'consignees',
|
||||
name: 'ConsigneesCard',
|
||||
redirect: { name: 'CustomerConsignees' },
|
||||
path: 'address',
|
||||
name: 'AddressCard',
|
||||
redirect: { name: 'CustomerAddress' },
|
||||
children: [
|
||||
{
|
||||
path: '',
|
||||
name: 'CustomerConsignees',
|
||||
name: 'CustomerAddress',
|
||||
meta: {
|
||||
icon: 'vn:delivery',
|
||||
title: 'consignees',
|
||||
},
|
||||
component: () =>
|
||||
import('src/pages/Customer/Card/CustomerConsignees.vue'),
|
||||
import('src/pages/Customer/Card/CustomerAddress.vue'),
|
||||
},
|
||||
{
|
||||
path: 'create',
|
||||
name: 'CustomerConsigneeCreate',
|
||||
name: 'CustomerAddressCreate',
|
||||
meta: {
|
||||
title: 'consignee-create',
|
||||
title: 'address-create',
|
||||
},
|
||||
component: () =>
|
||||
import(
|
||||
'src/pages/Customer/components/CustomerConsigneeCreate.vue'
|
||||
'src/pages/Customer/components/CustomerAddressCreate.vue'
|
||||
),
|
||||
},
|
||||
{
|
||||
path: ':consigneeId',
|
||||
name: 'CustomerConsigneeEditCard',
|
||||
redirect: { name: 'CustomerConsigneeEdit' },
|
||||
path: ':addressId',
|
||||
name: 'CustomerAddressEditCard',
|
||||
redirect: { name: 'CustomerAddressEdit' },
|
||||
children: [
|
||||
{
|
||||
path: 'edit',
|
||||
name: 'CustomerConsigneeEdit',
|
||||
name: 'CustomerAddressEdit',
|
||||
meta: {
|
||||
title: 'consignee-edit',
|
||||
title: 'address-edit',
|
||||
},
|
||||
component: () =>
|
||||
import(
|
||||
'src/pages/Customer/components/CustomerConsigneeEdit.vue'
|
||||
'src/pages/Customer/components/CustomerAddressEdit.vue'
|
||||
),
|
||||
},
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue