0
0
Fork 0

feat: vnSelect exprBuilder

This commit is contained in:
Javier Segarra 2024-09-19 01:10:14 +02:00
parent e40f216e33
commit ccfe61d777
2 changed files with 18 additions and 13 deletions

View File

@ -38,6 +38,10 @@ const $props = defineProps({
type: [Array], type: [Array],
default: () => [], default: () => [],
}, },
exprBuilder: {
type: Function,
default: null,
},
isClearable: { isClearable: {
type: Boolean, type: Boolean,
default: true, default: true,
@ -179,6 +183,8 @@ async function fetchFilter(val) {
}, {}); }, {});
} else defaultWhere = { [key]: getVal(val) }; } else defaultWhere = { [key]: getVal(val) };
const where = { ...(val ? defaultWhere : {}), ...$props.where }; const where = { ...(val ? defaultWhere : {}), ...$props.where };
if (typeof $props.exprBuilder === 'function')
Object.assign(where, $props.exprBuilder(key, val));
const fetchOptions = { where, include, limit }; const fetchOptions = { where, include, limit };
if (fields) fetchOptions.fields = fields; if (fields) fetchOptions.fields = fields;
if (sortBy) fetchOptions.order = sortBy; if (sortBy) fetchOptions.order = sortBy;

View File

@ -16,19 +16,19 @@ const { t } = useI18n();
const businessTypes = ref([]); const businessTypes = ref([]);
const contactChannels = ref([]); const contactChannels = ref([]);
const title = ref(); const title = ref();
const handleSalesModelValue = (val) => { const handleSalesModelValue = (val) => ({
filter.value.and[1] = { or: [
or: [ { name: val },
{ name: val }, { nickname: { like: '%' + val + '%' } },
{ nickname: { like: '%' + val + '%' } }, { code: { like: `${val}%` } },
{ code: { like: `${val}%` } }, ],
], });
const exprBuilder = (param, value) => {
return {
and: [{ active: { neq: false } }, handleSalesModelValue(value)],
}; };
}; };
const filter = ref({
and: [{ active: { neq: false } }],
});
</script> </script>
<template> <template>
<FetchData <FetchData
@ -109,11 +109,10 @@ const filter = ref({
:params="{ :params="{
departmentCodes: ['VT', 'shopping'], departmentCodes: ['VT', 'shopping'],
}" }"
:where="filter"
:fields="['id', 'nickname']" :fields="['id', 'nickname']"
sort-by="nickname ASC" sort-by="nickname ASC"
:rules="validate('client.salesPersonFk')" :rules="validate('client.salesPersonFk')"
@filter="handleSalesModelValue" :expr-builder="exprBuilder"
emit-value emit-value
auto-load auto-load
> >