index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <view class="jnpf-date-range">
  3. <JnpfDatePicker v-if="type=='date'" v-model="startValue" :placeholder="placeholder" :disabled="disabled"
  4. inputType="text" scene="searchList" :format="format" @change="change" :defaultTime="startDefaultTime"
  5. selectType='start' :key="key" ref="dateTime" />
  6. <JnpfTimePicker v-else v-model="startValue" :placeholder="placeholder" :disabled="disabled" inputType="text"
  7. scene="searchList" :format="format" @change="change" :defaultTime="startDefaultTime" selectType='start'
  8. :key="key" ref="dateTime" />
  9. <view class="u-p-l-10 u-p-r-10">
  10. </view>
  11. <JnpfDatePicker v-if="type=='date'" v-model="endValue" :placeholder="placeholder" :disabled="disabled"
  12. inputType="text" scene="searchList" :format="format" @change="change" :defaultTime="endDefaultTime"
  13. selectType='end' :key="key+1" ref="dateTime" />
  14. <JnpfTimePicker v-else v-model="endValue" :placeholder="placeholder" :disabled="disabled" inputType="text"
  15. scene="searchList" :format="format" @change="change" :defaultTime="endDefaultTime" selectType='end'
  16. :key="key+1" ref="dateTime" />
  17. </view>
  18. </template>
  19. <script>
  20. export default {
  21. name: 'jnpf-date-range',
  22. props: {
  23. modelValue: {
  24. type: Array,
  25. default: () => []
  26. },
  27. placeholder: {
  28. type: String,
  29. default: '请选择日期范围'
  30. },
  31. disabled: {
  32. type: Boolean,
  33. default: false
  34. },
  35. format: {
  36. type: String,
  37. default: 'yyyy-MM-dd HH:mm:ss'
  38. },
  39. type: {
  40. type: String,
  41. default: 'date'
  42. }
  43. },
  44. data() {
  45. return {
  46. startDefaultTime: '',
  47. endDefaultTime: '',
  48. startValue: '',
  49. endValue: '',
  50. datetimerange: [],
  51. datetimerangeObj: {},
  52. key: +new Date()
  53. }
  54. },
  55. watch: {
  56. modelValue: {
  57. handler(val) {
  58. if (Array.isArray(val) && val.length) {
  59. this.startValue = val[0]
  60. this.endValue = val[1]
  61. } else {
  62. this.startValue = ''
  63. this.endValue = ''
  64. this.datetimerangeObj = {}
  65. }
  66. },
  67. immediate: true
  68. },
  69. },
  70. methods: {
  71. change(e, type) {
  72. this.datetimerange = []
  73. if (type == 'start') {
  74. const format = 'yyyy-mm-dd hh:MM:ss'
  75. this.$set(this.datetimerangeObj, type, e)
  76. this.$refs.dateTime.defaultTime = this.type == 'time' ? this.datetimerangeObj['start'] : this.$u
  77. .timeFormat(this.datetimerangeObj['start'], format)
  78. this.handelValue()
  79. } else {
  80. this.$set(this.datetimerangeObj, type, e)
  81. this.handelValue()
  82. }
  83. },
  84. handelValue() {
  85. this.datetimerange.unshift(this.datetimerangeObj['start'])
  86. this.datetimerange.push(this.datetimerangeObj['end'])
  87. if (this.datetimerange[0] > this.datetimerange[1]) {
  88. this.$u.toast('开始不能大于结束')
  89. setTimeout(() => {
  90. this.startValue = ""
  91. this.endValue = ""
  92. this.datetimerangeObj = {}
  93. this.datetimerange = []
  94. this.key = +new Date()
  95. }, 500)
  96. return
  97. }
  98. this.$emit('update:modelValue', this.datetimerange)
  99. }
  100. }
  101. }
  102. </script>