cwg-filter-picker.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <uni-datetime-picker v-model="dateFilter" type="daterange" :returnType="props.returnType">
  3. <view class="filter-picker">
  4. <view class="picker-value">
  5. <text class="picker-text">{{ dateFilter1[0] && dateFilter1[1] ? `${dateFilter1[0]} - ${dateFilter1[1]}`
  6. :
  7. t('card.Form.f57') }}</text>
  8. <uni-icons type="calendar" size="14" color="#6b7280" class="picker-icon" />
  9. </view>
  10. </view>
  11. </uni-datetime-picker>
  12. </template>
  13. <script setup lang="ts">
  14. import { computed, ref, watch } from 'vue'
  15. import { useI18n } from 'vue-i18n'
  16. import dayjs from 'dayjs'
  17. type Option = {
  18. value: string | number | undefined
  19. label: string
  20. }
  21. const props = defineProps<{
  22. modelValue?: string | number | null
  23. returnType?: string
  24. }>()
  25. const emit = defineEmits<{
  26. (e: 'update:modelValue', value: string | number | undefined): void
  27. (e: 'change', option: Option): void
  28. }>()
  29. const { t } = useI18n()
  30. const dateFilter = ref<string | number | undefined>(props.modelValue)
  31. const dateFilter1 = computed(() => {
  32. if (!dateFilter.value || dateFilter.value.length === 0) {
  33. return ['', '']
  34. }
  35. if (props.returnType === 'timestamp') {
  36. return (dateFilter.value as any[]).map((item) =>
  37. typeof item === 'number'
  38. ? dayjs(item).format('YYYY-MM-DD')
  39. : item
  40. )
  41. }
  42. return dateFilter.value
  43. })
  44. watch(
  45. () => props.modelValue,
  46. (val) => {
  47. dateFilter.value = val
  48. }
  49. )
  50. watch(
  51. () => dateFilter.value,
  52. (val) => {
  53. emit('update:modelValue', val)
  54. },
  55. { immediate: true },
  56. )
  57. </script>