From bf9db97921804183198e5ddbb1ff3d2df8259321 Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 19 Nov 2018 20:33:14 +0800 Subject: [PATCH] [improvement] TreeSelect: support disable option (#2107) --- packages/tree-select/demo/index.vue | 36 ++++++++++--------- packages/tree-select/en-US.md | 10 +++--- packages/tree-select/index.less | 5 +++ packages/tree-select/index.vue | 9 +++-- .../test/__snapshots__/demo.spec.js.snap | 2 +- packages/tree-select/test/index.spec.js | 10 ++++-- packages/tree-select/zh-CN.md | 21 ++++++----- 7 files changed, 55 insertions(+), 38 deletions(-) diff --git a/packages/tree-select/demo/index.vue b/packages/tree-select/demo/index.vue index 24f575b1e..8c6530d9c 100644 --- a/packages/tree-select/demo/index.vue +++ b/packages/tree-select/demo/index.vue @@ -21,29 +21,30 @@ export default { group3: '江苏', city1: [{ text: '杭州', - id: 1001 + id: 1 }, { text: '温州', - id: 1002 + id: 2 }, { text: '宁波', - id: 1003 + id: 3, + disabled: true }, { text: '义乌', - id: 1004 + id: 4 }], city2: [{ text: '南京', - id: 1011 + id: 5 }, { text: '无锡', - id: 1012 + id: 6 }, { text: '徐州', - id: 1013 + id: 7 }, { text: '苏州', - id: 1014 + id: 8 }] }, 'en-US': { @@ -52,29 +53,30 @@ export default { group3: 'Group2', city1: [{ text: 'Delaware', - id: 1001 + id: 1 }, { text: 'Florida', - id: 1002 + id: 2 }, { text: 'Georqia', - id: 1003 + id: 3, + disabled: true }, { text: 'Indiana', - id: 1004 + id: 4 }], city2: [{ text: 'Alabama', - id: 1011 + id: 5 }, { text: 'Kansas', - id: 1012 + id: 6 }, { text: 'Louisiana', - id: 1013 + id: 7 }, { text: 'Texas', - id: 1014 + id: 8 }] } }, @@ -82,7 +84,7 @@ export default { data() { return { mainActiveIndex: 0, - activeId: 1001 + activeId: 1 }; }, diff --git a/packages/tree-select/en-US.md b/packages/tree-select/en-US.md index e253f2488..023ca6d4c 100644 --- a/packages/tree-select/en-US.md +++ b/packages/tree-select/en-US.md @@ -25,7 +25,7 @@ Vue.use(TreeSelect); export default { data() { return { - items: items, + items, // the index of parent item mainActiveIndex: 0, // the id of selected item @@ -77,13 +77,13 @@ In every tree object, `text` property defines `id` stands for the unique key whi // name of the leaf node text: 'Washington', // id of the leaf node, component highlights leaf node by comparing the activeId with this. - id: 1002 + id: 1, + // disable options + disabled: true }, { - // name of the leaf node text: 'Baltimore', - // id of the leaf node, component highlights leaf node by comparing the activeId with this. - id: 1001 + id: 2 } ] } diff --git a/packages/tree-select/index.less b/packages/tree-select/index.less index 24e61e537..7463e6fe3 100644 --- a/packages/tree-select/index.less +++ b/packages/tree-select/index.less @@ -48,6 +48,11 @@ &--active { color: @red; } + + &--disabled, + &--disabled:active { + color: @gray; + } } &__selected { diff --git a/packages/tree-select/index.vue b/packages/tree-select/index.vue index 44bcccde7..da9b0cb10 100644 --- a/packages/tree-select/index.vue +++ b/packages/tree-select/index.vue @@ -18,7 +18,10 @@ v-for="item in subItems" :key="item.id" class="van-ellipsis" - :class="b('item', { active: activeId === item.id })" + :class="b('item', { + active: activeId === item.id, + disabled: item.disabled + })" @click="onItemSelect(item)" > {{ item.text }} @@ -66,7 +69,9 @@ export default create({ methods: { onItemSelect(data) { - this.$emit('itemclick', data); + if (!data.disabled) { + this.$emit('itemclick', data); + } } } }); diff --git a/packages/tree-select/test/__snapshots__/demo.spec.js.snap b/packages/tree-select/test/__snapshots__/demo.spec.js.snap index 94f1ede98..40c706e1a 100644 --- a/packages/tree-select/test/__snapshots__/demo.spec.js.snap +++ b/packages/tree-select/test/__snapshots__/demo.spec.js.snap @@ -26,7 +26,7 @@ exports[`renders demo correctly 1`] = ` 温州 -
+
宁波
diff --git a/packages/tree-select/test/index.spec.js b/packages/tree-select/test/index.spec.js index edcd391c2..56df39902 100644 --- a/packages/tree-select/test/index.spec.js +++ b/packages/tree-select/test/index.spec.js @@ -14,11 +14,17 @@ test('select item', () => { propsData: { items: [{ text: 'group1', - children: [item] + children: [ + item, + { ...item, disabled: true } + ] }] } }); - wrapper.find('.van-tree-select__item').trigger('click'); + const items = wrapper.findAll('.van-tree-select__item'); + items.at(0).trigger('click'); expect(wrapper.emitted('itemclick')[0][0]).toEqual(item); + items.at(1).trigger('click'); + expect(wrapper.emitted('itemclick')[1]).toBeFalsy(); }); diff --git a/packages/tree-select/zh-CN.md b/packages/tree-select/zh-CN.md index 9db1b990b..9d900a378 100644 --- a/packages/tree-select/zh-CN.md +++ b/packages/tree-select/zh-CN.md @@ -11,7 +11,6 @@ Vue.use(TreeSelect); #### 基础用法 - ```html