index.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <a-range-picker
  3. v-model="selected"
  4. :show-time="showTime"
  5. value-format="timestamp"
  6. format="YYYY-MM-DD HH:mm"
  7. :time-picker-props="{
  8. defaultValue: '00:00:00',
  9. }"
  10. :style="{ width: '340px' }"
  11. unmount-on-close
  12. v-bind="attrs"
  13. @change="onChange"
  14. />
  15. </template>
  16. <script setup lang="ts">
  17. import { ref, watch, useAttrs } from 'vue';
  18. defineOptions({
  19. name: 'SelectRangeDatetime',
  20. });
  21. type TimeType = number | undefined;
  22. const props = withDefaults(
  23. defineProps<{
  24. startTime: TimeType;
  25. endTime: TimeType;
  26. showTime?: boolean;
  27. }>(),
  28. {
  29. showTime: true,
  30. }
  31. );
  32. const emit = defineEmits(['update:startTime', 'update:endTime', 'change']);
  33. const attrs = useAttrs();
  34. const selected = ref<number[]>();
  35. function onChange(value: any) {
  36. const vals = (value || []) as TimeType[];
  37. emit('update:startTime', vals[0]);
  38. emit('update:endTime', vals[1]);
  39. emit('change', vals);
  40. }
  41. watch(
  42. () => [props.startTime, props.endTime],
  43. (val) => {
  44. selected.value = (val || []) as number[];
  45. },
  46. {
  47. immediate: true,
  48. }
  49. );
  50. </script>