From 1da6a30f192ba0faad5ac5be45cb63775617a904 Mon Sep 17 00:00:00 2001
From: neverland <chenjiahan@buaa.edu.cn>
Date: Fri, 22 Jun 2018 15:46:51 +0800
Subject: [PATCH] [Improvement] Stepper blur (#1316)

---
 packages/stepper/en-US.md           |  3 ++-
 packages/stepper/index.vue          |  9 +++++++++
 packages/stepper/test/index.spec.js | 22 ++++++++++++++++++++++
 packages/stepper/zh-CN.md           |  1 +
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/packages/stepper/en-US.md b/packages/stepper/en-US.md
index b1a2d4728..f475a4708 100644
--- a/packages/stepper/en-US.md
+++ b/packages/stepper/en-US.md
@@ -63,4 +63,5 @@ export default {
 | change | Triggered when value change | value: current value |
 | overlimit | Triggered when click disabled button | - |
 | plus | Triggered when click plus button | - |
-| minus | Triggered when click minus button | - |
\ No newline at end of file
+| minus | Triggered when click minus button | - |
+| blur | Triggered when input blured | - |
diff --git a/packages/stepper/index.vue b/packages/stepper/index.vue
index 4a2d43641..4ac89e22a 100644
--- a/packages/stepper/index.vue
+++ b/packages/stepper/index.vue
@@ -11,6 +11,7 @@
       :disabled="disabled || disableInput"
       @input="onInput"
       @keypress="onKeypress"
+      @blur="onBlur"
     >
     <button
       :class="b('plus', { disabled: plusDisabled })"
@@ -121,6 +122,14 @@ export default create({
       }
     },
 
+    onBlur(event) {
+      if (!this.value) {
+        this.currentValue = +this.min;
+        this.emitInput();
+      }
+      this.$emit('blur', event);
+    },
+
     emitInput() {
       this.$emit('input', this.currentValue);
       this.$emit('change', this.currentValue);
diff --git a/packages/stepper/test/index.spec.js b/packages/stepper/test/index.spec.js
index dd93f85f2..97d9e79a3 100644
--- a/packages/stepper/test/index.spec.js
+++ b/packages/stepper/test/index.spec.js
@@ -92,3 +92,25 @@ test('only allow interger', () => {
 
   expect(fn.mock.calls.length).toEqual(1);
 });
+
+test('stepper blur', () => {
+  const wrapper = mount(Stepper, {
+    propsData: {
+      value: 5,
+      min: 3
+    }
+  });
+
+  wrapper.vm.$on('input', value => {
+    wrapper.setProps({ value });
+  });
+
+  const input = wrapper.find('input');
+  input.trigger('blur');
+  input.element.value = '';
+  input.trigger('input');
+  input.trigger('blur');
+
+  expect(wrapper.emitted('input')).toEqual([[''], [3]]);
+  expect(wrapper.emitted('blur')).toBeTruthy();
+});
diff --git a/packages/stepper/zh-CN.md b/packages/stepper/zh-CN.md
index f22592b84..62d9da789 100644
--- a/packages/stepper/zh-CN.md
+++ b/packages/stepper/zh-CN.md
@@ -67,3 +67,4 @@ export default {
 | overlimit | 点击不可用的按钮时触发 | - |
 | plus | 点击增加按钮时触发 | - |
 | minus | 点击减少按钮时触发 | - |
+| blur | 输入框失焦时触发 | - |