diff --git a/src/components/input/input.vue b/src/components/input/input.vue index 1831565..53f4d9b 100644 --- a/src/components/input/input.vue +++ b/src/components/input/input.vue @@ -150,7 +150,6 @@ }, handleChange (event) { this.$emit('on-change', event); - this.$dispatch('on-form-change', this.value); }, resizeTextarea () { const autosize = this.autosize; @@ -169,6 +168,7 @@ this.$nextTick(() => { this.resizeTextarea(); }); + this.$dispatch('on-form-change', this.value); } }, ready () { diff --git a/test/routers/form.vue b/test/routers/form.vue index aeeb8d2..fa72a35 100644 --- a/test/routers/form.vue +++ b/test/routers/form.vue @@ -1,496 +1,41 @@ <template> - <div style="width: 600px"> - <i-form v-ref:form-custom :model="formCustom" :rules="ruleCustom" :label-width="80"> - <Form-item label="密码" prop="passwd"> - <i-input type="password" :value.sync="formCustom.passwd"></i-input> - </Form-item> - <Form-item label="确认密码" prop="passwdCheck"> - <i-input type="password" :value.sync="formCustom.passwdCheck"></i-input> - </Form-item> - <Form-item label="年龄" prop="age"> - <i-input type="text" :value.sync="formCustom.age" number></i-input> - </Form-item> - <Form-item> - <i-button type="primary" @click="handleSubmit('formCustom')">提交</i-button> - <i-button type="ghost" @click="handleReset('formCustom')" style="margin-left: 8px">重置</i-button> - </Form-item> - </i-form> - - - - <i-form v-ref:form :model="form" :rules="rules" :label-width="100" label-position="right"> - <form-item label="邮箱" prop="mail"> - <i-input :value.sync="form.mail" placeholder="请输入邮箱"> - <Icon type="ios-email-outline" slot="prepend"></Icon> - </i-input> - </form-item> - <form-item label="密码" prop="passwd"> - <i-input :value.sync="form.passwd"> - <i-select slot="prepend" style="width: 80px"> - <i-option value="http">http://</i-option> - <i-option value="https">https://</i-option> - </i-select> - <i-select slot="append" style="width: 70px"> - <i-option value="com">.com</i-option> - <i-option value="org">.org</i-option> - <i-option value="io">.io</i-option> - </i-select> - </i-input> - </form-item> - <form-item label="textarea" prop="textarea"> - <i-input :value.sync="form.textarea" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="请输入..."></i-input> - </form-item> - <form-item label="radio" prop="single"> - <radio :checked.sync="form.single">Single</radio> - </form-item> - <form-item label="radioGroup" prop="group"> - <Radio-group :model.sync="form.group"> - <Radio value="apple"> - <Icon type="social-apple"></Icon> - <span>Apple</span> - </Radio> - <Radio value="android"> - <Icon type="social-android"></Icon> - <span>Android</span> - </Radio> - <Radio value="windows"> - <Icon type="social-windows"></Icon> - <span>Windows</span> - </Radio> - </Radio-group> - </form-item> - <form-item label="checkbox-g" prop="checkboxgroup"> - <Checkbox-group :model.sync="form.checkboxgroup"> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - <Checkbox value="twitter"> - <Icon type="social-twitter"></Icon> - <span>Twitter</span> - </Checkbox> - <Checkbox value="facebook"> - <Icon type="social-facebook"></Icon> - <span>Facebook</span> - </Checkbox> - <Checkbox value="github"> - <Icon type="social-github"></Icon> - <span>Github</span> - </Checkbox> - <Checkbox value="snapchat"> - <Icon type="social-snapchat"></Icon> - <span>Snapchat</span> - </Checkbox> - </Checkbox-group> - </form-item> - <form-item label="select" prop="select"> - <i-select :model.sync="form.select" style="width:200px" clearable> - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> - </i-select> - <i-select :model.sync="model11" filterable> - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> - </i-select> - <i-select :model.sync="model12" filterable multiple> - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> - </i-select> - </form-item> - <form-item label="select多选" prop="selectm"> - <i-select :model.sync="form.selectm" multiple style="width:260px"> - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> - </i-select> - </form-item> - <form-item label="多选滑块" prop="slider"> - <Slider :value.sync="form.slider" range></Slider> - </form-item> - <form-item label="日期" prop="date"> - <Time-picker :value.sync="form.date" type="time" placeholder="选择时间" style="width: 168px"></Time-picker> - </form-item> - <form-item label="两个日期" prop="date2"> - <Date-picker :value.sync="form.date2" type="daterange" placement="bottom-start" placeholder="选择日期" @on-change="c"></Date-picker> - </form-item> - <form-item label="级联" prop="cascader"> - <Cascader :data="data" :value.sync="form.cascader"></Cascader> - </form-item> - <form-item label="穿梭框" prop="targetKeys1"> - <Transfer - :data="form.transfer" - :target-keys="form.targetKeys1" - :render-format="render1" - @on-change="handleChange1"></Transfer> - </form-item> - <form-item label="数字输入框" prop="input"> - <Input-number :max="10" :min="1" :value.sync="form.input"></Input-number> - </form-item> - <form-item> - <i-button type="primary" @click="onSubmit('form')">提交</i-button> - <i-button type="ghost" @click="resetForm('form')">重置</i-button> - </form-item> - </i-form> - </div> + <i-form v-ref:form-inline :model="formInline" :rules="ruleInline" inline> + <Form-item prop="user"> + <i-input type="text" :value.sync="formInline.user" placeholder="Username"> + <Icon type="ios-person-outline" slot="prepend"></Icon> + </i-input> + </Form-item> + <Form-item prop="password"> + <i-input type="password" :value.sync="formInline.password" placeholder="Password"> + <Icon type="ios-locked-outline" slot="prepend"></Icon> + </i-input> + </Form-item> + <Form-item> + <i-button type="primary" @click="handleSubmit('formInline')">登录</i-button> + </Form-item> + </i-form> </template> <script> export default { - props: {}, data () { - const validatePass = (rule, value, callback) => { - if (value === '') { - callback(new Error('请输入密码')); - } else { - if (this.formCustom.passwdCheck !== '') { - this.$refs.formCustom.validateField('passwdCheck'); - } - callback(); - } - }; - const validatePassCheck = (rule, value, callback) => { - if (value === '') { - callback(new Error('请再次输入密码')); - } else if (value !== this.formCustom.passwd) { - callback(new Error('两次输入密码不一致!')); - } else { - callback(); - } - }; - const validateAge = (rule, value, callback) => { - if (!value) { - return callback(new Error('年龄不能为空')); - } - setTimeout(() => { - if (!Number.isInteger(value)) { - callback(new Error('请输入数字值')); - } else { - if (value < 18) { - callback(new Error('必须年满18岁')); - } else { - callback(); - } - } - }, 1000); - }; - return { - data: [{ - value: 'beijing', - label: '北京', - children: [ - { - value: 'gugong', - label: '故宫' - }, - { - value: 'tiantan', - label: '天坛' - }, - { - value: 'wangfujing', - label: '王府井' - } - ] - }, { - value: 'jiangsu', - label: '江苏', - children: [ - { - value: 'nanjing', - label: '南京', - children: [ - { - value: 'fuzimiao', - label: '夫子庙', - } - ] - }, - { - value: 'suzhou', - label: '苏州', - children: [ - { - value: 'zhuozhengyuan', - label: '拙政园', - }, - { - value: 'shizilin', - label: '狮子林', - } - ] - } - ], - }], - cityList: [ - { - value: 'beijing', - label: '北京市' - }, - { - value: 'shanghai', - label: '上海市' - }, - { - value: 'shenzhen', - label: '深圳市' - }, - { - value: 'hangzhou', - label: '杭州市' - }, - { - value: 'nanjing', - label: '南京市' - }, - { - value: 'chongqing', - label: '重庆市' - } - ], - form: { - mail: '', - passwd: '', - single: false, - group: '', - checkboxgroup: [], - select: '', - selectm: [], - slider: [40, 50], - date: '', - date2: '', - cascader: [], - transfer: this.getMockData(), - targetKeys1: this.getTargetKeys(), - input: 1, - textarea: '' - }, - rules: { - mail: [ - { - required: true, message: '请输入正确的邮箱', trigger: 'blur', type: 'email' - }, - { - min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur' - }, - { - min: 3, max: 50, message: '长度在 3 到 5 个字符', trigger: 'change' - } - ], - passwd: [ - { - required: true, message: '请输入密码', trigger: 'blur' - } - ], - group: [ - { - required: true, message: '请单选组' - } - ], - checkboxgroup: [ - { - required: true, message: '至少选择2个', min: 2, type: 'array', - }, - { - required: true, message: '至多选择3个', max: 3, type: 'array' - } - ], - select: [ - { - required: true - } - ], - slider: [ - { - type: 'array', len: 2, - fields: { - 0: { - type: 'number', min: 30, 'message': '不能小于30' - }, - 1: { - type: 'number', max: 90, 'message': '不能大于90' - } - } - } - ], - date: [ - { - required: true - }, - { - type: 'date' - } - ], - date2: [ - { - type: 'array', len: 2, - fields: { - 0: { - type: 'date', required: true - }, - 1: { - type: 'date', required: true - } - } - } - ], - cascader: [ - { - type: 'array', required: true - } - ], - targetKeys1: [ - { - type: 'array', min: 8, max: 10 - } - ], - input: [ - { - type: 'number', min: 1, max: 4 - } - ], - textarea: [ - { - required: true, trigger: 'blur' - }, - { - type: 'string', min: 10 - } - ] - }, - formCustom: { - passwd: '', - passwdCheck: '', - age: '' + formInline: { + user: '', + password: '' }, - ruleCustom: { - passwd: [ - { validator: validatePass, trigger: 'blur' } + ruleInline: { + user: [ + { required: true, message: '请填写用户名', trigger: 'change' } ], - passwdCheck: [ - { validator: validatePassCheck, trigger: 'blur' } - ], - age: [ - { validator: validateAge, trigger: 'blur' } + password: [ + { required: true, message: '请填写密码', trigger: 'blur' }, + { type: 'string', min: 6, message: '密码长度不能小于6位', trigger: 'change' } ] } } }, - computed: {}, methods: { - onSubmit (formName) { - this.$refs[formName].validate((valid) => { - if (valid) { - this.$Message.success('submit!'); - } else { - this.$Message.error('error submit!'); - return false; - } - }); - }, - resetForm (formName) { - this.$refs[formName].resetFields(); - }, - c (s) { - console.log(this.form.date) - }, - getMockData () { - let mockData = []; - for (let i = 1; i <= 20; i++) { - mockData.push({ - key: i.toString(), - label: '内容' + i, - description: '内容' + i + '的描述信息', - disabled: Math.random() * 3 < 1 - }); - } - return mockData; - }, - getTargetKeys () { - return this.getMockData() - .filter(() => Math.random() * 2 > 1) - .map(item => item.key); - }, - render1 (item) { - return item.label; - }, - handleChange1 (newTargetKeys, direction, moveKeys) { - console.log(newTargetKeys); - console.log(direction); - console.log(moveKeys); - this.form.targetKeys1 = newTargetKeys; - }, - handleSubmit (name) { + handleSubmit(name) { this.$refs[name].validate((valid) => { if (valid) { this.$Message.success('提交成功!'); @@ -498,10 +43,7 @@ this.$Message.error('表单验证失败!'); } }) - }, - handleReset (name) { - this.$refs[name].resetFields(); } } - }; -</script> \ No newline at end of file + } +</script> -- libgit2 0.21.4