Blame view

src/components/form/form.vue 3.23 KB
8a22e84f   梁灏   init Form component
1
  <template>
c17c5ad6   Sergio Crisostomo   normalize autocom...
2
      <form :class="classes" :autocomplete="autocomplete"><slot></slot></form>
8a22e84f   梁灏   init Form component
3
4
  </template>
  <script>
9f5e2c7e   梁灏   update Form
5
      // https://github.com/ElemeFE/element/blob/dev/packages/form/src/form.vue
184dba1c   梁灏   update Form
6
      import { oneOf } from '../../utils/assist';
9f5e2c7e   梁灏   update Form
7
8
9
  
      const prefixCls = 'ivu-form';
  
8a22e84f   梁灏   init Form component
10
      export default {
9f5e2c7e   梁灏   update Form
11
12
13
14
15
16
17
18
19
20
21
          name: 'iForm',
          props: {
              model: {
                  type: Object
              },
              rules: {
                  type: Object
              },
              labelWidth: {
                  type: Number
              },
184dba1c   梁灏   update Form
22
23
24
25
26
27
              labelPosition: {
                  validator (value) {
                      return oneOf(value, ['left', 'right', 'top']);
                  },
                  default: 'right'
              },
9f5e2c7e   梁灏   update Form
28
29
30
              inline: {
                  type: Boolean,
                  default: false
6986d055   梁灏   Form add show-mes...
31
32
33
34
              },
              showMessage: {
                  type: Boolean,
                  default: true
c17c5ad6   Sergio Crisostomo   normalize autocom...
35
36
37
38
39
40
              },
              autocomplete: {
                  validator (value) {
                      return oneOf(value, ['on', 'off']);
                  },
                  default: 'off'
9f5e2c7e   梁灏   update Form
41
42
              }
          },
8a22e84f   梁灏   init Form component
43
          data () {
9f5e2c7e   梁灏   update Form
44
45
46
47
48
49
50
51
              return {
                  fields: []
              };
          },
          computed: {
              classes () {
                  return [
                      `${prefixCls}`,
184dba1c   梁灏   update Form
52
                      `${prefixCls}-label-${this.labelPosition}`,
9f5e2c7e   梁灏   update Form
53
54
55
56
57
58
59
60
61
62
63
64
65
                      {
                          [`${prefixCls}-inline`]: this.inline
                      }
                  ];
              }
          },
          methods: {
              resetFields() {
                  this.fields.forEach(field => {
                      field.resetField();
                  });
              },
              validate(callback) {
0c0683e4   Haven   feat(form) : supp...
66
67
68
69
70
71
72
73
74
75
                  return new Promise(resolve => {
                      let valid = true;
                      let count = 0;
                      this.fields.forEach(field => {
                          field.validate('', errors => {
                              if (errors) {
                                  valid = false;
                              }
                              if (++count === this.fields.length) {
                                  // all finish
c17c5ad6   Sergio Crisostomo   normalize autocom...
76
                                  resolve(valid);
0c0683e4   Haven   feat(form) : supp...
77
78
79
80
81
                                  if (typeof callback === 'function') {
                                      callback(valid);
                                  }
                              }
                          });
9f5e2c7e   梁灏   update Form
82
                      });
c17c5ad6   Sergio Crisostomo   normalize autocom...
83
                  });
9f5e2c7e   梁灏   update Form
84
85
86
87
88
89
              },
              validateField(prop, cb) {
                  const field = this.fields.filter(field => field.prop === prop)[0];
                  if (!field) { throw new Error('[iView warn]: must call validateField with valid prop string!'); }
  
                  field.validate('', cb);
9f5e2c7e   梁灏   update Form
90
91
92
93
94
95
              }
          },
          watch: {
              rules() {
                  this.validate();
              }
8a22e84f   梁灏   init Form component
96
          },
257f80f1   梁灏   support Form
97
98
          created () {
              this.$on('on-form-item-add', (field) => {
9f5e2c7e   梁灏   update Form
99
100
                  if (field) this.fields.push(field);
                  return false;
257f80f1   梁灏   support Form
101
102
              });
              this.$on('on-form-item-remove', (field) => {
9f5e2c7e   梁灏   update Form
103
104
                  if (field.prop) this.fields.splice(this.fields.indexOf(field), 1);
                  return false;
257f80f1   梁灏   support Form
105
              });
9f5e2c7e   梁灏   update Form
106
          }
8a22e84f   梁灏   init Form component
107
      };
d22e3671   marvinwilliam   fix form default ...
108
  </script>