dateTImePicker.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <script setup>
  2. const props = defineProps({
  3. label: {
  4. type: String,
  5. default: '',
  6. },
  7. })
  8. defineExpose({
  9. getResult
  10. })
  11. function getResult() {
  12. return result
  13. }
  14. let result = $ref('')
  15. let showDatePicker = $ref(false)
  16. let showTimePicker = $ref(false)
  17. const onDateConfirm = ({ selectedValues }) => {
  18. result = selectedValues.join('-');
  19. showDatePicker = false;
  20. showTimePicker = true
  21. };
  22. const onTimeConfirm = ({ selectedValues }) => {
  23. result = result + ' ' + selectedValues.join(':');
  24. showTimePicker = false;
  25. };
  26. let oldResult = ''
  27. const clickPop = () => {
  28. oldResult = result
  29. showDatePicker = true
  30. }
  31. const clickCancel = () => {
  32. result = oldResult
  33. showDatePicker = false
  34. showTimePicker = false
  35. }
  36. const currentTime = ref(['12', '00', '00']);
  37. const columnsType = ['hour', 'minute', 'second'];
  38. const minDate = new Date(2010, 0, 1)
  39. </script>
  40. <template>
  41. <van-field v-model="result" is-link readonly name="datePicker" :label='props.label' placeholder="点击选择时间"
  42. @click="clickPop" :rules="[{ required: true, message: '请选择时间' }]" />
  43. <van-popup v-model:show="showDatePicker" position="bottom">
  44. <van-date-picker :min-date="minDate" @confirm="onDateConfirm" @cancel="clickCancel" />
  45. </van-popup>
  46. <van-popup v-model:show="showTimePicker" position="bottom">
  47. <van-time-picker @confirm="onTimeConfirm" @cancel="clickCancel" v-model="currentTime" title="选择时间"
  48. :columns-type="columnsType" />
  49. </van-popup>
  50. </template>