@form-create/element-ui 3.2.19 → 3.2.21

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.19
2
+ * @form-create/element-ui v3.2.21
3
3
  * (c) 2018-2025 xaboy
4
4
  * Github https://github.com/xaboy/form-create
5
5
  * Released under the MIT License.
@@ -2165,410 +2165,122 @@
2165
2165
  return str.replace(str[0], str[0].toLocaleUpperCase());
2166
2166
  }
2167
2167
 
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
- };
2168
+ var normalMerge = ['props'];
2169
+ var toArrayMerge = ['class', 'style', 'directives'];
2170
+ var functionalMerge = ['on', 'hook'];
2181
2171
 
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;
2172
+ var mergeProps = function mergeProps(objects) {
2173
+ var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2174
+ var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2231
2175
 
2232
- if (parent) {
2233
- while (top.setupState.parent) {
2234
- top = top.setupState.parent;
2235
- }
2236
- } else {
2237
- top = vm;
2238
- }
2176
+ var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2239
2177
 
2240
- var _toRefs = vue.toRefs(props),
2241
- rule = _toRefs.rule,
2242
- modelValue = _toRefs.modelValue,
2243
- subForm = _toRefs.subForm,
2244
- inFor = _toRefs.inFor;
2178
+ var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2245
2179
 
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;
2180
+ var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2257
2181
 
2258
- var addSubForm = function addSubForm() {
2259
- if (parent) {
2260
- var _inject = _getGroupInject(vm, parent);
2182
+ var propsMerge = opt['props'] || [];
2183
+ return objects.reduce(function (a, b) {
2184
+ for (var key in b) {
2185
+ if (a[key]) {
2186
+ if (propsMerge.indexOf(key) > -1) {
2187
+ a[key] = mergeProps([b[key]], a[key]);
2188
+ } else if (_normalMerge.indexOf(key) > -1) {
2189
+ a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2190
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2191
+ var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2192
+ var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2193
+ a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2194
+ } else if (_functionalMerge.indexOf(key) > -1) {
2195
+ for (var event in b[key]) {
2196
+ if (a[key][event]) {
2197
+ var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2261
2198
 
2262
- if (_inject) {
2263
- var sub;
2199
+ var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2264
2200
 
2265
- if (isMore) {
2266
- sub = toArray(_inject.getSubForm());
2267
- sub.push(fapi);
2201
+ a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2268
2202
  } else {
2269
- sub = fapi;
2203
+ a[key][event] = b[key][event];
2270
2204
  }
2271
-
2272
- _inject.subForm(sub);
2273
2205
  }
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);
2206
+ } else if (key === 'hook') {
2207
+ for (var hook in b[key]) {
2208
+ if (a[key][hook]) {
2209
+ a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2210
+ } else {
2211
+ a[key][hook] = b[key][hook];
2287
2212
  }
2288
- } else {
2289
- inject.subForm();
2290
2213
  }
2214
+ } else {
2215
+ a[key] = b[key];
2291
2216
  }
2292
- };
2217
+ } else {
2218
+ if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2219
+ a[key] = _objectSpread2({}, b[key]);
2220
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2221
+ a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2222
+ } else a[key] = b[key];
2223
+ }
2224
+ }
2293
2225
 
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
- });
2226
+ return a;
2227
+ }, initial);
2228
+ };
2304
2229
 
2305
- if (globalClass[k].content) {
2306
- subCss += globalClass[k].content + ';';
2307
- }
2230
+ var mergeFn = function mergeFn(fn1, fn2) {
2231
+ return function () {
2232
+ fn1 && fn1.apply(this, arguments);
2233
+ fn2 && fn2.apply(this, arguments);
2234
+ };
2235
+ };
2308
2236
 
2309
- if (subCss) {
2310
- content += ".".concat(k, "{").concat(subCss, "}");
2311
- }
2312
- });
2237
+ 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'];
2238
+ var arrayAttrs = ['validate', 'children', 'control'];
2239
+ var normalAttrs = ['effect', 'deep', 'renderSlots'];
2240
+ function attrs() {
2241
+ return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2242
+ }
2313
2243
 
2314
- if (props.option && props.option.style) {
2315
- content += props.option.style;
2316
- }
2244
+ function format(type, msg, rule) {
2245
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2246
+ }
2247
+ function err(msg, rule) {
2248
+ console.error(format('err', msg, rule));
2249
+ }
2250
+ function logError(e) {
2251
+ err(e.toString());
2252
+ console.error(e);
2253
+ }
2317
2254
 
2318
- if (!styleEl) {
2319
- styleEl = document.createElement('style');
2320
- styleEl.type = 'text/css';
2321
- document.head.appendChild(styleEl);
2322
- }
2255
+ function toCase(str) {
2256
+ var to = str.replace(/(-[a-z])/g, function (v) {
2257
+ return v.replace('-', '').toLocaleUpperCase();
2258
+ });
2259
+ return lower(to);
2260
+ }
2261
+ function lower(str) {
2262
+ return str.replace(str[0], str[0].toLowerCase());
2263
+ }
2323
2264
 
2324
- styleEl.innerHTML = content || '';
2325
- });
2326
- });
2327
- var emit$topForm = debounce(function () {
2328
- fc.bus.$emit('$loadData.$topForm');
2329
- }, 100);
2330
- var emit$form = debounce(function () {
2331
- fc.bus.$emit('$loadData.$form');
2332
- }, 100);
2265
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2266
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2267
+ function toJson(obj, space) {
2268
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2269
+ if (val && val._isVue === true) return undefined;
2333
2270
 
2334
- var emit$change = function emit$change(field) {
2335
- fc.bus.$emit('change-$form.' + field);
2336
- };
2271
+ if (typeof val !== 'function') {
2272
+ return val;
2273
+ }
2337
2274
 
2338
- vue.onMounted(function () {
2339
- if (parent) {
2340
- fapi.top.bus.$on('$loadData.$form', emit$topForm);
2341
- fapi.top.bus.$on('change', emit$change);
2342
- }
2275
+ if (val.__json) {
2276
+ return val.__json;
2277
+ }
2343
2278
 
2344
- fc.mounted();
2345
- });
2346
- vue.onBeforeUnmount(function () {
2347
- if (parent) {
2348
- fapi.top.bus.$off('$loadData.$form', emit$topForm);
2349
- fapi.top.bus.$off('change', emit$change);
2350
- }
2351
-
2352
- styleEl && document.head.removeChild(styleEl);
2353
- rmSubForm();
2354
- data.destroyed = true;
2355
- fc.unmount();
2356
- });
2357
- vue.onUpdated(function () {
2358
- fc.updated();
2359
- });
2360
- vue.watch(subForm, function (n) {
2361
- n ? addSubForm() : rmSubForm();
2362
- }, {
2363
- immediate: true
2364
- });
2365
- vue.watch(function () {
2366
- return _toConsumableArray(rule.value);
2367
- }, function (n) {
2368
- if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2369
- return data.renderRule.indexOf(v) > -1;
2370
- })) return;
2371
- fc.$handle.updateAppendData();
2372
- fc.$handle.reloadRule(rule.value);
2373
- vm.setupState.renderRule();
2374
- });
2375
- vue.watch(function () {
2376
- return props.option;
2377
- }, function () {
2378
- fc.initOptions();
2379
- fapi.refresh();
2380
- }, {
2381
- deep: true
2382
- });
2383
- vue.watch(function () {
2384
- return [props.disabled, props.preview];
2385
- }, function () {
2386
- fapi.refresh();
2387
- });
2388
- vue.watch(modelValue, function (n) {
2389
- if (JSON.stringify(n || {}) === data.updateValue) return;
2390
-
2391
- if (fapi.config.forceCoverValue) {
2392
- fapi.coverValue(n || {});
2393
- } else {
2394
- fapi.setValue(n || {});
2395
- }
2396
- }, {
2397
- deep: true,
2398
- flush: 'post'
2399
- });
2400
- vue.watch(function () {
2401
- return props.index;
2402
- }, function () {
2403
- fapi.coverValue({});
2404
- fc.$handle.updateAppendData();
2405
- vue.nextTick(function () {
2406
- vue.nextTick(function () {
2407
- fapi.clearValidateState();
2408
- });
2409
- });
2410
- }, {
2411
- flush: 'sync'
2412
- });
2413
- return _objectSpread2(_objectSpread2({
2414
- fc: vue.markRaw(fc),
2415
- parent: parent ? vue.markRaw(parent) : parent,
2416
- top: vue.markRaw(top),
2417
- fapi: vue.markRaw(fapi)
2418
- }, vue.toRefs(data)), {}, {
2419
- getGroupInject: function getGroupInject() {
2420
- return _getGroupInject(vm, parent);
2421
- },
2422
- refresh: function refresh() {
2423
- ++data.unique;
2424
- },
2425
- renderRule: function renderRule() {
2426
- data.renderRule = _toConsumableArray(rule.value || []);
2427
- },
2428
- updateValue: function updateValue(value) {
2429
- if (data.destroyed) return;
2430
- var json = JSON.stringify(value);
2431
-
2432
- if (data.updateValue === json) {
2433
- return;
2434
- }
2435
-
2436
- data.updateValue = json;
2437
- vm.emit('update:modelValue', value);
2438
- vue.nextTick(function () {
2439
- emit$form();
2440
-
2441
- if (!parent) {
2442
- emit$topForm();
2443
- }
2444
- });
2445
- }
2446
- });
2447
- },
2448
- created: function created() {
2449
- var vm = vue.getCurrentInstance();
2450
- vm.emit('update:api', vm.setupState.fapi);
2451
- vm.setupState.fc.init();
2452
- }
2453
- });
2454
- }
2455
-
2456
- var normalMerge = ['props'];
2457
- var toArrayMerge = ['class', 'style', 'directives'];
2458
- var functionalMerge = ['on', 'hook'];
2459
-
2460
- var mergeProps = function mergeProps(objects) {
2461
- var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2462
- var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2463
-
2464
- var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2465
-
2466
- var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2467
-
2468
- var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2469
-
2470
- var propsMerge = opt['props'] || [];
2471
- return objects.reduce(function (a, b) {
2472
- for (var key in b) {
2473
- if (a[key]) {
2474
- if (propsMerge.indexOf(key) > -1) {
2475
- a[key] = mergeProps([b[key]], a[key]);
2476
- } else if (_normalMerge.indexOf(key) > -1) {
2477
- a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2478
- } else if (_toArrayMerge.indexOf(key) > -1) {
2479
- var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2480
- var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2481
- a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2482
- } else if (_functionalMerge.indexOf(key) > -1) {
2483
- for (var event in b[key]) {
2484
- if (a[key][event]) {
2485
- var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2486
-
2487
- var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2488
-
2489
- a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2490
- } else {
2491
- a[key][event] = b[key][event];
2492
- }
2493
- }
2494
- } else if (key === 'hook') {
2495
- for (var hook in b[key]) {
2496
- if (a[key][hook]) {
2497
- a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2498
- } else {
2499
- a[key][hook] = b[key][hook];
2500
- }
2501
- }
2502
- } else {
2503
- a[key] = b[key];
2504
- }
2505
- } else {
2506
- if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2507
- a[key] = _objectSpread2({}, b[key]);
2508
- } else if (_toArrayMerge.indexOf(key) > -1) {
2509
- a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2510
- } else a[key] = b[key];
2511
- }
2512
- }
2513
-
2514
- return a;
2515
- }, initial);
2516
- };
2517
-
2518
- var mergeFn = function mergeFn(fn1, fn2) {
2519
- return function () {
2520
- fn1 && fn1.apply(this, arguments);
2521
- fn2 && fn2.apply(this, arguments);
2522
- };
2523
- };
2524
-
2525
- 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'];
2526
- var arrayAttrs = ['validate', 'children', 'control'];
2527
- var normalAttrs = ['effect', 'deep', 'renderSlots'];
2528
- function attrs() {
2529
- return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2530
- }
2531
-
2532
- function format(type, msg, rule) {
2533
- return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2534
- }
2535
- function err(msg, rule) {
2536
- console.error(format('err', msg, rule));
2537
- }
2538
- function logError(e) {
2539
- err(e.toString());
2540
- console.error(e);
2541
- }
2542
-
2543
- function toCase(str) {
2544
- var to = str.replace(/(-[a-z])/g, function (v) {
2545
- return v.replace('-', '').toLocaleUpperCase();
2546
- });
2547
- return lower(to);
2548
- }
2549
- function lower(str) {
2550
- return str.replace(str[0], str[0].toLowerCase());
2551
- }
2552
-
2553
- var PREFIX = '[[FORM-CREATE-PREFIX-';
2554
- var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2555
- function toJson(obj, space) {
2556
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2557
- if (val && val._isVue === true) return undefined;
2558
-
2559
- if (typeof val !== 'function') {
2560
- return val;
2561
- }
2562
-
2563
- if (val.__json) {
2564
- return val.__json;
2565
- }
2566
-
2567
- if (val.__origin) val = val.__origin;
2568
- if (val.__emit) return undefined;
2569
- return PREFIX + val + SUFFIX;
2570
- }, space);
2571
- }
2279
+ if (val.__origin) val = val.__origin;
2280
+ if (val.__emit) return undefined;
2281
+ return PREFIX + val + SUFFIX;
2282
+ }, space);
2283
+ }
2572
2284
 
2573
2285
  function makeFn(fn) {
2574
2286
  return new Function('return ' + fn)();
@@ -2745,165 +2457,463 @@
2745
2457
  getSlots: function getSlots() {
2746
2458
  var _this = this;
2747
2459
 
2748
- var slots = {};
2749
- Object.keys(slotBag).forEach(function (k) {
2750
- slots[k] = function () {
2751
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2752
- args[_key] = arguments[_key];
2460
+ var slots = {};
2461
+ Object.keys(slotBag).forEach(function (k) {
2462
+ slots[k] = function () {
2463
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2464
+ args[_key] = arguments[_key];
2465
+ }
2466
+
2467
+ return _this.getSlot(k, args);
2468
+ };
2469
+ });
2470
+ return slots;
2471
+ },
2472
+ slotLen: function slotLen(slot) {
2473
+ slot = slotName(slot);
2474
+ return slotBag[slot] ? slotBag[slot].length : 0;
2475
+ },
2476
+ mergeBag: function mergeBag(bag) {
2477
+ var _this2 = this;
2478
+
2479
+ if (!bag) return this;
2480
+ var slots = is.Function(bag.getSlots) ? bag.getSlots() : bag;
2481
+
2482
+ if (Array.isArray(bag) || vue.isVNode(bag)) {
2483
+ this.setSlot(undefined, function () {
2484
+ return bag;
2485
+ });
2486
+ } else {
2487
+ Object.keys(slots).forEach(function (k) {
2488
+ _this2.setSlot(k, slots[k]);
2489
+ });
2490
+ }
2491
+
2492
+ return this;
2493
+ }
2494
+ };
2495
+ }
2496
+ function toProps(rule) {
2497
+ var prop = _objectSpread2({}, rule.props || {});
2498
+
2499
+ Object.keys(rule.on || {}).forEach(function (k) {
2500
+ if (k.indexOf('-') > 0) {
2501
+ k = toCase(k);
2502
+ }
2503
+
2504
+ var name = "on".concat(upper(k));
2505
+
2506
+ if (Array.isArray(prop[name])) {
2507
+ prop[name] = [].concat(_toConsumableArray(prop[name]), [rule.on[k]]);
2508
+ } else if (prop[name]) {
2509
+ prop[name] = [prop[name], rule.on[k]];
2510
+ } else {
2511
+ prop[name] = rule.on[k];
2512
+ }
2513
+ });
2514
+ prop.key = rule.key;
2515
+ prop.ref = rule.ref;
2516
+ prop["class"] = rule["class"];
2517
+ prop.id = rule.id;
2518
+ prop.style = rule.style;
2519
+ if (prop.slot) delete prop.slot;
2520
+ return prop;
2521
+ }
2522
+ function setPrototypeOf(o, proto) {
2523
+ Object.setPrototypeOf(o, proto);
2524
+ return o;
2525
+ }
2526
+
2527
+ var changeType = function changeType(a, b) {
2528
+ if (typeof a === 'string') {
2529
+ return String(b);
2530
+ } else if (typeof a === 'number') {
2531
+ return Number(b);
2532
+ }
2533
+
2534
+ return b;
2535
+ };
2536
+
2537
+ var condition = {
2538
+ '==': function _(a, b) {
2539
+ return JSON.stringify(a) === JSON.stringify(changeType(a, b));
2540
+ },
2541
+ '!=': function _(a, b) {
2542
+ return !condition['=='](a, b);
2543
+ },
2544
+ '>': function _(a, b) {
2545
+ return a > b;
2546
+ },
2547
+ '>=': function _(a, b) {
2548
+ return a >= b;
2549
+ },
2550
+ '<': function _(a, b) {
2551
+ return a < b;
2552
+ },
2553
+ '<=': function _(a, b) {
2554
+ return a <= b;
2555
+ },
2556
+ on: function on(a, b) {
2557
+ return a && a.indexOf && a.indexOf(changeType(a[0], b)) > -1;
2558
+ },
2559
+ notOn: function notOn(a, b) {
2560
+ return !condition.on(a, b);
2561
+ },
2562
+ "in": function _in(a, b) {
2563
+ return b && b.indexOf && b.indexOf(a) > -1;
2564
+ },
2565
+ notIn: function notIn(a, b) {
2566
+ return !condition["in"](a, b);
2567
+ },
2568
+ between: function between(a, b) {
2569
+ return a > b[0] && a < b[1];
2570
+ },
2571
+ notBetween: function notBetween(a, b) {
2572
+ return a < b[0] || a > b[1];
2573
+ },
2574
+ empty: function empty(a) {
2575
+ return is.empty(a);
2576
+ },
2577
+ notEmpty: function notEmpty(a) {
2578
+ return !is.empty(a);
2579
+ },
2580
+ pattern: function pattern(a, b) {
2581
+ return new RegExp(b, 'g').test(a);
2582
+ }
2583
+ };
2584
+ function deepGet(val, split) {
2585
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2586
+ if (val != null) {
2587
+ val = val[k];
2588
+ }
2589
+ });
2590
+ return val;
2591
+ }
2592
+ function extractVar(str) {
2593
+ var regex = /{{\s*(.*?)\s*}}/g;
2594
+ var match;
2595
+ var matches = {};
2596
+
2597
+ while ((match = regex.exec(str)) !== null) {
2598
+ if (match[1]) {
2599
+ matches[match[1]] = true;
2600
+ }
2601
+ }
2602
+
2603
+ return Object.keys(matches);
2604
+ }
2605
+ function convertFieldToConditions(field) {
2606
+ var parts = field.split('.');
2607
+ var conditions = [];
2608
+ var currentCondition = '';
2609
+ parts.forEach(function (part, index) {
2610
+ if (index === 0) {
2611
+ currentCondition = part;
2612
+ } else {
2613
+ currentCondition += '.' + part;
2614
+ }
2615
+
2616
+ conditions.push(currentCondition);
2617
+ });
2618
+ return conditions.join(' && ');
2619
+ }
2620
+
2621
+ var _getGroupInject = function getGroupInject(vm, parent) {
2622
+ if (!vm || vm === parent) {
2623
+ return;
2624
+ }
2625
+
2626
+ if (vm.props.formCreateInject) {
2627
+ return vm.props.formCreateInject;
2628
+ }
2629
+
2630
+ if (vm.parent) {
2631
+ return _getGroupInject(vm.parent, parent);
2632
+ }
2633
+ };
2634
+
2635
+ function $FormCreate(FormCreate, components, directives) {
2636
+ return vue.defineComponent({
2637
+ name: 'FormCreate' + (FormCreate.isMobile ? 'Mobile' : ''),
2638
+ components: components,
2639
+ directives: directives,
2640
+ props: {
2641
+ rule: {
2642
+ type: Array,
2643
+ required: true,
2644
+ "default": function _default() {
2645
+ return [];
2646
+ }
2647
+ },
2648
+ option: {
2649
+ type: Object,
2650
+ "default": function _default() {
2651
+ return {};
2652
+ }
2653
+ },
2654
+ extendOption: Boolean,
2655
+ driver: [String, Object],
2656
+ modelValue: Object,
2657
+ disabled: {
2658
+ type: Boolean,
2659
+ "default": undefined
2660
+ },
2661
+ preview: {
2662
+ type: Boolean,
2663
+ "default": undefined
2664
+ },
2665
+ index: [String, Number],
2666
+ api: Object,
2667
+ locale: [String, Object],
2668
+ name: String,
2669
+ subForm: {
2670
+ type: Boolean,
2671
+ "default": true
2672
+ },
2673
+ inFor: Boolean
2674
+ },
2675
+ 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'],
2676
+ render: function render() {
2677
+ return this.fc.render();
2678
+ },
2679
+ setup: function setup(props) {
2680
+ var vm = vue.getCurrentInstance();
2681
+ vue.provide('parentFC', vm);
2682
+ var parent = vue.inject('parentFC', null);
2683
+ var top = parent;
2684
+
2685
+ if (parent) {
2686
+ while (top.setupState.parent) {
2687
+ top = top.setupState.parent;
2688
+ }
2689
+ } else {
2690
+ top = vm;
2691
+ }
2692
+
2693
+ var _toRefs = vue.toRefs(props),
2694
+ rule = _toRefs.rule,
2695
+ modelValue = _toRefs.modelValue,
2696
+ subForm = _toRefs.subForm,
2697
+ inFor = _toRefs.inFor;
2698
+
2699
+ var data = vue.reactive({
2700
+ ctxInject: {},
2701
+ destroyed: false,
2702
+ isShow: true,
2703
+ unique: 1,
2704
+ renderRule: _toConsumableArray(rule.value || []),
2705
+ updateValue: JSON.stringify(modelValue.value || {})
2706
+ });
2707
+ var fc = new FormCreate(vm);
2708
+ var fapi = fc.api();
2709
+ var isMore = inFor.value;
2710
+
2711
+ var addSubForm = function addSubForm() {
2712
+ if (parent) {
2713
+ var _inject = _getGroupInject(vm, parent);
2714
+
2715
+ if (_inject) {
2716
+ var sub;
2717
+
2718
+ if (isMore) {
2719
+ sub = toArray(_inject.getSubForm());
2720
+ sub.push(fapi);
2721
+ } else {
2722
+ sub = fapi;
2723
+ }
2724
+
2725
+ _inject.subForm(sub);
2726
+ }
2727
+ }
2728
+ };
2729
+
2730
+ var rmSubForm = function rmSubForm() {
2731
+ var inject = _getGroupInject(vm, parent);
2732
+
2733
+ if (inject) {
2734
+ if (isMore) {
2735
+ var sub = toArray(inject.getSubForm());
2736
+ var idx = sub.indexOf(fapi);
2737
+
2738
+ if (idx > -1) {
2739
+ sub.splice(idx, 1);
2740
+ }
2741
+ } else {
2742
+ inject.subForm();
2743
+ }
2744
+ }
2745
+ };
2746
+
2747
+ var styleEl = null;
2748
+ vue.onBeforeMount(function () {
2749
+ vue.watchEffect(function () {
2750
+ var content = '';
2751
+ var globalClass = props.option && props.option.globalClass || {};
2752
+ Object.keys(globalClass).forEach(function (k) {
2753
+ var subCss = '';
2754
+ globalClass[k].style && Object.keys(globalClass[k].style).forEach(function (key) {
2755
+ subCss += toLine(key) + ':' + globalClass[k].style[key] + ';';
2756
+ });
2757
+
2758
+ if (globalClass[k].content) {
2759
+ subCss += globalClass[k].content + ';';
2760
+ }
2761
+
2762
+ if (subCss) {
2763
+ content += ".".concat(k, "{").concat(subCss, "}");
2764
+ }
2765
+ });
2766
+
2767
+ if (props.option && props.option.style) {
2768
+ content += props.option.style;
2769
+ }
2770
+
2771
+ if (!styleEl) {
2772
+ styleEl = document.createElement('style');
2773
+ styleEl.type = 'text/css';
2774
+ document.head.appendChild(styleEl);
2775
+ }
2776
+
2777
+ styleEl.innerHTML = content || '';
2778
+ });
2779
+ });
2780
+ var emit$topForm = debounce(function () {
2781
+ fc.bus.$emit('$loadData.$topForm');
2782
+ }, 100);
2783
+ var emit$scopeForm = debounce(function () {
2784
+ fc.bus.$emit('$loadData.$scopeForm');
2785
+ }, 100);
2786
+ var emit$form = debounce(function () {
2787
+ fc.bus.$emit('$loadData.$form');
2788
+ }, 100);
2789
+
2790
+ var emit$change = function emit$change(field) {
2791
+ fc.bus.$emit('change-$form.' + field);
2792
+ };
2793
+
2794
+ vue.onMounted(function () {
2795
+ if (parent) {
2796
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2797
+ fapi.top.bus.$on('change', emit$change);
2798
+ }
2799
+
2800
+ if (fapi !== fapi.scope) {
2801
+ fapi.scope.bus.$on('$loadData.$scopeForm', emit$scopeForm);
2802
+ }
2803
+
2804
+ fc.mounted();
2805
+ });
2806
+ vue.onBeforeUnmount(function () {
2807
+ if (parent) {
2808
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2809
+ fapi.top.bus.$off('change', emit$change);
2810
+ }
2811
+
2812
+ if (fapi !== fapi.scope) {
2813
+ fapi.scope.bus.$off('$loadData.$scopeForm', emit$scopeForm);
2814
+ }
2815
+
2816
+ styleEl && document.head.removeChild(styleEl);
2817
+ rmSubForm();
2818
+ data.destroyed = true;
2819
+ fc.unmount();
2820
+ });
2821
+ vue.onUpdated(function () {
2822
+ fc.updated();
2823
+ });
2824
+ addSubForm();
2825
+ vue.watch(function () {
2826
+ return props.option;
2827
+ }, function () {
2828
+ fc.initOptions();
2829
+ fapi.refresh();
2830
+ }, {
2831
+ deep: true
2832
+ });
2833
+ vue.watch(function () {
2834
+ return _toConsumableArray(rule.value);
2835
+ }, function (n) {
2836
+ if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2837
+ return data.renderRule.indexOf(v) > -1;
2838
+ })) return;
2839
+ fc.$handle.updateAppendData();
2840
+ fc.$handle.reloadRule(rule.value);
2841
+ vm.setupState.renderRule();
2842
+ });
2843
+ vue.watch(function () {
2844
+ return [props.disabled, props.preview];
2845
+ }, function () {
2846
+ fapi.refresh();
2847
+ });
2848
+ vue.watch(modelValue, function (n) {
2849
+ if (toJson(n || {}) === data.updateValue) return;
2850
+
2851
+ if (fapi.config.forceCoverValue) {
2852
+ fapi.coverValue(n || {});
2853
+ } else {
2854
+ fapi.setValue(n || {});
2855
+ }
2856
+ }, {
2857
+ deep: true,
2858
+ flush: 'post'
2859
+ });
2860
+ vue.watch(function () {
2861
+ return props.index;
2862
+ }, function () {
2863
+ fapi.coverValue({});
2864
+ fc.$handle.updateAppendData();
2865
+ vue.nextTick(function () {
2866
+ vue.nextTick(function () {
2867
+ fapi.clearValidateState();
2868
+ });
2869
+ });
2870
+ }, {
2871
+ flush: 'sync'
2872
+ });
2873
+ return _objectSpread2(_objectSpread2({
2874
+ fc: vue.markRaw(fc),
2875
+ parent: parent ? vue.markRaw(parent) : parent,
2876
+ top: vue.markRaw(top),
2877
+ fapi: vue.markRaw(fapi)
2878
+ }, vue.toRefs(data)), {}, {
2879
+ getGroupInject: function getGroupInject() {
2880
+ return _getGroupInject(vm, parent);
2881
+ },
2882
+ refresh: function refresh() {
2883
+ ++data.unique;
2884
+ },
2885
+ renderRule: function renderRule() {
2886
+ data.renderRule = _toConsumableArray(rule.value || []);
2887
+ },
2888
+ updateValue: function updateValue(value) {
2889
+ if (data.destroyed) return;
2890
+ var json = toJson(value);
2891
+
2892
+ if (data.updateValue === json) {
2893
+ return;
2753
2894
  }
2754
2895
 
2755
- return _this.getSlot(k, args);
2756
- };
2896
+ data.updateValue = json;
2897
+ vm.emit('update:modelValue', value);
2898
+ vue.nextTick(function () {
2899
+ emit$form();
2900
+
2901
+ if (!parent) {
2902
+ emit$topForm();
2903
+ emit$scopeForm();
2904
+ } else if (!subForm.value) {
2905
+ emit$scopeForm();
2906
+ }
2907
+ });
2908
+ }
2757
2909
  });
2758
- return slots;
2759
- },
2760
- slotLen: function slotLen(slot) {
2761
- slot = slotName(slot);
2762
- return slotBag[slot] ? slotBag[slot].length : 0;
2763
2910
  },
2764
- mergeBag: function mergeBag(bag) {
2765
- var _this2 = this;
2766
-
2767
- if (!bag) return this;
2768
- var slots = is.Function(bag.getSlots) ? bag.getSlots() : bag;
2769
-
2770
- if (Array.isArray(bag) || vue.isVNode(bag)) {
2771
- this.setSlot(undefined, function () {
2772
- return bag;
2773
- });
2774
- } else {
2775
- Object.keys(slots).forEach(function (k) {
2776
- _this2.setSlot(k, slots[k]);
2777
- });
2778
- }
2779
-
2780
- return this;
2781
- }
2782
- };
2783
- }
2784
- function toProps(rule) {
2785
- var prop = _objectSpread2({}, rule.props || {});
2786
-
2787
- Object.keys(rule.on || {}).forEach(function (k) {
2788
- if (k.indexOf('-') > 0) {
2789
- k = toCase(k);
2790
- }
2791
-
2792
- var name = "on".concat(upper(k));
2793
-
2794
- if (Array.isArray(prop[name])) {
2795
- prop[name] = [].concat(_toConsumableArray(prop[name]), [rule.on[k]]);
2796
- } else if (prop[name]) {
2797
- prop[name] = [prop[name], rule.on[k]];
2798
- } else {
2799
- prop[name] = rule.on[k];
2800
- }
2801
- });
2802
- prop.key = rule.key;
2803
- prop.ref = rule.ref;
2804
- prop["class"] = rule["class"];
2805
- prop.id = rule.id;
2806
- prop.style = rule.style;
2807
- if (prop.slot) delete prop.slot;
2808
- return prop;
2809
- }
2810
- function setPrototypeOf(o, proto) {
2811
- Object.setPrototypeOf(o, proto);
2812
- return o;
2813
- }
2814
-
2815
- var changeType = function changeType(a, b) {
2816
- if (typeof a === 'string') {
2817
- return String(b);
2818
- } else if (typeof a === 'number') {
2819
- return Number(b);
2820
- }
2821
-
2822
- return b;
2823
- };
2824
-
2825
- var condition = {
2826
- '==': function _(a, b) {
2827
- return JSON.stringify(a) === JSON.stringify(changeType(a, b));
2828
- },
2829
- '!=': function _(a, b) {
2830
- return !condition['=='](a, b);
2831
- },
2832
- '>': function _(a, b) {
2833
- return a > b;
2834
- },
2835
- '>=': function _(a, b) {
2836
- return a >= b;
2837
- },
2838
- '<': function _(a, b) {
2839
- return a < b;
2840
- },
2841
- '<=': function _(a, b) {
2842
- return a <= b;
2843
- },
2844
- on: function on(a, b) {
2845
- return a && a.indexOf && a.indexOf(changeType(a[0], b)) > -1;
2846
- },
2847
- notOn: function notOn(a, b) {
2848
- return !condition.on(a, b);
2849
- },
2850
- "in": function _in(a, b) {
2851
- return b && b.indexOf && b.indexOf(a) > -1;
2852
- },
2853
- notIn: function notIn(a, b) {
2854
- return !condition["in"](a, b);
2855
- },
2856
- between: function between(a, b) {
2857
- return a > b[0] && a < b[1];
2858
- },
2859
- notBetween: function notBetween(a, b) {
2860
- return a < b[0] || a > b[1];
2861
- },
2862
- empty: function empty(a) {
2863
- return is.empty(a);
2864
- },
2865
- notEmpty: function notEmpty(a) {
2866
- return !is.empty(a);
2867
- },
2868
- pattern: function pattern(a, b) {
2869
- return new RegExp(b, 'g').test(a);
2870
- }
2871
- };
2872
- function deepGet(val, split) {
2873
- (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2874
- if (val != null) {
2875
- val = val[k];
2876
- }
2877
- });
2878
- return val;
2879
- }
2880
- function extractVar(str) {
2881
- var regex = /{{\s*(.*?)\s*}}/g;
2882
- var match;
2883
- var matches = {};
2884
-
2885
- while ((match = regex.exec(str)) !== null) {
2886
- if (match[1]) {
2887
- matches[match[1]] = true;
2888
- }
2889
- }
2890
-
2891
- return Object.keys(matches);
2892
- }
2893
- function convertFieldToConditions(field) {
2894
- var parts = field.split('.');
2895
- var conditions = [];
2896
- var currentCondition = '';
2897
- parts.forEach(function (part, index) {
2898
- if (index === 0) {
2899
- currentCondition = part;
2900
- } else {
2901
- currentCondition += '.' + part;
2911
+ created: function created() {
2912
+ var vm = vue.getCurrentInstance();
2913
+ vm.emit('update:api', vm.setupState.fapi);
2914
+ vm.setupState.fc.init();
2902
2915
  }
2903
-
2904
- conditions.push(currentCondition);
2905
2916
  });
2906
- return conditions.join(' && ');
2907
2917
  }
2908
2918
 
2909
2919
  function baseRule() {
@@ -3111,8 +3121,15 @@
3111
3121
  }
3112
3122
 
3113
3123
  function props(fields, key, val) {
3114
- tidyFields(fields).forEach(function (field) {
3115
- h.getCtxs(field).forEach(function (ctx) {
3124
+ if (is.Undef(fields)) {
3125
+ fields = Object.keys(_objectSpread2(_objectSpread2({}, h.fieldCtx), h.nameCtx));
3126
+ } else if (!Array.isArray(fields)) {
3127
+ fields = [fields];
3128
+ }
3129
+
3130
+ fields.forEach(function (field) {
3131
+ var ctxs = h.fieldCtx[field] || h.nameCtx[field];
3132
+ ctxs && ctxs.forEach(function (ctx) {
3116
3133
  $set(ctx.rule, key, val);
3117
3134
  h.$render.clearCache(ctx);
3118
3135
  });
@@ -3130,6 +3147,14 @@
3130
3147
  }
3131
3148
 
3132
3149
  var api = {
3150
+ get isScope() {
3151
+ return h.vm.props.subForm === false;
3152
+ },
3153
+
3154
+ get isPreview() {
3155
+ return h.preview;
3156
+ },
3157
+
3133
3158
  get config() {
3134
3159
  return h.options;
3135
3160
  },
@@ -3166,6 +3191,20 @@
3166
3191
  return api;
3167
3192
  },
3168
3193
 
3194
+ get scope() {
3195
+ var parent = h.vm;
3196
+
3197
+ while (parent && parent.setupState.fapi) {
3198
+ if (!parent.props.subForm) {
3199
+ return parent.setupState.fapi;
3200
+ } else {
3201
+ parent = parent.setupState.parent;
3202
+ }
3203
+ }
3204
+
3205
+ return api.top;
3206
+ },
3207
+
3169
3208
  get children() {
3170
3209
  return allSubForm();
3171
3210
  },
@@ -3196,10 +3235,10 @@
3196
3235
  },
3197
3236
 
3198
3237
  formData: function formData(fields) {
3199
- if (fields == null) {
3238
+ if (fields == null || typeof fields === 'boolean') {
3200
3239
  var data = {};
3201
3240
  Object.keys(h.form).forEach(function (k) {
3202
- if (h.ignoreFields.indexOf(k) === -1) {
3241
+ if (fields === true || h.ignoreFields.indexOf(k) === -1) {
3203
3242
  data[k] = copy(h.form[k]);
3204
3243
  }
3205
3244
  });
@@ -3750,7 +3789,11 @@
3750
3789
  }, opt.wait == null ? 1000 : opt.wait);
3751
3790
  },
3752
3791
  getData: function getData(id, def) {
3753
- return h.fc.getLoadData(id, def);
3792
+ if (h.fc.get) {
3793
+ return h.fc.get(id, def);
3794
+ } else {
3795
+ return h.fc.getLoadData(id, def);
3796
+ }
3754
3797
  },
3755
3798
  watchData: function watchData(fn) {
3756
3799
  return h.fc.watchLoadData(function (get, change) {
@@ -5308,7 +5351,7 @@
5308
5351
  hideLst[valid ? 'push' : 'unshift'](function () {
5309
5352
  if (method === 'disabled' || method === 'enabled') {
5310
5353
  _this7.api.disabled(!valid, rule);
5311
- } else if (method === 'display') {
5354
+ } else if (method === 'display' || method === 'show') {
5312
5355
  _this7.api.display(valid, rule);
5313
5356
  } else if (method === 'required') {
5314
5357
  rule.forEach(function (item) {
@@ -5318,6 +5361,8 @@
5318
5361
  if (!valid) {
5319
5362
  _this7.api.clearValidateState(rule);
5320
5363
  }
5364
+ } else if (method === 'if') {
5365
+ _this7.api.hidden(!valid, rule);
5321
5366
  } else {
5322
5367
  _this7.api.hidden(!valid, rule);
5323
5368
  }
@@ -5621,7 +5666,7 @@
5621
5666
  return JSON.stringify(this.getFormData(ctx), strFn) !== JSON.stringify(value, strFn);
5622
5667
  },
5623
5668
  isQuote: function isQuote(ctx, value) {
5624
- return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5669
+ return (value instanceof Function || is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5625
5670
  },
5626
5671
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5627
5672
  var _this5 = this;
@@ -5908,8 +5953,10 @@
5908
5953
  var match = temp.message.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
5909
5954
 
5910
5955
  if (match) {
5956
+ var _ctx$refRule, _ctx$refRule$__$title;
5957
+
5911
5958
  temp.message = _this.api.t(match[1], {
5912
- title: ctx.refRule.__$title.value
5959
+ 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
5913
5960
  });
5914
5961
  }
5915
5962
  }
@@ -6035,7 +6082,7 @@
6035
6082
  field = JSON.stringify(_this2.fc.getLoadData(one.variable) || '');
6036
6083
  } else if (one.field) {
6037
6084
  field = convertFieldToConditions(one.field || '');
6038
- } else {
6085
+ } else if (!one.mode) {
6039
6086
  return {
6040
6087
  v: true
6041
6088
  };
@@ -6057,7 +6104,7 @@
6057
6104
  });
6058
6105
  } else {
6059
6106
  flag = invoke(function () {
6060
- return new Function('$condition', '$val', '$form', '$group', '$rule', "with($form){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, group ? _this2.subRuleData[group.id] || {} : {}, ctx.rule);
6107
+ 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);
6061
6108
  });
6062
6109
  }
6063
6110
 
@@ -6106,6 +6153,8 @@
6106
6153
  return invoke(fn, undefined);
6107
6154
  },
6108
6155
  computeValue: function computeValue(str, ctx, group) {
6156
+ var _this3 = this;
6157
+
6109
6158
  var that = this;
6110
6159
  var formulas = Object.keys(this.fc.formulas).reduce(function (obj, k) {
6111
6160
  obj[k] = function () {
@@ -6125,34 +6174,36 @@
6125
6174
 
6126
6175
  return obj;
6127
6176
  }, {});
6128
- return new Function('$formulas', '$form', '$group', '$rule', '$api', "with($form){with(this){with($group){with($formulas){ return ".concat(str, " }}}}")).call(this.api.form, formulas, this.api.top.form, group ? this.subRuleData[group.id] || {} : {}, ctx.rule, this.api);
6177
+ return invoke(function () {
6178
+ return new Function('$formulas', '$form', '$scope', '$group', '$rule', '$api', "with($form){with($scope){with(this){with($group){with($formulas){ return ".concat(str, " }}}}}")).call(_this3.api.form, formulas, _this3.api.top.form, _this3.api.top === _this3.api.scope ? {} : _this3.api.scope.form, group ? _this3.subRuleData[group.id] || {} : {}, ctx.rule, _this3.api);
6179
+ }, undefined);
6129
6180
  },
6130
6181
  updateChildren: function updateChildren(ctx, n, o) {
6131
- var _this3 = this;
6182
+ var _this4 = this;
6132
6183
 
6133
6184
  this.deferSyncValue(function () {
6134
6185
  o && o.forEach(function (child) {
6135
6186
  if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx) {
6136
- _this3.rmCtx(child.__fc__);
6187
+ _this4.rmCtx(child.__fc__);
6137
6188
  }
6138
6189
  });
6139
6190
 
6140
6191
  if (is.trueArray(n)) {
6141
- _this3.loadChildren(n, ctx);
6192
+ _this4.loadChildren(n, ctx);
6142
6193
 
6143
- _this3.bus.$emit('update', _this3.api);
6194
+ _this4.bus.$emit('update', _this4.api);
6144
6195
  }
6145
6196
  });
6146
6197
  },
6147
6198
  rmSub: function rmSub(sub) {
6148
- var _this4 = this;
6199
+ var _this5 = this;
6149
6200
 
6150
6201
  is.trueArray(sub) && sub.forEach(function (r) {
6151
- r && r.__fc__ && _this4.rmCtx(r.__fc__);
6202
+ r && r.__fc__ && _this5.rmCtx(r.__fc__);
6152
6203
  });
6153
6204
  },
6154
6205
  rmCtx: function rmCtx(ctx) {
6155
- var _this5 = this;
6206
+ var _this6 = this;
6156
6207
 
6157
6208
  if (ctx.deleted) return;
6158
6209
  var id = ctx.id,
@@ -6181,19 +6232,19 @@
6181
6232
  }
6182
6233
 
6183
6234
  this.deferSyncValue(function () {
6184
- if (!_this5.reloading) {
6235
+ if (!_this6.reloading) {
6185
6236
  if (ctx.parser.loadChildren !== false) {
6186
6237
  var children = ctx.getPending('children', ctx.rule.children);
6187
6238
 
6188
6239
  if (is.trueArray(children)) {
6189
6240
  children.forEach(function (h) {
6190
- return h.__fc__ && _this5.rmCtx(h.__fc__);
6241
+ return h.__fc__ && _this6.rmCtx(h.__fc__);
6191
6242
  });
6192
6243
  }
6193
6244
  }
6194
6245
 
6195
- if (ctx.root === _this5.rules) {
6196
- _this5.vm.setupState.renderRule();
6246
+ if (ctx.root === _this6.rules) {
6247
+ _this6.vm.setupState.renderRule();
6197
6248
  }
6198
6249
  }
6199
6250
  }, input);
@@ -6266,8 +6317,11 @@
6266
6317
  hook.forEach(function (fn) {
6267
6318
  invoke(function () {
6268
6319
  return fn(_objectSpread2(_objectSpread2({}, args || {}), {}, {
6320
+ self: ctx.rule,
6269
6321
  rule: ctx.rule,
6270
- api: _this2.api
6322
+ $f: _this2.api,
6323
+ api: _this2.api,
6324
+ option: _this2.vm.props.option
6271
6325
  }));
6272
6326
  });
6273
6327
  });
@@ -6452,7 +6506,13 @@
6452
6506
  return fc.bus;
6453
6507
  },
6454
6508
  preview: function preview() {
6455
- return fc.vm.props.preview != null ? fc.vm.props.preview : fc.options.value.preview || false;
6509
+ if (fc.vm.props.preview != null) {
6510
+ return fc.vm.props.preview;
6511
+ } else if (fc.vm.setupState.parent && fc.vm.setupState.parent.props.preview != null) {
6512
+ return fc.vm.setupState.parent.props.preview;
6513
+ }
6514
+
6515
+ return fc.options.value.preview || false;
6456
6516
  }
6457
6517
  });
6458
6518
  extend(this, {
@@ -6521,10 +6581,10 @@
6521
6581
  isBreakWatch: function isBreakWatch() {
6522
6582
  return this.loading || this.noWatchFn || this.reloading;
6523
6583
  },
6524
- beforeFetch: function beforeFetch(opt) {
6584
+ globalBeforeFetch: function globalBeforeFetch(opt) {
6525
6585
  var _this2 = this;
6526
6586
 
6527
- return new Promise(function (resolve) {
6587
+ return new Promise(function (resolve, reject) {
6528
6588
  var source = _this2.options.beforeFetch && invoke(function () {
6529
6589
  return _this2.options.beforeFetch(opt, {
6530
6590
  api: _this2.api
@@ -6532,11 +6592,32 @@
6532
6592
  });
6533
6593
 
6534
6594
  if (source && is.Function(source.then)) {
6535
- source.then(resolve);
6595
+ source.then(resolve)["catch"](reject);
6536
6596
  } else {
6537
6597
  resolve();
6538
6598
  }
6539
6599
  });
6600
+ },
6601
+ beforeFetch: function beforeFetch(opt) {
6602
+ var _this3 = this;
6603
+
6604
+ return new Promise(function (resolve, reject) {
6605
+ var res = opt && opt.beforeFetch && invoke(function () {
6606
+ return opt.beforeFetch(opt, {
6607
+ api: _this3.api
6608
+ });
6609
+ });
6610
+
6611
+ if (res && is.Function(res.then)) {
6612
+ res.then(resolve)["catch"](reject);
6613
+ } else if (res === false) {
6614
+ reject();
6615
+ } else {
6616
+ resolve();
6617
+ }
6618
+ }).then(function () {
6619
+ return _this3.globalBeforeFetch(opt);
6620
+ })["catch"](function () {});
6540
6621
  }
6541
6622
  });
6542
6623
  useInject(Handler);
@@ -6739,56 +6820,60 @@
6739
6820
  name: 'loadData',
6740
6821
  _fn: [],
6741
6822
  loaded: function loaded(inject, rule, api) {
6742
- this.deleted(inject);
6743
- var attrs = toArray(inject.getValue());
6744
- var unwatchs = [];
6745
- attrs.forEach(function (attr) {
6746
- if (attr && (attr.attr || attr.template)) {
6747
- var fn = function fn(get) {
6748
- var value;
6823
+ var _this = this;
6749
6824
 
6750
- if (attr.template) {
6751
- value = fc.$handle.loadStrVar(attr.template, get);
6752
- } else if (attr.handler && is.Function(attr.handler)) {
6753
- value = attr.handler(get, rule, api);
6754
- } else {
6755
- value = get(attr.attr, attr["default"]);
6756
- }
6825
+ this.deleted(inject);
6826
+ vue.nextTick(function () {
6827
+ var attrs = toArray(inject.getValue());
6828
+ var unwatchs = [];
6829
+ attrs.forEach(function (attr) {
6830
+ if (attr && (attr.attr || attr.template)) {
6831
+ var fn = function fn(get) {
6832
+ var value;
6833
+
6834
+ if (attr.template) {
6835
+ value = fc.$handle.loadStrVar(attr.template, get);
6836
+ } else if (attr.handler && is.Function(attr.handler)) {
6837
+ value = attr.handler(get, rule, api);
6838
+ } else {
6839
+ value = get(attr.attr, attr["default"]);
6840
+ }
6757
6841
 
6758
- if (attr.copy !== false) {
6759
- value = deepCopy(value);
6760
- }
6842
+ if (attr.copy !== false) {
6843
+ value = deepCopy(value);
6844
+ }
6761
6845
 
6762
- var _rule = attr.modify ? rule : inject.getProp();
6846
+ var _rule = attr.modify ? rule : inject.getProp();
6763
6847
 
6764
- if (attr.to === 'child') {
6765
- if (_rule.children) {
6766
- _rule.children[0] = value;
6848
+ if (attr.to === 'child') {
6849
+ if (_rule.children) {
6850
+ _rule.children[0] = value;
6851
+ } else {
6852
+ _rule.children = [value];
6853
+ }
6767
6854
  } else {
6768
- _rule.children = [value];
6855
+ deepSet(_rule, attr.to || 'options', value);
6769
6856
  }
6770
- } else {
6771
- deepSet(_rule, attr.to || 'options', value);
6772
- }
6773
6857
 
6774
- api.sync(rule);
6775
- };
6858
+ api.sync(rule);
6859
+ };
6776
6860
 
6777
- var callback = function callback(get) {
6778
- return fn(get);
6779
- };
6861
+ var callback = function callback(get) {
6862
+ return fn(get);
6863
+ };
6780
6864
 
6781
- var unwatch = fc.watchLoadData(callback);
6782
- fn = debounce(fn, attr.wait || 300);
6865
+ var unwatch = fc.watchLoadData(callback);
6866
+ fn = debounce(fn, attr.wait || 300);
6783
6867
 
6784
- if (attr.watch !== false) {
6785
- unwatchs.push(unwatch);
6786
- } else {
6787
- unwatch();
6868
+ if (attr.watch !== false) {
6869
+ unwatchs.push(unwatch);
6870
+ } else {
6871
+ unwatch();
6872
+ }
6788
6873
  }
6789
- }
6874
+ });
6875
+ _this._fn[inject.id] = unwatchs;
6790
6876
  });
6791
- this._fn[inject.id] = unwatchs;
6792
6877
  },
6793
6878
  deleted: function deleted(inject) {
6794
6879
  if (this._fn[inject.id]) {
@@ -6802,7 +6887,7 @@
6802
6887
  inject.clearProp();
6803
6888
  }
6804
6889
  };
6805
- loadData.watch = loadData.mounted;
6890
+ loadData.watch = loadData.loaded;
6806
6891
  return loadData;
6807
6892
  };
6808
6893
 
@@ -7015,7 +7100,6 @@
7015
7100
  }
7016
7101
 
7017
7102
  set(fn(body, rule, api));
7018
- api.sync(rule);
7019
7103
  },
7020
7104
  onError: function onError(e) {
7021
7105
  set(undefined);
@@ -7494,6 +7578,7 @@
7494
7578
  components: components,
7495
7579
  directives: directives
7496
7580
  },
7581
+ get: null,
7497
7582
  drivers: drivers,
7498
7583
  renderDriver: null,
7499
7584
  refreshData: refreshData,
@@ -7731,7 +7816,7 @@
7731
7816
  }
7732
7817
  });
7733
7818
  this.unwatch.push(unwatch);
7734
- return val;
7819
+ return deepGet(val, split);
7735
7820
  }
7736
7821
  }
7737
7822
  },
@@ -7751,9 +7836,11 @@
7751
7836
  var key = split.shift();
7752
7837
 
7753
7838
  if (key === '$topForm') {
7754
- val = this.$handle.api.top.formData();
7839
+ val = this.$handle.api.top.formData(true);
7840
+ } else if (key === '$scopeForm') {
7841
+ val = this.$handle.api.scope.formData(true);
7755
7842
  } else if (key === '$form') {
7756
- val = this.$handle.api.formData();
7843
+ val = this.$handle.api.formData(true);
7757
7844
  } else if (key === '$options') {
7758
7845
  val = this.options.value;
7759
7846
  } else if (key === '$globalData') {
@@ -7794,9 +7881,17 @@
7794
7881
  var unwatch = {};
7795
7882
 
7796
7883
  var run = function run(flag) {
7884
+ if (!_this6.get) {
7885
+ _this6.get = get;
7886
+ }
7887
+
7797
7888
  invoke(function () {
7798
7889
  fn(get, flag);
7799
7890
  });
7891
+
7892
+ if (_this6.get === get) {
7893
+ _this6.get = undefined;
7894
+ }
7800
7895
  };
7801
7896
 
7802
7897
  var get = function get(id, def) {
@@ -8441,7 +8536,9 @@
8441
8536
  },
8442
8537
  makeInfo: function makeInfo(rule, uni, ctx) {
8443
8538
  var _ctx$refRule,
8539
+ _ctx$refRule$__$title,
8444
8540
  _ctx$refRule2,
8541
+ _ctx$refRule2$__$titl,
8445
8542
  _this5 = this;
8446
8543
 
8447
8544
  var titleProp = _objectSpread2({}, rule.title);
@@ -8452,10 +8549,10 @@
8452
8549
  var form = this.options.form;
8453
8550
  var titleSlot = this.getSlot('title');
8454
8551
  var children = [titleSlot ? titleSlot({
8455
- title: (_ctx$refRule = ctx.refRule) === null || _ctx$refRule === void 0 ? void 0 : _ctx$refRule.__$title.value,
8552
+ 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,
8456
8553
  rule: ctx.rule,
8457
8554
  options: this.options
8458
- }) : ((_ctx$refRule2 = ctx.refRule) === null || _ctx$refRule2 === void 0 ? void 0 : _ctx$refRule2.__$title.value) + (form.labelSuffix || form['label-suffix'] || '')];
8555
+ }) : ((_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) + (form.labelSuffix || form['label-suffix'] || '')];
8459
8556
 
8460
8557
  if (!isFalse(infoProp.show) && (infoProp.info || infoProp["native"]) && !isFalse(infoProp.icon)) {
8461
8558
  var prop = {
@@ -8471,9 +8568,9 @@
8471
8568
  var field = 'content';
8472
8569
 
8473
8570
  if (infoProp.info && !hasProperty(prop.props, field)) {
8474
- var _ctx$refRule3;
8571
+ var _ctx$refRule3, _ctx$refRule3$__$info;
8475
8572
 
8476
- prop.props[field] = (_ctx$refRule3 = ctx.refRule) === null || _ctx$refRule3 === void 0 ? void 0 : _ctx$refRule3.__$info.value;
8573
+ prop.props[field] = (_ctx$refRule3 = ctx.refRule) === null || _ctx$refRule3 === void 0 ? void 0 : (_ctx$refRule3$__$info = _ctx$refRule3.__$info) === null || _ctx$refRule3$__$info === void 0 ? void 0 : _ctx$refRule3$__$info.value;
8477
8574
  }
8478
8575
 
8479
8576
  children[infoProp.align !== 'left' ? 'unshift' : 'push'](this.$r(mergeProps([infoProp, prop]), _defineProperty({}, titleProp.slot || (isTip ? 'default' : 'reference'), function () {
@@ -8714,7 +8811,9 @@
8714
8811
  return new Promise(function (resolve, reject) {
8715
8812
  var forms = api.children;
8716
8813
  var all = [h.$manager.validate()];
8717
- forms.forEach(function (v) {
8814
+ forms.filter(function (v) {
8815
+ return !v.isScope;
8816
+ }).forEach(function (v) {
8718
8817
  all.push(v.validate());
8719
8818
  });
8720
8819
  Promise.all(all).then(function () {
@@ -8735,7 +8834,9 @@
8735
8834
  if (!ctx) return;
8736
8835
  var sub = h.subForm[ctx.id];
8737
8836
  var all = [h.$manager.validateField(ctx.id)];
8738
- toArray(sub).forEach(function (v) {
8837
+ toArray(sub).filter(function (v) {
8838
+ return !v.isScope;
8839
+ }).forEach(function (v) {
8739
8840
  all.push(v.validate());
8740
8841
  });
8741
8842
  Promise.all(all).then(function () {
@@ -8838,7 +8939,8 @@
8838
8939
  },
8839
8940
  submit: function submit(successFn, failFn) {
8840
8941
  return new Promise(function (resolve, reject) {
8841
- api.validate().then(function () {
8942
+ var promise = h.options.validateOnSubmit === false ? Promise.resolve() : api.validate();
8943
+ promise.then(function () {
8842
8944
  var formData = api.formData();
8843
8945
  is.Function(successFn) && invoke(function () {
8844
8946
  return successFn(formData, api);
@@ -8872,6 +8974,8 @@
8872
8974
  inject.clearProp();
8873
8975
  api.clearValidateState([rule.field]);
8874
8976
  } else {
8977
+ var _rule$__fc__$refRule$;
8978
+
8875
8979
  var validate = _objectSpread2({
8876
8980
  required: true,
8877
8981
  validator: function validator(_, v, call) {
@@ -8879,7 +8983,7 @@
8879
8983
  }
8880
8984
  }, val);
8881
8985
 
8882
- var title = rule.__fc__.refRule.__$title.value;
8986
+ var title = (_rule$__fc__$refRule$ = rule.__fc__.refRule.__$title) === null || _rule$__fc__$refRule$ === void 0 ? void 0 : _rule$__fc__$refRule$.value;
8883
8987
 
8884
8988
  if (!validate.message) {
8885
8989
  validate.message = api.t('required', {
@@ -8952,7 +9056,7 @@
8952
9056
  function elmFormCreate() {
8953
9057
  return FormCreateFactory({
8954
9058
  ui: 'element-ui',
8955
- version: '3.2.19',
9059
+ version: '3.2.21',
8956
9060
  manager: manager,
8957
9061
  extendApi: extendApi,
8958
9062
  install: install,