@form-create/element-ui 3.2.20 → 3.2.22

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @form-create/element-ui v3.2.20
2
+ * @form-create/element-ui v3.2.22
3
3
  * (c) 2018-2025 xaboy
4
4
  * Github https://github.com/xaboy/form-create
5
5
  * Released under the MIT License.
@@ -166,6 +166,10 @@
166
166
  };
167
167
  }
168
168
 
169
+ function _slicedToArray(arr, i) {
170
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
171
+ }
172
+
169
173
  function _toConsumableArray(arr) {
170
174
  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
171
175
  }
@@ -174,10 +178,44 @@
174
178
  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
175
179
  }
176
180
 
181
+ function _arrayWithHoles(arr) {
182
+ if (Array.isArray(arr)) return arr;
183
+ }
184
+
177
185
  function _iterableToArray(iter) {
178
186
  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
179
187
  }
180
188
 
189
+ function _iterableToArrayLimit(arr, i) {
190
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
191
+
192
+ if (_i == null) return;
193
+ var _arr = [];
194
+ var _n = true;
195
+ var _d = false;
196
+
197
+ var _s, _e;
198
+
199
+ try {
200
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
201
+ _arr.push(_s.value);
202
+
203
+ if (i && _arr.length === i) break;
204
+ }
205
+ } catch (err) {
206
+ _d = true;
207
+ _e = err;
208
+ } finally {
209
+ try {
210
+ if (!_n && _i["return"] != null) _i["return"]();
211
+ } finally {
212
+ if (_d) throw _e;
213
+ }
214
+ }
215
+
216
+ return _arr;
217
+ }
218
+
181
219
  function _unsupportedIterableToArray(o, minLen) {
182
220
  if (!o) return;
183
221
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
@@ -199,6 +237,10 @@
199
237
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
200
238
  }
201
239
 
240
+ function _nonIterableRest() {
241
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
242
+ }
243
+
202
244
  function getSlot(slots, exclude) {
203
245
  return Object.keys(slots).reduce(function (lst, name) {
204
246
  if (!exclude || exclude.indexOf(name) === -1) {
@@ -1761,7 +1803,7 @@
1761
1803
  var keys = this.sort;
1762
1804
 
1763
1805
  if (keys.filter(function (k) {
1764
- return cacheRule[k].$f;
1806
+ return cacheRule[k] && cacheRule[k].$f;
1765
1807
  }).length !== keys.length) {
1766
1808
  return;
1767
1809
  }
@@ -1814,6 +1856,7 @@
1814
1856
  rule: rule,
1815
1857
  options: options
1816
1858
  };
1859
+ this.sort = Object.keys(this.cacheRule);
1817
1860
 
1818
1861
  if (emit) {
1819
1862
  vue.nextTick(function () {
@@ -1835,6 +1878,7 @@
1835
1878
  var index = Object.keys(this.cacheRule).indexOf(key);
1836
1879
  delete this.cacheRule[key];
1837
1880
  delete this.cacheValue[key];
1881
+ this.sort = Object.keys(this.cacheRule);
1838
1882
 
1839
1883
  if (emit) {
1840
1884
  vue.nextTick(function () {
@@ -1957,15 +2001,6 @@
1957
2001
  }
1958
2002
  },
1959
2003
  created: function created() {
1960
- var _this12 = this;
1961
-
1962
- vue.watch(function () {
1963
- return _objectSpread2({}, _this12.cacheRule);
1964
- }, function (n) {
1965
- _this12.sort = Object.keys(n);
1966
- }, {
1967
- immediate: true
1968
- });
1969
2004
  var d = (this.expand || 0) - this.modelValue.length;
1970
2005
 
1971
2006
  for (var i = 0; i < this.modelValue.length; i++) {
@@ -1977,7 +2012,7 @@
1977
2012
  }
1978
2013
  },
1979
2014
  render: function render() {
1980
- var _this13 = this;
2015
+ var _this12 = this;
1981
2016
 
1982
2017
  var keys = this.sort;
1983
2018
  var button = this.button;
@@ -1991,10 +2026,10 @@
1991
2026
  "class": "_fc-group-plus-minus _fc-group-add fc-clock",
1992
2027
  "onClick": this.add
1993
2028
  }, null) : keys.map(function (key, index) {
1994
- var _this13$cacheRule$key = _this13.cacheRule[key],
1995
- rule = _this13$cacheRule$key.rule,
1996
- options = _this13$cacheRule$key.options;
1997
- var btn = button && !disabled ? _this13.makeIcon(keys.length, index, key) : [];
2029
+ var _this12$cacheRule$key = _this12.cacheRule[key],
2030
+ rule = _this12$cacheRule$key.rule,
2031
+ options = _this12$cacheRule$key.options;
2032
+ var btn = button && !disabled ? _this12.makeIcon(keys.length, index, key) : [];
1998
2033
  return vue.createVNode("div", {
1999
2034
  "class": "_fc-group-container",
2000
2035
  "key": key
@@ -2003,20 +2038,20 @@
2003
2038
  }, {
2004
2039
  disabled: disabled,
2005
2040
  'onUpdate:modelValue': function onUpdateModelValue(formData) {
2006
- return _this13.formData(key, formData);
2041
+ return _this12.formData(key, formData);
2007
2042
  },
2008
2043
  'onEmit-event': function onEmitEvent(name) {
2009
2044
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
2010
2045
  args[_key - 1] = arguments[_key];
2011
2046
  }
2012
2047
 
2013
- return _this13.emitEvent(name, args, index, key);
2048
+ return _this12.emitEvent(name, args, index, key);
2014
2049
  },
2015
2050
  'onUpdate:api': function onUpdateApi($f) {
2016
- return _this13.add$f(index, key, $f);
2051
+ return _this12.add$f(index, key, $f);
2017
2052
  },
2018
2053
  inFor: true,
2019
- modelValue: _this13.field ? _defineProperty({}, _this13.field, _this13._value(_this13.modelValue[index])) : _this13.modelValue[index],
2054
+ modelValue: _this12.field ? _defineProperty({}, _this12.field, _this12._value(_this12.modelValue[index])) : _this12.modelValue[index],
2020
2055
  rule: rule,
2021
2056
  option: options,
2022
2057
  extendOption: true
@@ -2165,410 +2200,108 @@
2165
2200
  return str.replace(str[0], str[0].toLocaleUpperCase());
2166
2201
  }
2167
2202
 
2168
- var _getGroupInject = function getGroupInject(vm, parent) {
2169
- if (!vm || vm === parent) {
2170
- return;
2171
- }
2172
-
2173
- if (vm.props.formCreateInject) {
2174
- return vm.props.formCreateInject;
2175
- }
2176
-
2177
- if (vm.parent) {
2178
- return _getGroupInject(vm.parent, parent);
2179
- }
2180
- };
2203
+ var normalMerge = ['props'];
2204
+ var toArrayMerge = ['class', 'style', 'directives'];
2205
+ var functionalMerge = ['on', 'hook'];
2181
2206
 
2182
- function $FormCreate(FormCreate, components, directives) {
2183
- return vue.defineComponent({
2184
- name: 'FormCreate' + (FormCreate.isMobile ? 'Mobile' : ''),
2185
- components: components,
2186
- directives: directives,
2187
- props: {
2188
- rule: {
2189
- type: Array,
2190
- required: true,
2191
- "default": function _default() {
2192
- return [];
2193
- }
2194
- },
2195
- option: {
2196
- type: Object,
2197
- "default": function _default() {
2198
- return {};
2199
- }
2200
- },
2201
- extendOption: Boolean,
2202
- driver: [String, Object],
2203
- modelValue: Object,
2204
- disabled: {
2205
- type: Boolean,
2206
- "default": undefined
2207
- },
2208
- preview: {
2209
- type: Boolean,
2210
- "default": undefined
2211
- },
2212
- index: [String, Number],
2213
- api: Object,
2214
- locale: [String, Object],
2215
- name: String,
2216
- subForm: {
2217
- type: Boolean,
2218
- "default": true
2219
- },
2220
- inFor: Boolean
2221
- },
2222
- emits: ['update:api', 'update:modelValue', 'mounted', 'submit', 'reset', 'change', 'emit-event', 'control', 'remove-rule', 'remove-field', 'sync', 'reload', 'repeat-field', 'update', 'validate-field-fail', 'validate-fail', 'created'],
2223
- render: function render() {
2224
- return this.fc.render();
2225
- },
2226
- setup: function setup(props) {
2227
- var vm = vue.getCurrentInstance();
2228
- vue.provide('parentFC', vm);
2229
- var parent = vue.inject('parentFC', null);
2230
- var top = parent;
2207
+ var mergeProps = function mergeProps(objects) {
2208
+ var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2209
+ var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2231
2210
 
2232
- if (parent) {
2233
- while (top.setupState.parent) {
2234
- top = top.setupState.parent;
2235
- }
2236
- } else {
2237
- top = vm;
2238
- }
2211
+ var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2239
2212
 
2240
- var _toRefs = vue.toRefs(props),
2241
- rule = _toRefs.rule,
2242
- modelValue = _toRefs.modelValue,
2243
- subForm = _toRefs.subForm,
2244
- inFor = _toRefs.inFor;
2213
+ var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2245
2214
 
2246
- var data = vue.reactive({
2247
- ctxInject: {},
2248
- destroyed: false,
2249
- isShow: true,
2250
- unique: 1,
2251
- renderRule: _toConsumableArray(rule.value || []),
2252
- updateValue: JSON.stringify(modelValue.value || {})
2253
- });
2254
- var fc = new FormCreate(vm);
2255
- var fapi = fc.api();
2256
- var isMore = inFor.value;
2215
+ var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2257
2216
 
2258
- var addSubForm = function addSubForm() {
2259
- if (parent) {
2260
- var _inject = _getGroupInject(vm, parent);
2217
+ var propsMerge = opt['props'] || [];
2218
+ return objects.reduce(function (a, b) {
2219
+ for (var key in b) {
2220
+ if (a[key]) {
2221
+ if (propsMerge.indexOf(key) > -1) {
2222
+ a[key] = mergeProps([b[key]], a[key]);
2223
+ } else if (_normalMerge.indexOf(key) > -1) {
2224
+ a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2225
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2226
+ var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2227
+ var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2228
+ a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2229
+ } else if (_functionalMerge.indexOf(key) > -1) {
2230
+ for (var event in b[key]) {
2231
+ if (a[key][event]) {
2232
+ var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2261
2233
 
2262
- if (_inject) {
2263
- var sub;
2234
+ var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2264
2235
 
2265
- if (isMore) {
2266
- sub = toArray(_inject.getSubForm());
2267
- sub.push(fapi);
2236
+ a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2268
2237
  } else {
2269
- sub = fapi;
2238
+ a[key][event] = b[key][event];
2270
2239
  }
2271
-
2272
- _inject.subForm(sub);
2273
2240
  }
2274
- }
2275
- };
2276
-
2277
- var rmSubForm = function rmSubForm() {
2278
- var inject = _getGroupInject(vm, parent);
2279
-
2280
- if (inject) {
2281
- if (isMore) {
2282
- var sub = toArray(inject.getSubForm());
2283
- var idx = sub.indexOf(fapi);
2284
-
2285
- if (idx > -1) {
2286
- sub.splice(idx, 1);
2241
+ } else if (key === 'hook') {
2242
+ for (var hook in b[key]) {
2243
+ if (a[key][hook]) {
2244
+ a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2245
+ } else {
2246
+ a[key][hook] = b[key][hook];
2287
2247
  }
2288
- } else {
2289
- inject.subForm();
2290
2248
  }
2249
+ } else {
2250
+ a[key] = b[key];
2291
2251
  }
2292
- };
2252
+ } else {
2253
+ if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2254
+ a[key] = _objectSpread2({}, b[key]);
2255
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2256
+ a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2257
+ } else a[key] = b[key];
2258
+ }
2259
+ }
2293
2260
 
2294
- var styleEl = null;
2295
- vue.onBeforeMount(function () {
2296
- vue.watchEffect(function () {
2297
- var content = '';
2298
- var globalClass = props.option && props.option.globalClass || {};
2299
- Object.keys(globalClass).forEach(function (k) {
2300
- var subCss = '';
2301
- globalClass[k].style && Object.keys(globalClass[k].style).forEach(function (key) {
2302
- subCss += toLine(key) + ':' + globalClass[k].style[key] + ';';
2303
- });
2261
+ return a;
2262
+ }, initial);
2263
+ };
2304
2264
 
2305
- if (globalClass[k].content) {
2306
- subCss += globalClass[k].content + ';';
2307
- }
2265
+ var mergeFn = function mergeFn(fn1, fn2) {
2266
+ return function () {
2267
+ fn1 && fn1.apply(this, arguments);
2268
+ fn2 && fn2.apply(this, arguments);
2269
+ };
2270
+ };
2308
2271
 
2309
- if (subCss) {
2310
- content += ".".concat(k, "{").concat(subCss, "}");
2311
- }
2312
- });
2272
+ var keyAttrs = ['type', 'slot', 'ignore', 'emitPrefix', 'value', 'name', 'native', 'hidden', 'display', 'inject', 'options', 'emit', 'link', 'prefix', 'suffix', 'update', 'sync', 'optionsTo', 'key', 'slotUpdate', 'computed', 'preview', 'component', 'cache', 'modelEmit'];
2273
+ var arrayAttrs = ['validate', 'children', 'control'];
2274
+ var normalAttrs = ['effect', 'deep', 'renderSlots'];
2275
+ function attrs() {
2276
+ return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2277
+ }
2313
2278
 
2314
- if (props.option && props.option.style) {
2315
- content += props.option.style;
2316
- }
2279
+ function format(type, msg, rule) {
2280
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2281
+ }
2282
+ function err(msg, rule) {
2283
+ console.error(format('err', msg, rule));
2284
+ }
2285
+ function logError(e) {
2286
+ err(e.toString());
2287
+ console.error(e);
2288
+ }
2317
2289
 
2318
- if (!styleEl) {
2319
- styleEl = document.createElement('style');
2320
- styleEl.type = 'text/css';
2321
- document.head.appendChild(styleEl);
2322
- }
2290
+ function toCase(str) {
2291
+ var to = str.replace(/(-[a-z])/g, function (v) {
2292
+ return v.replace('-', '').toLocaleUpperCase();
2293
+ });
2294
+ return lower(to);
2295
+ }
2296
+ function lower(str) {
2297
+ return str.replace(str[0], str[0].toLowerCase());
2298
+ }
2323
2299
 
2324
- styleEl.innerHTML = content || '';
2325
- });
2326
- });
2327
- var emit$topForm = debounce(function () {
2328
- fc.bus.$emit('$loadData.$topForm');
2329
- }, 100);
2330
- var emit$scopeForm = debounce(function () {
2331
- fc.bus.$emit('$loadData.$scopeForm');
2332
- }, 100);
2333
- var emit$form = debounce(function () {
2334
- fc.bus.$emit('$loadData.$form');
2335
- }, 100);
2336
-
2337
- var emit$change = function emit$change(field) {
2338
- fc.bus.$emit('change-$form.' + field);
2339
- };
2340
-
2341
- vue.onMounted(function () {
2342
- if (parent) {
2343
- fapi.top.bus.$on('$loadData.$form', emit$topForm);
2344
- fapi.top.bus.$on('change', emit$change);
2345
- }
2346
-
2347
- if (fapi !== fapi.scope) {
2348
- fapi.scope.bus.$on('$loadData.$scopeForm', emit$scopeForm);
2349
- }
2350
-
2351
- fc.mounted();
2352
- });
2353
- vue.onBeforeUnmount(function () {
2354
- if (parent) {
2355
- fapi.top.bus.$off('$loadData.$form', emit$topForm);
2356
- fapi.top.bus.$off('change', emit$change);
2357
- }
2358
-
2359
- if (fapi !== fapi.scope) {
2360
- fapi.scope.bus.$off('$loadData.$scopeForm', emit$scopeForm);
2361
- }
2362
-
2363
- styleEl && document.head.removeChild(styleEl);
2364
- rmSubForm();
2365
- data.destroyed = true;
2366
- fc.unmount();
2367
- });
2368
- vue.onUpdated(function () {
2369
- fc.updated();
2370
- });
2371
- vue.watch(subForm, function (n) {
2372
- n ? addSubForm() : rmSubForm();
2373
- }, {
2374
- immediate: true
2375
- });
2376
- vue.watch(function () {
2377
- return props.option;
2378
- }, function () {
2379
- fc.initOptions();
2380
- fapi.refresh();
2381
- }, {
2382
- deep: true
2383
- });
2384
- vue.watch(function () {
2385
- return _toConsumableArray(rule.value);
2386
- }, function (n) {
2387
- if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2388
- return data.renderRule.indexOf(v) > -1;
2389
- })) return;
2390
- fc.$handle.updateAppendData();
2391
- fc.$handle.reloadRule(rule.value);
2392
- vm.setupState.renderRule();
2393
- });
2394
- vue.watch(function () {
2395
- return [props.disabled, props.preview];
2396
- }, function () {
2397
- fapi.refresh();
2398
- });
2399
- vue.watch(modelValue, function (n) {
2400
- if (JSON.stringify(n || {}) === data.updateValue) return;
2401
-
2402
- if (fapi.config.forceCoverValue) {
2403
- fapi.coverValue(n || {});
2404
- } else {
2405
- fapi.setValue(n || {});
2406
- }
2407
- }, {
2408
- deep: true,
2409
- flush: 'post'
2410
- });
2411
- vue.watch(function () {
2412
- return props.index;
2413
- }, function () {
2414
- fapi.coverValue({});
2415
- fc.$handle.updateAppendData();
2416
- vue.nextTick(function () {
2417
- vue.nextTick(function () {
2418
- fapi.clearValidateState();
2419
- });
2420
- });
2421
- }, {
2422
- flush: 'sync'
2423
- });
2424
- return _objectSpread2(_objectSpread2({
2425
- fc: vue.markRaw(fc),
2426
- parent: parent ? vue.markRaw(parent) : parent,
2427
- top: vue.markRaw(top),
2428
- fapi: vue.markRaw(fapi)
2429
- }, vue.toRefs(data)), {}, {
2430
- getGroupInject: function getGroupInject() {
2431
- return _getGroupInject(vm, parent);
2432
- },
2433
- refresh: function refresh() {
2434
- ++data.unique;
2435
- },
2436
- renderRule: function renderRule() {
2437
- data.renderRule = _toConsumableArray(rule.value || []);
2438
- },
2439
- updateValue: function updateValue(value) {
2440
- if (data.destroyed) return;
2441
- var json = JSON.stringify(value);
2442
-
2443
- if (data.updateValue === json) {
2444
- return;
2445
- }
2446
-
2447
- data.updateValue = json;
2448
- vm.emit('update:modelValue', value);
2449
- vue.nextTick(function () {
2450
- emit$form();
2451
-
2452
- if (!parent) {
2453
- emit$topForm();
2454
- emit$scopeForm();
2455
- } else if (!subForm.value) {
2456
- emit$scopeForm();
2457
- }
2458
- });
2459
- }
2460
- });
2461
- },
2462
- created: function created() {
2463
- var vm = vue.getCurrentInstance();
2464
- vm.emit('update:api', vm.setupState.fapi);
2465
- vm.setupState.fc.init();
2466
- }
2467
- });
2468
- }
2469
-
2470
- var normalMerge = ['props'];
2471
- var toArrayMerge = ['class', 'style', 'directives'];
2472
- var functionalMerge = ['on', 'hook'];
2473
-
2474
- var mergeProps = function mergeProps(objects) {
2475
- var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2476
- var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2477
-
2478
- var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2479
-
2480
- var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2481
-
2482
- var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2483
-
2484
- var propsMerge = opt['props'] || [];
2485
- return objects.reduce(function (a, b) {
2486
- for (var key in b) {
2487
- if (a[key]) {
2488
- if (propsMerge.indexOf(key) > -1) {
2489
- a[key] = mergeProps([b[key]], a[key]);
2490
- } else if (_normalMerge.indexOf(key) > -1) {
2491
- a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2492
- } else if (_toArrayMerge.indexOf(key) > -1) {
2493
- var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2494
- var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2495
- a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2496
- } else if (_functionalMerge.indexOf(key) > -1) {
2497
- for (var event in b[key]) {
2498
- if (a[key][event]) {
2499
- var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2500
-
2501
- var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2502
-
2503
- a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2504
- } else {
2505
- a[key][event] = b[key][event];
2506
- }
2507
- }
2508
- } else if (key === 'hook') {
2509
- for (var hook in b[key]) {
2510
- if (a[key][hook]) {
2511
- a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2512
- } else {
2513
- a[key][hook] = b[key][hook];
2514
- }
2515
- }
2516
- } else {
2517
- a[key] = b[key];
2518
- }
2519
- } else {
2520
- if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2521
- a[key] = _objectSpread2({}, b[key]);
2522
- } else if (_toArrayMerge.indexOf(key) > -1) {
2523
- a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2524
- } else a[key] = b[key];
2525
- }
2526
- }
2527
-
2528
- return a;
2529
- }, initial);
2530
- };
2531
-
2532
- var mergeFn = function mergeFn(fn1, fn2) {
2533
- return function () {
2534
- fn1 && fn1.apply(this, arguments);
2535
- fn2 && fn2.apply(this, arguments);
2536
- };
2537
- };
2538
-
2539
- var keyAttrs = ['type', 'slot', 'ignore', 'emitPrefix', 'value', 'name', 'native', 'hidden', 'display', 'inject', 'options', 'emit', 'link', 'prefix', 'suffix', 'update', 'sync', 'optionsTo', 'key', 'slotUpdate', 'computed', 'preview', 'component', 'cache', 'modelEmit'];
2540
- var arrayAttrs = ['validate', 'children', 'control'];
2541
- var normalAttrs = ['effect', 'deep', 'renderSlots'];
2542
- function attrs() {
2543
- return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2544
- }
2545
-
2546
- function format(type, msg, rule) {
2547
- return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2548
- }
2549
- function err(msg, rule) {
2550
- console.error(format('err', msg, rule));
2551
- }
2552
- function logError(e) {
2553
- err(e.toString());
2554
- console.error(e);
2555
- }
2556
-
2557
- function toCase(str) {
2558
- var to = str.replace(/(-[a-z])/g, function (v) {
2559
- return v.replace('-', '').toLocaleUpperCase();
2560
- });
2561
- return lower(to);
2562
- }
2563
- function lower(str) {
2564
- return str.replace(str[0], str[0].toLowerCase());
2565
- }
2566
-
2567
- var PREFIX = '[[FORM-CREATE-PREFIX-';
2568
- var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2569
- function toJson(obj, space) {
2570
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2571
- if (val && val._isVue === true) return undefined;
2300
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2301
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2302
+ function toJson(obj, space) {
2303
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2304
+ if (val && val._isVue === true) return undefined;
2572
2305
 
2573
2306
  if (typeof val !== 'function') {
2574
2307
  return val;
@@ -2914,10 +2647,308 @@
2914
2647
  } else {
2915
2648
  currentCondition += '.' + part;
2916
2649
  }
2917
-
2918
- conditions.push(currentCondition);
2650
+
2651
+ conditions.push(currentCondition);
2652
+ });
2653
+ return conditions.join(' && ');
2654
+ }
2655
+
2656
+ var _getGroupInject = function getGroupInject(vm, parent) {
2657
+ if (!vm || vm === parent) {
2658
+ return;
2659
+ }
2660
+
2661
+ if (vm.props.formCreateInject) {
2662
+ return vm.props.formCreateInject;
2663
+ }
2664
+
2665
+ if (vm.parent) {
2666
+ return _getGroupInject(vm.parent, parent);
2667
+ }
2668
+ };
2669
+
2670
+ function $FormCreate(FormCreate, components, directives) {
2671
+ return vue.defineComponent({
2672
+ name: 'FormCreate' + (FormCreate.isMobile ? 'Mobile' : ''),
2673
+ components: components,
2674
+ directives: directives,
2675
+ props: {
2676
+ rule: {
2677
+ type: Array,
2678
+ required: true,
2679
+ "default": function _default() {
2680
+ return [];
2681
+ }
2682
+ },
2683
+ option: {
2684
+ type: Object,
2685
+ "default": function _default() {
2686
+ return {};
2687
+ }
2688
+ },
2689
+ extendOption: Boolean,
2690
+ driver: [String, Object],
2691
+ modelValue: Object,
2692
+ disabled: {
2693
+ type: Boolean,
2694
+ "default": undefined
2695
+ },
2696
+ preview: {
2697
+ type: Boolean,
2698
+ "default": undefined
2699
+ },
2700
+ index: [String, Number],
2701
+ api: Object,
2702
+ locale: [String, Object],
2703
+ name: String,
2704
+ subForm: {
2705
+ type: Boolean,
2706
+ "default": true
2707
+ },
2708
+ inFor: Boolean
2709
+ },
2710
+ emits: ['update:api', 'update:modelValue', 'mounted', 'submit', 'reset', 'change', 'emit-event', 'control', 'remove-rule', 'remove-field', 'sync', 'reload', 'repeat-field', 'update', 'validate-field-fail', 'validate-fail', 'created'],
2711
+ render: function render() {
2712
+ return this.fc.render();
2713
+ },
2714
+ setup: function setup(props) {
2715
+ var vm = vue.getCurrentInstance();
2716
+ vue.provide('parentFC', vm);
2717
+ var parent = vue.inject('parentFC', null);
2718
+ var top = parent;
2719
+
2720
+ if (parent) {
2721
+ while (top.setupState.parent) {
2722
+ top = top.setupState.parent;
2723
+ }
2724
+ } else {
2725
+ top = vm;
2726
+ }
2727
+
2728
+ var _toRefs = vue.toRefs(props),
2729
+ rule = _toRefs.rule,
2730
+ modelValue = _toRefs.modelValue,
2731
+ subForm = _toRefs.subForm,
2732
+ inFor = _toRefs.inFor;
2733
+
2734
+ var data = vue.reactive({
2735
+ ctxInject: {},
2736
+ destroyed: false,
2737
+ isShow: true,
2738
+ unique: 1,
2739
+ renderRule: _toConsumableArray(rule.value || []),
2740
+ updateValue: JSON.stringify(modelValue.value || {})
2741
+ });
2742
+ var fc = new FormCreate(vm);
2743
+ var fapi = fc.api();
2744
+ var isMore = inFor.value;
2745
+
2746
+ var addSubForm = function addSubForm() {
2747
+ if (parent) {
2748
+ var _inject = _getGroupInject(vm, parent);
2749
+
2750
+ if (_inject) {
2751
+ var sub;
2752
+
2753
+ if (isMore) {
2754
+ sub = toArray(_inject.getSubForm());
2755
+ sub.push(fapi);
2756
+ } else {
2757
+ sub = fapi;
2758
+ }
2759
+
2760
+ _inject.subForm(sub);
2761
+ }
2762
+ }
2763
+ };
2764
+
2765
+ var rmSubForm = function rmSubForm() {
2766
+ var inject = _getGroupInject(vm, parent);
2767
+
2768
+ if (inject) {
2769
+ if (isMore) {
2770
+ var sub = toArray(inject.getSubForm());
2771
+ var idx = sub.indexOf(fapi);
2772
+
2773
+ if (idx > -1) {
2774
+ sub.splice(idx, 1);
2775
+ }
2776
+ } else {
2777
+ inject.subForm();
2778
+ }
2779
+ }
2780
+ };
2781
+
2782
+ var styleEl = null;
2783
+ vue.onBeforeMount(function () {
2784
+ vue.watchEffect(function () {
2785
+ var content = '';
2786
+ var globalClass = props.option && props.option.globalClass || {};
2787
+ Object.keys(globalClass).forEach(function (k) {
2788
+ var subCss = '';
2789
+ globalClass[k].style && Object.keys(globalClass[k].style).forEach(function (key) {
2790
+ subCss += toLine(key) + ':' + globalClass[k].style[key] + ';';
2791
+ });
2792
+
2793
+ if (globalClass[k].content) {
2794
+ subCss += globalClass[k].content + ';';
2795
+ }
2796
+
2797
+ if (subCss) {
2798
+ content += ".".concat(k, "{").concat(subCss, "}");
2799
+ }
2800
+ });
2801
+
2802
+ if (props.option && props.option.style) {
2803
+ content += props.option.style;
2804
+ }
2805
+
2806
+ if (!styleEl) {
2807
+ styleEl = document.createElement('style');
2808
+ styleEl.type = 'text/css';
2809
+ document.head.appendChild(styleEl);
2810
+ }
2811
+
2812
+ styleEl.innerHTML = content || '';
2813
+ });
2814
+ });
2815
+ var emit$topForm = debounce(function () {
2816
+ fc.bus.$emit('$loadData.$topForm');
2817
+ }, 100);
2818
+ var emit$scopeForm = debounce(function () {
2819
+ fc.bus.$emit('$loadData.$scopeForm');
2820
+ }, 100);
2821
+ var emit$form = debounce(function () {
2822
+ fc.bus.$emit('$loadData.$form');
2823
+ }, 100);
2824
+
2825
+ var emit$change = function emit$change(field) {
2826
+ fc.bus.$emit('change-$form.' + field);
2827
+ };
2828
+
2829
+ vue.onMounted(function () {
2830
+ if (parent) {
2831
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2832
+ fapi.top.bus.$on('change', emit$change);
2833
+ }
2834
+
2835
+ if (fapi !== fapi.scope) {
2836
+ fapi.scope.bus.$on('$loadData.$scopeForm', emit$scopeForm);
2837
+ }
2838
+
2839
+ fc.mounted();
2840
+ });
2841
+ vue.onBeforeUnmount(function () {
2842
+ if (parent) {
2843
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2844
+ fapi.top.bus.$off('change', emit$change);
2845
+ }
2846
+
2847
+ if (fapi !== fapi.scope) {
2848
+ fapi.scope.bus.$off('$loadData.$scopeForm', emit$scopeForm);
2849
+ }
2850
+
2851
+ styleEl && document.head.removeChild(styleEl);
2852
+ rmSubForm();
2853
+ data.destroyed = true;
2854
+ fc.unmount();
2855
+ });
2856
+ vue.onUpdated(function () {
2857
+ fc.updated();
2858
+ });
2859
+ addSubForm();
2860
+ vue.watch(function () {
2861
+ return props.option;
2862
+ }, function () {
2863
+ fc.initOptions();
2864
+ fapi.refresh();
2865
+ }, {
2866
+ deep: true
2867
+ });
2868
+ vue.watch(function () {
2869
+ return _toConsumableArray(rule.value);
2870
+ }, function (n) {
2871
+ if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2872
+ return data.renderRule.indexOf(v) > -1;
2873
+ })) return;
2874
+ fc.$handle.updateAppendData();
2875
+ fc.$handle.reloadRule(rule.value);
2876
+ vm.setupState.renderRule();
2877
+ });
2878
+ vue.watch(function () {
2879
+ return [props.disabled, props.preview];
2880
+ }, function () {
2881
+ fapi.refresh();
2882
+ });
2883
+ vue.watch(modelValue, function (n) {
2884
+ if (toJson(n || {}) === data.updateValue) return;
2885
+
2886
+ if (fapi.config.forceCoverValue) {
2887
+ fapi.coverValue(n || {});
2888
+ } else {
2889
+ fapi.setValue(n || {});
2890
+ }
2891
+ }, {
2892
+ deep: true,
2893
+ flush: 'post'
2894
+ });
2895
+ vue.watch(function () {
2896
+ return props.index;
2897
+ }, function () {
2898
+ fapi.coverValue({});
2899
+ fc.$handle.updateAppendData();
2900
+ vue.nextTick(function () {
2901
+ vue.nextTick(function () {
2902
+ fapi.clearValidateState();
2903
+ });
2904
+ });
2905
+ }, {
2906
+ flush: 'sync'
2907
+ });
2908
+ return _objectSpread2(_objectSpread2({
2909
+ fc: vue.markRaw(fc),
2910
+ parent: parent ? vue.markRaw(parent) : parent,
2911
+ top: vue.markRaw(top),
2912
+ fapi: vue.markRaw(fapi)
2913
+ }, vue.toRefs(data)), {}, {
2914
+ getGroupInject: function getGroupInject() {
2915
+ return _getGroupInject(vm, parent);
2916
+ },
2917
+ refresh: function refresh() {
2918
+ ++data.unique;
2919
+ },
2920
+ renderRule: function renderRule() {
2921
+ data.renderRule = _toConsumableArray(rule.value || []);
2922
+ },
2923
+ updateValue: function updateValue(value) {
2924
+ if (data.destroyed) return;
2925
+ var json = toJson(value);
2926
+
2927
+ if (data.updateValue === json) {
2928
+ return;
2929
+ }
2930
+
2931
+ data.updateValue = json;
2932
+ vm.emit('update:modelValue', value);
2933
+ vue.nextTick(function () {
2934
+ emit$form();
2935
+
2936
+ if (!parent) {
2937
+ emit$topForm();
2938
+ emit$scopeForm();
2939
+ } else if (!subForm.value) {
2940
+ emit$scopeForm();
2941
+ }
2942
+ });
2943
+ }
2944
+ });
2945
+ },
2946
+ created: function created() {
2947
+ var vm = vue.getCurrentInstance();
2948
+ vm.emit('update:api', vm.setupState.fapi);
2949
+ vm.setupState.fc.init();
2950
+ }
2919
2951
  });
2920
- return conditions.join(' && ');
2921
2952
  }
2922
2953
 
2923
2954
  function baseRule() {
@@ -3125,8 +3156,15 @@
3125
3156
  }
3126
3157
 
3127
3158
  function props(fields, key, val) {
3128
- tidyFields(fields).forEach(function (field) {
3129
- h.getCtxs(field).forEach(function (ctx) {
3159
+ if (is.Undef(fields)) {
3160
+ fields = Object.keys(_objectSpread2(_objectSpread2({}, h.fieldCtx), h.nameCtx));
3161
+ } else if (!Array.isArray(fields)) {
3162
+ fields = [fields];
3163
+ }
3164
+
3165
+ fields.forEach(function (field) {
3166
+ var ctxs = h.fieldCtx[field] || h.nameCtx[field];
3167
+ ctxs && ctxs.forEach(function (ctx) {
3130
3168
  $set(ctx.rule, key, val);
3131
3169
  h.$render.clearCache(ctx);
3132
3170
  });
@@ -3144,6 +3182,14 @@
3144
3182
  }
3145
3183
 
3146
3184
  var api = {
3185
+ get isScope() {
3186
+ return h.vm.props.subForm === false;
3187
+ },
3188
+
3189
+ get isPreview() {
3190
+ return h.preview;
3191
+ },
3192
+
3147
3193
  get config() {
3148
3194
  return h.options;
3149
3195
  },
@@ -3223,6 +3269,10 @@
3223
3269
  return undefined;
3224
3270
  },
3225
3271
 
3272
+ get formulas() {
3273
+ return _objectSpread2({}, h.fc.formulas);
3274
+ },
3275
+
3226
3276
  formData: function formData(fields) {
3227
3277
  if (fields == null || typeof fields === 'boolean') {
3228
3278
  var data = {};
@@ -3653,10 +3703,13 @@
3653
3703
  }
3654
3704
  }
3655
3705
  },
3656
- getChildrenFormData: function getChildrenFormData(id) {
3706
+ getChildrenFormData: function getChildrenFormData(id, flag) {
3657
3707
  var rules = api.getChildrenRuleList(id);
3658
3708
  return rules.reduce(function (formData, rule) {
3659
- formData[rule.field] = copy(rule.value);
3709
+ if (rule.ignore !== true || flag === true) {
3710
+ formData[rule.field] = copy(rule.value);
3711
+ }
3712
+
3660
3713
  return formData;
3661
3714
  }, {});
3662
3715
  },
@@ -3749,7 +3802,7 @@
3749
3802
  });
3750
3803
  reject(e);
3751
3804
  });
3752
- });
3805
+ })["catch"](function (e) {});
3753
3806
  });
3754
3807
  },
3755
3808
  watchFetch: function watchFetch(opt, callback, error, beforeFetch) {
@@ -3774,7 +3827,7 @@
3774
3827
  });
3775
3828
  error && error(e);
3776
3829
  });
3777
- });
3830
+ })["catch"](function (e) {});
3778
3831
  }, opt.wait == null ? 1000 : opt.wait);
3779
3832
  },
3780
3833
  getData: function getData(id, def) {
@@ -5655,7 +5708,7 @@
5655
5708
  return JSON.stringify(this.getFormData(ctx), strFn) !== JSON.stringify(value, strFn);
5656
5709
  },
5657
5710
  isQuote: function isQuote(ctx, value) {
5658
- return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5711
+ return (value instanceof Function || is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5659
5712
  },
5660
5713
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5661
5714
  var _this5 = this;
@@ -5935,19 +5988,25 @@
5935
5988
  return info;
5936
5989
  });
5937
5990
  ctx.refRule['__$validate'] = vue.computed(function () {
5991
+ var t = function t(msg) {
5992
+ var match = msg.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
5993
+
5994
+ if (match) {
5995
+ var _ctx$refRule, _ctx$refRule$__$title;
5996
+
5997
+ return _this.api.t(match[1], {
5998
+ title: (_ctx$refRule = ctx.refRule) === null || _ctx$refRule === void 0 ? void 0 : (_ctx$refRule$__$title = _ctx$refRule.__$title) === null || _ctx$refRule$__$title === void 0 ? void 0 : _ctx$refRule$__$title.value
5999
+ });
6000
+ }
6001
+
6002
+ return msg;
6003
+ };
6004
+
5938
6005
  return toArray(ctx.rule.validate).map(function (item) {
5939
6006
  var temp = _objectSpread2({}, item);
5940
6007
 
5941
6008
  if (temp.message) {
5942
- var match = temp.message.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
5943
-
5944
- if (match) {
5945
- var _ctx$refRule, _ctx$refRule$__$title;
5946
-
5947
- temp.message = _this.api.t(match[1], {
5948
- title: (_ctx$refRule = ctx.refRule) === null || _ctx$refRule === void 0 ? void 0 : (_ctx$refRule$__$title = _ctx$refRule.__$title) === null || _ctx$refRule$__$title === void 0 ? void 0 : _ctx$refRule$__$title.value
5949
- });
5950
- }
6009
+ temp.message = t(temp.message);
5951
6010
  }
5952
6011
 
5953
6012
  if (is.Function(temp.validator)) {
@@ -5968,8 +6027,19 @@
5968
6027
  api: that.$handle.api
5969
6028
  }].concat(args));
5970
6029
  };
6030
+ }
6031
+
6032
+ if (temp.adapter) {
6033
+ if (_typeof(temp.error) === 'object') {
6034
+ var msg = _objectSpread2({}, temp.error);
6035
+
6036
+ Object.keys(msg).forEach(function (key) {
6037
+ msg[key] = t(msg[key]);
6038
+ });
6039
+ temp.error = msg;
6040
+ }
5971
6041
 
5972
- return temp;
6042
+ return _this.adapterValidate(temp, ctx);
5973
6043
  }
5974
6044
 
5975
6045
  return temp;
@@ -6041,9 +6111,282 @@
6041
6111
  });
6042
6112
  this.watchEffect(ctx);
6043
6113
  },
6044
- compute: function compute(ctx, item) {
6114
+ adapterValidate: function adapterValidate(validate, ctx) {
6045
6115
  var _this2 = this;
6046
6116
 
6117
+ var validator = function validator(value, callback) {
6118
+ var before = validate.beforeValidate && invoke(function () {
6119
+ return validate.beforeValidate({
6120
+ value: value,
6121
+ api: _this2.api,
6122
+ validate: validate,
6123
+ rule: ctx.rule
6124
+ });
6125
+ });
6126
+
6127
+ if (before === false) {
6128
+ callback();
6129
+ } else {
6130
+ var key = _this2.validator(value, validate);
6131
+
6132
+ if (!key) {
6133
+ if (validate.validator) {
6134
+ var res = validate.validator && invoke(function () {
6135
+ return validate.validator(value, callback);
6136
+ });
6137
+
6138
+ if (res && is.Function(res.then)) {
6139
+ res.then(function () {
6140
+ return callback();
6141
+ })["catch"](function (e) {
6142
+ return callback(e);
6143
+ });
6144
+ }
6145
+ } else {
6146
+ callback();
6147
+ }
6148
+ } else {
6149
+ var message = '';
6150
+
6151
+ if (_typeof(validate.error) === 'object') {
6152
+ message = validate.error[key] || validate.error["default"];
6153
+ }
6154
+
6155
+ if (!message && typeof validate.message === 'string') {
6156
+ message = validate.message;
6157
+ }
6158
+
6159
+ if (!message) {
6160
+ message = _this2.getValidateMessage(ctx, {
6161
+ key: key,
6162
+ rule: validate[key]
6163
+ });
6164
+ }
6165
+
6166
+ callback(message);
6167
+ }
6168
+ }
6169
+ };
6170
+
6171
+ return this.$manager.adapterValidate({
6172
+ required: validate.required,
6173
+ message: validate.message,
6174
+ target: validate.trigger
6175
+ }, validator);
6176
+ },
6177
+ getValidateMessage: function getValidateMessage(ctx, invalid) {
6178
+ var _ctx$refRule2, _ctx$refRule2$__$titl, _this$api$t;
6179
+
6180
+ var formatRule = Array.isArray(invalid.rule) ? invalid.rule.join(',') : '' + invalid.rule;
6181
+ return this.api.t(invalid.key === 'required' ? invalid.key : 'validate.' + invalid.key, (_this$api$t = {}, _defineProperty(_this$api$t, invalid.key, formatRule), _defineProperty(_this$api$t, "title", (_ctx$refRule2 = ctx.refRule) === null || _ctx$refRule2 === void 0 ? void 0 : (_ctx$refRule2$__$titl = _ctx$refRule2.__$title) === null || _ctx$refRule2$__$titl === void 0 ? void 0 : _ctx$refRule2$__$titl.value), _this$api$t));
6182
+ },
6183
+ validator: function validator(value, validate) {
6184
+ var isEmpty = is.empty(value);
6185
+
6186
+ if (isEmpty) {
6187
+ if (validate.required) {
6188
+ return 'required';
6189
+ }
6190
+
6191
+ return;
6192
+ }
6193
+
6194
+ var _loop = function _loop() {
6195
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
6196
+ key = _Object$entries$_i[0],
6197
+ rule = _Object$entries$_i[1];
6198
+
6199
+ switch (key) {
6200
+ case 'len':
6201
+ case 'maxLen':
6202
+ case 'minLen':
6203
+ var check = function check(val) {
6204
+ if (key === 'len') {
6205
+ return val === rule;
6206
+ } else if (key === 'maxLen') {
6207
+ return val <= rule;
6208
+ } else {
6209
+ return val >= rule;
6210
+ }
6211
+ };
6212
+
6213
+ if (Array.isArray(value)) {
6214
+ if (!check(value.length)) {
6215
+ return {
6216
+ v: key
6217
+ };
6218
+ }
6219
+ } else if (_typeof(value) === 'object') {
6220
+ return {
6221
+ v: key
6222
+ };
6223
+ } else if (!check(('' + value).length)) {
6224
+ return {
6225
+ v: key
6226
+ };
6227
+ }
6228
+
6229
+ break;
6230
+
6231
+ case 'pattern':
6232
+ var reg = typeof rule === 'string' ? new RegExp(rule) : rule;
6233
+
6234
+ if (!reg.test('' + value)) {
6235
+ return {
6236
+ v: key
6237
+ };
6238
+ }
6239
+
6240
+ break;
6241
+
6242
+ case 'uppercase':
6243
+ if (rule && (typeof value !== 'string' || !/^[A-Z]*$/.test(value))) {
6244
+ return {
6245
+ v: key
6246
+ };
6247
+ }
6248
+
6249
+ break;
6250
+
6251
+ case 'lowercase':
6252
+ if (rule && (typeof value !== 'string' || !/^[a-z]*$/.test(value))) {
6253
+ return {
6254
+ v: key
6255
+ };
6256
+ }
6257
+
6258
+ break;
6259
+
6260
+ case 'min':
6261
+ case 'max':
6262
+ case 'positive':
6263
+ case 'negative':
6264
+ case 'integer':
6265
+ case 'number':
6266
+ var num = Number(value);
6267
+
6268
+ if (Number.isNaN(num)) {
6269
+ return {
6270
+ v: key
6271
+ };
6272
+ }
6273
+
6274
+ if (key === 'min' && num < rule) {
6275
+ return {
6276
+ v: key
6277
+ };
6278
+ }
6279
+
6280
+ if (key === 'max' && num > rule) {
6281
+ return {
6282
+ v: key
6283
+ };
6284
+ }
6285
+
6286
+ if (key === 'positive' && num <= 0) {
6287
+ return {
6288
+ v: key
6289
+ };
6290
+ }
6291
+
6292
+ if (key === 'negative' && num >= 0) {
6293
+ return {
6294
+ v: key
6295
+ };
6296
+ }
6297
+
6298
+ if (key === 'integer' && !Number.isInteger(num)) {
6299
+ return {
6300
+ v: key
6301
+ };
6302
+ }
6303
+
6304
+ break;
6305
+
6306
+ case 'equal':
6307
+ if (value !== rule) {
6308
+ return {
6309
+ v: key
6310
+ };
6311
+ }
6312
+
6313
+ break;
6314
+
6315
+ case 'enum':
6316
+ if (Array.isArray(rule) && !rule.includes(value)) {
6317
+ return {
6318
+ v: key
6319
+ };
6320
+ }
6321
+
6322
+ break;
6323
+
6324
+ case 'hasKeys':
6325
+ if (_typeof(value) !== 'object' || Array.isArray(rule) && rule.some(function (key) {
6326
+ return !(key in value);
6327
+ })) {
6328
+ return {
6329
+ v: key
6330
+ };
6331
+ }
6332
+
6333
+ break;
6334
+
6335
+ case 'email':
6336
+ var regexEmail = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
6337
+
6338
+ if (!regexEmail.test('' + value)) {
6339
+ return {
6340
+ v: key
6341
+ };
6342
+ }
6343
+
6344
+ break;
6345
+
6346
+ case 'url':
6347
+ var regexUrl = new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i');
6348
+
6349
+ if (!regexUrl.test('' + value)) {
6350
+ return {
6351
+ v: key
6352
+ };
6353
+ }
6354
+
6355
+ break;
6356
+
6357
+ case 'ip':
6358
+ var regexIp = /^(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})(\.(2(5[0-5]{1}|[0-4]\d{1})|[0-1]?\d{1,2})){3}$/;
6359
+
6360
+ if (!regexIp.test('' + value)) {
6361
+ return {
6362
+ v: key
6363
+ };
6364
+ }
6365
+
6366
+ break;
6367
+
6368
+ case 'phone':
6369
+ var regexPhone = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
6370
+
6371
+ if (!regexPhone.test('' + value)) {
6372
+ return {
6373
+ v: key
6374
+ };
6375
+ }
6376
+
6377
+ break;
6378
+ }
6379
+ };
6380
+
6381
+ for (var _i = 0, _Object$entries = Object.entries(validate); _i < _Object$entries.length; _i++) {
6382
+ var _ret = _loop();
6383
+
6384
+ if (_typeof(_ret) === "object") return _ret.v;
6385
+ }
6386
+ },
6387
+ compute: function compute(ctx, item) {
6388
+ var _this3 = this;
6389
+
6047
6390
  var fn;
6048
6391
 
6049
6392
  if (_typeof(item) === 'object') {
@@ -6062,16 +6405,16 @@
6062
6405
  var or = item.mode === 'OR';
6063
6406
  var valid = true;
6064
6407
 
6065
- var _loop = function _loop(i) {
6408
+ var _loop2 = function _loop2(i) {
6066
6409
  var one = item.group[i];
6067
6410
  var flag = void 0;
6068
6411
  var field = null;
6069
6412
 
6070
6413
  if (one.variable) {
6071
- field = JSON.stringify(_this2.fc.getLoadData(one.variable) || '');
6414
+ field = JSON.stringify(_this3.fc.getLoadData(one.variable) || '');
6072
6415
  } else if (one.field) {
6073
6416
  field = convertFieldToConditions(one.field || '');
6074
- } else {
6417
+ } else if (!one.mode) {
6075
6418
  return {
6076
6419
  v: true
6077
6420
  };
@@ -6089,11 +6432,11 @@
6089
6432
  flag = false;
6090
6433
  } else if (is.Function(one.handler)) {
6091
6434
  flag = invoke(function () {
6092
- return one.handler(_this2.api, ctx.rule);
6435
+ return one.handler(_this3.api, ctx.rule);
6093
6436
  });
6094
6437
  } else {
6095
6438
  flag = invoke(function () {
6096
- return new Function('$condition', '$val', '$form', '$scope', '$group', '$rule', "with($form){with($scope){with(this){with($group){ return $condition['".concat(one.condition, "'](").concat(field, ", ").concat(compare ? compare : '$val', "); }}}}")).call(_this2.api.form, condition, one.value, _this2.api.top.form, _this2.api.top === _this2.api.scope ? {} : _this2.api.scope.form, group ? _this2.subRuleData[group.id] || {} : {}, ctx.rule);
6439
+ return new Function('$condition', '$val', '$form', '$scope', '$group', '$rule', "with($form){with($scope){with(this){with($group){ return $condition['".concat(one.condition, "'](").concat(field, ", ").concat(compare ? compare : '$val', "); }}}}")).call(_this3.api.form, condition, one.value, _this3.api.top.form, _this3.api.top === _this3.api.scope ? {} : _this3.api.scope.form, group ? _this3.subRuleData[group.id] || {} : {}, ctx.rule);
6097
6440
  });
6098
6441
  }
6099
6442
 
@@ -6109,9 +6452,9 @@
6109
6452
  };
6110
6453
 
6111
6454
  for (var i = 0; i < item.group.length; i++) {
6112
- var _ret = _loop(i);
6455
+ var _ret2 = _loop2(i);
6113
6456
 
6114
- if (_typeof(_ret) === "object") return _ret.v;
6457
+ if (_typeof(_ret2) === "object") return _ret2.v;
6115
6458
  }
6116
6459
 
6117
6460
  return or ? false : valid;
@@ -6122,26 +6465,28 @@
6122
6465
 
6123
6466
  if (item.linkage) {
6124
6467
  return val ? invoke(function () {
6125
- return _this2.computeValue(item.linkage, ctx, group);
6468
+ return _this3.computeValue(item.linkage, ctx, group);
6126
6469
  }, undefined) : oldValueTag;
6127
6470
  }
6128
6471
 
6129
6472
  return val;
6130
6473
  } else if (is.Function(item)) {
6131
6474
  fn = function fn() {
6132
- return item(_this2.api.form, _this2.api);
6475
+ return item(_this3.api.form, _this3.api);
6133
6476
  };
6134
6477
  } else {
6135
6478
  var _group = ctx.getParentGroup();
6136
6479
 
6137
6480
  fn = function fn() {
6138
- return _this2.computeValue(item, ctx, _group);
6481
+ return _this3.computeValue(item, ctx, _group);
6139
6482
  };
6140
6483
  }
6141
6484
 
6142
6485
  return invoke(fn, undefined);
6143
6486
  },
6144
6487
  computeValue: function computeValue(str, ctx, group) {
6488
+ var _this4 = this;
6489
+
6145
6490
  var that = this;
6146
6491
  var formulas = Object.keys(this.fc.formulas).reduce(function (obj, k) {
6147
6492
  obj[k] = function () {
@@ -6161,34 +6506,36 @@
6161
6506
 
6162
6507
  return obj;
6163
6508
  }, {});
6164
- return new Function('$formulas', '$form', '$scope', '$group', '$rule', '$api', "with($form){with($scope){with(this){with($group){with($formulas){ return ".concat(str, " }}}}}")).call(this.api.form, formulas, this.api.top.form, this.api.top === this.api.scope ? {} : this.api.scope.form, group ? this.subRuleData[group.id] || {} : {}, ctx.rule, this.api);
6509
+ return invoke(function () {
6510
+ return new Function('$formulas', '$form', '$scope', '$group', '$rule', '$api', "with($form){with($scope){with(this){with($group){with($formulas){ return ".concat(str, " }}}}}")).call(_this4.api.form, formulas, _this4.api.top.form, _this4.api.top === _this4.api.scope ? {} : _this4.api.scope.form, group ? _this4.subRuleData[group.id] || {} : {}, ctx.rule, _this4.api);
6511
+ }, undefined);
6165
6512
  },
6166
6513
  updateChildren: function updateChildren(ctx, n, o) {
6167
- var _this3 = this;
6514
+ var _this5 = this;
6168
6515
 
6169
6516
  this.deferSyncValue(function () {
6170
6517
  o && o.forEach(function (child) {
6171
6518
  if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx) {
6172
- _this3.rmCtx(child.__fc__);
6519
+ _this5.rmCtx(child.__fc__);
6173
6520
  }
6174
6521
  });
6175
6522
 
6176
6523
  if (is.trueArray(n)) {
6177
- _this3.loadChildren(n, ctx);
6524
+ _this5.loadChildren(n, ctx);
6178
6525
 
6179
- _this3.bus.$emit('update', _this3.api);
6526
+ _this5.bus.$emit('update', _this5.api);
6180
6527
  }
6181
6528
  });
6182
6529
  },
6183
6530
  rmSub: function rmSub(sub) {
6184
- var _this4 = this;
6531
+ var _this6 = this;
6185
6532
 
6186
6533
  is.trueArray(sub) && sub.forEach(function (r) {
6187
- r && r.__fc__ && _this4.rmCtx(r.__fc__);
6534
+ r && r.__fc__ && _this6.rmCtx(r.__fc__);
6188
6535
  });
6189
6536
  },
6190
6537
  rmCtx: function rmCtx(ctx) {
6191
- var _this5 = this;
6538
+ var _this7 = this;
6192
6539
 
6193
6540
  if (ctx.deleted) return;
6194
6541
  var id = ctx.id,
@@ -6217,19 +6564,19 @@
6217
6564
  }
6218
6565
 
6219
6566
  this.deferSyncValue(function () {
6220
- if (!_this5.reloading) {
6567
+ if (!_this7.reloading) {
6221
6568
  if (ctx.parser.loadChildren !== false) {
6222
6569
  var children = ctx.getPending('children', ctx.rule.children);
6223
6570
 
6224
6571
  if (is.trueArray(children)) {
6225
6572
  children.forEach(function (h) {
6226
- return h.__fc__ && _this5.rmCtx(h.__fc__);
6573
+ return h.__fc__ && _this7.rmCtx(h.__fc__);
6227
6574
  });
6228
6575
  }
6229
6576
  }
6230
6577
 
6231
- if (ctx.root === _this5.rules) {
6232
- _this5.vm.setupState.renderRule();
6578
+ if (ctx.root === _this7.rules) {
6579
+ _this7.vm.setupState.renderRule();
6233
6580
  }
6234
6581
  }
6235
6582
  }, input);
@@ -6491,7 +6838,13 @@
6491
6838
  return fc.bus;
6492
6839
  },
6493
6840
  preview: function preview() {
6494
- return fc.vm.props.preview != null ? fc.vm.props.preview : fc.options.value.preview || false;
6841
+ if (fc.vm.props.preview != null) {
6842
+ return fc.vm.props.preview;
6843
+ } else if (fc.vm.setupState.parent && fc.vm.setupState.parent.props.preview != null) {
6844
+ return fc.vm.setupState.parent.props.preview;
6845
+ }
6846
+
6847
+ return fc.options.value.preview || false;
6495
6848
  }
6496
6849
  });
6497
6850
  extend(this, {
@@ -6597,6 +6950,25 @@
6597
6950
  }).then(function () {
6598
6951
  return _this3.globalBeforeFetch(opt);
6599
6952
  });
6953
+ },
6954
+ beforeSubmit: function beforeSubmit(formData) {
6955
+ var _this4 = this;
6956
+
6957
+ return new Promise(function (resolve, reject) {
6958
+ var res = _this4.options.beforeSubmit && invoke(function () {
6959
+ return _this4.options.beforeSubmit(formData, {
6960
+ api: _this4.api
6961
+ });
6962
+ });
6963
+
6964
+ if (res && is.Function(res.then)) {
6965
+ res.then(resolve)["catch"](reject);
6966
+ } else if (res === false) {
6967
+ reject();
6968
+ } else {
6969
+ resolve();
6970
+ }
6971
+ });
6600
6972
  }
6601
6973
  });
6602
6974
  useInject(Handler);
@@ -6751,6 +7123,13 @@
6751
7123
  form: function form() {
6752
7124
  return this.vm.refs[this.ref];
6753
7125
  },
7126
+ adapterValidate: function adapterValidate(validate, validator) {
7127
+ validate.validator = function (rule, value, callback) {
7128
+ return validator(value, callback);
7129
+ };
7130
+
7131
+ return validate;
7132
+ },
6754
7133
  getSlot: function getSlot(name) {
6755
7134
  var _fn = function _fn(vm) {
6756
7135
  if (vm) {
@@ -6798,57 +7177,61 @@
6798
7177
  var loadData = {
6799
7178
  name: 'loadData',
6800
7179
  _fn: [],
6801
- mounted: function mounted(inject, rule, api) {
6802
- this.deleted(inject);
6803
- var attrs = toArray(inject.getValue());
6804
- var unwatchs = [];
6805
- attrs.forEach(function (attr) {
6806
- if (attr && (attr.attr || attr.template)) {
6807
- var fn = function fn(get) {
6808
- var value;
7180
+ loaded: function loaded(inject, rule, api) {
7181
+ var _this = this;
6809
7182
 
6810
- if (attr.template) {
6811
- value = fc.$handle.loadStrVar(attr.template, get);
6812
- } else if (attr.handler && is.Function(attr.handler)) {
6813
- value = attr.handler(get, rule, api);
6814
- } else {
6815
- value = get(attr.attr, attr["default"]);
6816
- }
7183
+ this.deleted(inject);
7184
+ vue.nextTick(function () {
7185
+ var attrs = toArray(inject.getValue());
7186
+ var unwatchs = [];
7187
+ attrs.forEach(function (attr) {
7188
+ if (attr && (attr.attr || attr.template)) {
7189
+ var fn = function fn(get) {
7190
+ var value;
7191
+
7192
+ if (attr.template) {
7193
+ value = fc.$handle.loadStrVar(attr.template, get);
7194
+ } else if (attr.handler && is.Function(attr.handler)) {
7195
+ value = attr.handler(get, rule, api);
7196
+ } else {
7197
+ value = get(attr.attr, attr["default"]);
7198
+ }
6817
7199
 
6818
- if (attr.copy !== false) {
6819
- value = deepCopy(value);
6820
- }
7200
+ if (attr.copy !== false) {
7201
+ value = deepCopy(value);
7202
+ }
6821
7203
 
6822
- var _rule = attr.modify ? rule : inject.getProp();
7204
+ var _rule = attr.modify ? rule : inject.getProp();
6823
7205
 
6824
- if (attr.to === 'child') {
6825
- if (_rule.children) {
6826
- _rule.children[0] = value;
7206
+ if (attr.to === 'child') {
7207
+ if (_rule.children) {
7208
+ _rule.children[0] = value;
7209
+ } else {
7210
+ _rule.children = [value];
7211
+ }
6827
7212
  } else {
6828
- _rule.children = [value];
7213
+ deepSet(_rule, attr.to || 'options', value);
6829
7214
  }
6830
- } else {
6831
- deepSet(_rule, attr.to || 'options', value);
6832
- }
6833
7215
 
6834
- api.sync(rule);
6835
- };
7216
+ api.sync(rule);
7217
+ };
6836
7218
 
6837
- var callback = function callback(get) {
6838
- return fn(get);
6839
- };
7219
+ var callback = function callback(get) {
7220
+ return fn(get);
7221
+ };
6840
7222
 
6841
- var unwatch = fc.watchLoadData(callback);
6842
- fn = debounce(fn, attr.wait || 300);
7223
+ var unwatch = fc.watchLoadData(callback);
7224
+ fn = debounce(fn, attr.wait || 300);
6843
7225
 
6844
- if (attr.watch !== false) {
6845
- unwatchs.push(unwatch);
6846
- } else {
6847
- unwatch();
7226
+ if (attr.watch !== false) {
7227
+ unwatchs.push(unwatch);
7228
+ } else {
7229
+ unwatch();
7230
+ }
6848
7231
  }
6849
- }
7232
+ });
7233
+ _this._fn[inject.id] = unwatchs;
6850
7234
  });
6851
- this._fn[inject.id] = unwatchs;
6852
7235
  },
6853
7236
  deleted: function deleted(inject) {
6854
7237
  if (this._fn[inject.id]) {
@@ -6862,7 +7245,7 @@
6862
7245
  inject.clearProp();
6863
7246
  }
6864
7247
  };
6865
- loadData.watch = loadData.mounted;
7248
+ loadData.watch = loadData.loaded;
6866
7249
  return loadData;
6867
7250
  };
6868
7251
 
@@ -7075,7 +7458,6 @@
7075
7458
  }
7076
7459
 
7077
7460
  set(fn(body, rule, api));
7078
- api.sync(rule);
7079
7461
  },
7080
7462
  onError: function onError(e) {
7081
7463
  set(undefined);
@@ -7108,7 +7490,7 @@
7108
7490
  api: api
7109
7491
  });
7110
7492
  });
7111
- });
7493
+ })["catch"](function (e) {});
7112
7494
  }, option.wait || 600));
7113
7495
  }
7114
7496
 
@@ -7242,6 +7624,57 @@
7242
7624
  return baseDriver(getSessionStorage, name);
7243
7625
  }
7244
7626
 
7627
+ var baseLanguage = {
7628
+ en: {
7629
+ required: '{title} is required',
7630
+ validate: {
7631
+ url: '{title} is not a valid url',
7632
+ email: '{title} is not a valid email',
7633
+ ip: '{title} {title} is not a valid ip',
7634
+ phone: '{title} {title} is not a valid phone',
7635
+ pattern: '{title} does not match pattern {pattern}',
7636
+ uppercase: '{title} must be all uppercase',
7637
+ lowercase: '{title} must be all lowercased',
7638
+ positive: '{title} is not a positive number',
7639
+ negative: '{title} is not a negative number',
7640
+ equal: '{title} is not equal to {equal}',
7641
+ min: '{title} cannot be less than {min}',
7642
+ max: '{title} cannot be greater than {max}',
7643
+ "enum": '{title} must be one of {enum}',
7644
+ hasKeys: '{title} does not contain required fields {hasKeys}',
7645
+ minLen: '{title} must be at least {minLen}',
7646
+ maxLen: '{title} cannot be longer than {maxLen}',
7647
+ len: '{title} must be exactly {len}',
7648
+ integer: '{title} is not an integer',
7649
+ number: '{title} is not an number'
7650
+ }
7651
+ },
7652
+ 'zh-cn': {
7653
+ required: '{title}不能为空',
7654
+ validate: {
7655
+ url: '{title}不是有效的 url 地址',
7656
+ email: '{title}不是有效的邮箱地址',
7657
+ ip: '{title}不是有效的 IP 地址',
7658
+ phone: '{title}不是正确的手机号',
7659
+ pattern: '{title}必须匹配 {pattern}',
7660
+ uppercase: '{title}必须全大写',
7661
+ lowercase: '{title}必须全小写',
7662
+ positive: '{title}不是正数',
7663
+ negative: '{title}不是负数',
7664
+ equal: '{title}必须等于 {equal}',
7665
+ min: '{title}必须大于等于 {min}',
7666
+ max: '{title}必须小于等于 {max}',
7667
+ "enum": '{title}必须是 {enum} 之一',
7668
+ hasKeys: '{title}必须包含 {hasKeys} 字段',
7669
+ minLen: '{title}长度必须大于 {minLen}',
7670
+ maxLen: '{title}长度必须小于 {maxLen}',
7671
+ len: '{title}长度必须为 {len}',
7672
+ integer: '{title}必须为整数',
7673
+ number: '{title}必须为数字'
7674
+ }
7675
+ }
7676
+ };
7677
+
7245
7678
  function parseProp(name, id) {
7246
7679
  var prop;
7247
7680
 
@@ -7765,7 +8198,11 @@
7765
8198
 
7766
8199
  var _locale = this.getLocale();
7767
8200
 
7768
- value = deepGet(language[_locale], id);
8201
+ value = deepGet(language[_locale] || {}, id);
8202
+
8203
+ if (value == null) {
8204
+ value = deepGet(baseLanguage[_locale] || {}, id);
8205
+ }
7769
8206
  }
7770
8207
 
7771
8208
  return value;
@@ -7792,7 +8229,7 @@
7792
8229
  }
7793
8230
  });
7794
8231
  this.unwatch.push(unwatch);
7795
- return val;
8232
+ return deepGet(val, split);
7796
8233
  }
7797
8234
  }
7798
8235
  },
@@ -8442,7 +8879,6 @@
8442
8879
  e.preventDefault();
8443
8880
  }
8444
8881
  },
8445
- "class": [form.className, form["class"], 'form-create', this.$handle.preview ? 'is-preview' : ''],
8446
8882
  style: form.style,
8447
8883
  type: 'form'
8448
8884
  };
@@ -8451,9 +8887,11 @@
8451
8887
  var key = this.key,
8452
8888
  ref = this.ref,
8453
8889
  $handle = this.$handle;
8890
+ var form = this.options.form;
8454
8891
  extend(this.rule, {
8455
8892
  key: key,
8456
- ref: ref
8893
+ ref: ref,
8894
+ "class": [form.className, form["class"], 'form-create', this.$handle.preview ? 'is-preview' : '']
8457
8895
  });
8458
8896
  extend(this.rule.props, {
8459
8897
  model: $handle.formData
@@ -8787,7 +9225,9 @@
8787
9225
  return new Promise(function (resolve, reject) {
8788
9226
  var forms = api.children;
8789
9227
  var all = [h.$manager.validate()];
8790
- forms.forEach(function (v) {
9228
+ forms.filter(function (v) {
9229
+ return !v.isScope;
9230
+ }).forEach(function (v) {
8791
9231
  all.push(v.validate());
8792
9232
  });
8793
9233
  Promise.all(all).then(function () {
@@ -8808,7 +9248,9 @@
8808
9248
  if (!ctx) return;
8809
9249
  var sub = h.subForm[ctx.id];
8810
9250
  var all = [h.$manager.validateField(ctx.id)];
8811
- toArray(sub).forEach(function (v) {
9251
+ toArray(sub).filter(function (v) {
9252
+ return !v.isScope;
9253
+ }).forEach(function (v) {
8812
9254
  all.push(v.validate());
8813
9255
  });
8814
9256
  Promise.all(all).then(function () {
@@ -8911,16 +9353,19 @@
8911
9353
  },
8912
9354
  submit: function submit(successFn, failFn) {
8913
9355
  return new Promise(function (resolve, reject) {
8914
- api.validate().then(function () {
9356
+ var promise = h.options.validateOnSubmit === false ? Promise.resolve() : api.validate();
9357
+ promise.then(function () {
8915
9358
  var formData = api.formData();
8916
- is.Function(successFn) && invoke(function () {
8917
- return successFn(formData, api);
8918
- });
8919
- is.Function(h.options.onSubmit) && invoke(function () {
8920
- return h.options.onSubmit(formData, api);
8921
- });
8922
- h.vm.emit('submit', formData, api);
8923
- resolve(formData);
9359
+ h.beforeSubmit(formData).then(function () {
9360
+ is.Function(successFn) && invoke(function () {
9361
+ return successFn(formData, api);
9362
+ });
9363
+ is.Function(h.options.onSubmit) && invoke(function () {
9364
+ return h.options.onSubmit(formData, api);
9365
+ });
9366
+ h.vm.emit('submit', formData, api);
9367
+ resolve(formData);
9368
+ })["catch"](function (e) {});
8924
9369
  })["catch"](function () {
8925
9370
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
8926
9371
  args[_key] = arguments[_key];
@@ -9027,7 +9472,7 @@
9027
9472
  function elmFormCreate() {
9028
9473
  return FormCreateFactory({
9029
9474
  ui: 'element-ui',
9030
- version: '3.2.20',
9475
+ version: '3.2.22',
9031
9476
  manager: manager,
9032
9477
  extendApi: extendApi,
9033
9478
  install: install,