@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,10 +1,10 @@
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.
6
6
  */
7
- import { defineComponent, toRef, ref, watch, computed, createVNode, resolveComponent, mergeProps as mergeProps$1, openBlock, createElementBlock, createElementVNode, nextTick, markRaw, reactive, getCurrentInstance, provide, inject, toRefs, onBeforeMount, watchEffect, onMounted, onBeforeUnmount, onUpdated, isVNode, withDirectives, resolveDirective, createApp, h } from 'vue';
7
+ import { defineComponent, toRef, ref, watch, computed, createVNode, resolveComponent, mergeProps as mergeProps$1, openBlock, createElementBlock, createElementVNode, nextTick, markRaw, reactive, isVNode, getCurrentInstance, provide, inject, toRefs, onBeforeMount, watchEffect, onMounted, onBeforeUnmount, onUpdated, withDirectives, resolveDirective, createApp, h } from 'vue';
8
8
 
9
9
  function ownKeys(object, enumerableOnly) {
10
10
  var keys = Object.keys(object);
@@ -2161,410 +2161,122 @@ function upper(str) {
2161
2161
  return str.replace(str[0], str[0].toLocaleUpperCase());
2162
2162
  }
2163
2163
 
2164
- var _getGroupInject = function getGroupInject(vm, parent) {
2165
- if (!vm || vm === parent) {
2166
- return;
2167
- }
2168
-
2169
- if (vm.props.formCreateInject) {
2170
- return vm.props.formCreateInject;
2171
- }
2172
-
2173
- if (vm.parent) {
2174
- return _getGroupInject(vm.parent, parent);
2175
- }
2176
- };
2164
+ var normalMerge = ['props'];
2165
+ var toArrayMerge = ['class', 'style', 'directives'];
2166
+ var functionalMerge = ['on', 'hook'];
2177
2167
 
2178
- function $FormCreate(FormCreate, components, directives) {
2179
- return defineComponent({
2180
- name: 'FormCreate' + (FormCreate.isMobile ? 'Mobile' : ''),
2181
- components: components,
2182
- directives: directives,
2183
- props: {
2184
- rule: {
2185
- type: Array,
2186
- required: true,
2187
- "default": function _default() {
2188
- return [];
2189
- }
2190
- },
2191
- option: {
2192
- type: Object,
2193
- "default": function _default() {
2194
- return {};
2195
- }
2196
- },
2197
- extendOption: Boolean,
2198
- driver: [String, Object],
2199
- modelValue: Object,
2200
- disabled: {
2201
- type: Boolean,
2202
- "default": undefined
2203
- },
2204
- preview: {
2205
- type: Boolean,
2206
- "default": undefined
2207
- },
2208
- index: [String, Number],
2209
- api: Object,
2210
- locale: [String, Object],
2211
- name: String,
2212
- subForm: {
2213
- type: Boolean,
2214
- "default": true
2215
- },
2216
- inFor: Boolean
2217
- },
2218
- 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'],
2219
- render: function render() {
2220
- return this.fc.render();
2221
- },
2222
- setup: function setup(props) {
2223
- var vm = getCurrentInstance();
2224
- provide('parentFC', vm);
2225
- var parent = inject('parentFC', null);
2226
- var top = parent;
2168
+ var mergeProps = function mergeProps(objects) {
2169
+ var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2170
+ var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2227
2171
 
2228
- if (parent) {
2229
- while (top.setupState.parent) {
2230
- top = top.setupState.parent;
2231
- }
2232
- } else {
2233
- top = vm;
2234
- }
2172
+ var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2235
2173
 
2236
- var _toRefs = toRefs(props),
2237
- rule = _toRefs.rule,
2238
- modelValue = _toRefs.modelValue,
2239
- subForm = _toRefs.subForm,
2240
- inFor = _toRefs.inFor;
2174
+ var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2241
2175
 
2242
- var data = reactive({
2243
- ctxInject: {},
2244
- destroyed: false,
2245
- isShow: true,
2246
- unique: 1,
2247
- renderRule: _toConsumableArray(rule.value || []),
2248
- updateValue: JSON.stringify(modelValue.value || {})
2249
- });
2250
- var fc = new FormCreate(vm);
2251
- var fapi = fc.api();
2252
- var isMore = inFor.value;
2176
+ var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2253
2177
 
2254
- var addSubForm = function addSubForm() {
2255
- if (parent) {
2256
- var _inject = _getGroupInject(vm, parent);
2178
+ var propsMerge = opt['props'] || [];
2179
+ return objects.reduce(function (a, b) {
2180
+ for (var key in b) {
2181
+ if (a[key]) {
2182
+ if (propsMerge.indexOf(key) > -1) {
2183
+ a[key] = mergeProps([b[key]], a[key]);
2184
+ } else if (_normalMerge.indexOf(key) > -1) {
2185
+ a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2186
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2187
+ var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2188
+ var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2189
+ a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2190
+ } else if (_functionalMerge.indexOf(key) > -1) {
2191
+ for (var event in b[key]) {
2192
+ if (a[key][event]) {
2193
+ var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2257
2194
 
2258
- if (_inject) {
2259
- var sub;
2195
+ var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2260
2196
 
2261
- if (isMore) {
2262
- sub = toArray(_inject.getSubForm());
2263
- sub.push(fapi);
2197
+ a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2264
2198
  } else {
2265
- sub = fapi;
2199
+ a[key][event] = b[key][event];
2266
2200
  }
2267
-
2268
- _inject.subForm(sub);
2269
2201
  }
2270
- }
2271
- };
2272
-
2273
- var rmSubForm = function rmSubForm() {
2274
- var inject = _getGroupInject(vm, parent);
2275
-
2276
- if (inject) {
2277
- if (isMore) {
2278
- var sub = toArray(inject.getSubForm());
2279
- var idx = sub.indexOf(fapi);
2280
-
2281
- if (idx > -1) {
2282
- sub.splice(idx, 1);
2202
+ } else if (key === 'hook') {
2203
+ for (var hook in b[key]) {
2204
+ if (a[key][hook]) {
2205
+ a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2206
+ } else {
2207
+ a[key][hook] = b[key][hook];
2283
2208
  }
2284
- } else {
2285
- inject.subForm();
2286
2209
  }
2210
+ } else {
2211
+ a[key] = b[key];
2287
2212
  }
2288
- };
2213
+ } else {
2214
+ if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2215
+ a[key] = _objectSpread2({}, b[key]);
2216
+ } else if (_toArrayMerge.indexOf(key) > -1) {
2217
+ a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2218
+ } else a[key] = b[key];
2219
+ }
2220
+ }
2289
2221
 
2290
- var styleEl = null;
2291
- onBeforeMount(function () {
2292
- watchEffect(function () {
2293
- var content = '';
2294
- var globalClass = props.option && props.option.globalClass || {};
2295
- Object.keys(globalClass).forEach(function (k) {
2296
- var subCss = '';
2297
- globalClass[k].style && Object.keys(globalClass[k].style).forEach(function (key) {
2298
- subCss += toLine(key) + ':' + globalClass[k].style[key] + ';';
2299
- });
2222
+ return a;
2223
+ }, initial);
2224
+ };
2300
2225
 
2301
- if (globalClass[k].content) {
2302
- subCss += globalClass[k].content + ';';
2303
- }
2226
+ var mergeFn = function mergeFn(fn1, fn2) {
2227
+ return function () {
2228
+ fn1 && fn1.apply(this, arguments);
2229
+ fn2 && fn2.apply(this, arguments);
2230
+ };
2231
+ };
2304
2232
 
2305
- if (subCss) {
2306
- content += ".".concat(k, "{").concat(subCss, "}");
2307
- }
2308
- });
2233
+ 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'];
2234
+ var arrayAttrs = ['validate', 'children', 'control'];
2235
+ var normalAttrs = ['effect', 'deep', 'renderSlots'];
2236
+ function attrs() {
2237
+ return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2238
+ }
2309
2239
 
2310
- if (props.option && props.option.style) {
2311
- content += props.option.style;
2312
- }
2240
+ function format(type, msg, rule) {
2241
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2242
+ }
2243
+ function err(msg, rule) {
2244
+ console.error(format('err', msg, rule));
2245
+ }
2246
+ function logError(e) {
2247
+ err(e.toString());
2248
+ console.error(e);
2249
+ }
2313
2250
 
2314
- if (!styleEl) {
2315
- styleEl = document.createElement('style');
2316
- styleEl.type = 'text/css';
2317
- document.head.appendChild(styleEl);
2318
- }
2251
+ function toCase(str) {
2252
+ var to = str.replace(/(-[a-z])/g, function (v) {
2253
+ return v.replace('-', '').toLocaleUpperCase();
2254
+ });
2255
+ return lower(to);
2256
+ }
2257
+ function lower(str) {
2258
+ return str.replace(str[0], str[0].toLowerCase());
2259
+ }
2319
2260
 
2320
- styleEl.innerHTML = content || '';
2321
- });
2322
- });
2323
- var emit$topForm = debounce(function () {
2324
- fc.bus.$emit('$loadData.$topForm');
2325
- }, 100);
2326
- var emit$form = debounce(function () {
2327
- fc.bus.$emit('$loadData.$form');
2328
- }, 100);
2261
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2262
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2263
+ function toJson(obj, space) {
2264
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2265
+ if (val && val._isVue === true) return undefined;
2329
2266
 
2330
- var emit$change = function emit$change(field) {
2331
- fc.bus.$emit('change-$form.' + field);
2332
- };
2267
+ if (typeof val !== 'function') {
2268
+ return val;
2269
+ }
2333
2270
 
2334
- onMounted(function () {
2335
- if (parent) {
2336
- fapi.top.bus.$on('$loadData.$form', emit$topForm);
2337
- fapi.top.bus.$on('change', emit$change);
2338
- }
2271
+ if (val.__json) {
2272
+ return val.__json;
2273
+ }
2339
2274
 
2340
- fc.mounted();
2341
- });
2342
- onBeforeUnmount(function () {
2343
- if (parent) {
2344
- fapi.top.bus.$off('$loadData.$form', emit$topForm);
2345
- fapi.top.bus.$off('change', emit$change);
2346
- }
2347
-
2348
- styleEl && document.head.removeChild(styleEl);
2349
- rmSubForm();
2350
- data.destroyed = true;
2351
- fc.unmount();
2352
- });
2353
- onUpdated(function () {
2354
- fc.updated();
2355
- });
2356
- watch(subForm, function (n) {
2357
- n ? addSubForm() : rmSubForm();
2358
- }, {
2359
- immediate: true
2360
- });
2361
- watch(function () {
2362
- return _toConsumableArray(rule.value);
2363
- }, function (n) {
2364
- if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2365
- return data.renderRule.indexOf(v) > -1;
2366
- })) return;
2367
- fc.$handle.updateAppendData();
2368
- fc.$handle.reloadRule(rule.value);
2369
- vm.setupState.renderRule();
2370
- });
2371
- watch(function () {
2372
- return props.option;
2373
- }, function () {
2374
- fc.initOptions();
2375
- fapi.refresh();
2376
- }, {
2377
- deep: true
2378
- });
2379
- watch(function () {
2380
- return [props.disabled, props.preview];
2381
- }, function () {
2382
- fapi.refresh();
2383
- });
2384
- watch(modelValue, function (n) {
2385
- if (JSON.stringify(n || {}) === data.updateValue) return;
2386
-
2387
- if (fapi.config.forceCoverValue) {
2388
- fapi.coverValue(n || {});
2389
- } else {
2390
- fapi.setValue(n || {});
2391
- }
2392
- }, {
2393
- deep: true,
2394
- flush: 'post'
2395
- });
2396
- watch(function () {
2397
- return props.index;
2398
- }, function () {
2399
- fapi.coverValue({});
2400
- fc.$handle.updateAppendData();
2401
- nextTick(function () {
2402
- nextTick(function () {
2403
- fapi.clearValidateState();
2404
- });
2405
- });
2406
- }, {
2407
- flush: 'sync'
2408
- });
2409
- return _objectSpread2(_objectSpread2({
2410
- fc: markRaw(fc),
2411
- parent: parent ? markRaw(parent) : parent,
2412
- top: markRaw(top),
2413
- fapi: markRaw(fapi)
2414
- }, toRefs(data)), {}, {
2415
- getGroupInject: function getGroupInject() {
2416
- return _getGroupInject(vm, parent);
2417
- },
2418
- refresh: function refresh() {
2419
- ++data.unique;
2420
- },
2421
- renderRule: function renderRule() {
2422
- data.renderRule = _toConsumableArray(rule.value || []);
2423
- },
2424
- updateValue: function updateValue(value) {
2425
- if (data.destroyed) return;
2426
- var json = JSON.stringify(value);
2427
-
2428
- if (data.updateValue === json) {
2429
- return;
2430
- }
2431
-
2432
- data.updateValue = json;
2433
- vm.emit('update:modelValue', value);
2434
- nextTick(function () {
2435
- emit$form();
2436
-
2437
- if (!parent) {
2438
- emit$topForm();
2439
- }
2440
- });
2441
- }
2442
- });
2443
- },
2444
- created: function created() {
2445
- var vm = getCurrentInstance();
2446
- vm.emit('update:api', vm.setupState.fapi);
2447
- vm.setupState.fc.init();
2448
- }
2449
- });
2450
- }
2451
-
2452
- var normalMerge = ['props'];
2453
- var toArrayMerge = ['class', 'style', 'directives'];
2454
- var functionalMerge = ['on', 'hook'];
2455
-
2456
- var mergeProps = function mergeProps(objects) {
2457
- var initial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2458
- var opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2459
-
2460
- var _normalMerge = [].concat(normalMerge, _toConsumableArray(opt['normal'] || []));
2461
-
2462
- var _toArrayMerge = [].concat(toArrayMerge, _toConsumableArray(opt['array'] || []));
2463
-
2464
- var _functionalMerge = [].concat(functionalMerge, _toConsumableArray(opt['functional'] || []));
2465
-
2466
- var propsMerge = opt['props'] || [];
2467
- return objects.reduce(function (a, b) {
2468
- for (var key in b) {
2469
- if (a[key]) {
2470
- if (propsMerge.indexOf(key) > -1) {
2471
- a[key] = mergeProps([b[key]], a[key]);
2472
- } else if (_normalMerge.indexOf(key) > -1) {
2473
- a[key] = _objectSpread2(_objectSpread2({}, a[key]), b[key]);
2474
- } else if (_toArrayMerge.indexOf(key) > -1) {
2475
- var arrA = a[key] instanceof Array ? a[key] : [a[key]];
2476
- var arrB = b[key] instanceof Array ? b[key] : [b[key]];
2477
- a[key] = [].concat(_toConsumableArray(arrA), _toConsumableArray(arrB));
2478
- } else if (_functionalMerge.indexOf(key) > -1) {
2479
- for (var event in b[key]) {
2480
- if (a[key][event]) {
2481
- var _arrA = a[key][event] instanceof Array ? a[key][event] : [a[key][event]];
2482
-
2483
- var _arrB = b[key][event] instanceof Array ? b[key][event] : [b[key][event]];
2484
-
2485
- a[key][event] = [].concat(_toConsumableArray(_arrA), _toConsumableArray(_arrB));
2486
- } else {
2487
- a[key][event] = b[key][event];
2488
- }
2489
- }
2490
- } else if (key === 'hook') {
2491
- for (var hook in b[key]) {
2492
- if (a[key][hook]) {
2493
- a[key][hook] = mergeFn(a[key][hook], b[key][hook]);
2494
- } else {
2495
- a[key][hook] = b[key][hook];
2496
- }
2497
- }
2498
- } else {
2499
- a[key] = b[key];
2500
- }
2501
- } else {
2502
- if (_normalMerge.indexOf(key) > -1 || _functionalMerge.indexOf(key) > -1 || propsMerge.indexOf(key) > -1) {
2503
- a[key] = _objectSpread2({}, b[key]);
2504
- } else if (_toArrayMerge.indexOf(key) > -1) {
2505
- a[key] = b[key] instanceof Array ? _toConsumableArray(b[key]) : _typeof(b[key]) === 'object' ? _objectSpread2({}, b[key]) : b[key];
2506
- } else a[key] = b[key];
2507
- }
2508
- }
2509
-
2510
- return a;
2511
- }, initial);
2512
- };
2513
-
2514
- var mergeFn = function mergeFn(fn1, fn2) {
2515
- return function () {
2516
- fn1 && fn1.apply(this, arguments);
2517
- fn2 && fn2.apply(this, arguments);
2518
- };
2519
- };
2520
-
2521
- 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'];
2522
- var arrayAttrs = ['validate', 'children', 'control'];
2523
- var normalAttrs = ['effect', 'deep', 'renderSlots'];
2524
- function attrs() {
2525
- return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2526
- }
2527
-
2528
- function format(type, msg, rule) {
2529
- return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2530
- }
2531
- function err(msg, rule) {
2532
- console.error(format('err', msg, rule));
2533
- }
2534
- function logError(e) {
2535
- err(e.toString());
2536
- console.error(e);
2537
- }
2538
-
2539
- function toCase(str) {
2540
- var to = str.replace(/(-[a-z])/g, function (v) {
2541
- return v.replace('-', '').toLocaleUpperCase();
2542
- });
2543
- return lower(to);
2544
- }
2545
- function lower(str) {
2546
- return str.replace(str[0], str[0].toLowerCase());
2547
- }
2548
-
2549
- var PREFIX = '[[FORM-CREATE-PREFIX-';
2550
- var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2551
- function toJson(obj, space) {
2552
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2553
- if (val && val._isVue === true) return undefined;
2554
-
2555
- if (typeof val !== 'function') {
2556
- return val;
2557
- }
2558
-
2559
- if (val.__json) {
2560
- return val.__json;
2561
- }
2562
-
2563
- if (val.__origin) val = val.__origin;
2564
- if (val.__emit) return undefined;
2565
- return PREFIX + val + SUFFIX;
2566
- }, space);
2567
- }
2275
+ if (val.__origin) val = val.__origin;
2276
+ if (val.__emit) return undefined;
2277
+ return PREFIX + val + SUFFIX;
2278
+ }, space);
2279
+ }
2568
2280
 
2569
2281
  function makeFn(fn) {
2570
2282
  return new Function('return ' + fn)();
@@ -2741,165 +2453,463 @@ function makeSlotBag() {
2741
2453
  getSlots: function getSlots() {
2742
2454
  var _this = this;
2743
2455
 
2744
- var slots = {};
2745
- Object.keys(slotBag).forEach(function (k) {
2746
- slots[k] = function () {
2747
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2748
- args[_key] = arguments[_key];
2456
+ var slots = {};
2457
+ Object.keys(slotBag).forEach(function (k) {
2458
+ slots[k] = function () {
2459
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2460
+ args[_key] = arguments[_key];
2461
+ }
2462
+
2463
+ return _this.getSlot(k, args);
2464
+ };
2465
+ });
2466
+ return slots;
2467
+ },
2468
+ slotLen: function slotLen(slot) {
2469
+ slot = slotName(slot);
2470
+ return slotBag[slot] ? slotBag[slot].length : 0;
2471
+ },
2472
+ mergeBag: function mergeBag(bag) {
2473
+ var _this2 = this;
2474
+
2475
+ if (!bag) return this;
2476
+ var slots = is.Function(bag.getSlots) ? bag.getSlots() : bag;
2477
+
2478
+ if (Array.isArray(bag) || isVNode(bag)) {
2479
+ this.setSlot(undefined, function () {
2480
+ return bag;
2481
+ });
2482
+ } else {
2483
+ Object.keys(slots).forEach(function (k) {
2484
+ _this2.setSlot(k, slots[k]);
2485
+ });
2486
+ }
2487
+
2488
+ return this;
2489
+ }
2490
+ };
2491
+ }
2492
+ function toProps(rule) {
2493
+ var prop = _objectSpread2({}, rule.props || {});
2494
+
2495
+ Object.keys(rule.on || {}).forEach(function (k) {
2496
+ if (k.indexOf('-') > 0) {
2497
+ k = toCase(k);
2498
+ }
2499
+
2500
+ var name = "on".concat(upper(k));
2501
+
2502
+ if (Array.isArray(prop[name])) {
2503
+ prop[name] = [].concat(_toConsumableArray(prop[name]), [rule.on[k]]);
2504
+ } else if (prop[name]) {
2505
+ prop[name] = [prop[name], rule.on[k]];
2506
+ } else {
2507
+ prop[name] = rule.on[k];
2508
+ }
2509
+ });
2510
+ prop.key = rule.key;
2511
+ prop.ref = rule.ref;
2512
+ prop["class"] = rule["class"];
2513
+ prop.id = rule.id;
2514
+ prop.style = rule.style;
2515
+ if (prop.slot) delete prop.slot;
2516
+ return prop;
2517
+ }
2518
+ function setPrototypeOf(o, proto) {
2519
+ Object.setPrototypeOf(o, proto);
2520
+ return o;
2521
+ }
2522
+
2523
+ var changeType = function changeType(a, b) {
2524
+ if (typeof a === 'string') {
2525
+ return String(b);
2526
+ } else if (typeof a === 'number') {
2527
+ return Number(b);
2528
+ }
2529
+
2530
+ return b;
2531
+ };
2532
+
2533
+ var condition = {
2534
+ '==': function _(a, b) {
2535
+ return JSON.stringify(a) === JSON.stringify(changeType(a, b));
2536
+ },
2537
+ '!=': function _(a, b) {
2538
+ return !condition['=='](a, b);
2539
+ },
2540
+ '>': function _(a, b) {
2541
+ return a > b;
2542
+ },
2543
+ '>=': function _(a, b) {
2544
+ return a >= b;
2545
+ },
2546
+ '<': function _(a, b) {
2547
+ return a < b;
2548
+ },
2549
+ '<=': function _(a, b) {
2550
+ return a <= b;
2551
+ },
2552
+ on: function on(a, b) {
2553
+ return a && a.indexOf && a.indexOf(changeType(a[0], b)) > -1;
2554
+ },
2555
+ notOn: function notOn(a, b) {
2556
+ return !condition.on(a, b);
2557
+ },
2558
+ "in": function _in(a, b) {
2559
+ return b && b.indexOf && b.indexOf(a) > -1;
2560
+ },
2561
+ notIn: function notIn(a, b) {
2562
+ return !condition["in"](a, b);
2563
+ },
2564
+ between: function between(a, b) {
2565
+ return a > b[0] && a < b[1];
2566
+ },
2567
+ notBetween: function notBetween(a, b) {
2568
+ return a < b[0] || a > b[1];
2569
+ },
2570
+ empty: function empty(a) {
2571
+ return is.empty(a);
2572
+ },
2573
+ notEmpty: function notEmpty(a) {
2574
+ return !is.empty(a);
2575
+ },
2576
+ pattern: function pattern(a, b) {
2577
+ return new RegExp(b, 'g').test(a);
2578
+ }
2579
+ };
2580
+ function deepGet(val, split) {
2581
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2582
+ if (val != null) {
2583
+ val = val[k];
2584
+ }
2585
+ });
2586
+ return val;
2587
+ }
2588
+ function extractVar(str) {
2589
+ var regex = /{{\s*(.*?)\s*}}/g;
2590
+ var match;
2591
+ var matches = {};
2592
+
2593
+ while ((match = regex.exec(str)) !== null) {
2594
+ if (match[1]) {
2595
+ matches[match[1]] = true;
2596
+ }
2597
+ }
2598
+
2599
+ return Object.keys(matches);
2600
+ }
2601
+ function convertFieldToConditions(field) {
2602
+ var parts = field.split('.');
2603
+ var conditions = [];
2604
+ var currentCondition = '';
2605
+ parts.forEach(function (part, index) {
2606
+ if (index === 0) {
2607
+ currentCondition = part;
2608
+ } else {
2609
+ currentCondition += '.' + part;
2610
+ }
2611
+
2612
+ conditions.push(currentCondition);
2613
+ });
2614
+ return conditions.join(' && ');
2615
+ }
2616
+
2617
+ var _getGroupInject = function getGroupInject(vm, parent) {
2618
+ if (!vm || vm === parent) {
2619
+ return;
2620
+ }
2621
+
2622
+ if (vm.props.formCreateInject) {
2623
+ return vm.props.formCreateInject;
2624
+ }
2625
+
2626
+ if (vm.parent) {
2627
+ return _getGroupInject(vm.parent, parent);
2628
+ }
2629
+ };
2630
+
2631
+ function $FormCreate(FormCreate, components, directives) {
2632
+ return defineComponent({
2633
+ name: 'FormCreate' + (FormCreate.isMobile ? 'Mobile' : ''),
2634
+ components: components,
2635
+ directives: directives,
2636
+ props: {
2637
+ rule: {
2638
+ type: Array,
2639
+ required: true,
2640
+ "default": function _default() {
2641
+ return [];
2642
+ }
2643
+ },
2644
+ option: {
2645
+ type: Object,
2646
+ "default": function _default() {
2647
+ return {};
2648
+ }
2649
+ },
2650
+ extendOption: Boolean,
2651
+ driver: [String, Object],
2652
+ modelValue: Object,
2653
+ disabled: {
2654
+ type: Boolean,
2655
+ "default": undefined
2656
+ },
2657
+ preview: {
2658
+ type: Boolean,
2659
+ "default": undefined
2660
+ },
2661
+ index: [String, Number],
2662
+ api: Object,
2663
+ locale: [String, Object],
2664
+ name: String,
2665
+ subForm: {
2666
+ type: Boolean,
2667
+ "default": true
2668
+ },
2669
+ inFor: Boolean
2670
+ },
2671
+ 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'],
2672
+ render: function render() {
2673
+ return this.fc.render();
2674
+ },
2675
+ setup: function setup(props) {
2676
+ var vm = getCurrentInstance();
2677
+ provide('parentFC', vm);
2678
+ var parent = inject('parentFC', null);
2679
+ var top = parent;
2680
+
2681
+ if (parent) {
2682
+ while (top.setupState.parent) {
2683
+ top = top.setupState.parent;
2684
+ }
2685
+ } else {
2686
+ top = vm;
2687
+ }
2688
+
2689
+ var _toRefs = toRefs(props),
2690
+ rule = _toRefs.rule,
2691
+ modelValue = _toRefs.modelValue,
2692
+ subForm = _toRefs.subForm,
2693
+ inFor = _toRefs.inFor;
2694
+
2695
+ var data = reactive({
2696
+ ctxInject: {},
2697
+ destroyed: false,
2698
+ isShow: true,
2699
+ unique: 1,
2700
+ renderRule: _toConsumableArray(rule.value || []),
2701
+ updateValue: JSON.stringify(modelValue.value || {})
2702
+ });
2703
+ var fc = new FormCreate(vm);
2704
+ var fapi = fc.api();
2705
+ var isMore = inFor.value;
2706
+
2707
+ var addSubForm = function addSubForm() {
2708
+ if (parent) {
2709
+ var _inject = _getGroupInject(vm, parent);
2710
+
2711
+ if (_inject) {
2712
+ var sub;
2713
+
2714
+ if (isMore) {
2715
+ sub = toArray(_inject.getSubForm());
2716
+ sub.push(fapi);
2717
+ } else {
2718
+ sub = fapi;
2719
+ }
2720
+
2721
+ _inject.subForm(sub);
2722
+ }
2723
+ }
2724
+ };
2725
+
2726
+ var rmSubForm = function rmSubForm() {
2727
+ var inject = _getGroupInject(vm, parent);
2728
+
2729
+ if (inject) {
2730
+ if (isMore) {
2731
+ var sub = toArray(inject.getSubForm());
2732
+ var idx = sub.indexOf(fapi);
2733
+
2734
+ if (idx > -1) {
2735
+ sub.splice(idx, 1);
2736
+ }
2737
+ } else {
2738
+ inject.subForm();
2739
+ }
2740
+ }
2741
+ };
2742
+
2743
+ var styleEl = null;
2744
+ onBeforeMount(function () {
2745
+ watchEffect(function () {
2746
+ var content = '';
2747
+ var globalClass = props.option && props.option.globalClass || {};
2748
+ Object.keys(globalClass).forEach(function (k) {
2749
+ var subCss = '';
2750
+ globalClass[k].style && Object.keys(globalClass[k].style).forEach(function (key) {
2751
+ subCss += toLine(key) + ':' + globalClass[k].style[key] + ';';
2752
+ });
2753
+
2754
+ if (globalClass[k].content) {
2755
+ subCss += globalClass[k].content + ';';
2756
+ }
2757
+
2758
+ if (subCss) {
2759
+ content += ".".concat(k, "{").concat(subCss, "}");
2760
+ }
2761
+ });
2762
+
2763
+ if (props.option && props.option.style) {
2764
+ content += props.option.style;
2765
+ }
2766
+
2767
+ if (!styleEl) {
2768
+ styleEl = document.createElement('style');
2769
+ styleEl.type = 'text/css';
2770
+ document.head.appendChild(styleEl);
2771
+ }
2772
+
2773
+ styleEl.innerHTML = content || '';
2774
+ });
2775
+ });
2776
+ var emit$topForm = debounce(function () {
2777
+ fc.bus.$emit('$loadData.$topForm');
2778
+ }, 100);
2779
+ var emit$scopeForm = debounce(function () {
2780
+ fc.bus.$emit('$loadData.$scopeForm');
2781
+ }, 100);
2782
+ var emit$form = debounce(function () {
2783
+ fc.bus.$emit('$loadData.$form');
2784
+ }, 100);
2785
+
2786
+ var emit$change = function emit$change(field) {
2787
+ fc.bus.$emit('change-$form.' + field);
2788
+ };
2789
+
2790
+ onMounted(function () {
2791
+ if (parent) {
2792
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2793
+ fapi.top.bus.$on('change', emit$change);
2794
+ }
2795
+
2796
+ if (fapi !== fapi.scope) {
2797
+ fapi.scope.bus.$on('$loadData.$scopeForm', emit$scopeForm);
2798
+ }
2799
+
2800
+ fc.mounted();
2801
+ });
2802
+ onBeforeUnmount(function () {
2803
+ if (parent) {
2804
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2805
+ fapi.top.bus.$off('change', emit$change);
2806
+ }
2807
+
2808
+ if (fapi !== fapi.scope) {
2809
+ fapi.scope.bus.$off('$loadData.$scopeForm', emit$scopeForm);
2810
+ }
2811
+
2812
+ styleEl && document.head.removeChild(styleEl);
2813
+ rmSubForm();
2814
+ data.destroyed = true;
2815
+ fc.unmount();
2816
+ });
2817
+ onUpdated(function () {
2818
+ fc.updated();
2819
+ });
2820
+ addSubForm();
2821
+ watch(function () {
2822
+ return props.option;
2823
+ }, function () {
2824
+ fc.initOptions();
2825
+ fapi.refresh();
2826
+ }, {
2827
+ deep: true
2828
+ });
2829
+ watch(function () {
2830
+ return _toConsumableArray(rule.value);
2831
+ }, function (n) {
2832
+ if (fc.$handle.isBreakWatch() || n.length === data.renderRule.length && n.every(function (v) {
2833
+ return data.renderRule.indexOf(v) > -1;
2834
+ })) return;
2835
+ fc.$handle.updateAppendData();
2836
+ fc.$handle.reloadRule(rule.value);
2837
+ vm.setupState.renderRule();
2838
+ });
2839
+ watch(function () {
2840
+ return [props.disabled, props.preview];
2841
+ }, function () {
2842
+ fapi.refresh();
2843
+ });
2844
+ watch(modelValue, function (n) {
2845
+ if (toJson(n || {}) === data.updateValue) return;
2846
+
2847
+ if (fapi.config.forceCoverValue) {
2848
+ fapi.coverValue(n || {});
2849
+ } else {
2850
+ fapi.setValue(n || {});
2851
+ }
2852
+ }, {
2853
+ deep: true,
2854
+ flush: 'post'
2855
+ });
2856
+ watch(function () {
2857
+ return props.index;
2858
+ }, function () {
2859
+ fapi.coverValue({});
2860
+ fc.$handle.updateAppendData();
2861
+ nextTick(function () {
2862
+ nextTick(function () {
2863
+ fapi.clearValidateState();
2864
+ });
2865
+ });
2866
+ }, {
2867
+ flush: 'sync'
2868
+ });
2869
+ return _objectSpread2(_objectSpread2({
2870
+ fc: markRaw(fc),
2871
+ parent: parent ? markRaw(parent) : parent,
2872
+ top: markRaw(top),
2873
+ fapi: markRaw(fapi)
2874
+ }, toRefs(data)), {}, {
2875
+ getGroupInject: function getGroupInject() {
2876
+ return _getGroupInject(vm, parent);
2877
+ },
2878
+ refresh: function refresh() {
2879
+ ++data.unique;
2880
+ },
2881
+ renderRule: function renderRule() {
2882
+ data.renderRule = _toConsumableArray(rule.value || []);
2883
+ },
2884
+ updateValue: function updateValue(value) {
2885
+ if (data.destroyed) return;
2886
+ var json = toJson(value);
2887
+
2888
+ if (data.updateValue === json) {
2889
+ return;
2749
2890
  }
2750
2891
 
2751
- return _this.getSlot(k, args);
2752
- };
2892
+ data.updateValue = json;
2893
+ vm.emit('update:modelValue', value);
2894
+ nextTick(function () {
2895
+ emit$form();
2896
+
2897
+ if (!parent) {
2898
+ emit$topForm();
2899
+ emit$scopeForm();
2900
+ } else if (!subForm.value) {
2901
+ emit$scopeForm();
2902
+ }
2903
+ });
2904
+ }
2753
2905
  });
2754
- return slots;
2755
- },
2756
- slotLen: function slotLen(slot) {
2757
- slot = slotName(slot);
2758
- return slotBag[slot] ? slotBag[slot].length : 0;
2759
2906
  },
2760
- mergeBag: function mergeBag(bag) {
2761
- var _this2 = this;
2762
-
2763
- if (!bag) return this;
2764
- var slots = is.Function(bag.getSlots) ? bag.getSlots() : bag;
2765
-
2766
- if (Array.isArray(bag) || isVNode(bag)) {
2767
- this.setSlot(undefined, function () {
2768
- return bag;
2769
- });
2770
- } else {
2771
- Object.keys(slots).forEach(function (k) {
2772
- _this2.setSlot(k, slots[k]);
2773
- });
2774
- }
2775
-
2776
- return this;
2777
- }
2778
- };
2779
- }
2780
- function toProps(rule) {
2781
- var prop = _objectSpread2({}, rule.props || {});
2782
-
2783
- Object.keys(rule.on || {}).forEach(function (k) {
2784
- if (k.indexOf('-') > 0) {
2785
- k = toCase(k);
2786
- }
2787
-
2788
- var name = "on".concat(upper(k));
2789
-
2790
- if (Array.isArray(prop[name])) {
2791
- prop[name] = [].concat(_toConsumableArray(prop[name]), [rule.on[k]]);
2792
- } else if (prop[name]) {
2793
- prop[name] = [prop[name], rule.on[k]];
2794
- } else {
2795
- prop[name] = rule.on[k];
2796
- }
2797
- });
2798
- prop.key = rule.key;
2799
- prop.ref = rule.ref;
2800
- prop["class"] = rule["class"];
2801
- prop.id = rule.id;
2802
- prop.style = rule.style;
2803
- if (prop.slot) delete prop.slot;
2804
- return prop;
2805
- }
2806
- function setPrototypeOf(o, proto) {
2807
- Object.setPrototypeOf(o, proto);
2808
- return o;
2809
- }
2810
-
2811
- var changeType = function changeType(a, b) {
2812
- if (typeof a === 'string') {
2813
- return String(b);
2814
- } else if (typeof a === 'number') {
2815
- return Number(b);
2816
- }
2817
-
2818
- return b;
2819
- };
2820
-
2821
- var condition = {
2822
- '==': function _(a, b) {
2823
- return JSON.stringify(a) === JSON.stringify(changeType(a, b));
2824
- },
2825
- '!=': function _(a, b) {
2826
- return !condition['=='](a, b);
2827
- },
2828
- '>': function _(a, b) {
2829
- return a > b;
2830
- },
2831
- '>=': function _(a, b) {
2832
- return a >= b;
2833
- },
2834
- '<': function _(a, b) {
2835
- return a < b;
2836
- },
2837
- '<=': function _(a, b) {
2838
- return a <= b;
2839
- },
2840
- on: function on(a, b) {
2841
- return a && a.indexOf && a.indexOf(changeType(a[0], b)) > -1;
2842
- },
2843
- notOn: function notOn(a, b) {
2844
- return !condition.on(a, b);
2845
- },
2846
- "in": function _in(a, b) {
2847
- return b && b.indexOf && b.indexOf(a) > -1;
2848
- },
2849
- notIn: function notIn(a, b) {
2850
- return !condition["in"](a, b);
2851
- },
2852
- between: function between(a, b) {
2853
- return a > b[0] && a < b[1];
2854
- },
2855
- notBetween: function notBetween(a, b) {
2856
- return a < b[0] || a > b[1];
2857
- },
2858
- empty: function empty(a) {
2859
- return is.empty(a);
2860
- },
2861
- notEmpty: function notEmpty(a) {
2862
- return !is.empty(a);
2863
- },
2864
- pattern: function pattern(a, b) {
2865
- return new RegExp(b, 'g').test(a);
2866
- }
2867
- };
2868
- function deepGet(val, split) {
2869
- (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2870
- if (val != null) {
2871
- val = val[k];
2872
- }
2873
- });
2874
- return val;
2875
- }
2876
- function extractVar(str) {
2877
- var regex = /{{\s*(.*?)\s*}}/g;
2878
- var match;
2879
- var matches = {};
2880
-
2881
- while ((match = regex.exec(str)) !== null) {
2882
- if (match[1]) {
2883
- matches[match[1]] = true;
2884
- }
2885
- }
2886
-
2887
- return Object.keys(matches);
2888
- }
2889
- function convertFieldToConditions(field) {
2890
- var parts = field.split('.');
2891
- var conditions = [];
2892
- var currentCondition = '';
2893
- parts.forEach(function (part, index) {
2894
- if (index === 0) {
2895
- currentCondition = part;
2896
- } else {
2897
- currentCondition += '.' + part;
2907
+ created: function created() {
2908
+ var vm = getCurrentInstance();
2909
+ vm.emit('update:api', vm.setupState.fapi);
2910
+ vm.setupState.fc.init();
2898
2911
  }
2899
-
2900
- conditions.push(currentCondition);
2901
2912
  });
2902
- return conditions.join(' && ');
2903
2913
  }
2904
2914
 
2905
2915
  function baseRule() {
@@ -3107,8 +3117,15 @@ function Api(h) {
3107
3117
  }
3108
3118
 
3109
3119
  function props(fields, key, val) {
3110
- tidyFields(fields).forEach(function (field) {
3111
- h.getCtxs(field).forEach(function (ctx) {
3120
+ if (is.Undef(fields)) {
3121
+ fields = Object.keys(_objectSpread2(_objectSpread2({}, h.fieldCtx), h.nameCtx));
3122
+ } else if (!Array.isArray(fields)) {
3123
+ fields = [fields];
3124
+ }
3125
+
3126
+ fields.forEach(function (field) {
3127
+ var ctxs = h.fieldCtx[field] || h.nameCtx[field];
3128
+ ctxs && ctxs.forEach(function (ctx) {
3112
3129
  $set(ctx.rule, key, val);
3113
3130
  h.$render.clearCache(ctx);
3114
3131
  });
@@ -3126,6 +3143,14 @@ function Api(h) {
3126
3143
  }
3127
3144
 
3128
3145
  var api = {
3146
+ get isScope() {
3147
+ return h.vm.props.subForm === false;
3148
+ },
3149
+
3150
+ get isPreview() {
3151
+ return h.preview;
3152
+ },
3153
+
3129
3154
  get config() {
3130
3155
  return h.options;
3131
3156
  },
@@ -3162,6 +3187,20 @@ function Api(h) {
3162
3187
  return api;
3163
3188
  },
3164
3189
 
3190
+ get scope() {
3191
+ var parent = h.vm;
3192
+
3193
+ while (parent && parent.setupState.fapi) {
3194
+ if (!parent.props.subForm) {
3195
+ return parent.setupState.fapi;
3196
+ } else {
3197
+ parent = parent.setupState.parent;
3198
+ }
3199
+ }
3200
+
3201
+ return api.top;
3202
+ },
3203
+
3165
3204
  get children() {
3166
3205
  return allSubForm();
3167
3206
  },
@@ -3192,10 +3231,10 @@ function Api(h) {
3192
3231
  },
3193
3232
 
3194
3233
  formData: function formData(fields) {
3195
- if (fields == null) {
3234
+ if (fields == null || typeof fields === 'boolean') {
3196
3235
  var data = {};
3197
3236
  Object.keys(h.form).forEach(function (k) {
3198
- if (h.ignoreFields.indexOf(k) === -1) {
3237
+ if (fields === true || h.ignoreFields.indexOf(k) === -1) {
3199
3238
  data[k] = copy(h.form[k]);
3200
3239
  }
3201
3240
  });
@@ -3746,7 +3785,11 @@ function Api(h) {
3746
3785
  }, opt.wait == null ? 1000 : opt.wait);
3747
3786
  },
3748
3787
  getData: function getData(id, def) {
3749
- return h.fc.getLoadData(id, def);
3788
+ if (h.fc.get) {
3789
+ return h.fc.get(id, def);
3790
+ } else {
3791
+ return h.fc.getLoadData(id, def);
3792
+ }
3750
3793
  },
3751
3794
  watchData: function watchData(fn) {
3752
3795
  return h.fc.watchLoadData(function (get, change) {
@@ -5304,7 +5347,7 @@ function useLoader(Handler) {
5304
5347
  hideLst[valid ? 'push' : 'unshift'](function () {
5305
5348
  if (method === 'disabled' || method === 'enabled') {
5306
5349
  _this7.api.disabled(!valid, rule);
5307
- } else if (method === 'display') {
5350
+ } else if (method === 'display' || method === 'show') {
5308
5351
  _this7.api.display(valid, rule);
5309
5352
  } else if (method === 'required') {
5310
5353
  rule.forEach(function (item) {
@@ -5314,6 +5357,8 @@ function useLoader(Handler) {
5314
5357
  if (!valid) {
5315
5358
  _this7.api.clearValidateState(rule);
5316
5359
  }
5360
+ } else if (method === 'if') {
5361
+ _this7.api.hidden(!valid, rule);
5317
5362
  } else {
5318
5363
  _this7.api.hidden(!valid, rule);
5319
5364
  }
@@ -5617,7 +5662,7 @@ function useInput(Handler) {
5617
5662
  return JSON.stringify(this.getFormData(ctx), strFn) !== JSON.stringify(value, strFn);
5618
5663
  },
5619
5664
  isQuote: function isQuote(ctx, value) {
5620
- return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5665
+ return (value instanceof Function || is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5621
5666
  },
5622
5667
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5623
5668
  var _this5 = this;
@@ -5904,8 +5949,10 @@ function useContext(Handler) {
5904
5949
  var match = temp.message.match(/^\{\{\s*\$t\.(.+)\s*\}\}$/);
5905
5950
 
5906
5951
  if (match) {
5952
+ var _ctx$refRule, _ctx$refRule$__$title;
5953
+
5907
5954
  temp.message = _this.api.t(match[1], {
5908
- title: ctx.refRule.__$title.value
5955
+ 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
5909
5956
  });
5910
5957
  }
5911
5958
  }
@@ -6031,7 +6078,7 @@ function useContext(Handler) {
6031
6078
  field = JSON.stringify(_this2.fc.getLoadData(one.variable) || '');
6032
6079
  } else if (one.field) {
6033
6080
  field = convertFieldToConditions(one.field || '');
6034
- } else {
6081
+ } else if (!one.mode) {
6035
6082
  return {
6036
6083
  v: true
6037
6084
  };
@@ -6053,7 +6100,7 @@ function useContext(Handler) {
6053
6100
  });
6054
6101
  } else {
6055
6102
  flag = invoke(function () {
6056
- 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);
6103
+ 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);
6057
6104
  });
6058
6105
  }
6059
6106
 
@@ -6102,6 +6149,8 @@ function useContext(Handler) {
6102
6149
  return invoke(fn, undefined);
6103
6150
  },
6104
6151
  computeValue: function computeValue(str, ctx, group) {
6152
+ var _this3 = this;
6153
+
6105
6154
  var that = this;
6106
6155
  var formulas = Object.keys(this.fc.formulas).reduce(function (obj, k) {
6107
6156
  obj[k] = function () {
@@ -6121,34 +6170,36 @@ function useContext(Handler) {
6121
6170
 
6122
6171
  return obj;
6123
6172
  }, {});
6124
- 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);
6173
+ return invoke(function () {
6174
+ 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);
6175
+ }, undefined);
6125
6176
  },
6126
6177
  updateChildren: function updateChildren(ctx, n, o) {
6127
- var _this3 = this;
6178
+ var _this4 = this;
6128
6179
 
6129
6180
  this.deferSyncValue(function () {
6130
6181
  o && o.forEach(function (child) {
6131
6182
  if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx) {
6132
- _this3.rmCtx(child.__fc__);
6183
+ _this4.rmCtx(child.__fc__);
6133
6184
  }
6134
6185
  });
6135
6186
 
6136
6187
  if (is.trueArray(n)) {
6137
- _this3.loadChildren(n, ctx);
6188
+ _this4.loadChildren(n, ctx);
6138
6189
 
6139
- _this3.bus.$emit('update', _this3.api);
6190
+ _this4.bus.$emit('update', _this4.api);
6140
6191
  }
6141
6192
  });
6142
6193
  },
6143
6194
  rmSub: function rmSub(sub) {
6144
- var _this4 = this;
6195
+ var _this5 = this;
6145
6196
 
6146
6197
  is.trueArray(sub) && sub.forEach(function (r) {
6147
- r && r.__fc__ && _this4.rmCtx(r.__fc__);
6198
+ r && r.__fc__ && _this5.rmCtx(r.__fc__);
6148
6199
  });
6149
6200
  },
6150
6201
  rmCtx: function rmCtx(ctx) {
6151
- var _this5 = this;
6202
+ var _this6 = this;
6152
6203
 
6153
6204
  if (ctx.deleted) return;
6154
6205
  var id = ctx.id,
@@ -6177,19 +6228,19 @@ function useContext(Handler) {
6177
6228
  }
6178
6229
 
6179
6230
  this.deferSyncValue(function () {
6180
- if (!_this5.reloading) {
6231
+ if (!_this6.reloading) {
6181
6232
  if (ctx.parser.loadChildren !== false) {
6182
6233
  var children = ctx.getPending('children', ctx.rule.children);
6183
6234
 
6184
6235
  if (is.trueArray(children)) {
6185
6236
  children.forEach(function (h) {
6186
- return h.__fc__ && _this5.rmCtx(h.__fc__);
6237
+ return h.__fc__ && _this6.rmCtx(h.__fc__);
6187
6238
  });
6188
6239
  }
6189
6240
  }
6190
6241
 
6191
- if (ctx.root === _this5.rules) {
6192
- _this5.vm.setupState.renderRule();
6242
+ if (ctx.root === _this6.rules) {
6243
+ _this6.vm.setupState.renderRule();
6193
6244
  }
6194
6245
  }
6195
6246
  }, input);
@@ -6262,8 +6313,11 @@ function useLifecycle(Handler) {
6262
6313
  hook.forEach(function (fn) {
6263
6314
  invoke(function () {
6264
6315
  return fn(_objectSpread2(_objectSpread2({}, args || {}), {}, {
6316
+ self: ctx.rule,
6265
6317
  rule: ctx.rule,
6266
- api: _this2.api
6318
+ $f: _this2.api,
6319
+ api: _this2.api,
6320
+ option: _this2.vm.props.option
6267
6321
  }));
6268
6322
  });
6269
6323
  });
@@ -6448,7 +6502,13 @@ function Handler(fc) {
6448
6502
  return fc.bus;
6449
6503
  },
6450
6504
  preview: function preview() {
6451
- return fc.vm.props.preview != null ? fc.vm.props.preview : fc.options.value.preview || false;
6505
+ if (fc.vm.props.preview != null) {
6506
+ return fc.vm.props.preview;
6507
+ } else if (fc.vm.setupState.parent && fc.vm.setupState.parent.props.preview != null) {
6508
+ return fc.vm.setupState.parent.props.preview;
6509
+ }
6510
+
6511
+ return fc.options.value.preview || false;
6452
6512
  }
6453
6513
  });
6454
6514
  extend(this, {
@@ -6517,10 +6577,10 @@ extend(Handler.prototype, {
6517
6577
  isBreakWatch: function isBreakWatch() {
6518
6578
  return this.loading || this.noWatchFn || this.reloading;
6519
6579
  },
6520
- beforeFetch: function beforeFetch(opt) {
6580
+ globalBeforeFetch: function globalBeforeFetch(opt) {
6521
6581
  var _this2 = this;
6522
6582
 
6523
- return new Promise(function (resolve) {
6583
+ return new Promise(function (resolve, reject) {
6524
6584
  var source = _this2.options.beforeFetch && invoke(function () {
6525
6585
  return _this2.options.beforeFetch(opt, {
6526
6586
  api: _this2.api
@@ -6528,11 +6588,32 @@ extend(Handler.prototype, {
6528
6588
  });
6529
6589
 
6530
6590
  if (source && is.Function(source.then)) {
6531
- source.then(resolve);
6591
+ source.then(resolve)["catch"](reject);
6532
6592
  } else {
6533
6593
  resolve();
6534
6594
  }
6535
6595
  });
6596
+ },
6597
+ beforeFetch: function beforeFetch(opt) {
6598
+ var _this3 = this;
6599
+
6600
+ return new Promise(function (resolve, reject) {
6601
+ var res = opt && opt.beforeFetch && invoke(function () {
6602
+ return opt.beforeFetch(opt, {
6603
+ api: _this3.api
6604
+ });
6605
+ });
6606
+
6607
+ if (res && is.Function(res.then)) {
6608
+ res.then(resolve)["catch"](reject);
6609
+ } else if (res === false) {
6610
+ reject();
6611
+ } else {
6612
+ resolve();
6613
+ }
6614
+ }).then(function () {
6615
+ return _this3.globalBeforeFetch(opt);
6616
+ })["catch"](function () {});
6536
6617
  }
6537
6618
  });
6538
6619
  useInject(Handler);
@@ -6735,56 +6816,60 @@ var loadData = function loadData(fc) {
6735
6816
  name: 'loadData',
6736
6817
  _fn: [],
6737
6818
  loaded: function loaded(inject, rule, api) {
6738
- this.deleted(inject);
6739
- var attrs = toArray(inject.getValue());
6740
- var unwatchs = [];
6741
- attrs.forEach(function (attr) {
6742
- if (attr && (attr.attr || attr.template)) {
6743
- var fn = function fn(get) {
6744
- var value;
6819
+ var _this = this;
6745
6820
 
6746
- if (attr.template) {
6747
- value = fc.$handle.loadStrVar(attr.template, get);
6748
- } else if (attr.handler && is.Function(attr.handler)) {
6749
- value = attr.handler(get, rule, api);
6750
- } else {
6751
- value = get(attr.attr, attr["default"]);
6752
- }
6821
+ this.deleted(inject);
6822
+ nextTick(function () {
6823
+ var attrs = toArray(inject.getValue());
6824
+ var unwatchs = [];
6825
+ attrs.forEach(function (attr) {
6826
+ if (attr && (attr.attr || attr.template)) {
6827
+ var fn = function fn(get) {
6828
+ var value;
6829
+
6830
+ if (attr.template) {
6831
+ value = fc.$handle.loadStrVar(attr.template, get);
6832
+ } else if (attr.handler && is.Function(attr.handler)) {
6833
+ value = attr.handler(get, rule, api);
6834
+ } else {
6835
+ value = get(attr.attr, attr["default"]);
6836
+ }
6753
6837
 
6754
- if (attr.copy !== false) {
6755
- value = deepCopy(value);
6756
- }
6838
+ if (attr.copy !== false) {
6839
+ value = deepCopy(value);
6840
+ }
6757
6841
 
6758
- var _rule = attr.modify ? rule : inject.getProp();
6842
+ var _rule = attr.modify ? rule : inject.getProp();
6759
6843
 
6760
- if (attr.to === 'child') {
6761
- if (_rule.children) {
6762
- _rule.children[0] = value;
6844
+ if (attr.to === 'child') {
6845
+ if (_rule.children) {
6846
+ _rule.children[0] = value;
6847
+ } else {
6848
+ _rule.children = [value];
6849
+ }
6763
6850
  } else {
6764
- _rule.children = [value];
6851
+ deepSet(_rule, attr.to || 'options', value);
6765
6852
  }
6766
- } else {
6767
- deepSet(_rule, attr.to || 'options', value);
6768
- }
6769
6853
 
6770
- api.sync(rule);
6771
- };
6854
+ api.sync(rule);
6855
+ };
6772
6856
 
6773
- var callback = function callback(get) {
6774
- return fn(get);
6775
- };
6857
+ var callback = function callback(get) {
6858
+ return fn(get);
6859
+ };
6776
6860
 
6777
- var unwatch = fc.watchLoadData(callback);
6778
- fn = debounce(fn, attr.wait || 300);
6861
+ var unwatch = fc.watchLoadData(callback);
6862
+ fn = debounce(fn, attr.wait || 300);
6779
6863
 
6780
- if (attr.watch !== false) {
6781
- unwatchs.push(unwatch);
6782
- } else {
6783
- unwatch();
6864
+ if (attr.watch !== false) {
6865
+ unwatchs.push(unwatch);
6866
+ } else {
6867
+ unwatch();
6868
+ }
6784
6869
  }
6785
- }
6870
+ });
6871
+ _this._fn[inject.id] = unwatchs;
6786
6872
  });
6787
- this._fn[inject.id] = unwatchs;
6788
6873
  },
6789
6874
  deleted: function deleted(inject) {
6790
6875
  if (this._fn[inject.id]) {
@@ -6798,7 +6883,7 @@ var loadData = function loadData(fc) {
6798
6883
  inject.clearProp();
6799
6884
  }
6800
6885
  };
6801
- loadData.watch = loadData.mounted;
6886
+ loadData.watch = loadData.loaded;
6802
6887
  return loadData;
6803
6888
  };
6804
6889
 
@@ -7011,7 +7096,6 @@ var fetch = function fetch(fc) {
7011
7096
  }
7012
7097
 
7013
7098
  set(fn(body, rule, api));
7014
- api.sync(rule);
7015
7099
  },
7016
7100
  onError: function onError(e) {
7017
7101
  set(undefined);
@@ -7490,6 +7574,7 @@ function FormCreateFactory(config) {
7490
7574
  components: components,
7491
7575
  directives: directives
7492
7576
  },
7577
+ get: null,
7493
7578
  drivers: drivers,
7494
7579
  renderDriver: null,
7495
7580
  refreshData: refreshData,
@@ -7727,7 +7812,7 @@ function FormCreateFactory(config) {
7727
7812
  }
7728
7813
  });
7729
7814
  this.unwatch.push(unwatch);
7730
- return val;
7815
+ return deepGet(val, split);
7731
7816
  }
7732
7817
  }
7733
7818
  },
@@ -7747,9 +7832,11 @@ function FormCreateFactory(config) {
7747
7832
  var key = split.shift();
7748
7833
 
7749
7834
  if (key === '$topForm') {
7750
- val = this.$handle.api.top.formData();
7835
+ val = this.$handle.api.top.formData(true);
7836
+ } else if (key === '$scopeForm') {
7837
+ val = this.$handle.api.scope.formData(true);
7751
7838
  } else if (key === '$form') {
7752
- val = this.$handle.api.formData();
7839
+ val = this.$handle.api.formData(true);
7753
7840
  } else if (key === '$options') {
7754
7841
  val = this.options.value;
7755
7842
  } else if (key === '$globalData') {
@@ -7790,9 +7877,17 @@ function FormCreateFactory(config) {
7790
7877
  var unwatch = {};
7791
7878
 
7792
7879
  var run = function run(flag) {
7880
+ if (!_this6.get) {
7881
+ _this6.get = get;
7882
+ }
7883
+
7793
7884
  invoke(function () {
7794
7885
  fn(get, flag);
7795
7886
  });
7887
+
7888
+ if (_this6.get === get) {
7889
+ _this6.get = undefined;
7890
+ }
7796
7891
  };
7797
7892
 
7798
7893
  var get = function get(id, def) {
@@ -8437,7 +8532,9 @@ var manager = {
8437
8532
  },
8438
8533
  makeInfo: function makeInfo(rule, uni, ctx) {
8439
8534
  var _ctx$refRule,
8535
+ _ctx$refRule$__$title,
8440
8536
  _ctx$refRule2,
8537
+ _ctx$refRule2$__$titl,
8441
8538
  _this5 = this;
8442
8539
 
8443
8540
  var titleProp = _objectSpread2({}, rule.title);
@@ -8448,10 +8545,10 @@ var manager = {
8448
8545
  var form = this.options.form;
8449
8546
  var titleSlot = this.getSlot('title');
8450
8547
  var children = [titleSlot ? titleSlot({
8451
- title: (_ctx$refRule = ctx.refRule) === null || _ctx$refRule === void 0 ? void 0 : _ctx$refRule.__$title.value,
8548
+ 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,
8452
8549
  rule: ctx.rule,
8453
8550
  options: this.options
8454
- }) : ((_ctx$refRule2 = ctx.refRule) === null || _ctx$refRule2 === void 0 ? void 0 : _ctx$refRule2.__$title.value) + (form.labelSuffix || form['label-suffix'] || '')];
8551
+ }) : ((_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'] || '')];
8455
8552
 
8456
8553
  if (!isFalse(infoProp.show) && (infoProp.info || infoProp["native"]) && !isFalse(infoProp.icon)) {
8457
8554
  var prop = {
@@ -8467,9 +8564,9 @@ var manager = {
8467
8564
  var field = 'content';
8468
8565
 
8469
8566
  if (infoProp.info && !hasProperty(prop.props, field)) {
8470
- var _ctx$refRule3;
8567
+ var _ctx$refRule3, _ctx$refRule3$__$info;
8471
8568
 
8472
- prop.props[field] = (_ctx$refRule3 = ctx.refRule) === null || _ctx$refRule3 === void 0 ? void 0 : _ctx$refRule3.__$info.value;
8569
+ 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;
8473
8570
  }
8474
8571
 
8475
8572
  children[infoProp.align !== 'left' ? 'unshift' : 'push'](this.$r(mergeProps([infoProp, prop]), _defineProperty({}, titleProp.slot || (isTip ? 'default' : 'reference'), function () {
@@ -8710,7 +8807,9 @@ function extendApi(api, h) {
8710
8807
  return new Promise(function (resolve, reject) {
8711
8808
  var forms = api.children;
8712
8809
  var all = [h.$manager.validate()];
8713
- forms.forEach(function (v) {
8810
+ forms.filter(function (v) {
8811
+ return !v.isScope;
8812
+ }).forEach(function (v) {
8714
8813
  all.push(v.validate());
8715
8814
  });
8716
8815
  Promise.all(all).then(function () {
@@ -8731,7 +8830,9 @@ function extendApi(api, h) {
8731
8830
  if (!ctx) return;
8732
8831
  var sub = h.subForm[ctx.id];
8733
8832
  var all = [h.$manager.validateField(ctx.id)];
8734
- toArray(sub).forEach(function (v) {
8833
+ toArray(sub).filter(function (v) {
8834
+ return !v.isScope;
8835
+ }).forEach(function (v) {
8735
8836
  all.push(v.validate());
8736
8837
  });
8737
8838
  Promise.all(all).then(function () {
@@ -8834,7 +8935,8 @@ function extendApi(api, h) {
8834
8935
  },
8835
8936
  submit: function submit(successFn, failFn) {
8836
8937
  return new Promise(function (resolve, reject) {
8837
- api.validate().then(function () {
8938
+ var promise = h.options.validateOnSubmit === false ? Promise.resolve() : api.validate();
8939
+ promise.then(function () {
8838
8940
  var formData = api.formData();
8839
8941
  is.Function(successFn) && invoke(function () {
8840
8942
  return successFn(formData, api);
@@ -8868,6 +8970,8 @@ var required = {
8868
8970
  inject.clearProp();
8869
8971
  api.clearValidateState([rule.field]);
8870
8972
  } else {
8973
+ var _rule$__fc__$refRule$;
8974
+
8871
8975
  var validate = _objectSpread2({
8872
8976
  required: true,
8873
8977
  validator: function validator(_, v, call) {
@@ -8875,7 +8979,7 @@ var required = {
8875
8979
  }
8876
8980
  }, val);
8877
8981
 
8878
- var title = rule.__fc__.refRule.__$title.value;
8982
+ var title = (_rule$__fc__$refRule$ = rule.__fc__.refRule.__$title) === null || _rule$__fc__$refRule$ === void 0 ? void 0 : _rule$__fc__$refRule$.value;
8879
8983
 
8880
8984
  if (!validate.message) {
8881
8985
  validate.message = api.t('required', {
@@ -8948,7 +9052,7 @@ function install(FormCreate) {
8948
9052
  function elmFormCreate() {
8949
9053
  return FormCreateFactory({
8950
9054
  ui: 'element-ui',
8951
- version: '3.2.19',
9055
+ version: '3.2.21',
8952
9056
  manager: manager,
8953
9057
  extendApi: extendApi,
8954
9058
  install: install,