CustomDateSelect.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. <image style="width: 100%; height: 100%;" src="/static/images/components/dateSelect/time.svg" mode="scaleToFill"></image>
  13. </view>
  14. </view>
  15. <view class="middle">
  16. -
  17. </view>
  18. <view class="right date-box">
  19. <view class="date">
  20. {{dateRange[1]}}
  21. </view>
  22. <view class="icon">
  23. <image style="width: 100%; height: 100%;" src="/static/images/components/dateSelect/time.svg" mode="scaleToFill"></image>
  24. </view>
  25. </view>
  26. </view>
  27. </uni-datetime-picker>
  28. </view>
  29. </template>
  30. <script>
  31. import {
  32. defineComponent,
  33. watch,
  34. ref
  35. } from 'vue';
  36. import moment from 'moment';
  37. const props = {
  38. range: {
  39. type: Array,
  40. default: ()=>[]
  41. }
  42. }
  43. export default defineComponent({
  44. props,
  45. setup(props, {
  46. emit
  47. }) {
  48. const dateRange = ref([moment().subtract(1,'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')])
  49. watch(
  50. () => props.range,
  51. (newVal) => {
  52. if(newVal && newVal.length){
  53. dateRange.value = newVal
  54. }
  55. }, {
  56. immediate: true
  57. }
  58. )
  59. const handleSelect = () => {
  60. emit('dateChange', dateRange.value)
  61. }
  62. return {
  63. dateRange,
  64. handleSelect
  65. }
  66. }
  67. })
  68. </script>
  69. <style lang="scss" scoped>
  70. .custom-date-select{
  71. margin-top: 20rpx;
  72. ::v-deep .content{
  73. display: flex;
  74. align-items: center;
  75. justify-content: space-between;
  76. .date-box{
  77. padding: 20rpx;
  78. display: flex;
  79. align-items: center;
  80. justify-content: space-between;
  81. width: calc(46% - 40rpx);
  82. border-radius: 12rpx;
  83. background: #FFFFFF;
  84. .icon{
  85. width: 32rpx;
  86. height: 32rpx;
  87. }
  88. }
  89. }
  90. }
  91. </style>