# Cube-Time-Picker
# 介绍
TimePicker 组件提供了常用的日期选择功能。
# 示例
# 基础用法
min 和 max 直接控制时间的可选范围,showNow 用于控制是否显示“现在”时间。如下方例子可选当前时间及未来3天的时间。
<template>
<view>
<view class="picker-demo-title">basic-picker:</view>
<cube-time-picker
wx:ref="picker"
min="{{ min }}"
max="{{ max }}"
show-now="{{ showNow }}"
bindcolumnChange="onColumnChange"
bindchange="onChange"
/>
<view class="button-wrapper">
<cube-button bindclick="getSelected">获取当前选中项</cube-button>
</view>
<view class="demo-data" wx:if="{{ selectedInfo.length || changeParams.length }}">
<block wx:if="{{ selectedInfo.length }}">
<view class="key">getSelectedInfo 事件返回值:</view>
<view class="value">
<view class="value-item" wx:for="{{selectedInfo}}" wx:key="index">
<view class="item-key">{{item[0]}}</view>
<view class="item-value">{{item[1]}}</view>
</view>
</view>
</block>
<block wx:if="{{ changeParams.length }}">
<view class="key">change 事件参数:</view>
<view class="value">
<view class="value-item" wx:for="{{changeParams}}" wx:key="index">
<view class="item-key">{{item[0]}}</view>
<view class="item-value">{{item[1]}}</view>
</view>
</view>
</block>
<block wx:if="{{ changeParams.length }}">
<view class="key">columnChange 事件参数:</view>
<view class="value">
<view wx:for="{{ columnChangeParams }}" wx:key="index">
<view class="value-number">第{{ index+1 }}次:</view>
<view class="value-item" wx:for={{item}} wx:for-item="itemChild" wx:key="twoIndex">
<view class="item-key">{{itemChild[0]}}</view>
<view class="item-value">{{itemChild[1]}}</view>
</view>
</view>
</view>
</block>
</view>
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
import { beauty } from '../../common/utils'
let columnChangeArr = []
createComponent({
data: {
min: Date.now() - 1 * 60 * 60 * 1000,
max: Date.now() + 3 * 24 * 60 * 60 * 1000,
showNow: true,
columnChangeParams: [''],
changeParams: '',
selectedInfo: ''
},
methods: {
onColumnChange(e) {
columnChangeArr.push(Object.entries(e.detail))
},
onChange(e) {
this.columnChangeParams = [...columnChangeArr]
columnChangeArr = []
this.changeParams = Object.entries(e.detail)
},
getSelected() {
const info = this.$refs.picker.getSelectedInfo()
this.selectedInfo = Object.entries(info)
}
}
})
</script>
<style lang="stylus" scoped>
.button-wrapper
margin-top: 10px
.picker-demo-title
margin-bottom 8px
.demo-data
margin-top: 10px
padding: 10px 10px
background-color: white
border: 1px solid white
border-radius: 10px
.key
margin-bottom: 10px
font-size: 16px
.key-introduce
margin-bottom: 10px
line-height: 20px
.value
margin-bottom: 20px
white-space: break-spaces
.value-number
margin-top: 20px
.value-item
display flex
justify-content: space-between
height: 25px
line-height: 25px
font-size: 15px
.item-value
margin-left: 10px
white-space nowrap
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Config Day
day字段的len属性可以设置第一列需要展示的日期长度;
filer属性设置第一列日期展示的文案,当len的数量大于filter的数组长度时,会以M月d日的格式显示文案;
format属性用以格式化日期显示的方式。
<template>
<view>
<view class="picker-demo-title">Config day options:</view>
<cube-time-picker day="{{day}}" />
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
createComponent({
data: {
day: {
len: 5,
filter: ['今天', '明天'],
format: 'M月D日'
}
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Config MinuteStep
通过 minuteStep 属性可配置分钟数的步长,默认为 10 分钟,这样的话,可选的分钟就是 10、20、30、40、50。另外 minuteStep 还支持传入一个对象,你可以通过子属性 rule 配置取整的规则,是向上取整 ceil,向下取整 floor,又或是四舍五入round。而子属性 step 则代表步长。
<template>
<view>
<view class="picker-demo-title">Config minute step:</view>
<cube-time-picker minuteStep="{{minuteStep}}" />
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
createComponent({
data: {
minuteStep: {
rule: 'ceil',
step: 15
}
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Config Format
通过 format 属性可配置 select 事件的 formatedTime 参数的格式。
<template>
<view>
<view class="picker-demo-title">Config format:</view>
<cube-time-picker format="{{format}}" bindchange="onChange" />
<view class="demo-data" wx:if="{{ changeParams.length }}">
<view class="key">change 事件参数:</view>
<view class="value">
<view class="value-item" wx:for="{{changeParams}}" wx:key="index">
<view class="item-key">{{item[0]}}</view>
<view class="item-value">{{item[1]}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
import { beauty } from '../../common/utils'
createComponent({
data: {
format: 'hh:mm',
changeParams: ''
},
methods: {
onChange(e) {
this.changeParams = Object.entries(e.detail)
}
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Config Delay
delay 则表示的是当前时间向后推迟的时间,决定了最小可选时间(注:仅当未设置 min 时有效)。
在例子中配置了30,代表第一个可选时间在当前时间的30分之后。
<template>
<view>
<view class="picker-demo-title">Config delay step:</view>
<cube-time-picker delay="{{delay}}" />
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
createComponent({
data: {
delay: 30
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 手动设置显示时间
timePicker实例向外暴露setTime方法用以手动设置时间,时间格式为时间戳。当时间戳小于当前时间戳时,timePicker实例会默认显示当前时间。
<template>
<view>
<cube-button bindclick="showPickerWithSetTime">Use setTime</cube-button>
<cube-time-picker
wx:ref="picker"
bindchange="onChange"
bindcolumnChange="onColumnChange" />
</cube-time-picker>
</view>
</template>
<script>
import { createComponent } from '@mpxjs/core'
import funcMixin from '../../common/mixins/picker'
createComponent({
mixins: [ funcMixin ],
methods: {
showPickerWithSetTime() {
const time = new Date().valueOf() + 1 * 60 * 60 * 1000 * 24
this.$refs.picker.setTime(time)
}
}
})
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Props
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
themeType | 用于生成最外层类名 如原类名为 cube-component,添加 themeType = demo 后,类名变为 cube-component cube-component-demo | String | - | - |
delay | 将当前时间向后推算的分钟数,决定了最小可选时间(注:仅当未设置 min 时有效) | Number | - | 15 |
day | 日期配置 | Object | - | { len: 3 } |
showNow | 是否显示现在(需当前时间在可选范围内);以及现在选项的文案 | boolean, { text: string } | - | true |
minuteStep | 分钟数的步长 | number, { rule?: string, step?: number } | rule 可选:floor/ceil/round, step 默认10 | 10 |
format | 时间格式 | String | - | YYYY/M/D hh:mm |
min | 最小可选时间 | Number | - | 根据 delay、minuteStep、hourSpan等计算 默认为 当前时间 + 15 分钟 |
max | 最大可选时间 | Number | - | 根据 min、minuteStep、hourSpan、day 等计算 默认为 min + 3天 |
hourSpan | 小时范围 [0, 24],右开区间 最小值0,最大值24 | Array | - | HourSpan |
immediateChange | 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件。 微信 webview 特有属性,基础库 2.21.1 及以上; 支付宝需基础库 2.8.7 及以上 | Boolean | - | false |
# TsType
Name | Type |
---|---|
DayConfig |
|
NowConfig |
|
MinuteStepConfig |
|
HourSpan |
|
# Events
事件名 | 说明 | 参数 |
---|---|---|
pickstart | 当滚动选择开始时候触发事件 | - |
pickend | 当滚动选择结束时候触发事件 | - |
change | 滚动后触发 | event.detail = { selectedTime, selectedText, formatedTime, selectedIndex }。 selectedTime: 当前选中的timestamp; selectedText: 当前选中的时间文案; formatedTime: 格式化日期; selectedIndex: 当前选中的索引。 |
columnChange | 列变化事件,某列选中的 value 及 index 任意一个变化后触发事件 | event.detail = { column, index, text, value } column 是发生变化的列;index, text, value 分别是变化后的索引、文案、值 |
# Methods
组件实例方法 | 说明 | 参数 | 返回值 |
---|---|---|---|
setTime | 手动设置time-picker组件显示的时间,数据格式为时间戳 | time:时间戳 | - |
getSelectedInfo | 获取当前所有列的选中信息 | - | { selectedTime, selectedText, formatedTime, selectedIndex }。 selectedTime: 当前选中的timestamp; selectedText: 当前选中的时间文案; formatedTime: 格式化日期; selectedIndex: 当前选中的索引。 |