This commit is contained in:
parent
6b3c510057
commit
e25896fa77
|
@ -1,6 +1,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { computed, ref, watch } from 'vue';
|
import { computed, ref, useAttrs, watch } from 'vue';
|
||||||
import { useRouter, onBeforeRouteLeave } from 'vue-router';
|
import { useRouter, onBeforeRouteLeave } from 'vue-router';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useQuasar } from 'quasar';
|
import { useQuasar } from 'quasar';
|
||||||
|
@ -17,6 +17,7 @@ const quasar = useQuasar();
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const { validate } = useValidator();
|
const { validate } = useValidator();
|
||||||
|
const $attrs = useAttrs();
|
||||||
|
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
model: {
|
model: {
|
||||||
|
@ -113,9 +114,10 @@ onBeforeRouteLeave((to, from, next) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
async function fetch(data) {
|
async function fetch(data) {
|
||||||
resetData(data);
|
const rows = $attrs['key-data'] ? data[$attrs['key-data']] : data;
|
||||||
emit('onFetch', data);
|
resetData(rows);
|
||||||
return data;
|
emit('onFetch', rows);
|
||||||
|
return rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetData(data) {
|
function resetData(data) {
|
||||||
|
|
|
@ -314,7 +314,11 @@ function handleSelection({ evt, added, rows: selectedRows }, rows) {
|
||||||
show-if-above
|
show-if-above
|
||||||
>
|
>
|
||||||
<QScrollArea class="fit">
|
<QScrollArea class="fit">
|
||||||
<VnTableFilter :data-key="$attrs['data-key']" :columns="columns" :redirect="redirect" />
|
<VnTableFilter
|
||||||
|
:data-key="$attrs['data-key']"
|
||||||
|
:columns="columns"
|
||||||
|
:redirect="redirect"
|
||||||
|
/>
|
||||||
</QScrollArea>
|
</QScrollArea>
|
||||||
</QDrawer>
|
</QDrawer>
|
||||||
<CrudModel
|
<CrudModel
|
||||||
|
|
|
@ -78,6 +78,10 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
keyData: {
|
||||||
|
type: String,
|
||||||
|
default: undefined,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['onFetch', 'onPaginate', 'onChange']);
|
const emit = defineEmits(['onFetch', 'onPaginate', 'onChange']);
|
||||||
|
@ -255,7 +259,7 @@ defineExpose({
|
||||||
:disable="disableInfiniteScroll || !store.hasMoreData"
|
:disable="disableInfiniteScroll || !store.hasMoreData"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
>
|
>
|
||||||
<slot name="body" :rows="store.data"></slot>
|
<slot name="body" :rows="keyData ? store.data[keyData] : store.data"></slot>
|
||||||
<div v-if="isLoading" class="spinner info-row q-pa-md text-center">
|
<div v-if="isLoading" class="spinner info-row q-pa-md text-center">
|
||||||
<QSpinner color="primary" size="md" />
|
<QSpinner color="primary" size="md" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,14 +11,14 @@ import VnInput from 'src/components/common/VnInput.vue';
|
||||||
import CustomerDefaulterAddObservation from './CustomerDefaulterAddObservation.vue';
|
import CustomerDefaulterAddObservation from './CustomerDefaulterAddObservation.vue';
|
||||||
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
|
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
|
||||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||||
|
import { useArrayData } from 'src/composables/useArrayData';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const quasar = useQuasar();
|
const quasar = useQuasar();
|
||||||
const dataRef = ref(null);
|
const dataRef = ref(null);
|
||||||
|
|
||||||
const balanceDueTotal = ref(0);
|
|
||||||
const selected = ref([]);
|
const selected = ref([]);
|
||||||
|
const arrayData = useArrayData('CustomerDefaulter');
|
||||||
const columns = computed(() => [
|
const columns = computed(() => [
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
|
@ -165,26 +165,37 @@ const viewAddObservation = (rowsSelected) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const onFetch = async (data) => {
|
|
||||||
balanceDueTotal.value = data.reduce((acc, { amount = 0 }) => acc + amount, 0);
|
|
||||||
};
|
|
||||||
|
|
||||||
function exprBuilder(param, value) {
|
function exprBuilder(param, value) {
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case 'clientFk':
|
|
||||||
return { [`d.${param}`]: value };
|
|
||||||
case 'creditInsurance':
|
|
||||||
case 'amount':
|
|
||||||
case 'workerFk':
|
|
||||||
case 'departmentFk':
|
|
||||||
case 'countryFk':
|
|
||||||
case 'payMethod':
|
|
||||||
case 'salesPersonFk':
|
case 'salesPersonFk':
|
||||||
|
case 'creditInsurance':
|
||||||
|
case 'countryFk':
|
||||||
|
return { [`c.${param}`]: value };
|
||||||
|
case 'payMethod':
|
||||||
|
return { [`c.payMethodFk`]: value };
|
||||||
|
case 'workerFk':
|
||||||
|
return { [`co.${param}`]: value };
|
||||||
|
case 'departmentFk':
|
||||||
|
return { [`wd.${param}`]: value };
|
||||||
|
case 'amount':
|
||||||
|
case 'clientFk':
|
||||||
return { [`d.${param}`]: value };
|
return { [`d.${param}`]: value };
|
||||||
case 'created':
|
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) } };
|
||||||
|
case 'isWorker': {
|
||||||
|
if (value == undefined) return;
|
||||||
|
const search = value ? 'worker' : { neq: 'worker' };
|
||||||
|
return { 'c.businessTypeFk': search };
|
||||||
|
}
|
||||||
|
case 'hasRecovery': {
|
||||||
|
if (value == undefined) return;
|
||||||
|
const search = value ? null : { neq: null };
|
||||||
|
return { 'r.finished': search };
|
||||||
|
}
|
||||||
|
case 'observation':
|
||||||
|
return { 'co.text': { like: `%${value}%` } };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -192,7 +203,7 @@ function exprBuilder(param, value) {
|
||||||
<template>
|
<template>
|
||||||
<VnSubToolbar>
|
<VnSubToolbar>
|
||||||
<template #st-data>
|
<template #st-data>
|
||||||
<CustomerBalanceDueTotal :amount="balanceDueTotal" />
|
<CustomerBalanceDueTotal :amount="arrayData.store.data?.amount" />
|
||||||
</template>
|
</template>
|
||||||
<template #st-actions>
|
<template #st-actions>
|
||||||
<QBtn
|
<QBtn
|
||||||
|
@ -211,8 +222,6 @@ function exprBuilder(param, value) {
|
||||||
url="Defaulters/filter"
|
url="Defaulters/filter"
|
||||||
:expr-builder="exprBuilder"
|
:expr-builder="exprBuilder"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
@on-fetch="onFetch"
|
|
||||||
:use-model="true"
|
|
||||||
:table="{
|
:table="{
|
||||||
'row-key': 'clientFk',
|
'row-key': 'clientFk',
|
||||||
selection: 'multiple',
|
selection: 'multiple',
|
||||||
|
@ -221,6 +230,7 @@ function exprBuilder(param, value) {
|
||||||
:disable-option="{ card: true }"
|
:disable-option="{ card: true }"
|
||||||
auto-load
|
auto-load
|
||||||
:order="['amount DESC']"
|
:order="['amount DESC']"
|
||||||
|
key-data="defaulters"
|
||||||
>
|
>
|
||||||
<template #column-clientFk="{ row }">
|
<template #column-clientFk="{ row }">
|
||||||
<span class="link" @click.stop>
|
<span class="link" @click.stop>
|
||||||
|
|
Loading…
Reference in New Issue