From 0bff072fa7241f2ffa71f7acb3a532d3dbaba3f5 Mon Sep 17 00:00:00 2001 From: zhangHongEn Date: Wed, 14 Aug 2019 16:20:17 +0800 Subject: [PATCH] Cascader: fix display errors (#16665) --- packages/cascader-panel/src/cascader-node.vue | 27 ++++++----- test/unit/specs/cascader-panel.spec.js | 45 +++++++++++++++++++ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/packages/cascader-panel/src/cascader-node.vue b/packages/cascader-panel/src/cascader-node.vue index 9cbb3b329..360f588b6 100644 --- a/packages/cascader-panel/src/cascader-node.vue +++ b/packages/cascader-panel/src/cascader-node.vue @@ -205,20 +205,19 @@ const disabled = !checkStrictly && isDisabled; const events = { on: {} }; - if (!isLeaf) { - if (expandTrigger === 'click') { - events.on.click = this.handleExpand; - } else { - events.on.mouseenter = e => { - this.handleExpand(); - this.$emit('expand', e); - }; - events.on.focus = e => { - this.handleExpand(); - this.$emit('expand', e); - }; - } - } else if (!isDisabled && !checkStrictly && !multiple) { + if (expandTrigger === 'click') { + events.on.click = this.handleExpand; + } else { + events.on.mouseenter = e => { + this.handleExpand(); + this.$emit('expand', e); + }; + events.on.focus = e => { + this.handleExpand(); + this.$emit('expand', e); + }; + } + if (isLeaf && !isDisabled && !checkStrictly && !multiple) { events.on.click = this.handleCheckChange; } diff --git a/test/unit/specs/cascader-panel.spec.js b/test/unit/specs/cascader-panel.spec.js index a57200fd5..fda7d75a4 100644 --- a/test/unit/specs/cascader-panel.spec.js +++ b/test/unit/specs/cascader-panel.spec.js @@ -88,6 +88,23 @@ const options2 = [{ }] }]; +const options3 = [ + { + value: 'shanghai', + label: '上海', + children: [ + { + value: 'baoshan', + label: '宝山' + } + ] + }, + { + value: 'beijing', + label: '北京' + } +]; + const getMenus = el => el.querySelectorAll('.el-cascader-menu'); const getOptions = (el, menuIndex) => getMenus(el)[menuIndex].querySelectorAll('.el-cascader-node'); const getValidOptions = (el, menuIndex) => getMenus(el)[menuIndex].querySelectorAll('.el-cascader-node[tabindex="-1"]'); @@ -532,5 +549,33 @@ describe('CascaderPanel', () => { await waitImmediate(); expect(vm.value.length).to.equal(3); }); + + it('click leaf hidden children', async() => { + vm = createVue({ + template: ` + + `, + data() { + return { + value: [], + options: options3 + }; + } + }, true); + + const el = vm.$el; + const elOptions = getOptions(el, 0); + const firstOption = elOptions[0]; + const twoOption = elOptions[1]; + firstOption.click(); + await waitImmediate(); + expect(getMenus(el).length).to.equal(2); + twoOption.click(); + await waitImmediate(); + expect(getMenus(el).length).to.equal(1); + }); });