Skip to content

Commit 598a610

Browse files
committed
add cascade-picker document
1 parent 406a87a commit 598a610

File tree

5 files changed

+213
-9
lines changed

5 files changed

+213
-9
lines changed

document/common/config/menu.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"popup": "Popup",
3030
"toast": "Toast",
3131
"picker": "Picker",
32+
"cascade-picker": "CascadePicker",
3233
"time-picker": "TimePicker",
3334
"dialog": "Dialog",
3435
"action-sheet": "ActionSheet"
@@ -83,6 +84,7 @@
8384
"popup": "Popup",
8485
"toast": "Toast",
8586
"picker": "Picker",
87+
"cascade-picker": "CascadePicker",
8688
"time-picker": "TimePicker",
8789
"dialog": "Dialog",
8890
"action-sheet": "ActionSheet"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## CascadePicker
2+
3+
Please waiting...
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
## CascadePicker组件
2+
3+
`CascadePicker`组件是级联选择器,用于实现多列选择之间的级联变化。比如,在选择省市区时,当省切换到了江苏省,城市列应该变成江苏省的各个城市,同理,如果城市切换到苏州市,区列的选项也应变成苏州市的各个区,这就级联的意义。
4+
5+
### 示例
6+
7+
- 基本用法
8+
9+
相比普通选择器,级联选择器需要传入的数据结构是不一样的。普通选择器的数据结构是一个二维数组,每一列对应一个固定的数组,而级联选择器,则需要传入的是一个树形结构,第一列的数组,的每个选项的children属性,对应着切换到该选项时后续列的数据,从而实现对后续列的改变。如下所示
10+
11+
```html
12+
<cube-button @click="showCascadePicker">Cascade Picker</cube-button>
13+
```
14+
```js
15+
const cascadeData = [
16+
{
17+
value: 'Fruit',
18+
text: 'Fruit',
19+
children: [
20+
{
21+
value: 'Apple',
22+
text: 'Apple',
23+
children: [{ value: 1, text: 'One' }, { value: 2, text: 'Two' }]
24+
},
25+
{
26+
value: 'Orange',
27+
text: 'Orange',
28+
children: [{ value: 3, text: 'Three'}, { value: 4, text: 'Four' }]
29+
}
30+
]
31+
},
32+
{
33+
value: 'Drink',
34+
text: 'Drink',
35+
children: [
36+
{
37+
value: 'Coffee',
38+
text: 'Coffee',
39+
children: [{ value: 1, text: 'One' }, { value: 2, text: 'Two' }]
40+
},
41+
{
42+
value: 'Tea',
43+
text: 'Tea',
44+
children: [{ value: 1, text: 'One' }, { value: 3, text: 'Three'}]
45+
}
46+
]
47+
}
48+
]
49+
export default {
50+
mounted () {
51+
this.cascadePicker = this.$createCascadePicker({
52+
title: 'Cascade Picker',
53+
data: cascadeData,
54+
selectedIndex: [1, 0, 0],
55+
onSelect: (selectedVal, selectedIndex, selectedText) => {
56+
console.log('select', selectedVal, selectedIndex, selectedText)
57+
},
58+
onCancel: () => {
59+
console.log('cancel')
60+
}
61+
})
62+
},
63+
methods: {
64+
showCascadePicker() {
65+
this.cascadePicker.show()
66+
}
67+
}
68+
}
69+
```
70+
当第一列选中`Fruit`时,第二列的选项是`Apple``Orange`。以此类推,当第二列选中`Orange`时,第三列的选项是`Three``Four`
71+
72+
- 省市区选择器
73+
74+
对于省市区选择器,只需要构造出级联选择器的数据结构传入就可以了。
75+
76+
```html
77+
<cube-button @click="showCityPicker">City Picker</cube-button>
78+
```
79+
```js
80+
import { provinceList, cityList, areaList } from 'example/data/area'
81+
82+
const cityData = provinceList
83+
cityData.forEach(province => {
84+
province.children = cityList[province.value]
85+
province.children.forEach(city => {
86+
city.children = areaList[city.value]
87+
})
88+
})
89+
90+
export default {
91+
mounted () {
92+
this.cityPicker = this.$createCascadePicker({
93+
title: 'City Picker',
94+
data: cityData,
95+
onSelect: (selectedVal, selectedIndex, selectedText) => {
96+
console.log('select', selectedVal, selectedIndex, selectedText)
97+
},
98+
onCancel: () => {
99+
console.log('cancel')
100+
}
101+
})
102+
},
103+
methods: {
104+
showCityPicker() {
105+
this.cityPicker.show()
106+
}
107+
}
108+
}
109+
```
110+
111+
- 日期选择器
112+
113+
日期选择器的原理也是一样,就是构造出级联选择器的数据结构。而且我们还在示例中提供一个[日期选择器组件](https://github.com/didi/cube-ui/blob/dev/example/components/date-picker.vue),可以传入起始日期和结束日期,帮你生成相应的级联树形数据结构。用法如下:
114+
115+
```html
116+
<cube-button @click="showDatePicker">Date Picker</cube-button>
117+
```
118+
```js
119+
import DatePicker from 'example/components/date-picker.vue'
120+
121+
createAPI(Vue, DatePicker, ['select', 'cancel'], false)
122+
123+
export default {
124+
mounted () {
125+
this.datePicker = this.$createDatePicker({
126+
min: [2008, 8, 8],
127+
max: [2020, 10, 20],
128+
onSelect: (selectedVal, selectedIndex, selectedText) => {
129+
console.log('select', selectedVal, selectedIndex, selectedText)
130+
},
131+
onCancel: () => {
132+
console.log('cancel')
133+
}
134+
})
135+
},
136+
methods: {
137+
showDatePicker() {
138+
this.datePicker.show()
139+
}
140+
}
141+
}
142+
```
143+
144+
- 实例方法 `setData`
145+
146+
`setData`方法,用于重置`CascadePicker`实例的数据和选中的索引。
147+
148+
```html
149+
<cube-button @click="showPicker">SetData Picker</cube-button>
150+
```
151+
```js
152+
export default {
153+
mounted () {
154+
this.setDataPicker = this.$createCascadePicker({
155+
title: 'Set Data',
156+
onSelect: (selectedVal, selectedIndex, selectedText) => {
157+
console.log('select', selectedVal, selectedIndex, selectedText)
158+
},
159+
onCancel: () => {
160+
console.log('cancel')
161+
}
162+
})
163+
},
164+
methods: {
165+
showSetDataPicker() {
166+
// setData when picker is invisible
167+
this.setDataPicker.setData(cascadeData)
168+
this.setDataPicker.show()
169+
setTimeout(() => {
170+
// setData when picker is visible
171+
this.setDataPicker.setData(cityData, [1, 1, 0])
172+
}, 1000)
173+
}
174+
}
175+
}
176+
```
177+
178+
值得注意的一点是,虽然不管选择器显示前后,都可以`setData`,但是为了体验,在显示后`setData`,所传入的数据结构,必须与之前的列数相同,也就是说如果之前是三列选择器,显示时`setData`还得是三列。
179+
180+
### Props 配置
181+
182+
| 参数 | 说明 | 类型 | 默认值 | 示例 |
183+
| - | - | - | - | - |
184+
| title | 标题 | String | '' | - |
185+
| data | 级联选择器的树形数据,用于初始化选项 | Array | [] | - |
186+
| selectIndex | 被选中的索引值,拉起选择器后显示这个索引值对应的内容 | Array | [] | [1] |
187+
188+
* `data`子配置项
189+
190+
| 参数 | 说明 | 类型 | 默认值 | 示例 |
191+
| - | - | - | - | - |
192+
| text | 每个选项展示的文案 | String/Number | - | - |
193+
| value | 每个选项的值 | String/Number/Boolean | - | - |
194+
195+
### 事件
196+
197+
| 事件名 | 说明 | 参数1 | 参数2 | 参数3 |
198+
| - | - | - | - | - |
199+
| select | 点击确认按钮触发此事件 | selectedVal: 当前选中项每一列的值,Array类型 | selectedIndex: 当前选中项每一列的索引,Array类型 | selectedText: 当前选中项每一列的文案,Array类型 |
200+
| change | 滚轴滚动后触发此事件 | index: 当前滚动列次序,Number类型 | selectedIndex: 当前列选中项的索引,Number类型 |
201+
| cancel | 点击取消按钮触发此事件 | - | - |
202+
203+
### 实例方法
204+
205+
| 方法名 | 说明 | 参数1 | 参数2 |
206+
| - | - | - | - |
207+
| setData | 重置数据和选中的索引 | 级联树形数据结构,Array类型 | 每列选中的索引,Array类型 |

example/data/cascade.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,6 @@ export const cascadeData = [
2525
value: 'Orange',
2626
text: 'Orange',
2727
children: [
28-
{
29-
value: 1,
30-
text: 'One'
31-
},
32-
{
33-
value: 2,
34-
text: 'Two'
35-
},
3628
{
3729
value: 3,
3830
text: 'Three'

example/pages/cascade-picker.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
this.cascadePicker = this.$createCascadePicker({
3636
title: 'Cascade Picker',
3737
data: cascadeData,
38-
selectedIndex: [1, 0, 0],
38+
selectedIndex: [0, 1, 0],
3939
onSelect: this.selectHandle,
4040
onCancel: this.cancelHandle,
4141
onChange: () => {

0 commit comments

Comments
 (0)