Commit c3a9f3895b0df00111b5233489c54bca08ec8640
1 parent
8a83e7c4
update Input
update Input
Showing
3 changed files
with
93 additions
and
0 deletions
Show diff stats
src/components/input/input.vue
@@ -12,6 +12,7 @@ | @@ -12,6 +12,7 @@ | ||
12 | :readonly="readonly" | 12 | :readonly="readonly" |
13 | :name="name" | 13 | :name="name" |
14 | v-model="value" | 14 | v-model="value" |
15 | + :number="number" | ||
15 | @keyup.enter="handleEnter" | 16 | @keyup.enter="handleEnter" |
16 | @focus="handleFocus" | 17 | @focus="handleFocus" |
17 | @blur="handleBlur" | 18 | @blur="handleBlur" |
@@ -87,6 +88,10 @@ | @@ -87,6 +88,10 @@ | ||
87 | }, | 88 | }, |
88 | name: { | 89 | name: { |
89 | type: String | 90 | type: String |
91 | + }, | ||
92 | + number: { | ||
93 | + type: Boolean, | ||
94 | + default: false | ||
90 | } | 95 | } |
91 | }, | 96 | }, |
92 | data () { | 97 | data () { |
src/styles/components/form.less
@@ -38,6 +38,12 @@ | @@ -38,6 +38,12 @@ | ||
38 | line-height: 32px; | 38 | line-height: 32px; |
39 | font-size: @font-size-small; | 39 | font-size: @font-size-small; |
40 | } | 40 | } |
41 | + & & { | ||
42 | + margin-bottom: 0; | ||
43 | + } | ||
44 | + & & &-content { | ||
45 | + margin-left: 0!important; | ||
46 | + } | ||
41 | 47 | ||
42 | &-error-tip{ | 48 | &-error-tip{ |
43 | position: absolute; | 49 | position: absolute; |
test/routers/form.vue
1 | <template> | 1 | <template> |
2 | <div style="width: 600px"> | 2 | <div style="width: 600px"> |
3 | + <i-form v-ref:form-custom :model="formCustom" :rules="ruleCustom" :label-width="80"> | ||
4 | + <Form-item label="密码" prop="passwd"> | ||
5 | + <i-input type="password" :value.sync="formCustom.passwd"></i-input> | ||
6 | + </Form-item> | ||
7 | + <Form-item label="确认密码" prop="passwdCheck"> | ||
8 | + <i-input type="password" :value.sync="formCustom.passwdCheck"></i-input> | ||
9 | + </Form-item> | ||
10 | + <Form-item label="年龄" prop="age"> | ||
11 | + <i-input type="text" :value.sync="formCustom.age"></i-input> | ||
12 | + </Form-item> | ||
13 | + <Form-item> | ||
14 | + <i-button type="primary" @click="handleSubmit('formCustom')">提交</i-button> | ||
15 | + <i-button type="ghost" @click="handleReset('formCustom')" style="margin-left: 8px">重置</i-button> | ||
16 | + </Form-item> | ||
17 | + </i-form> | ||
18 | + | ||
19 | + | ||
20 | + | ||
3 | <i-form v-ref:form :model="form" :rules="rules" :label-width="100" label-position="right"> | 21 | <i-form v-ref:form :model="form" :rules="rules" :label-width="100" label-position="right"> |
4 | <form-item label="邮箱" prop="mail"> | 22 | <form-item label="邮箱" prop="mail"> |
5 | <i-input :value.sync="form.mail" placeholder="请输入邮箱"> | 23 | <i-input :value.sync="form.mail" placeholder="请输入邮箱"> |
@@ -190,6 +208,42 @@ | @@ -190,6 +208,42 @@ | ||
190 | export default { | 208 | export default { |
191 | props: {}, | 209 | props: {}, |
192 | data () { | 210 | data () { |
211 | + const validatePass = (rule, value, callback) => { | ||
212 | + if (value === '') { | ||
213 | + callback(new Error('请输入密码')); | ||
214 | + } else { | ||
215 | + if (this.formCustom.passwdCheck !== '') { | ||
216 | + this.$refs.formCustom.validateField('passwdCheck'); | ||
217 | + } | ||
218 | + callback(); | ||
219 | + } | ||
220 | + }; | ||
221 | + const validatePassCheck = (rule, value, callback) => { | ||
222 | + if (value === '') { | ||
223 | + callback(new Error('请再次输入密码')); | ||
224 | + } else if (value !== this.formCustom.passwd) { | ||
225 | + callback(new Error('两次输入密码不一致!')); | ||
226 | + } else { | ||
227 | + callback(); | ||
228 | + } | ||
229 | + }; | ||
230 | + const validateAge = (rule, value, callback) => { | ||
231 | + if (!value) { | ||
232 | + return callback(new Error('年龄不能为空')); | ||
233 | + } | ||
234 | + setTimeout(() => { | ||
235 | + if (!Number.isInteger(value)) { | ||
236 | + callback(new Error('请输入数字值')); | ||
237 | + } else { | ||
238 | + if (value < 18) { | ||
239 | + callback(new Error('必须年满18岁')); | ||
240 | + } else { | ||
241 | + callback(); | ||
242 | + } | ||
243 | + } | ||
244 | + }, 1000); | ||
245 | + }; | ||
246 | + | ||
193 | return { | 247 | return { |
194 | data: [{ | 248 | data: [{ |
195 | value: 'beijing', | 249 | value: 'beijing', |
@@ -373,6 +427,22 @@ | @@ -373,6 +427,22 @@ | ||
373 | type: 'string', min: 10 | 427 | type: 'string', min: 10 |
374 | } | 428 | } |
375 | ] | 429 | ] |
430 | + }, | ||
431 | + formCustom: { | ||
432 | + passwd: '', | ||
433 | + passwdCheck: '', | ||
434 | + age: '' | ||
435 | + }, | ||
436 | + ruleCustom: { | ||
437 | + passwd: [ | ||
438 | + { validator: validatePass, trigger: 'blur' } | ||
439 | + ], | ||
440 | + passwdCheck: [ | ||
441 | + { validator: validatePassCheck, trigger: 'blur' } | ||
442 | + ], | ||
443 | + age: [ | ||
444 | + { validator: validateAge, trigger: 'blur' } | ||
445 | + ] | ||
376 | } | 446 | } |
377 | } | 447 | } |
378 | }, | 448 | }, |
@@ -419,6 +489,18 @@ | @@ -419,6 +489,18 @@ | ||
419 | console.log(direction); | 489 | console.log(direction); |
420 | console.log(moveKeys); | 490 | console.log(moveKeys); |
421 | this.form.targetKeys1 = newTargetKeys; | 491 | this.form.targetKeys1 = newTargetKeys; |
492 | + }, | ||
493 | + handleSubmit (name) { | ||
494 | + this.$refs[name].validate((valid) => { | ||
495 | + if (valid) { | ||
496 | + this.$Message.success('提交成功!'); | ||
497 | + } else { | ||
498 | + this.$Message.error('表单验证失败!'); | ||
499 | + } | ||
500 | + }) | ||
501 | + }, | ||
502 | + handleReset (name) { | ||
503 | + this.$refs[name].resetFields(); | ||
422 | } | 504 | } |
423 | } | 505 | } |
424 | }; | 506 | }; |