forked from verdnatura/salix-front
fix: customerDefaulter correct functionality
This commit is contained in:
parent
c253959e01
commit
83596daf76
|
@ -147,7 +147,7 @@ const col = computed(() => {
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(newColumn.name.startsWith('is') || newColumn.name.startsWith('has')) &&
|
(newColumn.name.startsWith('is') || newColumn.name.startsWith('has')) &&
|
||||||
!newColumn.component
|
newColumn.component == null
|
||||||
)
|
)
|
||||||
newColumn.component = 'checkbox';
|
newColumn.component = 'checkbox';
|
||||||
if ($props.default && !newColumn.component) newColumn.component = $props.default;
|
if ($props.default && !newColumn.component) newColumn.component = $props.default;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import { useArrayData } from 'composables/useArrayData';
|
import { useArrayData } from 'composables/useArrayData';
|
||||||
const model = defineModel({ type: Object, required: true });
|
const model = defineModel({ type: Object });
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
|
@ -56,7 +56,7 @@ defineExpose({ orderBy });
|
||||||
<span :title="label">{{ label }}</span>
|
<span :title="label">{{ label }}</span>
|
||||||
<QChip
|
<QChip
|
||||||
v-if="name"
|
v-if="name"
|
||||||
:label="!vertical && model?.index"
|
:label="!vertical ? model?.index : ''"
|
||||||
:icon="
|
:icon="
|
||||||
(model?.index || hover) && !vertical
|
(model?.index || hover) && !vertical
|
||||||
? model?.direction == 'DESC'
|
? model?.direction == 'DESC'
|
||||||
|
|
|
@ -92,9 +92,9 @@ const route = useRoute();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
|
|
||||||
const DEFAULT_MODE = 'card';
|
const CARD_MODE = 'card';
|
||||||
const TABLE_MODE = 'table';
|
const TABLE_MODE = 'table';
|
||||||
const mode = ref(DEFAULT_MODE);
|
const mode = ref(CARD_MODE);
|
||||||
const selected = ref([]);
|
const selected = ref([]);
|
||||||
const routeQuery = JSON.parse(route?.query[$props.searchUrl] ?? '{}');
|
const routeQuery = JSON.parse(route?.query[$props.searchUrl] ?? '{}');
|
||||||
const params = ref({ ...routeQuery, ...routeQuery.filter?.where });
|
const params = ref({ ...routeQuery, ...routeQuery.filter?.where });
|
||||||
|
@ -113,13 +113,16 @@ const tableModes = [
|
||||||
{
|
{
|
||||||
icon: 'grid_view',
|
icon: 'grid_view',
|
||||||
title: t('grid view'),
|
title: t('grid view'),
|
||||||
value: DEFAULT_MODE,
|
value: CARD_MODE,
|
||||||
disable: $props.disableOption?.card,
|
disable: $props.disableOption?.card,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
mode.value = quasar.platform.is.mobile ? DEFAULT_MODE : $props.defaultMode;
|
mode.value =
|
||||||
|
quasar.platform.is.mobile && !$props.disableOption?.card
|
||||||
|
? CARD_MODE
|
||||||
|
: $props.defaultMode;
|
||||||
stateStore.rightDrawer = true;
|
stateStore.rightDrawer = true;
|
||||||
setUserParams(route.query[$props.searchUrl]);
|
setUserParams(route.query[$props.searchUrl]);
|
||||||
columnsVisibilitySkiped.value = [
|
columnsVisibilitySkiped.value = [
|
||||||
|
@ -208,6 +211,7 @@ function stopEventPropagation(event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload(params) {
|
function reload(params) {
|
||||||
|
selected.value = [];
|
||||||
CrudModelRef.value.reload(params);
|
CrudModelRef.value.reload(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,15 +17,17 @@ const $props = defineProps({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let mixed;
|
||||||
const componentArray = computed(() => {
|
const componentArray = computed(() => {
|
||||||
if (typeof $props.prop === 'object') return [$props.prop];
|
if (typeof $props.prop === 'object') return [$props.prop];
|
||||||
return $props.prop;
|
return $props.prop;
|
||||||
});
|
});
|
||||||
|
|
||||||
function mix(toComponent) {
|
function mix(toComponent) {
|
||||||
|
if (mixed) return mixed;
|
||||||
const { component, attrs, event } = toComponent;
|
const { component, attrs, event } = toComponent;
|
||||||
const customComponent = $props.components[component];
|
const customComponent = $props.components[component];
|
||||||
return {
|
mixed = {
|
||||||
component: customComponent?.component ?? component,
|
component: customComponent?.component ?? component,
|
||||||
attrs: {
|
attrs: {
|
||||||
...toValueAttrs(attrs),
|
...toValueAttrs(attrs),
|
||||||
|
@ -35,6 +37,7 @@ function mix(toComponent) {
|
||||||
},
|
},
|
||||||
event: event ?? customComponent?.event,
|
event: event ?? customComponent?.event,
|
||||||
};
|
};
|
||||||
|
return mixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
function toValueAttrs(attrs) {
|
function toValueAttrs(attrs) {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { QBtn, QCheckbox, useQuasar } from 'quasar';
|
import { useQuasar } from 'quasar';
|
||||||
import { toCurrency, toDate, dateRange } from 'filters/index';
|
import { toCurrency, toDate, dateRange } from 'filters/index';
|
||||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
|
||||||
import CustomerNotificationsFilter from './CustomerDefaulterFilter.vue';
|
import CustomerNotificationsFilter from './CustomerDefaulterFilter.vue';
|
||||||
import CustomerBalanceDueTotal from './CustomerBalanceDueTotal.vue';
|
import CustomerBalanceDueTotal from './CustomerBalanceDueTotal.vue';
|
||||||
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
|
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
|
||||||
|
@ -11,8 +10,9 @@ import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.v
|
||||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
import VnInput from 'src/components/common/VnInput.vue';
|
||||||
import CustomerDefaulterAddObservation from './CustomerDefaulterAddObservation.vue';
|
import CustomerDefaulterAddObservation from './CustomerDefaulterAddObservation.vue';
|
||||||
import axios from 'axios';
|
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
|
||||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
import RightMenu from 'src/components/common/RightMenu.vue';
|
||||||
|
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
|
@ -21,175 +21,139 @@ const dataRef = ref(null);
|
||||||
const balanceDueTotal = ref(0);
|
const balanceDueTotal = ref(0);
|
||||||
const selected = ref([]);
|
const selected = ref([]);
|
||||||
|
|
||||||
const tableColumnComponents = {
|
|
||||||
clientFk: {
|
|
||||||
component: QBtn,
|
|
||||||
props: () => ({ flat: true, class: 'link', noCaps: true }),
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
isWorker: {
|
|
||||||
component: QCheckbox,
|
|
||||||
props: (prop) => ({
|
|
||||||
disable: true,
|
|
||||||
'model-value': Boolean(prop.value),
|
|
||||||
}),
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
salesPerson: {
|
|
||||||
component: QBtn,
|
|
||||||
props: () => ({ flat: true, class: 'link', noCaps: true }),
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
departmentName: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
country: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
payMethod: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
balance: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
author: {
|
|
||||||
component: QBtn,
|
|
||||||
props: () => ({ flat: true, class: 'link', noCaps: true }),
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
lastObservation: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
date: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
credit: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
from: {
|
|
||||||
component: 'span',
|
|
||||||
props: () => {},
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
finished: {
|
|
||||||
component: QCheckbox,
|
|
||||||
|
|
||||||
props: (prop) => ({
|
|
||||||
disable: true,
|
|
||||||
'model-value': prop.value,
|
|
||||||
}),
|
|
||||||
event: () => {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const columns = computed(() => [
|
const columns = computed(() => [
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'clientName',
|
|
||||||
label: t('Client'),
|
|
||||||
name: 'clientFk',
|
name: 'clientFk',
|
||||||
sortable: true,
|
label: t('Client'),
|
||||||
|
columnFilter: {
|
||||||
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Clients',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: ({ isWorker }) => Boolean(isWorker),
|
|
||||||
label: t('Is worker'),
|
|
||||||
name: 'isWorker',
|
name: 'isWorker',
|
||||||
|
label: t('Is worker'),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'salesPersonName',
|
name: 'salesPersonFk',
|
||||||
label: t('Salesperson'),
|
label: t('Salesperson'),
|
||||||
name: 'salesPerson',
|
columnFilter: {
|
||||||
sortable: true,
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Workers/activeWithInheritedRole',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
where: { role: 'salesPerson' },
|
||||||
|
useLike: false,
|
||||||
|
optionValue: 'id',
|
||||||
|
optionLabel: 'name',
|
||||||
|
optionFilter: 'firstName',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'departmentName',
|
name: 'departmentFk',
|
||||||
label: t('Department'),
|
label: t('Department'),
|
||||||
name: 'departmentName',
|
columnFilter: {
|
||||||
sortable: true,
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Departments',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'country',
|
name: 'countryFk',
|
||||||
label: t('Country'),
|
label: t('Country'),
|
||||||
name: 'country',
|
format: ({ country }) => country,
|
||||||
sortable: true,
|
columnFilter: {
|
||||||
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Countries',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'payMethod',
|
|
||||||
label: t('P. Method'),
|
|
||||||
name: 'payMethod',
|
name: 'payMethod',
|
||||||
sortable: true,
|
label: t('P. Method'),
|
||||||
tooltip: t('Pay method'),
|
columnFilter: {
|
||||||
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Paymethods',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: ({ amount }) => toCurrency(amount),
|
name: 'amount',
|
||||||
label: t('Balance D.'),
|
label: t('Balance D.'),
|
||||||
name: 'balance',
|
format: ({ amount }) => toCurrency(amount),
|
||||||
sortable: true,
|
|
||||||
tooltip: t('Balance due'),
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'workerName',
|
name: 'workerFk',
|
||||||
label: t('Author'),
|
label: t('Author'),
|
||||||
name: 'author',
|
|
||||||
sortable: true,
|
|
||||||
tooltip: t('Worker who made the last observation'),
|
tooltip: t('Worker who made the last observation'),
|
||||||
|
columnFilter: {
|
||||||
|
component: 'select',
|
||||||
|
attrs: {
|
||||||
|
url: 'Workers/activeWithInheritedRole',
|
||||||
|
fields: ['id', 'name'],
|
||||||
|
useLike: false,
|
||||||
|
optionValue: 'id',
|
||||||
|
optionLabel: 'name',
|
||||||
|
optionFilter: 'firstName',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'observation',
|
name: 'observation',
|
||||||
label: t('Last observation'),
|
label: t('Last observation'),
|
||||||
name: 'lastObservation',
|
columnClass: 'expand',
|
||||||
sortable: true,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: ({ created }) => toDate(created),
|
name: 'created',
|
||||||
label: t('L. O. Date'),
|
label: t('L. O. Date'),
|
||||||
name: 'date',
|
format: ({ created }) => toDate(created),
|
||||||
sortable: true,
|
|
||||||
tooltip: t('Last observation date'),
|
tooltip: t('Last observation date'),
|
||||||
|
columnFilter: {
|
||||||
|
component: 'date',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: ({ creditInsurance }) => toCurrency(creditInsurance),
|
name: 'creditInsurance',
|
||||||
|
format: ({ creditInsurance }) => toCurrency(creditInsurance),
|
||||||
label: t('Credit I.'),
|
label: t('Credit I.'),
|
||||||
name: 'credit',
|
|
||||||
sortable: true,
|
|
||||||
tooltip: t('Credit insurance'),
|
tooltip: t('Credit insurance'),
|
||||||
|
columnFilter: {
|
||||||
|
component: 'number',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: ({ defaulterSinced }) => toDate(defaulterSinced),
|
name: 'defaulterSinced',
|
||||||
|
format: ({ defaulterSinced }) => toDate(defaulterSinced),
|
||||||
label: t('From'),
|
label: t('From'),
|
||||||
name: 'from',
|
columnFilter: {
|
||||||
sortable: true,
|
component: 'date',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'finished',
|
label: t('Has recovery'),
|
||||||
label: t('Has recover'),
|
name: 'hasRecovery',
|
||||||
name: 'finished',
|
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
@ -198,22 +162,12 @@ const viewAddObservation = (rowsSelected) => {
|
||||||
component: CustomerDefaulterAddObservation,
|
component: CustomerDefaulterAddObservation,
|
||||||
componentProps: {
|
componentProps: {
|
||||||
clients: rowsSelected,
|
clients: rowsSelected,
|
||||||
promise: async () => await dataRef.value.fetch(),
|
promise: async () => await dataRef.value.reload(),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const onFetch = async (data) => {
|
const onFetch = async (data) => {
|
||||||
const recoveryData = await axios.get('Recoveries');
|
|
||||||
const recoveries = recoveryData.data.map(({ clientFk, finished }) => ({
|
|
||||||
clientFk,
|
|
||||||
finished,
|
|
||||||
}));
|
|
||||||
|
|
||||||
data.forEach((item) => {
|
|
||||||
const recovery = recoveries.find(({ clientFk }) => clientFk === item.clientFk);
|
|
||||||
item.finished = recovery?.finished === null;
|
|
||||||
});
|
|
||||||
balanceDueTotal.value = data.reduce((acc, { amount = 0 }) => acc + amount, 0);
|
balanceDueTotal.value = data.reduce((acc, { amount = 0 }) => acc + amount, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -229,7 +183,7 @@ function exprBuilder(param, value) {
|
||||||
case 'payMethod':
|
case 'payMethod':
|
||||||
case 'salesPersonFk':
|
case 'salesPersonFk':
|
||||||
return { [`d.${param}`]: value };
|
return { [`d.${param}`]: value };
|
||||||
case 'date':
|
case 'created':
|
||||||
return { 'd.created': { between: dateRange(value) } };
|
return { 'd.created': { between: dateRange(value) } };
|
||||||
case 'defaulterSinced':
|
case 'defaulterSinced':
|
||||||
return { 'd.defaulterSinced': { between: dateRange(value) } };
|
return { 'd.defaulterSinced': { between: dateRange(value) } };
|
||||||
|
@ -246,123 +200,63 @@ function exprBuilder(param, value) {
|
||||||
<VnSubToolbar>
|
<VnSubToolbar>
|
||||||
<template #st-data>
|
<template #st-data>
|
||||||
<CustomerBalanceDueTotal :amount="balanceDueTotal" />
|
<CustomerBalanceDueTotal :amount="balanceDueTotal" />
|
||||||
<div class="flex items-center q-ml-lg">
|
</template>
|
||||||
<QBtn
|
<template #st-actions>
|
||||||
color="primary"
|
<QBtn
|
||||||
icon="vn:notes"
|
color="primary"
|
||||||
:disabled="!selected.length"
|
icon="vn:notes"
|
||||||
@click.stop="viewAddObservation(selected)"
|
:disabled="!selected.length"
|
||||||
>
|
@click.stop="viewAddObservation(selected)"
|
||||||
<QTooltip>{{ t('Add observation') }}</QTooltip>
|
>
|
||||||
</QBtn>
|
<QTooltip>{{ t('Add observation') }}</QTooltip>
|
||||||
</div>
|
</QBtn>
|
||||||
</template>
|
</template>
|
||||||
</VnSubToolbar>
|
</VnSubToolbar>
|
||||||
<QPage class="column items-center q-pa-md">
|
<VnTable
|
||||||
<VnPaginate
|
ref="dataRef"
|
||||||
ref="dataRef"
|
data-key="CustomerDefaulter"
|
||||||
@on-fetch="onFetch"
|
url="Defaulters/filter"
|
||||||
data-key="CustomerDefaulter"
|
:expr-builder="exprBuilder"
|
||||||
:filter="filter"
|
:columns="columns"
|
||||||
:expr-builder="exprBuilder"
|
@on-fetch="onFetch"
|
||||||
auto-load
|
:use-model="true"
|
||||||
url="Defaulters/filter"
|
:table="{
|
||||||
>
|
'row-key': 'clientFk',
|
||||||
<template #body="{ rows }">
|
selection: 'multiple',
|
||||||
<div class="q-pa-md">
|
}"
|
||||||
<QTable
|
v-model:selected="selected"
|
||||||
:columns="columns"
|
:disable-option="{ card: true }"
|
||||||
:rows="rows"
|
auto-load
|
||||||
class="full-width"
|
>
|
||||||
row-key="clientFk"
|
<template #column-clientFk="{ row }">
|
||||||
selection="multiple"
|
<span class="link" @click.stop>
|
||||||
v-model:selected="selected"
|
{{ row.clientName }}
|
||||||
>
|
<CustomerDescriptorProxy :id="row.clientFk" />
|
||||||
<template #header="props">
|
</span>
|
||||||
<QTr :props="props" class="bg" style="min-height: 200px">
|
</template>
|
||||||
<QTh>
|
<template #column-observation="{ row }">
|
||||||
<QCheckbox v-model="props.selected" />
|
<VnInput type="textarea" v-model="row.observation" readonly dense rows="2" />
|
||||||
</QTh>
|
</template>
|
||||||
<QTh
|
<template #column-salesPersonFk="{ row }">
|
||||||
v-for="col in props.cols"
|
<span class="link" @click.stop>
|
||||||
:key="col.name"
|
{{ row.salesPersonName }}
|
||||||
:props="props"
|
<WorkerDescriptorProxy :id="row.salesPersonFk" />
|
||||||
>
|
</span>
|
||||||
{{ t(col.label) }}
|
</template>
|
||||||
<QTooltip v-if="col.tooltip">{{
|
<template #column-departmentFk="{ row }">
|
||||||
col.tooltip
|
<span class="link" @click.stop>
|
||||||
}}</QTooltip>
|
{{ row.departmentName }}
|
||||||
</QTh>
|
<DepartmentDescriptorProxy :id="row.departmentFk" />
|
||||||
</QTr>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
<template #column-workerFk="{ row }">
|
||||||
<template #body-cell="props">
|
<span class="link" @click.stop>
|
||||||
<QTd :props="props">
|
{{ row.workerName }}
|
||||||
<QTr :props="props" class="cursor-pointer">
|
<WorkerDescriptorProxy :id="row.workerFk" />
|
||||||
<component
|
</span>
|
||||||
:is="
|
</template>
|
||||||
tableColumnComponents[props.col.name]
|
</VnTable>
|
||||||
.component
|
|
||||||
"
|
|
||||||
class="col-content"
|
|
||||||
v-bind="
|
|
||||||
tableColumnComponents[props.col.name].props(
|
|
||||||
props
|
|
||||||
)
|
|
||||||
"
|
|
||||||
@click="
|
|
||||||
tableColumnComponents[props.col.name].event(
|
|
||||||
props
|
|
||||||
)
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<template v-if="typeof props.value !== 'boolean'">
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
props.col.name === 'lastObservation'
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<VnInput
|
|
||||||
type="textarea"
|
|
||||||
v-model="props.value"
|
|
||||||
readonly
|
|
||||||
dense
|
|
||||||
rows="2"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div v-else>{{ props.value }}</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<WorkerDescriptorProxy
|
|
||||||
:id="props.row.salesPersonFk"
|
|
||||||
v-if="props.col.name === 'salesPerson'"
|
|
||||||
/>
|
|
||||||
<WorkerDescriptorProxy
|
|
||||||
:id="props.row.workerFk"
|
|
||||||
v-if="props.col.name === 'author'"
|
|
||||||
/>
|
|
||||||
<CustomerDescriptorProxy
|
|
||||||
:id="props.row.clientFk"
|
|
||||||
v-if="props.col.name === 'client'"
|
|
||||||
/>
|
|
||||||
</component>
|
|
||||||
</QTr>
|
|
||||||
</QTd>
|
|
||||||
</template>
|
|
||||||
</QTable>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</VnPaginate>
|
|
||||||
</QPage>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.col-content {
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 6px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
Add observation: Añadir observación
|
Add observation: Añadir observación
|
||||||
|
@ -383,4 +277,5 @@ es:
|
||||||
Credit I.: Crédito A.
|
Credit I.: Crédito A.
|
||||||
Credit insurance: Crédito asegurado
|
Credit insurance: Crédito asegurado
|
||||||
From: Desde
|
From: Desde
|
||||||
|
Has recovery: Tiene recobro
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -33,24 +33,28 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
columnClass: 'expand',
|
columnClass: 'expand',
|
||||||
|
isTitle: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'city',
|
field: 'city',
|
||||||
label: t('City'),
|
label: t('City'),
|
||||||
name: 'city',
|
name: 'city',
|
||||||
|
cardVisible: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'phone',
|
field: 'phone',
|
||||||
label: t('Phone'),
|
label: t('Phone'),
|
||||||
name: 'phone',
|
name: 'phone',
|
||||||
|
cardVisible: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'email',
|
field: 'email',
|
||||||
label: t('Email'),
|
label: t('Email'),
|
||||||
name: 'email',
|
name: 'email',
|
||||||
|
cardVisible: true,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
</script>
|
</script>
|
||||||
|
@ -78,6 +82,7 @@ const columns = computed(() => [
|
||||||
selection: 'multiple',
|
selection: 'multiple',
|
||||||
}"
|
}"
|
||||||
v-model:selected="selected"
|
v-model:selected="selected"
|
||||||
|
:right-search="false"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:use-model="true"
|
:use-model="true"
|
||||||
auto-load
|
auto-load
|
||||||
|
|
Loading…
Reference in New Issue