mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 13:54:23 +00:00
address: use multiselect for city and address selection
This commit is contained in:
parent
bcf2b9d834
commit
063076d0cb
@ -1,38 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<select
|
<VueMultiselect
|
||||||
v-model="selected">
|
v-model="value"
|
||||||
<option :value="{}" disabled selected>{{ $t('select_address') }}</option>
|
name="field"
|
||||||
<option
|
track-by="id"
|
||||||
v-for="item in this.addresses"
|
label="value"
|
||||||
v-bind:item="item"
|
:custom-label="transName"
|
||||||
v-bind:key="item.id"
|
:placeholder="$t('select_address')"
|
||||||
v-bind:value="item">
|
:options="addresses"
|
||||||
{{ item.street }}, {{ item.streetNumber }}
|
@update:model-value="selectAddress"
|
||||||
</option>
|
:model-value="value">
|
||||||
</select>
|
</VueMultiselect>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import VueMultiselect from 'vue-multiselect';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'AddressSelection',
|
name: 'AddressSelection',
|
||||||
|
components: { VueMultiselect },
|
||||||
props: ['address', 'updateMapCenter'],
|
props: ['address', 'updateMapCenter'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
value: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
transName(value) {
|
||||||
|
return `${value.street}, ${value.streetNumber}`
|
||||||
|
},
|
||||||
|
selectAddress(value) {
|
||||||
|
this.address.selected.address = value;
|
||||||
|
this.updateMapCenter(value.point);
|
||||||
|
},
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
addresses() {
|
addresses() {
|
||||||
return this.address.loaded.addresses;
|
return this.address.loaded.addresses;
|
||||||
},
|
}
|
||||||
selected: {
|
|
||||||
set(value) {
|
|
||||||
console.log('selected value', value);
|
|
||||||
this.address.selected.address = value;
|
|
||||||
this.updateMapCenter(value.point);
|
|
||||||
},
|
|
||||||
get() {
|
|
||||||
return this.address.selected.address;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||||
|
@ -1,38 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<select
|
<VueMultiselect
|
||||||
v-model="selected">
|
v-model="value"
|
||||||
<option :value="{}" disabled selected>{{ $t('select_city') }}</option>
|
name="field"
|
||||||
<option
|
track-by="id"
|
||||||
v-for="item in this.cities"
|
label="value"
|
||||||
v-bind:item="item"
|
:custom-label="transName"
|
||||||
v-bind:key="item.id"
|
:placeholder="$t('select_city')"
|
||||||
v-bind:value="item">
|
:options="cities"
|
||||||
{{ item.code }}-{{ item.name }}
|
@update:model-value="selectCity"
|
||||||
</option>
|
:model-value="value">
|
||||||
</select>
|
</VueMultiselect>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import VueMultiselect from 'vue-multiselect';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'CitySelection',
|
name: 'CitySelection',
|
||||||
|
components: { VueMultiselect },
|
||||||
props: ['address', 'getReferenceAddresses'],
|
props: ['address', 'getReferenceAddresses'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
value: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
transName(value) {
|
||||||
|
return `${value.code}-${value.name}`
|
||||||
|
},
|
||||||
|
selectCity(value) {
|
||||||
|
this.address.selected.city = value;
|
||||||
|
this.getReferenceAddresses(value);
|
||||||
|
},
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
cities() {
|
cities() {
|
||||||
return this.address.loaded.cities;
|
return this.address.loaded.cities;
|
||||||
},
|
}
|
||||||
selected: {
|
|
||||||
set(value) {
|
|
||||||
console.log('selected value', value.name);
|
|
||||||
this.address.selected.city = value;
|
|
||||||
this.getReferenceAddresses(value);
|
|
||||||
},
|
|
||||||
get() {
|
|
||||||
return this.address.selected.city;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||||
|
@ -24,8 +24,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
//value: this.address.loaded.countries.filter(c => c.countryCode === 'FR')[0],
|
//value: this.address.loaded.countries.filter(c => c.countryCode === 'FR')[0],
|
||||||
value: null,
|
value: null
|
||||||
options: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user