From 165bb7c9ed134eaebe5cdfce6ff5634c49635942 Mon Sep 17 00:00:00 2001 From: 梁灏 Date: Wed, 16 Nov 2016 10:07:03 +0800 Subject: [PATCH] update Cascader --- src/components/cascader/cascader.vue | 33 ++++++++++++++++++++++++--------- src/components/cascader/casitem.vue | 3 --- src/components/cascader/caspanel.vue | 4 ++++ src/styles/components/cascader.less | 14 +++++--------- src/styles/components/select.less | 8 +------- src/styles/mixins/common.less | 12 ++++++++++++ test/routers/cascader.vue | 11 ++++++++--- 7 files changed, 54 insertions(+), 31 deletions(-) diff --git a/src/components/cascader/cascader.vue b/src/components/cascader/cascader.vue index 42d18e7..cfb23b5 100644 --- a/src/components/cascader/cascader.vue +++ b/src/components/cascader/cascader.vue @@ -92,7 +92,8 @@ return [ `${prefixCls}`, { - [`${prefixCls}-show-clear`]: this.showCloseIcon + [`${prefixCls}-show-clear`]: this.showCloseIcon, + [`${prefixCls}-visible`]: this.visible } ] }, @@ -105,28 +106,42 @@ label.push(this.selected[i].label); } - return this.renderFormat(label); + return this.renderFormat(label, this.selected); } }, methods: { clearSelect () { - + const oldVal = JSON.stringify(this.value); + this.value = this.selected = this.tmpSelected = []; + this.handleClose(); + this.emitValue(this.value, oldVal); + this.$broadcast('on-clear'); }, handleClose () { this.visible = false; }, onFocus () { this.visible = true; + if (!this.value.length) { + this.$broadcast('on-clear'); + } }, updateResult (result) { this.tmpSelected = result; }, - updateSelected () { - this.$broadcast('on-find-selected', this.value); + updateSelected (init = false) { + if (!this.changeOnSelect || init) { + this.$broadcast('on-find-selected', this.value); + } + }, + emitValue (val, oldVal) { + if (JSON.stringify(val) !== oldVal) { + this.$emit('on-change', this.value, JSON.parse(JSON.stringify(this.selected))); + } } }, ready () { - this.updateSelected(); + this.updateSelected(true); }, events: { // lastValue: is click the final val @@ -140,10 +155,10 @@ this.selected.forEach((item) => { newVal.push(item.value); }); - this.value = newVal; - if (JSON.stringify(this.value) !== oldVal) { - this.$emit('on-change', this.value); + if (!fromInit) { + this.value = newVal; + this.emitValue(this.value, oldVal); } } if (lastValue && !fromInit) { diff --git a/src/components/cascader/casitem.vue b/src/components/cascader/casitem.vue index 44b1ddb..b9eb140 100644 --- a/src/components/cascader/casitem.vue +++ b/src/components/cascader/casitem.vue @@ -18,9 +18,6 @@ } ] } - }, - ready () { - } } \ No newline at end of file diff --git a/src/components/cascader/caspanel.vue b/src/components/cascader/caspanel.vue index 45cfea9..4bc8655 100644 --- a/src/components/cascader/caspanel.vue +++ b/src/components/cascader/caspanel.vue @@ -105,6 +105,10 @@ } } } + }, + 'on-clear' () { + this.sublist = []; + this.tmpItem = {}; } } } diff --git a/src/styles/components/cascader.less b/src/styles/components/cascader.less index a87d4ee..c87ebba 100644 --- a/src/styles/components/cascader.less +++ b/src/styles/components/cascader.less @@ -24,14 +24,10 @@ } &-arrow { - position: absolute; - top: 50%; - right: 8px; - line-height: 1; - margin-top: -6px; - font-size: @font-size-base; - color: @subsidiary-color; - .transition(all @transition-time @ease-in-out); + .inner-arrow(); + } + &-visible &-arrow:nth-of-type(2){ + .transform(rotate(180deg)); } .@{select-dropdown-prefix-cls} { @@ -78,7 +74,7 @@ &-active{ background-color: @background-color-select-hover; - font-weight: bold; + color: @primary-color; } } } diff --git a/src/styles/components/select.less b/src/styles/components/select.less index 2bca4f7..cbbca26 100644 --- a/src/styles/components/select.less +++ b/src/styles/components/select.less @@ -41,13 +41,7 @@ } &-arrow { - position: absolute; - top: 50%; - right: 8px; - line-height: 1; - margin-top: -6px; - color: @subsidiary-color; - .transition(all @transition-time @ease-in-out); + .inner-arrow(); } &-visible{ diff --git a/src/styles/mixins/common.less b/src/styles/mixins/common.less index e93b998..ddac4f1 100644 --- a/src/styles/mixins/common.less +++ b/src/styles/mixins/common.less @@ -18,4 +18,16 @@ -webkit-user-select: @type; -moz-user-select: @type; user-select: @type; +} + +// for select and input like component's arrow +.inner-arrow() { + position: absolute; + top: 50%; + right: 8px; + line-height: 1; + margin-top: -7px; + font-size: @font-size-base; + color: @subsidiary-color; + .transition(all @transition-time @ease-in-out); } \ No newline at end of file diff --git a/test/routers/cascader.vue b/test/routers/cascader.vue index 080c9c4..9256f87 100644 --- a/test/routers/cascader.vue +++ b/test/routers/cascader.vue @@ -1,6 +1,7 @@