CustomDateSelect.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <!-- 自定义样式的时间范围选择器 -->
  2. <!-- 使用插槽实现样式修改 -->
  3. <template>
  4. <view class="custom-date-select">
  5. <uni-datetime-picker @change="handleSelect" v-model="dateRange" type="daterange">
  6. <view class="content">
  7. <view class="left date-box">
  8. <view class="date">
  9. {{dateRange[0]}}
  10. </view>
  11. <view class="icon">
  12. </view>
  13. </view>
  14. <view class="middle">
  15. -
  16. </view>
  17. <view class="right date-box">
  18. {{dateRange[1]}}
  19. </view>
  20. </view>
  21. </uni-datetime-picker>
  22. </view>
  23. </template>
  24. <script>
  25. import {
  26. defineComponent,
  27. watch,
  28. ref
  29. } from 'vue';
  30. import moment from 'moment';
  31. const props = {
  32. range: {
  33. type: Array,
  34. default: ()=>[]
  35. }
  36. }
  37. export default defineComponent({
  38. props,
  39. setup(props, {
  40. emit
  41. }) {
  42. const dateRange = ref([moment().subtract(1,'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])
  43. watch(
  44. () => props.range,
  45. (newVal) => {
  46. if(newVal && newVal.length){
  47. dateRange.value = newVal
  48. }
  49. }, {
  50. immediate: true
  51. }
  52. )
  53. const handleSelect = () => {
  54. emit('dateChange', dateRange.value)
  55. }
  56. return {
  57. dateRange,
  58. handleSelect
  59. }
  60. }
  61. })
  62. </script>
  63. <style lang="scss" scoped>
  64. .custom-date-select{
  65. margin-top: 20rpx;
  66. ::v-deep .content{
  67. display: flex;
  68. align-items: center;
  69. justify-content: space-between;
  70. .date-box{
  71. padding: 20rpx;
  72. display: flex;
  73. align-items: center;
  74. justify-content: space-between;
  75. width: calc(46% - 40rpx);
  76. border-radius: 12rpx;
  77. background: #FFFFFF;
  78. }
  79. }
  80. }
  81. </style>