@form-create/component-elm-group 2.5.12 → 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/component.jsx CHANGED
@@ -1,19 +1,15 @@
1
1
  import {hasProperty} from '@form-create/utils/lib/type';
2
+ import {defineComponent, markRaw} from 'vue';
2
3
 
3
4
  const NAME = 'fcGroup';
4
5
 
5
- export default {
6
+ export default defineComponent({
6
7
  name: NAME,
7
8
  props: {
8
9
  field: String,
9
- rule: [Array, Object],
10
- rules: Array,
10
+ rule: Array,
11
11
  expand: Number,
12
12
  options: Object,
13
- formCreateInject: {
14
- type: Object,
15
- required: true,
16
- },
17
13
  button: {
18
14
  type: Boolean,
19
15
  default: true
@@ -26,7 +22,7 @@ export default {
26
22
  type: Number,
27
23
  default: 0
28
24
  },
29
- value: {
25
+ modelValue: {
30
26
  type: Array,
31
27
  default: () => []
32
28
  },
@@ -53,25 +49,16 @@ export default {
53
49
  }
54
50
  },
55
51
  },
52
+ inject: ['formCreateInject'],
56
53
  data() {
57
54
  return {
58
55
  len: 0,
59
56
  cacheRule: {},
60
57
  cacheValue: {},
61
- type: undefined
62
- }
63
- },
64
- computed: {
65
- formRule() {
66
- if (this.rule) {
67
- return Array.isArray(this.rule) ? this.rule : [this.rule];
68
- }
69
- if (this.rules) {
70
- return this.rules;
71
- }
72
- return [];
58
+ form: markRaw(this.formCreateInject.form.$form())
73
59
  }
74
60
  },
61
+ emits: ['update:modelValue', 'change', 'itemMounted', 'remove'],
75
62
  watch: {
76
63
  disabled(n) {
77
64
  if (this.syncDisabled) {
@@ -82,32 +69,35 @@ export default {
82
69
  }
83
70
  },
84
71
  expand(n) {
85
- let d = n - this.value.length;
72
+ let d = n - this.modelValue.length;
86
73
  if (d > 0) {
87
74
  this.expandRule(d);
88
75
  }
89
76
  },
90
- value(n) {
91
- n = n || [];
92
- let keys = Object.keys(this.cacheRule), total = keys.length, len = total - n.length;
93
- if (len < 0) {
94
- for (let i = len; i < 0; i++) {
95
- this.addRule(n.length + i);
96
- }
97
- for (let i = 0; i < total; i++) {
98
- this.setValue(keys[i], n[i]);
99
- }
100
- } else {
101
- if (len > 0) {
102
- for (let i = 0; i < len; i++) {
103
- this.removeRule(keys[total - i - 1]);
77
+ modelValue: {
78
+ handler(n) {
79
+ n = n || [];
80
+ let keys = Object.keys(this.cacheRule), total = keys.length, len = total - n.length;
81
+ if (len < 0) {
82
+ for (let i = len; i < 0; i++) {
83
+ this.addRule(n.length + i);
84
+ }
85
+ for (let i = 0; i < total; i++) {
86
+ this.setValue(keys[i], n[i]);
87
+ }
88
+ } else {
89
+ if (len > 0) {
90
+ for (let i = 0; i < len; i++) {
91
+ this.removeRule(keys[total - i - 1]);
92
+ }
93
+ this.subForm();
104
94
  }
105
- this.subForm();
95
+ n.forEach((val, i) => {
96
+ this.setValue(keys[i], n[i]);
97
+ });
106
98
  }
107
- n.forEach((val, i) => {
108
- this.setValue(keys[i], n[i]);
109
- });
110
- }
99
+ },
100
+ deep: true,
111
101
  }
112
102
  },
113
103
  methods: {
@@ -118,7 +108,7 @@ export default {
118
108
  this.cacheValue[k] = JSON.stringify(val);
119
109
  },
120
110
  input(value) {
121
- this.$emit('input', value);
111
+ this.$emit('update:modelValue', value);
122
112
  this.$emit('change', value);
123
113
  },
124
114
  formData(key, formData) {
@@ -136,7 +126,7 @@ export default {
136
126
  this.input(value);
137
127
  },
138
128
  setValue(key, value) {
139
- const field = this.field, $f = this.cacheRule[key].$f;
129
+ const field = this.field
140
130
  if (field) {
141
131
  value = {[field]: this._value(value)};
142
132
  }
@@ -144,16 +134,14 @@ export default {
144
134
  return;
145
135
  }
146
136
  this.cache(key, value);
147
- $f.coverValue(value || {});
148
137
  },
149
138
  addRule(i, emit) {
150
- const rule = this.formCreateInject.form.copyRules(this.formRule);
139
+ const rule = this.formCreateInject.form.copyRules(this.rule || []);
151
140
  const options = this.options ? {...this.options} : {
152
141
  submitBtn: false,
153
142
  resetBtn: false,
154
143
  };
155
- options.formData = this.field ? ({[this.field]: this._value(this.value[i])}) : (this.value[i] || {});
156
- this.$set(this.cacheRule, ++this.len, {rule, options});
144
+ this.cacheRule[++this.len] = {rule, options};
157
145
  if (emit) {
158
146
  this.$nextTick(() => this.$emit('add', rule, Object.keys(this.cacheRule).length - 1));
159
147
  }
@@ -173,40 +161,41 @@ export default {
173
161
  },
174
162
  removeRule(key, emit) {
175
163
  const index = Object.keys(this.cacheRule).indexOf(key);
176
- this.$delete(this.cacheRule, key);
177
- this.$delete(this.cacheValue, key);
164
+ delete this.cacheRule[key];
165
+ delete this.cacheValue[key];
178
166
  if (emit) {
179
167
  this.$nextTick(() => this.$emit('remove', index));
180
168
  }
181
169
  },
182
- add(i) {
183
- if (this.disabled || false === this.onBeforeAdd(this.value)) {
170
+ add() {
171
+ if (this.disabled || false === this.onBeforeAdd(this.modelValue)) {
184
172
  return;
185
173
  }
186
- this.addRule(i, true);
174
+ this.modelValue.push(this.field ? null : {});
175
+ this.$emit('update:modelValue', this.modelValue);
187
176
  },
188
177
  del(index, key) {
189
- if (this.disabled || false === this.onBeforeRemove(this.value, index)) {
178
+ if (this.disabled || false === this.onBeforeRemove(this.modelValue, index)) {
190
179
  return;
191
180
  }
192
181
  this.removeRule(key, true);
193
182
  this.subForm();
194
- this.value.splice(index, 1);
195
- this.input(this.value);
183
+ this.modelValue.splice(index, 1);
184
+ this.input(this.modelValue);
196
185
  },
197
186
  addIcon(key) {
198
187
  return <i key={`a${key}`} class="el-icon-circle-plus-outline"
199
188
  style={`font-size:${this.fontSize}px;cursor:${this.disabled ? 'not-allowed;color:#c9cdd4' : 'pointer'};`}
200
- on-click={this.add}/>;
189
+ onClick={this.add}/>;
201
190
  },
202
191
  delIcon(index, key) {
203
192
  return <i key={`d${key}`} class="el-icon-remove-outline"
204
193
  style={`font-size:${this.fontSize}px;cursor:${this.disabled ? 'not-allowed;color:#c9cdd4' : 'pointer;color:#606266'};`}
205
- on-click={() => this.del(index, key)}/>;
194
+ onClick={() => this.del(index, key)}/>;
206
195
  },
207
196
  makeIcon(total, index, key) {
208
- if (this.$scopedSlots.button) {
209
- return this.$scopedSlots.button({
197
+ if (this.$slots.button) {
198
+ return this.$slots.button({
210
199
  total,
211
200
  index,
212
201
  vm: this,
@@ -227,46 +216,44 @@ export default {
227
216
  },
228
217
  expandRule(n) {
229
218
  for (let i = 0; i < n; i++) {
230
- this.value.push(this.field ? null : {});
219
+ this.modelValue.push(this.field ? null : {});
231
220
  }
232
221
  }
233
222
  },
234
223
  created() {
235
- this.type = this.formCreateInject.form.$form();
236
- const d = (this.expand || 0) - this.value.length;
224
+ const d = (this.expand || 0) - this.modelValue.length;
237
225
  if (d > 0) {
238
226
  this.expandRule(d);
239
227
  }
240
- for (let i = 0; i < this.value.length; i++) {
228
+ for (let i = 0; i < this.modelValue.length; i++) {
241
229
  this.addRule(i);
242
230
  }
243
231
  },
244
232
  render() {
245
233
  const keys = Object.keys(this.cacheRule);
246
234
  const button = this.button;
247
- const Type = this.type;
235
+ const Type = this.form;
248
236
  return keys.length === 0 ?
249
- (this.$scopedSlots.default ? (this.$scopedSlots.default({
237
+ (this.$slots.default ? (this.$slots.default({
250
238
  vm: this,
251
239
  add: this.add
252
240
  })) : <i key={'a_def'} class="el-icon-circle-plus-outline"
253
241
  style={`font-size:${this.fontSize}px;vertical-align:middle;color:${this.disabled ? '#c9cdd4;cursor: not-allowed' : '#606266;cursor:pointer'};`}
254
- on-click={this.add}/>) :
242
+ onClick={this.add}/>) :
255
243
  <div key={'con'}>{keys.map((key, index) => {
256
244
  const {rule, options} = this.cacheRule[key];
257
245
  return <ElRow align="middle" type="flex" key={key}
258
246
  style="border-bottom:1px dashed #DCDFE6;margin-bottom:10px;">
259
247
  <ElCol span={button ? 20 : 24}><ElFormItem><Type
260
248
  key={key}
261
- on={{
262
- 'update:value': (formData) => this.formData(key, formData),
263
- 'emit-event': (name, ...args) => this.emitEvent(name, args, index, key),
264
- input: ($f) => this.add$f(index, key, $f)
265
- }}
249
+ onUpdate:modelValue={(formData) => this.formData(key, formData)}
250
+ modelValue={this.field ? {[this.field]: this._value(this.modelValue[index])} : this.modelValue[index]}
251
+ onEmit-event={(name, ...args) => this.emitEvent(name, args, index, key)}
252
+ onUpdate:api={($f) => this.add$f(index, key, $f)}
266
253
  rule={rule}
267
254
  option={options} extendOption={true}/></ElFormItem></ElCol>
268
255
  {button ? <ElCol span={2} pull={1} push={1}>{this.makeIcon(keys.length, index, key)}</ElCol> : null}
269
256
  </ElRow>
270
257
  })}</div>
271
258
  }
272
- }
259
+ });
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../node_modules/@vue/babel-helper-vue-jsx-merge-props/dist/helper.js","../src/component.jsx","../../../../packages/utils/lib/type.js"],"sourcesContent":["\"use strict\";function _extends(){return _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++)for(var d in b=arguments[c],b)Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]);return a},_extends.apply(this,arguments)}var normalMerge=[\"attrs\",\"props\",\"domProps\"],toArrayMerge=[\"class\",\"style\",\"directives\"],functionalMerge=[\"on\",\"nativeOn\"],mergeJsxProps=function(a){return a.reduce(function(c,a){for(var b in a)if(!c[b])c[b]=a[b];else if(-1!==normalMerge.indexOf(b))c[b]=_extends({},c[b],a[b]);else if(-1!==toArrayMerge.indexOf(b)){var d=c[b]instanceof Array?c[b]:[c[b]],e=a[b]instanceof Array?a[b]:[a[b]];c[b]=d.concat(e)}else if(-1!==functionalMerge.indexOf(b)){for(var f in a[b])if(c[b][f]){var g=c[b][f]instanceof Array?c[b][f]:[c[b][f]],h=a[b][f]instanceof Array?a[b][f]:[a[b][f]];c[b][f]=g.concat(h)}else c[b][f]=a[b][f];}else if(\"hook\"==b)for(var i in a[b])c[b][i]=c[b][i]?mergeFn(c[b][i],a[b][i]):a[b][i];else c[b]=a[b];return c},{})},mergeFn=function(a,b){return function(){a&&a.apply(this,arguments),b&&b.apply(this,arguments)}};module.exports=mergeJsxProps;\n","import {hasProperty} from '@form-create/utils/lib/type';\n\nconst NAME = 'fcGroup';\n\nexport default {\n name: NAME,\n props: {\n field: String,\n rule: [Array, Object],\n rules: Array,\n expand: Number,\n options: Object,\n formCreateInject: {\n type: Object,\n required: true,\n },\n button: {\n type: Boolean,\n default: true\n },\n max: {\n type: Number,\n default: 0\n },\n min: {\n type: Number,\n default: 0\n },\n value: {\n type: Array,\n default: () => []\n },\n disabled: {\n type: Boolean,\n default: false\n },\n syncDisabled: {\n type: Boolean,\n default: true\n },\n fontSize: {\n type: Number,\n default: 28\n },\n onBeforeRemove: {\n type: Function,\n default: () => {\n }\n },\n onBeforeAdd: {\n type: Function,\n default: () => {\n }\n },\n },\n data() {\n return {\n len: 0,\n cacheRule: {},\n cacheValue: {},\n type: undefined\n }\n },\n computed: {\n formRule() {\n if (this.rule) {\n return Array.isArray(this.rule) ? this.rule : [this.rule];\n }\n if (this.rules) {\n return this.rules;\n }\n return [];\n }\n },\n watch: {\n disabled(n) {\n if (this.syncDisabled) {\n const lst = this.cacheRule;\n Object.keys(lst).forEach(k => {\n lst[k].$f.disabled(n);\n })\n }\n },\n expand(n) {\n let d = n - this.value.length;\n if (d > 0) {\n this.expandRule(d);\n }\n },\n value(n) {\n n = n || [];\n let keys = Object.keys(this.cacheRule), total = keys.length, len = total - n.length;\n if (len < 0) {\n for (let i = len; i < 0; i++) {\n this.addRule(n.length + i);\n }\n for (let i = 0; i < total; i++) {\n this.setValue(keys[i], n[i]);\n }\n } else {\n if (len > 0) {\n for (let i = 0; i < len; i++) {\n this.removeRule(keys[total - i - 1]);\n }\n this.subForm();\n }\n n.forEach((val, i) => {\n this.setValue(keys[i], n[i]);\n });\n }\n }\n },\n methods: {\n _value(v) {\n return (v && hasProperty(v, this.field)) ? v[this.field] : v;\n },\n cache(k, val) {\n this.cacheValue[k] = JSON.stringify(val);\n },\n input(value) {\n this.$emit('input', value);\n this.$emit('change', value);\n },\n formData(key, formData) {\n const cacheRule = this.cacheRule;\n const keys = Object.keys(cacheRule);\n if (keys.filter(k => cacheRule[k].$f).length !== keys.length) {\n return;\n }\n const value = keys.map(k => {\n const data = key === k ? formData : {...this.cacheRule[k].$f.form};\n const value = this.field ? data[this.field] || null : data;\n this.cache(k, value);\n return value;\n });\n this.input(value);\n },\n setValue(key, value) {\n const field = this.field, $f = this.cacheRule[key].$f;\n if (field) {\n value = {[field]: this._value(value)};\n }\n if (this.cacheValue[key] === JSON.stringify(field ? value[field] : value)) {\n return;\n }\n this.cache(key, value);\n $f.coverValue(value || {});\n },\n addRule(i, emit) {\n const rule = this.formCreateInject.form.copyRules(this.formRule);\n const options = this.options ? {...this.options} : {\n submitBtn: false,\n resetBtn: false,\n };\n options.formData = this.field ? ({[this.field]: this._value(this.value[i])}) : (this.value[i] || {});\n this.$set(this.cacheRule, ++this.len, {rule, options});\n if (emit) {\n this.$nextTick(() => this.$emit('add', rule, Object.keys(this.cacheRule).length - 1));\n }\n },\n add$f(i, key, $f) {\n this.cacheRule[key].$f = $f;\n this.subForm();\n this.$nextTick(() => {\n if (this.syncDisabled) {\n $f.disabled(this.disabled);\n }\n this.$emit('itemMounted', $f, Object.keys(this.cacheRule).indexOf(key));\n });\n },\n subForm() {\n this.formCreateInject.subForm(Object.keys(this.cacheRule).map(k => this.cacheRule[k].$f));\n },\n removeRule(key, emit) {\n const index = Object.keys(this.cacheRule).indexOf(key);\n this.$delete(this.cacheRule, key);\n this.$delete(this.cacheValue, key);\n if (emit) {\n this.$nextTick(() => this.$emit('remove', index));\n }\n },\n add(i) {\n if (this.disabled || false === this.onBeforeAdd(this.value)) {\n return;\n }\n this.addRule(i, true);\n },\n del(index, key) {\n if (this.disabled || false === this.onBeforeRemove(this.value, index)) {\n return;\n }\n this.removeRule(key, true);\n this.subForm();\n this.value.splice(index, 1);\n this.input(this.value);\n },\n addIcon(key) {\n return <i key={`a${key}`} class=\"el-icon-circle-plus-outline\"\n style={`font-size:${this.fontSize}px;cursor:${this.disabled ? 'not-allowed;color:#c9cdd4' : 'pointer'};`}\n on-click={this.add}/>;\n },\n delIcon(index, key) {\n return <i key={`d${key}`} class=\"el-icon-remove-outline\"\n style={`font-size:${this.fontSize}px;cursor:${this.disabled ? 'not-allowed;color:#c9cdd4' : 'pointer;color:#606266'};`}\n on-click={() => this.del(index, key)}/>;\n },\n makeIcon(total, index, key) {\n if (this.$scopedSlots.button) {\n return this.$scopedSlots.button({\n total,\n index,\n vm: this,\n key,\n del: () => this.del(index, key),\n add: this.add\n });\n }\n if (index === 0) {\n return [(this.max !== 0 && total >= this.max) ? null : this.addIcon(key), (this.min === 0 || total > this.min) ? this.delIcon(index, key) : null];\n }\n if (index >= this.min) {\n return this.delIcon(index, key);\n }\n },\n emitEvent(name, args, index, key) {\n this.$emit(name, ...args, this.cacheRule[key].$f, index);\n },\n expandRule(n) {\n for (let i = 0; i < n; i++) {\n this.value.push(this.field ? null : {});\n }\n }\n },\n created() {\n this.type = this.formCreateInject.form.$form();\n const d = (this.expand || 0) - this.value.length;\n if (d > 0) {\n this.expandRule(d);\n }\n for (let i = 0; i < this.value.length; i++) {\n this.addRule(i);\n }\n },\n render() {\n const keys = Object.keys(this.cacheRule);\n const button = this.button;\n const Type = this.type;\n return keys.length === 0 ?\n (this.$scopedSlots.default ? (this.$scopedSlots.default({\n vm: this,\n add: this.add\n })) : <i key={'a_def'} class=\"el-icon-circle-plus-outline\"\n style={`font-size:${this.fontSize}px;vertical-align:middle;color:${this.disabled ? '#c9cdd4;cursor: not-allowed' : '#606266;cursor:pointer'};`}\n on-click={this.add}/>) :\n <div key={'con'}>{keys.map((key, index) => {\n const {rule, options} = this.cacheRule[key];\n return <ElRow align=\"middle\" type=\"flex\" key={key}\n style=\"border-bottom:1px dashed #DCDFE6;margin-bottom:10px;\">\n <ElCol span={button ? 20 : 24}><ElFormItem><Type\n key={key}\n on={{\n 'update:value': (formData) => this.formData(key, formData),\n 'emit-event': (name, ...args) => this.emitEvent(name, args, index, key),\n input: ($f) => this.add$f(index, key, $f)\n }}\n rule={rule}\n option={options} extendOption={true}/></ElFormItem></ElCol>\n {button ? <ElCol span={2} pull={1} push={1}>{this.makeIcon(keys.length, index, key)}</ElCol> : null}\n </ElRow>\n })}</div>\n }\n}\n","const is = {\n type(arg, type) {\n return Object.prototype.toString.call(arg) === '[object ' + type + ']'\n },\n Undef(v) {\n return v === undefined || v === null\n },\n Element(arg) {\n return typeof arg === 'object' && arg !== null && arg.nodeType === 1 && !is.Object(arg)\n },\n trueArray(data) {\n return Array.isArray(data) && data.length > 0;\n }\n};\n\n['Date', 'Object', 'Function', 'String', 'Boolean', 'Array', 'Number'].forEach(t => {\n is[t] = function (arg) {\n return is.type(arg, t);\n }\n})\n\nexport function hasProperty(rule, k) {\n return ({}).hasOwnProperty.call(rule, k)\n}\n\nexport default is;\n"],"names":["_extends","Object","assign","a","b","c","arguments","length","d","prototype","hasOwnProperty","call","apply","this","normalMerge","toArrayMerge","functionalMerge","mergeFn","reduce","indexOf","Array","e","concat","f","g","h","i","name","props","field","String","rule","rules","expand","Number","options","formCreateInject","type","required","button","Boolean","max","min","value","disabled","syncDisabled","fontSize","onBeforeRemove","Function","onBeforeAdd","data","len","cacheRule","cacheValue","undefined","computed","formRule","isArray","watch","n","lst","keys","forEach","k","$f","expandRule","total","addRule","setValue","removeRule","subForm","val","_this","methods","_value","v","cache","JSON","stringify","input","$emit","formData","key","filter","map","_this2","form","coverValue","emit","copyRules","submitBtn","resetBtn","$set","$nextTick","_this3","add$f","_this4","_this5","index","$delete","_this6","add","del","splice","addIcon","delIcon","_this7","makeIcon","$scopedSlots","vm","_this8","emitEvent","args","push","created","$form","render","Type","_this9"],"mappings":"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"}