filter.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <div class="w-54 flex flex-col gap-2">
  3. <InputText
  4. v-model="model.value"
  5. fluid
  6. type="search"
  7. placeholder="Filter&hellip;"
  8. />
  9. <SelectButton
  10. v-model="model.matchMode"
  11. :options="matchModeOptions"
  12. optionLabel="name"
  13. optionValue="value"
  14. :pt="{
  15. root: `gap-0.25 *:rounded-none *:not-last:border-r-0 *:first:rounded-s-md
  16. *:last:rounded-e-md *:focus-visible:relative *:focus-visible:z-10`,
  17. pcToggleButton: {
  18. root: `grow border-primary bg-primary text-primary-contrast hover:border-primary-emphasis
  19. hover:bg-primary-emphasis active:border-primary-emphasis-alt
  20. active:bg-primary-emphasis-alt p-checked:border-primary-emphasis-alt p-checked:bg-primary-emphasis-alt`,
  21. content: `p-checked:bg-transparent`
  22. }
  23. }"
  24. >
  25. <!--suppress VueUnrecognizedSlot -->
  26. <template #option="slotProps">
  27. {{ slotProps.option.name }}
  28. </template>
  29. </SelectButton>
  30. </div>
  31. <div>{{ model.value }}</div>
  32. <div>{{ model.matchMode }}</div>
  33. </template>
  34. <script setup>
  35. import { FilterMatchMode } from "@primevue/core/api"
  36. const model = ref({ value: "", matchMode: FilterMatchMode.CONTAINS })
  37. const matchModeOptions = ref([
  38. { name: "lt", value: FilterMatchMode.STARTS_WITH },
  39. { name: "eq", value: FilterMatchMode.CONTAINS },
  40. { name: "gt", value: FilterMatchMode.ENDS_WITH }
  41. ])
  42. </script>
  43. <style scoped>
  44. </style>