Reviewed-on: #204 Reviewed-by: Javi Gallego <jgallego@verdnatura.es> Reviewed-by: JAVIER SEGARRA MARTINEZ <jsegarra@verdnatura.es>
This commit is contained in:
commit
a1a342a107
|
@ -1,8 +1,9 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
import { dashIfEmpty } from 'src/filters';
|
import { dashIfEmpty } from 'src/filters';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useClipboard } from 'src/composables/useClipboard';
|
import { useClipboard } from 'src/composables/useClipboard';
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
label: { type: String, default: null },
|
label: { type: String, default: null },
|
||||||
value: {
|
value: {
|
||||||
|
@ -13,8 +14,9 @@ const $props = defineProps({
|
||||||
dash: { type: Boolean, default: true },
|
dash: { type: Boolean, default: true },
|
||||||
copy: { type: Boolean, default: false },
|
copy: { type: Boolean, default: false },
|
||||||
});
|
});
|
||||||
const isBooleanValue = computed(() => typeof $props.value === 'boolean');
|
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const isBooleanValue = computed(() => typeof $props.value === 'boolean');
|
||||||
const { copyText } = useClipboard();
|
const { copyText } = useClipboard();
|
||||||
|
|
||||||
function copyValueText() {
|
function copyValueText() {
|
||||||
|
@ -54,22 +56,29 @@ function copyValueText() {
|
||||||
</slot>
|
</slot>
|
||||||
</div>
|
</div>
|
||||||
<div class="info" v-if="$props.info">
|
<div class="info" v-if="$props.info">
|
||||||
<QIcon name="info">
|
<QIcon name="info" class="cursor-pointer" size="xs" color="grey">
|
||||||
<QTooltip class="bg-dark text-white shadow-4" :offset="[10, 10]">
|
<QTooltip class="bg-dark text-white shadow-4" :offset="[10, 10]">
|
||||||
{{ $props.info }}
|
{{ $props.info }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
</div>
|
</div>
|
||||||
<div class="copy" v-if="$props.copy && $props.value" @click="copyValueText()">
|
<div class="copy" v-if="$props.copy && $props.value" @click="copyValueText()">
|
||||||
<QIcon name="Content_Copy" color="primary" />
|
<QIcon name="Content_Copy" color="primary">
|
||||||
|
<QTooltip>{{ t('globals.copyClipboard') }}</QTooltip>
|
||||||
|
</QIcon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.vn-label-value:hover .copy {
|
||||||
|
visibility: visible;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
.copy {
|
.copy {
|
||||||
&:hover {
|
visibility: hidden;
|
||||||
cursor: pointer;
|
}
|
||||||
}
|
.info {
|
||||||
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -70,6 +70,7 @@ export default {
|
||||||
system: 'System',
|
system: 'System',
|
||||||
fieldRequired: 'Field required',
|
fieldRequired: 'Field required',
|
||||||
allowedFilesText: 'Allowed file types: { allowedContentTypes }',
|
allowedFilesText: 'Allowed file types: { allowedContentTypes }',
|
||||||
|
copyClipboard: 'Copy on clipboard',
|
||||||
},
|
},
|
||||||
errors: {
|
errors: {
|
||||||
statusUnauthorized: 'Access denied',
|
statusUnauthorized: 'Access denied',
|
||||||
|
@ -166,7 +167,7 @@ export default {
|
||||||
fiscalAddress: 'Fiscal address',
|
fiscalAddress: 'Fiscal address',
|
||||||
fiscalData: 'Fiscal data',
|
fiscalData: 'Fiscal data',
|
||||||
billingData: 'Billing data',
|
billingData: 'Billing data',
|
||||||
consignee: 'Consignee',
|
consignee: 'Default consignee',
|
||||||
businessData: 'Business data',
|
businessData: 'Business data',
|
||||||
financialData: 'Financial data',
|
financialData: 'Financial data',
|
||||||
customerId: 'Customer ID',
|
customerId: 'Customer ID',
|
||||||
|
@ -219,6 +220,8 @@ export default {
|
||||||
recoverySince: 'Recovery since',
|
recoverySince: 'Recovery since',
|
||||||
businessType: 'Business Type',
|
businessType: 'Business Type',
|
||||||
city: 'City',
|
city: 'City',
|
||||||
|
rating: 'Rating',
|
||||||
|
recommendCredit: 'Recommended credit',
|
||||||
},
|
},
|
||||||
basicData: {
|
basicData: {
|
||||||
socialName: 'Fiscal name',
|
socialName: 'Fiscal name',
|
||||||
|
|
|
@ -70,6 +70,7 @@ export default {
|
||||||
system: 'Sistema',
|
system: 'Sistema',
|
||||||
fieldRequired: 'Campo requerido',
|
fieldRequired: 'Campo requerido',
|
||||||
allowedFilesText: 'Tipos de archivo permitidos: { allowedContentTypes }',
|
allowedFilesText: 'Tipos de archivo permitidos: { allowedContentTypes }',
|
||||||
|
copyClipboard: 'Copiar en portapapeles',
|
||||||
},
|
},
|
||||||
errors: {
|
errors: {
|
||||||
statusUnauthorized: 'Acceso denegado',
|
statusUnauthorized: 'Acceso denegado',
|
||||||
|
@ -165,7 +166,7 @@ export default {
|
||||||
fiscalAddress: 'Dirección fiscal',
|
fiscalAddress: 'Dirección fiscal',
|
||||||
fiscalData: 'Datos fiscales',
|
fiscalData: 'Datos fiscales',
|
||||||
billingData: 'Datos de facturación',
|
billingData: 'Datos de facturación',
|
||||||
consignee: 'Consignatario',
|
consignee: 'Consignatario pred.',
|
||||||
businessData: 'Datos comerciales',
|
businessData: 'Datos comerciales',
|
||||||
financialData: 'Datos financieros',
|
financialData: 'Datos financieros',
|
||||||
customerId: 'ID cliente',
|
customerId: 'ID cliente',
|
||||||
|
@ -218,6 +219,8 @@ export default {
|
||||||
recoverySince: 'Recobro desde',
|
recoverySince: 'Recobro desde',
|
||||||
businessType: 'Tipo de negocio',
|
businessType: 'Tipo de negocio',
|
||||||
city: 'Población',
|
city: 'Población',
|
||||||
|
rating: 'Clasificación',
|
||||||
|
recommendCredit: 'Crédito recomendado',
|
||||||
},
|
},
|
||||||
basicData: {
|
basicData: {
|
||||||
socialName: 'Nombre fiscal',
|
socialName: 'Nombre fiscal',
|
||||||
|
|
|
@ -122,7 +122,7 @@ const creditWarning = computed(() => {
|
||||||
</QCard>
|
</QCard>
|
||||||
<QCard class="vn-one">
|
<QCard class="vn-one">
|
||||||
<a class="header link" :href="clientUrl + `fiscal-data`" link>
|
<a class="header link" :href="clientUrl + `fiscal-data`" link>
|
||||||
{{ t('customer.summary.fiscalAddress') }}
|
{{ t('customer.summary.fiscalData') }}
|
||||||
<QIcon name="open_in_new" color="primary" />
|
<QIcon name="open_in_new" color="primary" />
|
||||||
</a>
|
</a>
|
||||||
<VnLv
|
<VnLv
|
||||||
|
@ -235,7 +235,8 @@ const creditWarning = computed(() => {
|
||||||
link
|
link
|
||||||
>
|
>
|
||||||
{{ t('customer.summary.financialData') }}
|
{{ t('customer.summary.financialData') }}
|
||||||
<QIcon name="vn:grafana" color="primary" />
|
<QIcon name="open_in_new" color="primary" />
|
||||||
|
<!-- Pendiente de añadir el icono <QIcon name="vn:grafana" color="primary" /> -->
|
||||||
</a>
|
</a>
|
||||||
<VnLv
|
<VnLv
|
||||||
:label="t('customer.summary.risk')"
|
:label="t('customer.summary.risk')"
|
||||||
|
@ -276,7 +277,30 @@ const creditWarning = computed(() => {
|
||||||
:label="t('customer.summary.recoverySince')"
|
:label="t('customer.summary.recoverySince')"
|
||||||
:value="toDate(entity.recovery.started)"
|
:value="toDate(entity.recovery.started)"
|
||||||
/>
|
/>
|
||||||
|
<VnLv
|
||||||
|
:label="t('customer.summary.rating')"
|
||||||
|
:value="entity.rating"
|
||||||
|
:info="t('valueInfo', { min: 1, max: 20 })"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<VnLv
|
||||||
|
:label="t('customer.summary.recommendCredit')"
|
||||||
|
:value="entity.recommendedCredit"
|
||||||
|
/>
|
||||||
</QCard>
|
</QCard>
|
||||||
</template>
|
</template>
|
||||||
</CardSummary>
|
</CardSummary>
|
||||||
</template>
|
</template>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@media (min-width: $breakpoint-md) {
|
||||||
|
.summary .vn-one {
|
||||||
|
min-width: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<i18n>
|
||||||
|
en:
|
||||||
|
valueInfo: Value from {min} to {max}. The higher the better value
|
||||||
|
es:
|
||||||
|
valueInfo: Valor de {min} a {max}. Cuanto más alto, mejor valor
|
||||||
|
</i18n>
|
||||||
|
|
|
@ -13,7 +13,7 @@ import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||||
|
|
||||||
import { useArrayData } from 'composables/useArrayData';
|
import { useArrayData } from 'composables/useArrayData';
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
import { dashIfEmpty, toDate } from 'src/filters';
|
import { toDate } from 'src/filters';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -477,17 +477,11 @@ const stopEventPropagation = (event, col) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
};
|
};
|
||||||
|
|
||||||
const navigateToTravelId = (id) => {
|
const navigateToTravelId = (id) => router.push({ path: `/customer/${id}` });
|
||||||
router.push({ path: `/customer/${id}` });
|
|
||||||
};
|
|
||||||
|
|
||||||
const selectCustomerId = (id) => {
|
const selectCustomerId = (id) => (selectedCustomerId.value = id);
|
||||||
selectedCustomerId.value = id;
|
|
||||||
};
|
|
||||||
|
|
||||||
const selectSalesPersonId = (id) => {
|
const selectSalesPersonId = (id) => (selectedSalesPersonId.value = id);
|
||||||
selectedSalesPersonId.value = id;
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -521,37 +515,50 @@ const selectSalesPersonId = (id) => {
|
||||||
class="full-width q-mt-md"
|
class="full-width q-mt-md"
|
||||||
row-key="id"
|
row-key="id"
|
||||||
:visible-columns="visibleColumns"
|
:visible-columns="visibleColumns"
|
||||||
|
@row-click="(evt, row, id) => navigateToTravelId(row.id)"
|
||||||
>
|
>
|
||||||
<template #body="props">
|
<template #body-cell="{ col, value }">
|
||||||
<QTr
|
<QTd @click="stopEventPropagation($event, col)">
|
||||||
:props="props"
|
{{ value }}
|
||||||
@click="navigateToTravelId(props.row.id)"
|
</QTd>
|
||||||
class="cursor-pointer"
|
</template>
|
||||||
>
|
<template #body-cell-id="props">
|
||||||
<QTd
|
<QTd @click="stopEventPropagation($event, props.col)">
|
||||||
v-for="col in props.cols"
|
<component
|
||||||
:key="col.name"
|
:is="tableColumnComponents[props.col.name].component"
|
||||||
:props="props"
|
class="col-content"
|
||||||
@click="stopEventPropagation($event, col)"
|
v-bind="tableColumnComponents[props.col.name].props(props)"
|
||||||
|
@click="tableColumnComponents[props.col.name].event(props)"
|
||||||
>
|
>
|
||||||
<component
|
<CustomerDescriptorProxy :id="props.row.id" />
|
||||||
:is="tableColumnComponents[col.name].component"
|
{{ props.row.id }}
|
||||||
class="col-content"
|
</component>
|
||||||
v-bind="tableColumnComponents[col.name].props(props)"
|
</QTd>
|
||||||
@click="tableColumnComponents[col.name].event(props)"
|
</template>
|
||||||
>
|
<template #body-cell-salesPersonFk="props">
|
||||||
{{ dashIfEmpty(col.value) }}
|
<QTd @click="stopEventPropagation($event, props.col)">
|
||||||
<WorkerDescriptorProxy
|
<component
|
||||||
v-if="props.row.salesPersonFk"
|
v-if="props.row.salesPerson"
|
||||||
:id="selectedSalesPersonId"
|
class="col-content"
|
||||||
/>
|
:is="tableColumnComponents[props.col.name].component"
|
||||||
<CustomerDescriptorProxy
|
v-bind="tableColumnComponents[props.col.name].props(props)"
|
||||||
v-if="props.row.id"
|
@click="tableColumnComponents[props.col.name].event(props)"
|
||||||
:id="selectedCustomerId"
|
>
|
||||||
/>
|
<WorkerDescriptorProxy :id="props.row.salesPersonFk" />
|
||||||
</component>
|
{{ props.row.salesPerson }}
|
||||||
</QTd>
|
</component>
|
||||||
</QTr>
|
<span class="col-content" v-else>-</span>
|
||||||
|
</QTd>
|
||||||
|
</template>
|
||||||
|
<template #body-cell-actions="props">
|
||||||
|
<QTd @click="stopEventPropagation($event, props.col)">
|
||||||
|
<component
|
||||||
|
:is="tableColumnComponents[props.col.name].component"
|
||||||
|
class="col-content"
|
||||||
|
v-bind="tableColumnComponents[props.col.name].props(props)"
|
||||||
|
@click="tableColumnComponents[props.col.name].event(props)"
|
||||||
|
/>
|
||||||
|
</QTd>
|
||||||
</template>
|
</template>
|
||||||
</QTable>
|
</QTable>
|
||||||
</QPage>
|
</QPage>
|
||||||
|
|
Loading…
Reference in New Issue