From 5cef22dbaa4267916e77b43d197540e667ebc93e Mon Sep 17 00:00:00 2001
From: tjz <415800467@qq.com>
Date: Sun, 4 Mar 2018 16:02:46 +0800
Subject: [PATCH] add cascader demo
---
.vscode/settings.json | 3 +-
components/cascader/demo/change-on-select.md | 53 +++++++++++++++
components/cascader/demo/custom-render.md | 70 ++++++++++++++++++++
components/cascader/demo/custom-trigger.md | 61 +++++++++++++++++
components/cascader/demo/default-value.md | 53 +++++++++++++++
components/cascader/demo/disabled-option.md | 54 +++++++++++++++
components/cascader/demo/hover.md | 56 ++++++++++++++++
components/cascader/demo/index.vue | 0
components/cascader/demo/lazy.md | 58 ++++++++++++++++
components/cascader/demo/search.md | 59 +++++++++++++++++
components/cascader/demo/size.md | 57 ++++++++++++++++
components/cascader/index.vue | 21 ++++--
components/vc-cascader/Cascader.vue | 4 ++
components/vc-cascader/Menus.vue | 2 +-
14 files changed, 543 insertions(+), 8 deletions(-)
create mode 100644 components/cascader/demo/change-on-select.md
create mode 100644 components/cascader/demo/custom-render.md
create mode 100644 components/cascader/demo/custom-trigger.md
create mode 100644 components/cascader/demo/default-value.md
create mode 100644 components/cascader/demo/disabled-option.md
create mode 100644 components/cascader/demo/hover.md
create mode 100644 components/cascader/demo/index.vue
create mode 100644 components/cascader/demo/lazy.md
create mode 100644 components/cascader/demo/search.md
create mode 100644 components/cascader/demo/size.md
diff --git a/.vscode/settings.json b/.vscode/settings.json
index c214fde05..a72c3381d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -26,5 +26,6 @@
"vetur.format.js.InsertSpaceBeforeFunctionParenthesis": true,
"stylefmt.config": {
"fix": true
- }
+ },
+ "editor.tabSize": 2
}
diff --git a/components/cascader/demo/change-on-select.md b/components/cascader/demo/change-on-select.md
new file mode 100644
index 000000000..f08076f3e
--- /dev/null
+++ b/components/cascader/demo/change-on-select.md
@@ -0,0 +1,53 @@
+
+
+#### 选择即改变
+这种交互允许只选中父级选项。
+
+
+
+#### Change on select
+Allow only select parent options.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/custom-render.md b/components/cascader/demo/custom-render.md
new file mode 100644
index 000000000..4433bb685
--- /dev/null
+++ b/components/cascader/demo/custom-render.md
@@ -0,0 +1,70 @@
+
+
+#### 自定义已选项
+例如给最后一项加上邮编链接。
+
+
+
+#### Custom render
+For instance, add an external link after the selected value.
+
+
+```html
+
+
+
+
+
+ {{label}} ( handleAreaClick(e, label, props.selectedOptions[index])">{{props.selectedOptions[index].code}})
+
+
+ {{label}} /
+
+
+
+
+
+
+```
+
diff --git a/components/cascader/demo/custom-trigger.md b/components/cascader/demo/custom-trigger.md
new file mode 100644
index 000000000..ce7b64539
--- /dev/null
+++ b/components/cascader/demo/custom-trigger.md
@@ -0,0 +1,61 @@
+
+
+#### 可以自定义显示
+切换按钮和结果分开。
+
+
+
+#### Custom trigger
+Separate trigger button and result.
+
+
+```html
+
+
+ {{text}}
+
+
+ Change city
+
+
+
+
+```
+
diff --git a/components/cascader/demo/default-value.md b/components/cascader/demo/default-value.md
new file mode 100644
index 000000000..acc7cc92b
--- /dev/null
+++ b/components/cascader/demo/default-value.md
@@ -0,0 +1,53 @@
+
+
+#### 默认值
+默认值通过数组的方式指定。
+
+
+
+#### Default value
+Specifies default value by an array.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/disabled-option.md b/components/cascader/demo/disabled-option.md
new file mode 100644
index 000000000..024b1cffc
--- /dev/null
+++ b/components/cascader/demo/disabled-option.md
@@ -0,0 +1,54 @@
+
+
+#### 禁用选项
+通过指定 options 里的 `disabled` 字段。
+
+
+
+#### Disabled option
+Disable option by specifying the `disabled` property in `options`.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/hover.md b/components/cascader/demo/hover.md
new file mode 100644
index 000000000..3439f5b68
--- /dev/null
+++ b/components/cascader/demo/hover.md
@@ -0,0 +1,56 @@
+
+
+#### 移入展开
+通过移入展开下级菜单,点击完成选择。
+
+
+
+#### Hover
+Hover to expand sub menu, click to select option.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/index.vue b/components/cascader/demo/index.vue
new file mode 100644
index 000000000..e69de29bb
diff --git a/components/cascader/demo/lazy.md b/components/cascader/demo/lazy.md
new file mode 100644
index 000000000..47d018a96
--- /dev/null
+++ b/components/cascader/demo/lazy.md
@@ -0,0 +1,58 @@
+
+
+#### 动态加载选项
+使用 `loadData` 实现动态加载选项。
+> 注意:`loadData` 与 `showSearch` 无法一起使用。
+
+
+
+#### Load Options Lazily
+Load options lazily with `loadData`.
+> Note: `loadData` cannot work with `showSearch`.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/search.md b/components/cascader/demo/search.md
new file mode 100644
index 000000000..d84e879ad
--- /dev/null
+++ b/components/cascader/demo/search.md
@@ -0,0 +1,59 @@
+
+
+#### 搜索
+可以直接搜索选项并选择。
+> `Cascader[showSearch]` 暂不支持服务端搜索,更多信息见 [#5547](https://github.com/ant-design/ant-design/issues/5547)
+
+
+
+#### Search
+Search and select options directly.
+> Now, `Cascader[showSearch]` doesn't support search on server, more info [#5547](https://github.com/ant-design/ant-design/issues/5547)
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/demo/size.md b/components/cascader/demo/size.md
new file mode 100644
index 000000000..0951e70fa
--- /dev/null
+++ b/components/cascader/demo/size.md
@@ -0,0 +1,57 @@
+
+
+#### 大小
+不同大小的级联选择器。
+
+
+
+#### Size
+Cascade selection box of different sizes.
+
+
+```html
+
+
+
+
+```
+
diff --git a/components/cascader/index.vue b/components/cascader/index.vue
index a1e90a80d..9c19cb61a 100644
--- a/components/cascader/index.vue
+++ b/components/cascader/index.vue
@@ -80,11 +80,15 @@ function defaultSortFilteredOption (a, b, inputValue) {
return a.findIndex(callback) - b.findIndex(callback)
}
-const defaultDisplayRender = (label) => label.join(' / ')
+const defaultDisplayRender = ({ labels }) => labels.join(' / ')
export default {
mixins: [BaseMixin],
props: CascaderProps,
+ model: {
+ prop: 'value',
+ event: 'change',
+ },
data () {
this.cachedOptions = []
const { value, defaultValue, popupVisible, showSearch, options, changeOnSelect, flattenTree } = this
@@ -181,14 +185,15 @@ export default {
},
getLabel () {
- const { options, displayRender = defaultDisplayRender } = this
+ const { options, $scopedSlots } = this
+ const displayRender = this.displayRender || $scopedSlots.displayRender || defaultDisplayRender
const value = this.sValue
const unwrappedValue = Array.isArray(value[0]) ? value[0] : value
const selectedOptions = arrayTreeFilter(options,
(o, level) => o.value === unwrappedValue[level],
)
- const label = selectedOptions.map(o => o.label)
- return displayRender(label, selectedOptions)
+ const labels = selectedOptions.map(o => o.label)
+ return displayRender({ labels, selectedOptions })
},
clearSelection (e) {
@@ -295,6 +300,7 @@ export default {
'renderFilteredOption',
'sortFilteredOption',
'notFoundContent',
+ 'defaultValue',
])
let options = this.options
@@ -342,10 +348,13 @@ export default {
-
+ { showSearch ?
{this.getLabel()}
-
+ : null}
+ { !showSearch ?
+ {this.getLabel()}
+ : null}
{clearIcon}
diff --git a/components/vc-cascader/Cascader.vue b/components/vc-cascader/Cascader.vue
index a2900c722..96347a4b9 100644
--- a/components/vc-cascader/Cascader.vue
+++ b/components/vc-cascader/Cascader.vue
@@ -66,6 +66,10 @@ export default {
expandTrigger: PropTypes.string.def('click'),
},
mixins: [BaseMixin],
+ model: {
+ prop: 'value',
+ event: 'change',
+ },
data () {
let initialValue = []
const { value, defaultValue, popupVisible } = this
diff --git a/components/vc-cascader/Menus.vue b/components/vc-cascader/Menus.vue
index 55662b0be..8232fba4e 100644
--- a/components/vc-cascader/Menus.vue
+++ b/components/vc-cascader/Menus.vue
@@ -45,7 +45,7 @@ export default {
on: {
click: onSelect,
},
- key: option.value,
+ key: option.value.toString(),
}
let menuItemCls = `${prefixCls}-menu-item`
const hasChildren = option.children && option.children.length > 0