diff --git a/apps/ops/src/composables/useAddressSearch.js b/apps/ops/src/composables/useAddressSearch.js index a57ceb0..a12fefe 100644 --- a/apps/ops/src/composables/useAddressSearch.js +++ b/apps/ops/src/composables/useAddressSearch.js @@ -1,8 +1,10 @@ import { ref } from 'vue' +import { HUB_URL } from 'src/config/hub' /** - * Reusable address search composable. - * Searches ERPNext `search_address` whitelisted method with debounce. + * Reusable address search composable (autosuggest RQA). + * Cherche via le hub `/rpc/search_addresses` (Postgres rqa_addresses, trigram) — FIABLE et joignable en dev ET prod + * (le proxy /hub ajoute le jeton). Remplace l'ancien `/api/method/search_address` (ERPNext) qui échouait (403/perm). */ export function useAddressSearch () { const addrResults = ref([]) @@ -15,9 +17,9 @@ export function useAddressSearch () { addrLoading.value = true addrDebounce = setTimeout(async () => { try { - const res = await fetch(`/api/method/search_address?q=${encodeURIComponent(q)}`, { credentials: 'include' }) + const res = await fetch(`${HUB_URL}/rpc/search_addresses`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ search_term: q, result_limit: 8 }) }) const data = await res.json() - addrResults.value = data.results || data.message?.results || [] + addrResults.value = Array.isArray(data) ? data : (data.results || data.message?.results || []) // /rpc renvoie un tableau direct } catch { addrResults.value = [] } addrLoading.value = false }, 300) diff --git a/apps/ops/src/composables/useUnifiedCreate.js b/apps/ops/src/composables/useUnifiedCreate.js index 98385f3..95ab929 100644 --- a/apps/ops/src/composables/useUnifiedCreate.js +++ b/apps/ops/src/composables/useUnifiedCreate.js @@ -217,6 +217,7 @@ export function useUnifiedCreate (mode, opts = {}) { form.duration_h = ctx.duration_h || 1 form.address = ctx.address || '' form.assigned_tech = ctx.assigned_tech || null + form.tags = Array.isArray(ctx.tags) ? ctx.tags.slice() : [] // compétence/type pré-rempli (ex. chip du « Trouver un créneau ») form.scheduled_date = ctx.scheduled_date || '' form.start_time = ctx.start_time || '' form._latitude = ctx._latitude != null ? ctx._latitude : (ctx.latitude != null ? ctx.latitude : null) // coords pré-remplies (réservation par créneau) diff --git a/apps/ops/src/modules/dispatch/components/SuggestSlotsDialog.vue b/apps/ops/src/modules/dispatch/components/SuggestSlotsDialog.vue index 0ebcc5d..2d500f6 100644 --- a/apps/ops/src/modules/dispatch/components/SuggestSlotsDialog.vue +++ b/apps/ops/src/modules/dispatch/components/SuggestSlotsDialog.vue @@ -1,48 +1,50 @@