kx-time-picker.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <view>
  3. <picker mode="multiSelector" @columnchange="bindMultiPickerColumnChange" @change="bindMultiChange" @cancel="bindMultiCancel" :value="multiIndex"
  4. :range="multiArray">
  5. <view class="uni-input">
  6. <text v-if="kxTimeValue.value">{{kxTimeValue.value}}</text>
  7. <text v-else class="default">请选择时间段</text>
  8. </view>
  9. </picker>
  10. </view>
  11. </template>
  12. <script>
  13. export default {
  14. name: "kx-time-picker",
  15. data() {
  16. //根据传输时间段判断展示内容
  17. let [multiIndex,mIndex] = this.multiFunt();
  18. return {
  19. multiIndex: multiIndex, //当前区间选中值
  20. mIndex: mIndex, //选择范围区间
  21. };
  22. },
  23. //接受参数
  24. props: ['kxTimeValue'],
  25. computed: {
  26. //选择时间段
  27. multiArray() {
  28. let multiArray = [];
  29. let startArray = this.hourArray(this.mIndex[0]);
  30. let endArray = this.hourArray(this.mIndex[1]);
  31. multiArray = [startArray, endArray];
  32. console.log(multiArray)
  33. return multiArray
  34. },
  35. //展示时间段
  36. startTime() {
  37. return this.multiArray[0][this.multiIndex[0]]
  38. },
  39. endTime() {
  40. return this.multiArray[1][this.multiIndex[1]]
  41. },
  42. showTime() {
  43. return this.startTime + '--' + this.endTime
  44. },
  45. },
  46. methods: {
  47. //数据整理
  48. multiFunt(){
  49. let multiIndex = [0, 0],
  50. mIndex = [0, 1]
  51. if (this.kxTimeValue.value) {
  52. let multiA = this.kxTimeValue.value.split('--');
  53. multiA = multiA.map((v) => {
  54. return Number(v.split(':')[0])
  55. });
  56. multiIndex[0]=multiA[0];
  57. mIndex[1]=multiIndex[0]+1;
  58. multiIndex[1]=multiA[1]-mIndex[1];
  59. }
  60. return [multiIndex,mIndex]
  61. },
  62. //时间段数组
  63. hourArray(start = 0, end = 24) {
  64. let array = [];
  65. if (start == 0) {
  66. end = 23
  67. }
  68. for (let i = start; i <= end; i++) {
  69. array.push(i + ':00')
  70. }
  71. return array
  72. },
  73. //修改列
  74. bindMultiPickerColumnChange: function(e) {
  75. this.multiIndex[e.detail.column] = e.detail.value
  76. switch (e.detail.column) {
  77. case 0: //拖动第1列
  78. this.mIndex[1] = e.detail.value + 1
  79. if (this.multiIndex[1]) this.multiIndex[1]--;
  80. break
  81. }
  82. this.mIndex.splice(0, 0)
  83. },
  84. //点击确定
  85. bindMultiChange(e){
  86. this.$emit('kxTimeFunt',{
  87. value:this.showTime,
  88. start:this.startTime,
  89. end:this.endTime
  90. })
  91. },
  92. //点击取消
  93. bindMultiCancel(){
  94. let [multiIndex,mIndex] = this.multiFunt();
  95. this.multiIndex=multiIndex;
  96. this.mIndex=mIndex;
  97. }
  98. }
  99. }
  100. </script>
  101. <style scoped>
  102. .default{
  103. color: #8f8f94;
  104. }
  105. </style>