| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <template>
- <DefaultSelect
- v-model="selectedService"
- v-bind="$attrs"
- :options="serviceOptions"
- :label
- :loading
- :placeholder
- :disable="!partnerAgreementId"
- >
- <template #no-option>
- <q-item>
- <q-item-section class="text-grey">
- {{ $t("http.errors.no_records_found") }}
- </q-item-section>
- </q-item>
- </template>
- </DefaultSelect>
- </template>
- <script setup>
- import { ref, watch } from "vue";
- import { getServicesByPartner } from "src/api/partnerAgreementService";
- import { useI18n } from "vue-i18n";
- import DefaultSelect from "src/components/defaults/DefaultSelect.vue";
- const { label, placeholder, partnerAgreementId } = defineProps({
- label: {
- type: String,
- default: () => useI18n().t("associado.service"),
- },
- placeholder: {
- type: String,
- default: () => useI18n().t("common.actions.search"),
- },
- partnerAgreementId: {
- type: Number,
- default: null,
- },
- });
- const selectedService = defineModel({ type: Object });
- const loading = ref(false);
- const serviceOptions = ref([]);
- watch(
- () => partnerAgreementId,
- async (id) => {
- const savedSelection = selectedService.value;
- selectedService.value = null;
- serviceOptions.value = [];
- if (!id) return;
- loading.value = true;
- try {
- const services = await getServicesByPartner(id);
- serviceOptions.value = services.map((s) => ({
- label: s.name,
- value: s.id,
- data: s,
- }));
- if (savedSelection?.value) {
- const match = serviceOptions.value.find((s) => s.value === savedSelection.value);
- if (match) selectedService.value = match;
- }
- } catch (e) {
- console.error(e);
- } finally {
- loading.value = false;
- }
- },
- { immediate: true },
- );
- </script>
|