Merge pull request '#8246: Use new addressFk field' (!1362) from 8246-UseAddressFk into test
gitea/salix-front/pipeline/head This commit looks good
Details
gitea/salix-front/pipeline/head This commit looks good
Details
Reviewed-on: #1362 Reviewed-by: Alex Moreno <alexm@verdnatura.es>
This commit is contained in:
commit
b7f4e2d1b6
|
@ -1,5 +1,7 @@
|
|||
<script setup>
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { ref } from 'vue';
|
||||
import FetchData from 'components/FetchData.vue';
|
||||
import FormModel from 'src/components/FormModel.vue';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
|
@ -7,10 +9,23 @@ import VnInputTime from 'src/components/common/VnInputTime.vue';
|
|||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const validAddresses = ref([]);
|
||||
const addresses = ref([]);
|
||||
|
||||
const setFilteredAddresses = (data) => {
|
||||
const validIds = new Set(validAddresses.value.map((item) => item.addressFk));
|
||||
addresses.value = data.filter((address) => validIds.has(address.id));
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FormModel :url="`Zones/${$route.params.id}`" auto-load model="zone">
|
||||
<FetchData
|
||||
url="RoadmapAddresses"
|
||||
auto-load
|
||||
@on-fetch="(data) => (validAddresses = data)"
|
||||
/>
|
||||
<FetchData url="Addresses" auto-load @on-fetch="setFilteredAddresses" />
|
||||
<FormModel auto-load model="zone">
|
||||
<template #form="{ data, validate }">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
|
@ -20,13 +35,12 @@ const { t } = useI18n();
|
|||
v-model="data.name"
|
||||
/>
|
||||
</VnRow>
|
||||
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
v-model="data.agencyModeFk"
|
||||
:rules="validate('zone.agencyModeFk')"
|
||||
url="AgencyModes/isActive"
|
||||
:fields="['id', 'name']"
|
||||
url="AgencyModes/isActive"
|
||||
:fields="['id', 'name']"
|
||||
:label="t('Agency')"
|
||||
emit-value
|
||||
map-options
|
||||
|
@ -103,7 +117,7 @@ const { t } = useI18n();
|
|||
v-model="data.addressFk"
|
||||
option-value="id"
|
||||
option-label="nickname"
|
||||
url="Addresses"
|
||||
:options="addresses"
|
||||
:fields="['id', 'nickname']"
|
||||
sort-by="id"
|
||||
hide-selected
|
||||
|
|
|
@ -22,15 +22,50 @@ const exprBuilder = (param, value) => {
|
|||
return /^\d+$/.test(value) ? { id: value } : { name: { like: `%${value}%` } };
|
||||
}
|
||||
};
|
||||
|
||||
const tableFilter = {
|
||||
include: [
|
||||
{
|
||||
relation: 'agencyMode',
|
||||
scope: {
|
||||
fields: ['id', 'name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'address',
|
||||
scope: {
|
||||
fields: ['id', 'nickname', 'provinceFk', 'postalCode'],
|
||||
include: [
|
||||
{
|
||||
relation: 'province',
|
||||
scope: {
|
||||
fields: ['id', 'name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'postcode',
|
||||
scope: {
|
||||
fields: ['code', 'townFk'],
|
||||
include: {
|
||||
relation: 'town',
|
||||
scope: {
|
||||
fields: ['id', 'name'],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VnSearchbar
|
||||
data-key="ZonesList"
|
||||
url="Zones"
|
||||
:filter="{
|
||||
include: { relation: 'agencyMode', scope: { fields: ['name'] } },
|
||||
}"
|
||||
:filter="tableFilter"
|
||||
:expr-builder="exprBuilder"
|
||||
:label="t('list.searchZone')"
|
||||
:info="t('list.searchInfo')"
|
||||
|
|
|
@ -4,7 +4,7 @@ import { useRouter } from 'vue-router';
|
|||
import { computed, ref } from 'vue';
|
||||
import axios from 'axios';
|
||||
|
||||
import { toCurrency } from 'src/filters';
|
||||
import { dashIfEmpty, toCurrency } from 'src/filters';
|
||||
import { toTimeFormat } from 'src/filters/date';
|
||||
import { useVnConfirm } from 'composables/useVnConfirm';
|
||||
import useNotify from 'src/composables/useNotify.js';
|
||||
|
@ -17,7 +17,6 @@ import VnInputTime from 'src/components/common/VnInputTime.vue';
|
|||
import RightMenu from 'src/components/common/RightMenu.vue';
|
||||
import ZoneFilterPanel from './ZoneFilterPanel.vue';
|
||||
import ZoneSearchbar from './Card/ZoneSearchbar.vue';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
@ -26,7 +25,6 @@ const { viewSummary } = useSummaryDialog();
|
|||
const { openConfirmationModal } = useVnConfirm();
|
||||
const tableRef = ref();
|
||||
const warehouseOptions = ref([]);
|
||||
const validAddresses = ref([]);
|
||||
|
||||
const tableFilter = {
|
||||
include: [
|
||||
|
@ -161,30 +159,18 @@ const handleClone = (id) => {
|
|||
openConfirmationModal(
|
||||
t('list.confirmCloneTitle'),
|
||||
t('list.confirmCloneSubtitle'),
|
||||
() => clone(id)
|
||||
() => clone(id),
|
||||
);
|
||||
};
|
||||
|
||||
function showValidAddresses(row) {
|
||||
if (row.addressFk) {
|
||||
const isValid = validAddresses.value.some(
|
||||
(address) => address.addressFk === row.addressFk
|
||||
);
|
||||
if (isValid)
|
||||
return `${row.address?.nickname},
|
||||
${row.address?.postcode?.town?.name} (${row.address?.province?.name})`;
|
||||
else return '-';
|
||||
}
|
||||
return '-';
|
||||
function formatRow(row) {
|
||||
if (!row?.address) return '-';
|
||||
return dashIfEmpty(`${row?.address?.nickname},
|
||||
${row?.address?.postcode?.town?.name} (${row?.address?.province?.name})`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
url="RoadmapAddresses"
|
||||
auto-load
|
||||
@on-fetch="(data) => (validAddresses = data)"
|
||||
/>
|
||||
<ZoneSearchbar />
|
||||
<RightMenu>
|
||||
<template #right-panel>
|
||||
|
@ -207,7 +193,7 @@ function showValidAddresses(row) {
|
|||
:right-search="false"
|
||||
>
|
||||
<template #column-addressFk="{ row }">
|
||||
{{ showValidAddresses(row) }}
|
||||
{{ dashIfEmpty(formatRow(row)) }}
|
||||
</template>
|
||||
<template #more-create-dialog="{ data }">
|
||||
<VnSelect
|
||||
|
|
Loading…
Reference in New Issue