date-time-pick-group.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <view class="date-pick">
  3. <text class="label" v-show="label">{{ label }}</text>
  4. <view class="date-box">
  5. <date-time-picker
  6. :fields="fields"
  7. :start="dateObj.startTime"
  8. :end="dateObj.endTime"
  9. :defaultValue="dateObj.startSelectValue"
  10. :pickType="'start'"
  11. placeholder="开始日期时间"
  12. @change="bindChange" />
  13. <text class="inner">~</text>
  14. <date-time-picker
  15. :fields="fields"
  16. :start="dateObj.startTime"
  17. :end="dateObj.endTime"
  18. :defaultValue="dateObj.endSelectValue"
  19. :pickType="'end'"
  20. placeholder="结束日期时间"
  21. @change="bindChange">
  22. <!-- <image src="/static/date-icon.png" class="date-icon"></image> -->
  23. </date-time-picker>
  24. </view>
  25. </view>
  26. </template>
  27. <script>
  28. /**
  29. * 日期时间选择控件(开始时间~结束时间)
  30. */
  31. import DateTimePicker from '@/components/date-time-picker/date-time-picker.vue';
  32. import moment from 'moment';
  33. // 时间格式化对象 (目前只支持短横线(-)的格式如: 'YYYY-MM-DD HH:mm:ss', 不支持斜线格式如 / )
  34. const FORMATS = {
  35. year: 'YYYY',
  36. month: 'YYYY-MM',
  37. day: 'YYYY-MM-DD',
  38. hour: 'YYYY-MM-DD HH',
  39. minute: 'YYYY-MM-DD HH:mm',
  40. second: 'YYYY-MM-DD HH:mm:ss',
  41. };
  42. export default {
  43. components: {DateTimePicker},
  44. props: {
  45. label: {
  46. type: String,
  47. default: ''
  48. },
  49. // 时间选择器的粒度 有效值:year | month | day | hour | minute
  50. fields: {
  51. type: String,
  52. default: 'minute'
  53. },
  54. // 允许选中的最小值
  55. startTime: {
  56. type: String,
  57. default: "1970-01-01 00:00"
  58. },
  59. // 允许选中的最大值
  60. endTime: {
  61. type: String,
  62. default: "2300-01-01 00:00"
  63. },
  64. // 开始 选中的时间
  65. startSelectValue: {
  66. type: String,
  67. default: ''
  68. },
  69. // 结束 选中的时间
  70. endSelectValue: {
  71. type: String,
  72. default: ''
  73. }
  74. },
  75. computed: {
  76. dateObj(){
  77. const {fields, startTime, endTime, startSelectValue, endSelectValue} = this;
  78. if(fields){
  79. return {
  80. startTime: startTime ? moment(new Date(startTime)).format(FORMATS[fields]) : '1970-01-01 00:00',
  81. endTime: endTime ? moment(new Date(endTime)).format(FORMATS[fields]) : '2300-01-01 00:00',
  82. startSelectValue: startSelectValue ? moment(new Date(startSelectValue)).format(FORMATS[fields]) : '',
  83. endSelectValue: endSelectValue ? moment(new Date(endSelectValue)).format(FORMATS[fields]) : ''
  84. }
  85. }else {
  86. return {
  87. startTime,
  88. endTime,
  89. startSelectValue,
  90. endSelectValue
  91. }
  92. }
  93. }
  94. },
  95. methods: {
  96. bindChange(valObj, pickType){
  97. this.$emit('changeDate', valObj, pickType)
  98. }
  99. }
  100. };
  101. </script>
  102. <style lang="less">
  103. .date-pick {
  104. display: flex;
  105. align-items: center;
  106. height: 25rpx;
  107. .label {
  108. margin-right: 3.12rpx;
  109. font-size: 12.5rpx;
  110. font-weight: 500;
  111. color: #17181a;
  112. }
  113. .date-box {
  114. display: flex;
  115. justify-content: space-between;
  116. align-items: center;
  117. width: 238.28rpx;
  118. height: 25rpx;
  119. background: #ffffff;
  120. border-radius: 3.12rpx;
  121. border: 0.78rpx solid #e1e4ed;
  122. color: #2e2f33;
  123. box-sizing: border-box;
  124. .date-icon {
  125. width: 10.93rpx;
  126. height: 10.93rpx;
  127. }
  128. .inner {
  129. margin-right: 3.5rpx;
  130. }
  131. }
  132. }
  133. </style>