AppAutocomplete.vue 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <script setup>
  2. import { computed, ref } from 'vue'
  3. const props = defineProps({
  4. label: {
  5. type: String,
  6. required: true,
  7. },
  8. placeholder: {
  9. type: String,
  10. required: true,
  11. },
  12. items: {
  13. type: Object,
  14. required: true,
  15. },
  16. })
  17. const emit = defineEmits(['selected'])
  18. const searchTerm = ref('')
  19. const searchItems = computed(() => {
  20. if (searchTerm.value === '') {
  21. return []
  22. }
  23. return props.items.filter((item) => {
  24. if (
  25. item.customer_number.toLowerCase().includes(searchTerm.value.toLowerCase()) ||
  26. item.name.toLowerCase().includes(searchTerm.value.toLowerCase()) ||
  27. item.phone.toLowerCase().includes(searchTerm.value.toLowerCase())
  28. ) {
  29. return item
  30. }
  31. })
  32. })
  33. const selectedItem = ref('')
  34. const selectData = (item) => {
  35. selectedItem.value = item
  36. searchTerm.value = item.customer_number
  37. emit('selected', item)
  38. }
  39. </script>
  40. <template>
  41. <CFormLabel>{{ label }}</CFormLabel>
  42. <CFormInput :placeholder="placeholder" v-model="searchTerm" :value="searchTerm"></CFormInput>
  43. <ul v-if="searchItems.length" class="list-group mt-2">
  44. <li
  45. v-for="item in searchItems"
  46. :key="item.id"
  47. @click="selectData(item)"
  48. class="list-group-item list-group-item-action"
  49. >
  50. {{ item.customer_number }} - {{ item.name }} - {{ item.phone }}
  51. </li>
  52. </ul>
  53. </template>