Commit 0460a1e811edb39051cacc686d00931cceaf0bcb

Authored by 梁灏
1 parent e7ad4154

fixed #812

examples/routers/form.vue
1 <template> 1 <template>
2 - <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">  
3 - <Form-item prop="name">  
4 - <span slot="label"><Icon type="ionic"></Icon></span>  
5 - <AutoComplete v-model="formValidate.name" :data="['Li','Liang','Zhang']" placeholder="请输入姓名"></AutoComplete>  
6 - </Form-item>  
7 - <Form-item label="邮箱" prop="mail">  
8 - <!--<Input v-model="formValidate.mail" placeholder="请输入邮箱"></Input>-->  
9 - <ColorPicker v-model="formValidate.mail"></ColorPicker>  
10 - </Form-item>  
11 - <Form-item label="城市" prop="city">  
12 - <Select v-model="formValidate.city" placeholder="请选择所在地">  
13 - <Option value="beijing">北京市</Option>  
14 - <Option value="shanghai">上海市</Option>  
15 - <Option value="shenzhen">深圳市</Option>  
16 - </Select>  
17 - </Form-item>  
18 - <Form-item label="选择日期">  
19 - <Row>  
20 - <Col span="11">  
21 - <Form-item prop="date">  
22 - <Date-picker type="date" placeholder="选择日期" v-model="formValidate.date"></Date-picker>  
23 - </Form-item>  
24 - </Col>  
25 - <Col span="2" style="text-align: center">-</Col>  
26 - <Col span="11">  
27 - <Form-item prop="time">  
28 - <Time-picker type="time" placeholder="选择时间" v-model="formValidate.time"></Time-picker>  
29 - </Form-item>  
30 - </Col>  
31 - </Row>  
32 - </Form-item>  
33 - <Form-item label="性别" prop="gender">  
34 - <Radio-group v-model="formValidate.gender">  
35 - <Radio label="male">男</Radio>  
36 - <Radio label="female">女</Radio>  
37 - </Radio-group>  
38 - </Form-item>  
39 - <Form-item label="爱好" prop="interest">  
40 - <Checkbox-group v-model="formValidate.interest">  
41 - <Checkbox label="吃饭"></Checkbox>  
42 - <Checkbox label="睡觉"></Checkbox>  
43 - <Checkbox label="跑步"></Checkbox>  
44 - <Checkbox label="看电影"></Checkbox>  
45 - </Checkbox-group>  
46 - </Form-item>  
47 - <Form-item label="介绍" prop="desc">  
48 - <Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="请输入..."></Input>  
49 - </Form-item>  
50 - <Form-item>  
51 - <Button type="primary" @click="handleSubmit('formValidate')">提交</Button>  
52 - <Button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</Button>  
53 - </Form-item>  
54 - </Form> 2 + <div>
  3 + <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">
  4 + <Form-item prop="name">
  5 + <span slot="label"><Icon type="ionic"></Icon></span>
  6 + <AutoComplete v-model="formValidate.name" :data="['Li','Liang','Zhang']" placeholder="请输入姓名"></AutoComplete>
  7 + </Form-item>
  8 + <Form-item label="邮箱" prop="mail">
  9 + <!--<Input v-model="formValidate.mail" placeholder="请输入邮箱"></Input>-->
  10 + <ColorPicker v-model="formValidate.mail"></ColorPicker>
  11 + </Form-item>
  12 + <Form-item label="城市" prop="city">
  13 + <Select v-model="formValidate.city" placeholder="请选择所在地">
  14 + <Option value="beijing">北京市</Option>
  15 + <Option value="shanghai">上海市</Option>
  16 + <Option value="shenzhen">深圳市</Option>
  17 + </Select>
  18 + </Form-item>
  19 + <Form-item label="选择日期">
  20 + <Row>
  21 + <Col span="11">
  22 + <Form-item prop="date">
  23 + <Date-picker type="date" placeholder="选择日期" v-model="formValidate.date"></Date-picker>
  24 + </Form-item>
  25 + </Col>
  26 + <Col span="2" style="text-align: center">-</Col>
  27 + <Col span="11">
  28 + <Form-item prop="time">
  29 + <Time-picker type="time" placeholder="选择时间" v-model="formValidate.time"></Time-picker>
  30 + </Form-item>
  31 + </Col>
  32 + </Row>
  33 + </Form-item>
  34 + <Form-item label="性别" prop="gender">
  35 + <Radio-group v-model="formValidate.gender">
  36 + <Radio label="male">男</Radio>
  37 + <Radio label="female">女</Radio>
  38 + </Radio-group>
  39 + </Form-item>
  40 + <Form-item label="爱好" prop="interest">
  41 + <Checkbox-group v-model="formValidate.interest">
  42 + <Checkbox label="吃饭"></Checkbox>
  43 + <Checkbox label="睡觉"></Checkbox>
  44 + <Checkbox label="跑步"></Checkbox>
  45 + <Checkbox label="看电影"></Checkbox>
  46 + </Checkbox-group>
  47 + </Form-item>
  48 + <Form-item label="介绍" prop="desc">
  49 + <Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="请输入..."></Input>
  50 + </Form-item>
  51 + <Form-item>
  52 + <Button type="primary" @click="handleSubmit('formValidate')">提交</Button>
  53 + <Button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</Button>
  54 + </Form-item>
  55 + </Form>
  56 +
  57 + <div style="margin: 100px">
  58 + <form action="/">
  59 + <Input name="f1"></Input>
  60 + <i-switch name="f2" :true-value="1" :false-value="2"></i-switch>
  61 + <Select v-model="model1" multiple style="width:200px" name="f3">
  62 + <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
  63 + </Select>
  64 + <AutoComplete
  65 + v-model="value1"
  66 + :data="data1"
  67 + @on-search="handleSearch1"
  68 + placeholder="input here"
  69 + name="f4"
  70 + style="width:200px"></AutoComplete>
  71 + <Slider v-model="value11" name="f5"></Slider>
  72 + <DatePicker type="date" placeholder="选择日期" style="width: 200px" name="f6"></DatePicker>
  73 + <TimePicker type="time" placeholder="选择时间" style="width: 168px" name="f7"></TimePicker>
  74 + <Cascader :data="datac" v-model="valuec" name="f8"></Cascader>
  75 + <Rate v-model="valuer" name="f9"></Rate>
  76 + <ColorPicker v-model="color" name="f10" />
  77 + <button type="submit">test</button>
  78 + </form>
  79 + </div>
  80 + </div>
55 </template> 81 </template>
56 <script> 82 <script>
57 export default { 83 export default {
58 data () { 84 data () {
59 return { 85 return {
  86 + color: '#19be6b',
  87 + valuer: 3,
  88 + valuec: [],
  89 + datac: [{
  90 + value: 'beijing',
  91 + label: '北京',
  92 + children: [
  93 + {
  94 + value: 'gugong',
  95 + label: '故宫'
  96 + },
  97 + {
  98 + value: 'tiantan',
  99 + label: '天坛'
  100 + },
  101 + {
  102 + value: 'wangfujing',
  103 + label: '王府井'
  104 + }
  105 + ]
  106 + }, {
  107 + value: 'jiangsu',
  108 + label: '江苏',
  109 + children: [
  110 + {
  111 + value: 'nanjing',
  112 + label: '南京',
  113 + children: [
  114 + {
  115 + value: 'fuzimiao',
  116 + label: '夫子庙',
  117 + }
  118 + ]
  119 + },
  120 + {
  121 + value: 'suzhou',
  122 + label: '苏州',
  123 + children: [
  124 + {
  125 + value: 'zhuozhengyuan',
  126 + label: '拙政园',
  127 + },
  128 + {
  129 + value: 'shizilin',
  130 + label: '狮子林',
  131 + }
  132 + ]
  133 + }
  134 + ],
  135 + }],
  136 + value1: '',
  137 + value11: 25,
  138 + data1: [],
  139 + cityList: [
  140 + {
  141 + value: 'beijing',
  142 + label: '北京市'
  143 + },
  144 + {
  145 + value: 'shanghai',
  146 + label: '上海市'
  147 + },
  148 + {
  149 + value: 'shenzhen',
  150 + label: '深圳市'
  151 + },
  152 + {
  153 + value: 'hangzhou',
  154 + label: '杭州市'
  155 + },
  156 + {
  157 + value: 'nanjing',
  158 + label: '南京市'
  159 + },
  160 + {
  161 + value: 'chongqing',
  162 + label: '重庆市'
  163 + }
  164 + ],
  165 + model1: [],
60 name: '', 166 name: '',
61 formValidate: { 167 formValidate: {
62 name: '', 168 name: '',
@@ -110,6 +216,13 @@ @@ -110,6 +216,13 @@
110 }, 216 },
111 handleReset (name) { 217 handleReset (name) {
112 this.$refs[name].resetFields(); 218 this.$refs[name].resetFields();
  219 + },
  220 + handleSearch1 (value) {
  221 + this.data1 = !value ? [] : [
  222 + value,
  223 + value + value,
  224 + value + value + value
  225 + ];
113 } 226 }
114 } 227 }
115 } 228 }
src/components/auto-complete/auto-complete.vue
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 ref="input" 18 ref="input"
19 slot="input" 19 slot="input"
20 v-model="currentValue" 20 v-model="currentValue"
  21 + :name="name"
21 :placeholder="placeholder" 22 :placeholder="placeholder"
22 :disabled="disabled" 23 :disabled="disabled"
23 :size="size" 24 :size="size"
@@ -81,6 +82,9 @@ @@ -81,6 +82,9 @@
81 transfer: { 82 transfer: {
82 type: Boolean, 83 type: Boolean,
83 default: false 84 default: false
  85 + },
  86 + name: {
  87 + type: String
84 } 88 }
85 }, 89 },
86 data () { 90 data () {
src/components/cascader/cascader.vue
1 <template> 1 <template>
2 <div :class="classes" v-clickoutside="handleClose"> 2 <div :class="classes" v-clickoutside="handleClose">
3 <div :class="[prefixCls + '-rel']" @click="toggleOpen" ref="reference"> 3 <div :class="[prefixCls + '-rel']" @click="toggleOpen" ref="reference">
  4 + <input type="hidden" :name="name" :value="currentValue">
4 <slot> 5 <slot>
5 <i-input 6 <i-input
6 ref="input" 7 ref="input"
@@ -127,6 +128,9 @@ @@ -127,6 +128,9 @@
127 transfer: { 128 transfer: {
128 type: Boolean, 129 type: Boolean,
129 default: false 130 default: false
  131 + },
  132 + name: {
  133 + type: String
130 } 134 }
131 }, 135 },
132 data () { 136 data () {
src/components/checkbox/checkbox.vue
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 :disabled="disabled" 9 :disabled="disabled"
10 :value="label" 10 :value="label"
11 v-model="model" 11 v-model="model"
  12 + :name="name"
12 @change="change"> 13 @change="change">
13 <input 14 <input
14 v-if="!group" 15 v-if="!group"
@@ -16,6 +17,7 @@ @@ -16,6 +17,7 @@
16 :class="inputClasses" 17 :class="inputClasses"
17 :disabled="disabled" 18 :disabled="disabled"
18 :checked="currentValue" 19 :checked="currentValue"
  20 + :name="name"
19 @change="change"> 21 @change="change">
20 </span> 22 </span>
21 <slot><span v-if="showSlot">{{ label }}</span></slot> 23 <slot><span v-if="showSlot">{{ label }}</span></slot>
@@ -58,6 +60,9 @@ @@ -58,6 +60,9 @@
58 validator (value) { 60 validator (value) {
59 return oneOf(value, ['small', 'large', 'default']); 61 return oneOf(value, ['small', 'large', 'default']);
60 } 62 }
  63 + },
  64 + name: {
  65 + type: String
61 } 66 }
62 }, 67 },
63 data () { 68 data () {
src/components/color-picker/color-picker.vue
1 <template> 1 <template>
2 <div :class="classes" v-clickoutside="handleClose"> 2 <div :class="classes" v-clickoutside="handleClose">
3 <div ref="reference" @click="toggleVisible" :class="wrapClasses"> 3 <div ref="reference" @click="toggleVisible" :class="wrapClasses">
  4 + <input type="hidden" :name="name" :value="currentValue">
4 <i class="ivu-icon ivu-icon-arrow-down-b ivu-input-icon ivu-input-icon-normal"></i> 5 <i class="ivu-icon ivu-icon-arrow-down-b ivu-input-icon ivu-input-icon-normal"></i>
5 <div :class="inputClasses"> 6 <div :class="inputClasses">
6 <div :class="[prefixCls + '-color']"> 7 <div :class="[prefixCls + '-color']">
@@ -167,11 +168,15 @@ @@ -167,11 +168,15 @@
167 transfer: { 168 transfer: {
168 type: Boolean, 169 type: Boolean,
169 default: false 170 default: false
  171 + },
  172 + name: {
  173 + type: String
170 } 174 }
171 }, 175 },
172 data () { 176 data () {
173 return { 177 return {
174 val: _colorChange(this.value), 178 val: _colorChange(this.value),
  179 + currentValue: this.value,
175 prefixCls: prefixCls, 180 prefixCls: prefixCls,
176 visible: false, 181 visible: false,
177 disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭 182 disableCloseUnderTransfer: false, // transfer 模式下,点击Drop也会触发关闭
@@ -344,12 +349,14 @@ @@ -344,12 +349,14 @@
344 }, 349 },
345 handleSuccess () { 350 handleSuccess () {
346 const color = this.formatColor; 351 const color = this.formatColor;
  352 + this.currentValue = color;
347 this.$emit('input', color); 353 this.$emit('input', color);
348 this.$emit('on-change', color); 354 this.$emit('on-change', color);
349 this.dispatch('FormItem', 'on-form-change', color); 355 this.dispatch('FormItem', 'on-form-change', color);
350 this.handleClose(); 356 this.handleClose();
351 }, 357 },
352 handleClear () { 358 handleClear () {
  359 + this.currentValue = '';
353 this.$emit('input', ''); 360 this.$emit('input', '');
354 this.$emit('on-change', ''); 361 this.$emit('on-change', '');
355 this.dispatch('FormItem', 'on-form-change', ''); 362 this.dispatch('FormItem', 'on-form-change', '');
src/components/date-picker/picker.vue
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 :size="size" 9 :size="size"
10 :placeholder="placeholder" 10 :placeholder="placeholder"
11 :value="visualValue" 11 :value="visualValue"
  12 + :name="name"
12 @on-input-change="handleInputChange" 13 @on-input-change="handleInputChange"
13 @on-focus="handleFocus" 14 @on-focus="handleFocus"
14 @on-click="handleIconClick" 15 @on-click="handleIconClick"
@@ -197,6 +198,9 @@ @@ -197,6 +198,9 @@
197 transfer: { 198 transfer: {
198 type: Boolean, 199 type: Boolean,
199 default: false 200 default: false
  201 + },
  202 + name: {
  203 + type: String
200 } 204 }
201 }, 205 },
202 data () { 206 data () {
src/components/radio/radio.vue
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 :class="inputClasses" 7 :class="inputClasses"
8 :disabled="disabled" 8 :disabled="disabled"
9 :checked="currentValue" 9 :checked="currentValue"
  10 + :name="name"
10 @change="change"> 11 @change="change">
11 </span><slot>{{ label }}</slot> 12 </span><slot>{{ label }}</slot>
12 </label> 13 </label>
@@ -44,6 +45,9 @@ @@ -44,6 +45,9 @@
44 validator (value) { 45 validator (value) {
45 return oneOf(value, ['small', 'large', 'default']); 46 return oneOf(value, ['small', 'large', 'default']);
46 } 47 }
  48 + },
  49 + name: {
  50 + type: String
47 } 51 }
48 }, 52 },
49 data () { 53 data () {
src/components/rate/rate.vue
1 <template> 1 <template>
2 <div :class="classes" @mouseleave="handleMouseleave"> 2 <div :class="classes" @mouseleave="handleMouseleave">
  3 + <input type="hidden" :name="name" :value="currentValue">
3 <div 4 <div
4 v-for="item in count" 5 v-for="item in count"
5 :class="starCls(item)" 6 :class="starCls(item)"
@@ -19,6 +20,7 @@ @@ -19,6 +20,7 @@
19 const prefixCls = 'ivu-rate'; 20 const prefixCls = 'ivu-rate';
20 21
21 export default { 22 export default {
  23 + name: 'Rate',
22 mixins: [ Locale, Emitter ], 24 mixins: [ Locale, Emitter ],
23 props: { 25 props: {
24 count: { 26 count: {
@@ -40,6 +42,9 @@ @@ -40,6 +42,9 @@
40 showText: { 42 showText: {
41 type: Boolean, 43 type: Boolean,
42 default: false 44 default: false
  45 + },
  46 + name: {
  47 + type: String
43 } 48 }
44 }, 49 },
45 data () { 50 data () {
src/components/select/select.vue
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 ref="reference" 5 ref="reference"
6 @click="toggleMenu"> 6 @click="toggleMenu">
7 <slot name="input"> 7 <slot name="input">
  8 + <input type="hidden" :name="name" :value="model">
8 <div class="ivu-tag" v-for="(item, index) in selectedMultiple"> 9 <div class="ivu-tag" v-for="(item, index) in selectedMultiple">
9 <span class="ivu-tag-text">{{ item.label }}</span> 10 <span class="ivu-tag-text">{{ item.label }}</span>
10 <Icon type="ios-close-empty" @click.native.stop="removeTag(index)"></Icon> 11 <Icon type="ios-close-empty" @click.native.stop="removeTag(index)"></Icon>
@@ -131,6 +132,9 @@ @@ -131,6 +132,9 @@
131 autoComplete: { 132 autoComplete: {
132 type: Boolean, 133 type: Boolean,
133 default: false 134 default: false
  135 + },
  136 + name: {
  137 + type: String
134 } 138 }
135 }, 139 },
136 data () { 140 data () {
src/components/slider/slider.vue
@@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
9 :disabled="disabled" 9 :disabled="disabled"
10 @on-change="handleInputChange"></Input-number> 10 @on-change="handleInputChange"></Input-number>
11 <div :class="[prefixCls + '-wrap']" ref="slider" @click.self="sliderClick"> 11 <div :class="[prefixCls + '-wrap']" ref="slider" @click.self="sliderClick">
  12 + <input type="hidden" :name="name" :value="currentValue">
12 <template v-if="showStops"> 13 <template v-if="showStops">
13 <div :class="[prefixCls + '-stop']" v-for="item in stops" :style="{ 'left': item + '%' }" @click.self="sliderClick"></div> 14 <div :class="[prefixCls + '-stop']" v-for="item in stops" :style="{ 'left': item + '%' }" @click.self="sliderClick"></div>
14 </template> 15 </template>
@@ -102,6 +103,9 @@ @@ -102,6 +103,9 @@
102 validator (value) { 103 validator (value) {
103 return oneOf(value, ['hover', 'always', 'never']); 104 return oneOf(value, ['hover', 'always', 'never']);
104 } 105 }
  106 + },
  107 + name: {
  108 + type: String
105 } 109 }
106 }, 110 },
107 data () { 111 data () {
src/components/switch/switch.vue
1 <template> 1 <template>
2 <span :class="wrapClasses" @click="toggle"> 2 <span :class="wrapClasses" @click="toggle">
  3 + <input type="hidden" :name="name" :value="currentValue">
3 <span :class="innerClasses"> 4 <span :class="innerClasses">
4 <slot name="open" v-if="currentValue === trueValue"></slot> 5 <slot name="open" v-if="currentValue === trueValue"></slot>
5 <slot name="close" v-if="currentValue === falseValue"></slot> 6 <slot name="close" v-if="currentValue === falseValue"></slot>
@@ -36,6 +37,9 @@ @@ -36,6 +37,9 @@
36 validator (value) { 37 validator (value) {
37 return oneOf(value, ['large', 'small', 'default']); 38 return oneOf(value, ['large', 'small', 'default']);
38 } 39 }
  40 + },
  41 + name: {
  42 + type: String
39 } 43 }
40 }, 44 },
41 data () { 45 data () {