@form-create/element-ui 3.2.0 → 3.2.2

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.0
2
+ * @form-create/element-ui v3.2.2
3
3
  * (c) 2018-2024 xaboy
4
4
  * Github https://github.com/xaboy/form-create
5
5
  * Released under the MIT License.
@@ -2042,8 +2042,20 @@ script.render = render;
2042
2042
 
2043
2043
  var components = [Checkbox, Frame, Radio, Select, Tree, Upload, Group, Sub, script];
2044
2044
 
2045
- function toString(val) {
2046
- return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
2045
+ function debounce(fn, wait) {
2046
+ var timeout = null;
2047
+ return function () {
2048
+ var _this = this;
2049
+
2050
+ for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) {
2051
+ arg[_key] = arguments[_key];
2052
+ }
2053
+
2054
+ if (timeout !== null) clearTimeout(timeout);
2055
+ timeout = setTimeout(function () {
2056
+ return fn.call.apply(fn, [_this].concat(arg));
2057
+ }, wait);
2058
+ };
2047
2059
  }
2048
2060
 
2049
2061
  function toLine(name) {
@@ -2055,129 +2067,6 @@ function upper(str) {
2055
2067
  return str.replace(str[0], str[0].toLocaleUpperCase());
2056
2068
  }
2057
2069
 
2058
- function format(type, msg, rule) {
2059
- return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2060
- }
2061
- function err(msg, rule) {
2062
- console.error(format('err', msg, rule));
2063
- }
2064
- function logError(e) {
2065
- err(e.toString());
2066
- console.error(e);
2067
- }
2068
-
2069
- var PREFIX = '[[FORM-CREATE-PREFIX-';
2070
- var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2071
- var $T = '$FN:';
2072
- var $TX = '$FNX:';
2073
- var $ON = '$GLOBAL:';
2074
- var FUNCTION = 'function';
2075
- function toJson(obj, space) {
2076
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2077
- if (val && val._isVue === true) return undefined;
2078
-
2079
- if (_typeof(val) !== FUNCTION) {
2080
- return val;
2081
- }
2082
-
2083
- if (val.__json) {
2084
- return val.__json;
2085
- }
2086
-
2087
- if (val.__origin) val = val.__origin;
2088
- if (val.__emit) return undefined;
2089
- return PREFIX + val + SUFFIX;
2090
- }, space);
2091
- }
2092
-
2093
- function makeFn(fn) {
2094
- return new Function('return ' + fn)();
2095
- }
2096
-
2097
- function parseFn(fn, mode) {
2098
- if (fn && is.String(fn) && fn.length > 4) {
2099
- var v = fn.trim();
2100
- var flag = false;
2101
-
2102
- try {
2103
- if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2104
- v = v.replace(SUFFIX, '').replace(PREFIX, '');
2105
- flag = true;
2106
- } else if (v.indexOf($T) === 0) {
2107
- v = v.replace($T, '');
2108
- flag = true;
2109
- } else if (v.indexOf($ON) === 0) {
2110
- var name = v.replace($ON, '');
2111
-
2112
- v = function v() {
2113
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2114
- args[_key] = arguments[_key];
2115
- }
2116
-
2117
- var callback = args[0].api.getGlobalEvent(name);
2118
-
2119
- if (callback) {
2120
- return callback.call.apply(callback, [this].concat(args));
2121
- }
2122
-
2123
- return undefined;
2124
- };
2125
-
2126
- v.__json = fn;
2127
- v.__inject = true;
2128
- return v;
2129
- } else if (v.indexOf($TX) === 0) {
2130
- v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2131
- v.__json = fn;
2132
- v.__inject = true;
2133
- return v;
2134
- } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2135
- flag = true;
2136
- }
2137
-
2138
- if (!flag) return fn;
2139
- var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2140
- val.__json = fn;
2141
- return val;
2142
- } catch (e) {
2143
- err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2144
- return undefined;
2145
- }
2146
- }
2147
-
2148
- return fn;
2149
- }
2150
- function parseJson(json, mode) {
2151
- return JSON.parse(json, function (k, v) {
2152
- if (is.Undef(v) || !v.indexOf) return v;
2153
- return parseFn(v, mode);
2154
- });
2155
- }
2156
-
2157
- var id$2 = 0;
2158
- function uniqueId() {
2159
- var num = 370 + ++id$2;
2160
- return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
2161
- }
2162
-
2163
- function deepSet(data, idx, val) {
2164
- var _data = data,
2165
- to;
2166
- (idx || '').split('.').forEach(function (v) {
2167
- if (to) {
2168
- if (!_data[to] || _typeof(_data[to]) != 'object') {
2169
- _data[to] = {};
2170
- }
2171
-
2172
- _data = _data[to];
2173
- }
2174
-
2175
- to = v;
2176
- });
2177
- _data[to] = val;
2178
- return _data;
2179
- }
2180
-
2181
2070
  var getRuleInject = function getRuleInject(vm, parent) {
2182
2071
  if (!vm || vm === parent) {
2183
2072
  return;
@@ -2212,6 +2101,7 @@ function $FormCreate(FormCreate, components, directives) {
2212
2101
  }
2213
2102
  },
2214
2103
  extendOption: Boolean,
2104
+ driver: String,
2215
2105
  modelValue: Object,
2216
2106
  disabled: {
2217
2107
  type: Boolean,
@@ -2322,10 +2212,31 @@ function $FormCreate(FormCreate, components, directives) {
2322
2212
  document.head.appendChild(styleEl);
2323
2213
  }
2324
2214
  });
2215
+ var emit$topForm = debounce(function () {
2216
+ fc.bus.$emit('$loadData.$topForm');
2217
+ }, 100);
2218
+ var emit$form = debounce(function () {
2219
+ fc.bus.$emit('$loadData.$form');
2220
+ }, 100);
2221
+
2222
+ var emit$change = function emit$change(field) {
2223
+ fc.bus.$emit('change-$form.' + field);
2224
+ };
2225
+
2325
2226
  onMounted(function () {
2227
+ if (parent) {
2228
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2229
+ fapi.top.bus.$on('change', emit$change);
2230
+ }
2231
+
2326
2232
  fc.mounted();
2327
2233
  });
2328
2234
  onBeforeUnmount(function () {
2235
+ if (parent) {
2236
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2237
+ fapi.top.bus.$off('change', emit$change);
2238
+ }
2239
+
2329
2240
  styleEl && document.head.removeChild(styleEl);
2330
2241
  rmSubForm();
2331
2242
  data.destroyed = true;
@@ -2388,6 +2299,13 @@ function $FormCreate(FormCreate, components, directives) {
2388
2299
 
2389
2300
  data.updateValue = json;
2390
2301
  vm.emit('update:modelValue', value);
2302
+ nextTick(function () {
2303
+ emit$form();
2304
+
2305
+ if (!parent) {
2306
+ emit$topForm();
2307
+ }
2308
+ });
2391
2309
  }
2392
2310
  });
2393
2311
  },
@@ -2475,6 +2393,105 @@ function attrs() {
2475
2393
  return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2476
2394
  }
2477
2395
 
2396
+ function format(type, msg, rule) {
2397
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2398
+ }
2399
+ function err(msg, rule) {
2400
+ console.error(format('err', msg, rule));
2401
+ }
2402
+ function logError(e) {
2403
+ err(e.toString());
2404
+ console.error(e);
2405
+ }
2406
+
2407
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2408
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2409
+ var $T = '$FN:';
2410
+ var $TX = '$FNX:';
2411
+ var $ON = '$GLOBAL:';
2412
+ var FUNCTION = 'function';
2413
+ function toJson(obj, space) {
2414
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2415
+ if (val && val._isVue === true) return undefined;
2416
+
2417
+ if (_typeof(val) !== FUNCTION) {
2418
+ return val;
2419
+ }
2420
+
2421
+ if (val.__json) {
2422
+ return val.__json;
2423
+ }
2424
+
2425
+ if (val.__origin) val = val.__origin;
2426
+ if (val.__emit) return undefined;
2427
+ return PREFIX + val + SUFFIX;
2428
+ }, space);
2429
+ }
2430
+
2431
+ function makeFn(fn) {
2432
+ return new Function('return ' + fn)();
2433
+ }
2434
+
2435
+ function parseFn(fn, mode) {
2436
+ if (fn && is.String(fn) && fn.length > 4) {
2437
+ var v = fn.trim();
2438
+ var flag = false;
2439
+
2440
+ try {
2441
+ if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2442
+ v = v.replace(SUFFIX, '').replace(PREFIX, '');
2443
+ flag = true;
2444
+ } else if (v.indexOf($T) === 0) {
2445
+ v = v.replace($T, '');
2446
+ flag = true;
2447
+ } else if (v.indexOf($ON) === 0) {
2448
+ var name = v.replace($ON, '');
2449
+
2450
+ v = function v() {
2451
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2452
+ args[_key] = arguments[_key];
2453
+ }
2454
+
2455
+ var callback = args[0].api.getGlobalEvent(name);
2456
+
2457
+ if (callback) {
2458
+ return callback.call.apply(callback, [this].concat(args));
2459
+ }
2460
+
2461
+ return undefined;
2462
+ };
2463
+
2464
+ v.__json = fn;
2465
+ v.__inject = true;
2466
+ return v;
2467
+ } else if (v.indexOf($TX) === 0) {
2468
+ v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2469
+ v.__json = fn;
2470
+ v.__inject = true;
2471
+ return v;
2472
+ } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2473
+ flag = true;
2474
+ }
2475
+
2476
+ if (!flag) return fn;
2477
+ var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2478
+ val.__json = fn;
2479
+ return val;
2480
+ } catch (e) {
2481
+ err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2482
+ return undefined;
2483
+ }
2484
+ }
2485
+
2486
+ return fn;
2487
+ }
2488
+ function parseJson(json, mode) {
2489
+ return JSON.parse(json, function (k, v) {
2490
+ if (is.Undef(v) || !v.indexOf) return v;
2491
+ return parseFn(v, mode);
2492
+ });
2493
+ }
2494
+
2478
2495
  function enumerable(value, writable) {
2479
2496
  return {
2480
2497
  value: value,
@@ -2693,6 +2710,27 @@ var condition = {
2693
2710
  return new RegExp(b, 'g').test(a);
2694
2711
  }
2695
2712
  };
2713
+ function deepGet(val, split) {
2714
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2715
+ if (val != null) {
2716
+ val = val[k];
2717
+ }
2718
+ });
2719
+ return val;
2720
+ }
2721
+ function extractVar(str) {
2722
+ var regex = /{{\s*(.*?)\s*}}/g;
2723
+ var match;
2724
+ var matches = {};
2725
+
2726
+ while ((match = regex.exec(str)) !== null) {
2727
+ if (match[1]) {
2728
+ matches[match[1]] = true;
2729
+ }
2730
+ }
2731
+
2732
+ return Object.keys(matches);
2733
+ }
2696
2734
 
2697
2735
  function baseRule() {
2698
2736
  return {
@@ -2832,7 +2870,7 @@ function fetch$1(option) {
2832
2870
 
2833
2871
  var headers = option.headers || {};
2834
2872
  Object.keys(headers).forEach(function (item) {
2835
- if (headers[item] !== null) {
2873
+ if (headers[item] != null) {
2836
2874
  xhr.setRequestHeader(item, headers[item]);
2837
2875
  }
2838
2876
  });
@@ -2852,12 +2890,7 @@ function asyncFetch(config) {
2852
2890
  fn = parse;
2853
2891
  } else if (parse && is.String(parse)) {
2854
2892
  fn = function fn(v) {
2855
- parse.split('.').forEach(function (k) {
2856
- if (v) {
2857
- v = v[k];
2858
- }
2859
- });
2860
- return v;
2893
+ return deepGet(v, parse);
2861
2894
  };
2862
2895
  }
2863
2896
 
@@ -3322,6 +3355,18 @@ function Api(h) {
3322
3355
  findRules(ctx ? ctx.loadChildrenPending() : rule.children);
3323
3356
  return rules;
3324
3357
  },
3358
+ getParentSubRule: function getParentSubRule(id) {
3359
+ var flag = _typeof(id) === 'object';
3360
+ var ctx = flag ? byCtx(id) : h.getCtx(id);
3361
+
3362
+ if (ctx) {
3363
+ var group = ctx.getParentGroup();
3364
+
3365
+ if (group) {
3366
+ return group.rule;
3367
+ }
3368
+ }
3369
+ },
3325
3370
  getChildrenFormData: function getChildrenFormData(id) {
3326
3371
  var rules = api.getChildrenRuleList(id);
3327
3372
  return rules.reduce(function (formData, rule) {
@@ -3331,12 +3376,14 @@ function Api(h) {
3331
3376
  },
3332
3377
  setChildrenFormData: function setChildrenFormData(id, formData, cover) {
3333
3378
  var rules = api.getChildrenRuleList(id);
3334
- rules.forEach(function (rule) {
3335
- if (hasProperty(formData, rule.field)) {
3336
- rule.value = formData[rule.field];
3337
- } else if (cover) {
3338
- rule.value = undefined;
3339
- }
3379
+ h.deferSyncValue(function () {
3380
+ rules.forEach(function (rule) {
3381
+ if (hasProperty(formData, rule.field)) {
3382
+ rule.value = formData[rule.field];
3383
+ } else if (cover) {
3384
+ rule.value = undefined;
3385
+ }
3386
+ });
3340
3387
  });
3341
3388
  },
3342
3389
  getGlobalEvent: function getGlobalEvent(name) {
@@ -3398,11 +3445,14 @@ function Api(h) {
3398
3445
  });
3399
3446
  },
3400
3447
  getData: function getData(id, def) {
3401
- return h.fc.getData(id, def);
3448
+ return h.fc.getLoadData(id, def);
3402
3449
  },
3403
3450
  setData: function setData(id, data) {
3404
3451
  return h.fc.setData(id, data);
3405
3452
  },
3453
+ refreshData: function refreshData(id) {
3454
+ return h.fc.refreshData(id);
3455
+ },
3406
3456
  helper: {
3407
3457
  tidyFields: tidyFields,
3408
3458
  props: props
@@ -3481,6 +3531,34 @@ function lower(str) {
3481
3531
  return str.replace(str[0], str[0].toLowerCase());
3482
3532
  }
3483
3533
 
3534
+ function toString(val) {
3535
+ return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
3536
+ }
3537
+
3538
+ var id$2 = 0;
3539
+ function uniqueId() {
3540
+ var num = 370 + ++id$2;
3541
+ return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
3542
+ }
3543
+
3544
+ function deepSet(data, idx, val) {
3545
+ var _data = data,
3546
+ to;
3547
+ (idx || '').split('.').forEach(function (v) {
3548
+ if (to) {
3549
+ if (!_data[to] || _typeof(_data[to]) != 'object') {
3550
+ _data[to] = {};
3551
+ }
3552
+
3553
+ _data = _data[to];
3554
+ }
3555
+
3556
+ to = v;
3557
+ });
3558
+ _data[to] = val;
3559
+ return _data;
3560
+ }
3561
+
3484
3562
  function useRender$1(Render) {
3485
3563
  extend(Render.prototype, {
3486
3564
  initRender: function initRender() {
@@ -3736,7 +3814,7 @@ function useRender$1(Render) {
3736
3814
  return vn;
3737
3815
  },
3738
3816
  getModelField: function getModelField(ctx) {
3739
- return ctx.rule.modelField || ctx.parser.modelField || this.fc.modelFields[this.vNode.aliasMap[ctx.type]] || this.fc.modelFields[ctx.type] || this.fc.modelFields[ctx.originType] || 'modelValue';
3817
+ return ctx.prop.modelField || ctx.parser.modelField || this.fc.modelFields[this.vNode.aliasMap[ctx.type]] || this.fc.modelFields[ctx.type] || this.fc.modelFields[ctx.originType] || 'modelValue';
3740
3818
  },
3741
3819
  isFragment: function isFragment(ctx) {
3742
3820
  return ctx.type === 'fragment' || ctx.type === 'template';
@@ -3792,6 +3870,9 @@ function useRender$1(Render) {
3792
3870
 
3793
3871
  _this7.onMounted(ctx, vn.el);
3794
3872
  },
3873
+ 'fc.updateValue': function fcUpdateValue(data) {
3874
+ _this7.$handle.onUpdateValue(ctx, data);
3875
+ },
3795
3876
  'fc.el': function fcEl(el) {
3796
3877
  ctx.exportEl = el;
3797
3878
 
@@ -3867,10 +3948,18 @@ function useRender$1(Render) {
3867
3948
  },
3868
3949
  defaultRender: function defaultRender(ctx, children) {
3869
3950
  var prop = ctx.prop;
3870
- if (prop.component) return this.vNode.makeComponent(prop.component, prop, children);
3951
+
3952
+ if (prop.component) {
3953
+ if (typeof prop.component === 'string') {
3954
+ return this.vNode.make(prop.component, prop, children);
3955
+ } else {
3956
+ return this.vNode.makeComponent(prop.component, prop, children);
3957
+ }
3958
+ }
3959
+
3871
3960
  if (this.vNode[ctx.type]) return this.vNode[ctx.type](prop, children);
3872
3961
  if (this.vNode[ctx.originType]) return this.vNode[ctx.originType](prop, children);
3873
- return this.vNode.make(lower(ctx.originType), prop, children);
3962
+ return this.vNode.make(lower(prop.type), prop, children);
3874
3963
  },
3875
3964
  renderRule: function renderRule(rule, children, origin) {
3876
3965
  var _this9 = this;
@@ -4045,23 +4134,76 @@ function useInject(Handler) {
4045
4134
  _fn = _fn.__origin;
4046
4135
  }
4047
4136
 
4048
- var h = this;
4137
+ var h = this;
4138
+
4139
+ var fn = function fn() {
4140
+ var data = h.getInjectData(self, _inject2);
4141
+
4142
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
4143
+ args[_key2] = arguments[_key2];
4144
+ }
4145
+
4146
+ data.args = [].concat(args);
4147
+ args.unshift(data);
4148
+ return _fn.apply(this, args);
4149
+ };
4150
+
4151
+ fn.__origin = _fn;
4152
+ fn.__json = _fn.__json;
4153
+ return fn;
4154
+ },
4155
+ loadStrVar: function loadStrVar(str, get) {
4156
+ var _this3 = this;
4157
+
4158
+ if (str && typeof str === 'string' && str.indexOf('{{') > -1 && str.indexOf('}}') > -1) {
4159
+ var tmp = str;
4160
+ var vars = extractVar(str);
4161
+ var lastVal;
4162
+ vars.forEach(function (v) {
4163
+ var split = v.split('||');
4164
+ var field = split[0].trim();
4165
+
4166
+ if (field) {
4167
+ var def = (split[1] || '').trim();
4168
+ var val = get ? get(field, def) : _this3.fc.getLoadData(field, def);
4169
+ lastVal = val;
4170
+ str = str.replaceAll("{{".concat(v, "}}"), val == null ? '' : val);
4171
+ }
4172
+ });
4173
+
4174
+ if (vars.length === 1 && tmp === "{{".concat(vars[0], "}}")) {
4175
+ return lastVal;
4176
+ }
4177
+ }
4178
+
4179
+ return str;
4180
+ },
4181
+ loadFetchVar: function loadFetchVar(options, get) {
4182
+ var _this4 = this;
4183
+
4184
+ var loadVal = function loadVal(str) {
4185
+ return _this4.loadStrVar(str, get);
4186
+ };
4049
4187
 
4050
- var fn = function fn() {
4051
- var data = h.getInjectData(self, _inject2);
4188
+ options.action = loadVal(options.action);
4052
4189
 
4053
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
4054
- args[_key2] = arguments[_key2];
4055
- }
4190
+ if (options.headers) {
4191
+ var _headers = {};
4192
+ Object.keys(options.headers).forEach(function (k) {
4193
+ _headers[loadVal(k)] = loadVal(options.headers[k]);
4194
+ });
4195
+ options.headers = _headers;
4196
+ }
4056
4197
 
4057
- data.args = [].concat(args);
4058
- args.unshift(data);
4059
- return _fn.apply(this, args);
4060
- };
4198
+ if (options.data) {
4199
+ var _data = {};
4200
+ Object.keys(options.data).forEach(function (k) {
4201
+ _data[loadVal(k)] = loadVal(options.data[k]);
4202
+ });
4203
+ options.data = _data;
4204
+ }
4061
4205
 
4062
- fn.__origin = _fn;
4063
- fn.__json = _fn.__json;
4064
- return fn;
4206
+ return options;
4065
4207
  }
4066
4208
  });
4067
4209
  }
@@ -4181,7 +4323,6 @@ function RuleContext(handle, rule, defaultValue) {
4181
4323
  defaultValue: isInput ? deepCopy(defaultValue) : undefined,
4182
4324
  field: rule.field || undefined
4183
4325
  });
4184
- this.updateType();
4185
4326
  this.updateKey();
4186
4327
  bind(this);
4187
4328
  this.update(handle, true);
@@ -4317,6 +4458,7 @@ extend(RuleContext.prototype, {
4317
4458
  updateType: function updateType() {
4318
4459
  this.originType = this.rule.type;
4319
4460
  this.type = toCase(this.rule.type);
4461
+ this.trueType = this.$handle.getType(this.originType);
4320
4462
  },
4321
4463
  setParser: function setParser(parser) {
4322
4464
  this.parser = parser;
@@ -4405,7 +4547,6 @@ extend(RuleContext.prototype, {
4405
4547
  computed: {},
4406
4548
  el: undef,
4407
4549
  $handle: undef,
4408
- $render: undef,
4409
4550
  $api: undef,
4410
4551
  vm: undef,
4411
4552
  vNode: undef,
@@ -4461,7 +4602,6 @@ extend(RuleContext.prototype, {
4461
4602
  $render: handle.$render,
4462
4603
  $api: handle.api,
4463
4604
  vm: handle.vm,
4464
- trueType: handle.getType(this.originType),
4465
4605
  vNode: handle.$render.vNode,
4466
4606
  updated: false,
4467
4607
  cacheValue: this.rule.value
@@ -4469,6 +4609,7 @@ extend(RuleContext.prototype, {
4469
4609
  !init && this.unwatch();
4470
4610
  this.watchTo();
4471
4611
  this.link();
4612
+ this.updateType();
4472
4613
  }
4473
4614
  });
4474
4615
 
@@ -4940,6 +5081,28 @@ function useInput(Handler) {
4940
5081
  this.setValue(ctx, val, value);
4941
5082
  }
4942
5083
  },
5084
+ onUpdateValue: function onUpdateValue(ctx, data) {
5085
+ var _this = this;
5086
+
5087
+ this.deferSyncValue(function () {
5088
+ var group = ctx.getParentGroup();
5089
+ var subForm = group ? _this.subRuleData[group.id] : null;
5090
+ var subData = {};
5091
+ Object.keys(data || {}).forEach(function (k) {
5092
+ if (subForm && hasProperty(subForm, k)) {
5093
+ subData[k] = data[k];
5094
+ } else if (hasProperty(_this.api.form, k)) {
5095
+ _this.api.form[k] = data[k];
5096
+ } else if (_this.api.top !== _this.api && hasProperty(_this.api.top.form, k)) {
5097
+ _this.api.top.form[k] = data[k];
5098
+ }
5099
+ });
5100
+
5101
+ if (Object.keys(subData).length) {
5102
+ _this.api.setChildrenFormData(group.rule, subData);
5103
+ }
5104
+ });
5105
+ },
4943
5106
  onBaseInput: function onBaseInput(ctx, value) {
4944
5107
  this.setFormData(ctx, value);
4945
5108
  ctx.modelValue = value;
@@ -4971,11 +5134,23 @@ function useInput(Handler) {
4971
5134
  return this.formData[ctx.id];
4972
5135
  },
4973
5136
  syncForm: function syncForm() {
4974
- var _this = this;
5137
+ var _this2 = this;
4975
5138
 
4976
5139
  var data = reactive({});
4977
- this.fields().reduce(function (initial, field) {
4978
- var ctx = _this.getCtx(field);
5140
+ var fields = this.fields();
5141
+
5142
+ if (this.options.appendValue !== false) {
5143
+ Object.keys(this.appendData).reduce(function (initial, field) {
5144
+ if (fields.indexOf(field) === -1) {
5145
+ initial[field] = toRef(_this2.appendData, field);
5146
+ }
5147
+
5148
+ return initial;
5149
+ }, data);
5150
+ }
5151
+
5152
+ fields.reduce(function (initial, field) {
5153
+ var ctx = _this2.getCtx(field);
4979
5154
 
4980
5155
  initial[field] = toRef(ctx.rule, 'value');
4981
5156
  return initial;
@@ -5015,7 +5190,7 @@ function useInput(Handler) {
5015
5190
  return this.deferSyncFn.sync = true;
5016
5191
  }
5017
5192
 
5018
- this.vm.setupState.updateValue(_objectSpread2(_objectSpread2({}, this.options.appendValue !== false ? this.appendData : {}), this.form));
5193
+ this.vm.setupState.updateValue(_objectSpread2({}, this.form));
5019
5194
  },
5020
5195
  isChange: function isChange(ctx, value) {
5021
5196
  return JSON.stringify(this.getFormData(ctx), strFn) !== JSON.stringify(value, strFn);
@@ -5024,11 +5199,11 @@ function useInput(Handler) {
5024
5199
  return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5025
5200
  },
5026
5201
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5027
- var _this2 = this;
5202
+ var _this3 = this;
5028
5203
 
5029
5204
  if (is.Function(ctx.rule.update)) {
5030
5205
  var state = invoke(function () {
5031
- return ctx.rule.update(val, ctx.origin, _this2.api, {
5206
+ return ctx.rule.update(val, ctx.origin, _this3.api, {
5032
5207
  origin: origin || 'change',
5033
5208
  linkField: field
5034
5209
  });
@@ -5052,18 +5227,18 @@ function useInput(Handler) {
5052
5227
  this.refreshUpdate(ctx, val, origin, field);
5053
5228
  },
5054
5229
  appendLink: function appendLink(ctx) {
5055
- var _this3 = this;
5230
+ var _this4 = this;
5056
5231
 
5057
5232
  var link = ctx.rule.link;
5058
5233
  is.trueArray(link) && link.forEach(function (field) {
5059
5234
  var fn = function fn() {
5060
- return _this3.refreshRule(ctx, ctx.rule.value, 'link', field);
5235
+ return _this4.refreshRule(ctx, ctx.rule.value, 'link', field);
5061
5236
  };
5062
5237
 
5063
- _this3.bus.$on('change-' + field, fn);
5238
+ _this4.bus.$on('change-' + field, fn);
5064
5239
 
5065
5240
  ctx.linkOn.push(function () {
5066
- return _this3.bus.$off('change-' + field, fn);
5241
+ return _this4.bus.$off('change-' + field, fn);
5067
5242
  });
5068
5243
  });
5069
5244
  },
@@ -5087,9 +5262,17 @@ var BaseParser = {
5087
5262
  },
5088
5263
  mounted: function mounted(ctx) {},
5089
5264
  render: function render(children, ctx) {
5265
+ if (ctx.$handle.fc.renderDriver && ctx.$handle.fc.renderDriver.defaultRender) {
5266
+ return ctx.$handle.fc.renderDriver.defaultRender(ctx, children);
5267
+ }
5268
+
5090
5269
  return ctx.$render.defaultRender(ctx, children);
5091
5270
  },
5092
5271
  preview: function preview(children, ctx) {
5272
+ if (ctx.$handle.fc.renderDriver && ctx.$handle.fc.renderDriver.defaultPreview) {
5273
+ return ctx.$handle.fc.renderDriver.defaultPreview(ctx, children);
5274
+ }
5275
+
5093
5276
  return this.render(children, ctx);
5094
5277
  },
5095
5278
  mergeProp: function mergeProp(ctx) {}
@@ -5148,6 +5331,18 @@ function useContext(Handler) {
5148
5331
  },
5149
5332
  getParser: function getParser(ctx) {
5150
5333
  var list = this.fc.parsers;
5334
+ var renderDriver = this.fc.renderDriver;
5335
+
5336
+ if (renderDriver) {
5337
+ var _list = renderDriver.parsers || {};
5338
+
5339
+ var parser = _list[ctx.originType] || _list[toCase(ctx.type)] || _list[ctx.trueType];
5340
+
5341
+ if (parser) {
5342
+ return parser;
5343
+ }
5344
+ }
5345
+
5151
5346
  return list[ctx.originType] || list[toCase(ctx.type)] || list[ctx.trueType] || BaseParser;
5152
5347
  },
5153
5348
  bindParser: function bindParser(ctx) {
@@ -5345,7 +5540,7 @@ function useContext(Handler) {
5345
5540
 
5346
5541
  this.deferSyncValue(function () {
5347
5542
  o && o.forEach(function (child) {
5348
- if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx && child.__fc__.root !== n) {
5543
+ if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx) {
5349
5544
  _this2.rmCtx(child.__fc__);
5350
5545
  }
5351
5546
  });
@@ -5896,6 +6091,17 @@ extend(Manager.prototype, {
5896
6091
  }), opt, this.mergeOptionsRule);
5897
6092
  },
5898
6093
  updateOptions: function updateOptions(options) {
6094
+ var _this3 = this;
6095
+
6096
+ if (this.$handle.fc.renderDriver && this.$handle.fc.renderDriver.updateOptions) {
6097
+ invoke(function () {
6098
+ _this3.$handle.fc.renderDriver.updateOptions(options, {
6099
+ handle: _this3.$handle,
6100
+ api: _this3.$handle.api
6101
+ });
6102
+ });
6103
+ }
6104
+
5899
6105
  this.options = this.mergeOptions([options], this.getDefaultOptions());
5900
6106
  this.update();
5901
6107
  },
@@ -5914,39 +6120,48 @@ var loadData = function loadData(fc) {
5914
6120
  var loadData = {
5915
6121
  name: 'loadData',
5916
6122
  _fn: [],
5917
- created: function created(inject, rule, api) {
6123
+ mounted: function mounted(inject, rule, api) {
5918
6124
  this.deleted(inject);
5919
6125
  var attrs = toArray(inject.getValue());
5920
- var events = [];
6126
+ var unwatchs = [];
5921
6127
  attrs.forEach(function (attr) {
5922
- if (attr) {
5923
- var on = function on() {
5924
- if (attr.watch !== false) {
5925
- fc.bus.$off('p.loadData.' + attr.attr, on);
5926
- fc.bus.$once('p.loadData.' + attr.attr, on);
6128
+ if (attr && (attr.attr || attr.template)) {
6129
+ var unwatch = fc.watchLoadData(debounce(function (get) {
6130
+ var value;
6131
+
6132
+ if (attr.template) {
6133
+ value = fc.$handle.loadStrVar(attr.template, get);
6134
+ } else {
6135
+ value = get(attr.attr, attr["default"]);
5927
6136
  }
5928
6137
 
5929
- var value = undefined;
6138
+ if (attr.copy !== false) {
6139
+ value = deepCopy(value);
6140
+ }
5930
6141
 
5931
- if (attr.attr) {
5932
- value = fc.loadData[attr.attr] || attr["default"];
6142
+ var _rule = attr.modify ? rule : inject.getProp();
5933
6143
 
5934
- if (attr.copy !== false) {
5935
- value = deepCopy(value);
6144
+ if (attr.to === 'child') {
6145
+ if (_rule.children) {
6146
+ _rule.children[0] = value;
6147
+ } else {
6148
+ _rule.children = [value];
5936
6149
  }
6150
+ } else {
6151
+ deepSet(_rule, attr.to || 'options', value);
5937
6152
  }
5938
6153
 
5939
- deepSet(inject.getProp(), attr.to || 'options', value);
5940
6154
  api.sync(rule);
5941
- };
6155
+ }, attr.wait || 300));
5942
6156
 
5943
- events.push(function () {
5944
- return fc.bus.$off('p.loadData.' + attr.attr, on);
5945
- });
5946
- on();
6157
+ if (attr.watch !== false) {
6158
+ unwatchs.push(unwatch);
6159
+ } else {
6160
+ unwatch();
6161
+ }
5947
6162
  }
5948
6163
  });
5949
- this._fn[inject.id] = events;
6164
+ this._fn[inject.id] = unwatchs;
5950
6165
  },
5951
6166
  deleted: function deleted(inject) {
5952
6167
  if (this._fn[inject.id]) {
@@ -6009,6 +6224,7 @@ var fetch = function fetch(fc) {
6009
6224
 
6010
6225
  function run(inject, rule, api) {
6011
6226
  var option = inject.value;
6227
+ fetchAttr.deleted(inject);
6012
6228
 
6013
6229
  if (is.Function(option)) {
6014
6230
  option = option(rule, api);
@@ -6063,76 +6279,89 @@ var fetch = function fetch(fc) {
6063
6279
  }
6064
6280
  };
6065
6281
 
6066
- var config = _objectSpread2(_objectSpread2({
6067
- headers: {}
6068
- }, option), {}, {
6069
- onSuccess: function onSuccess(body, flag) {
6070
- if (check()) return;
6282
+ fetchAttr._fn[inject.id] = fc.watchLoadData(debounce(function (get, change) {
6283
+ if (change && option.watch === false) {
6284
+ return fetchAttr._fn[inject.id]();
6285
+ }
6071
6286
 
6072
- var fn = function fn(v) {
6073
- return flag ? v : hasProperty(v, 'data') ? v.data : v;
6074
- };
6287
+ var _option = fc.$handle.loadFetchVar(deepCopy(option), get);
6075
6288
 
6076
- var parse = parseFn(option.parse);
6289
+ var config = _objectSpread2(_objectSpread2({
6290
+ headers: {}
6291
+ }, _option), {}, {
6292
+ onSuccess: function onSuccess(body, flag) {
6293
+ if (check()) return;
6077
6294
 
6078
- if (is.Function(parse)) {
6079
- fn = parse;
6080
- } else if (parse && is.String(parse)) {
6081
- fn = function fn(v) {
6082
- parse.split('.').forEach(function (k) {
6083
- if (v) {
6084
- v = v[k];
6085
- }
6086
- });
6087
- return v;
6295
+ var fn = function fn(v) {
6296
+ return flag ? v : hasProperty(v, 'data') ? v.data : v;
6088
6297
  };
6089
- }
6090
6298
 
6091
- set(fn(body, rule, api));
6092
- api.sync(rule);
6093
- },
6094
- onError: function onError(e) {
6095
- set(undefined);
6096
- if (check()) return;
6299
+ var parse = parseFn(_option.parse);
6097
6300
 
6098
- (_onError || function (e) {
6099
- return err(e.message || 'fetch fail ' + option.action);
6100
- })(e, rule, api);
6101
- }
6102
- });
6301
+ if (is.Function(parse)) {
6302
+ fn = parse;
6303
+ } else if (parse && is.String(parse)) {
6304
+ fn = function fn(v) {
6305
+ return deepGet(v, parse);
6306
+ };
6307
+ }
6103
6308
 
6104
- fc.$handle.beforeFetch(config, {
6105
- rule: rule,
6106
- api: api
6107
- }).then(function () {
6108
- if (is.Function(option.action)) {
6109
- option.action(rule, api).then(function (val) {
6110
- config.onSuccess(val, true);
6111
- })["catch"](function (e) {
6112
- config.onError(e);
6113
- });
6114
- return;
6115
- }
6309
+ set(fn(body, rule, api));
6310
+ api.sync(rule);
6311
+ },
6312
+ onError: function onError(e) {
6313
+ set(undefined);
6314
+ if (check()) return;
6116
6315
 
6117
- invoke(function () {
6118
- return fc.create.fetch(config, {
6119
- inject: inject,
6120
- rule: rule,
6121
- api: api
6316
+ (_onError || function (e) {
6317
+ return err(e.message || 'fetch fail ' + _option.action);
6318
+ })(e, rule, api);
6319
+ }
6320
+ });
6321
+
6322
+ fc.$handle.beforeFetch(config, {
6323
+ rule: rule,
6324
+ api: api
6325
+ }).then(function () {
6326
+ if (is.Function(_option.action)) {
6327
+ _option.action(rule, api).then(function (val) {
6328
+ config.onSuccess(val, true);
6329
+ })["catch"](function (e) {
6330
+ config.onError(e);
6331
+ });
6332
+
6333
+ return;
6334
+ }
6335
+
6336
+ invoke(function () {
6337
+ return fc.create.fetch(config, {
6338
+ inject: inject,
6339
+ rule: rule,
6340
+ api: api
6341
+ });
6122
6342
  });
6123
6343
  });
6124
- });
6344
+ }, option.wait || 600));
6125
6345
  }
6126
6346
 
6127
- return {
6347
+ var fetchAttr = {
6128
6348
  name: 'fetch',
6129
- loaded: function loaded() {
6349
+ _fn: [],
6350
+ mounted: function mounted() {
6130
6351
  run.apply(void 0, arguments);
6131
6352
  },
6132
6353
  watch: function watch() {
6133
6354
  run.apply(void 0, arguments);
6355
+ },
6356
+ deleted: function deleted(inject) {
6357
+ if (this._fn[inject.id]) {
6358
+ this._fn[inject.id]();
6359
+ }
6360
+
6361
+ inject.clearProp();
6134
6362
  }
6135
6363
  };
6364
+ return fetchAttr;
6136
6365
  };
6137
6366
 
6138
6367
  var $provider = {
@@ -6160,6 +6389,71 @@ var html = {
6160
6389
  }
6161
6390
  };
6162
6391
 
6392
+ function getCookie(name) {
6393
+ name = name + '=';
6394
+ var decodedCookie = decodeURIComponent(document.cookie);
6395
+ var cookieArray = decodedCookie.split(';');
6396
+
6397
+ for (var i = 0; i < cookieArray.length; i++) {
6398
+ var cookie = cookieArray[i];
6399
+
6400
+ while (cookie.charAt(0) === ' ') {
6401
+ cookie = cookie.substring(1);
6402
+ }
6403
+
6404
+ if (cookie.indexOf(name) === 0) {
6405
+ cookie = cookie.substring(name.length, cookie.length);
6406
+
6407
+ try {
6408
+ return JSON.parse(cookie);
6409
+ } catch (e) {
6410
+ return cookie;
6411
+ }
6412
+ }
6413
+ }
6414
+
6415
+ return null;
6416
+ }
6417
+
6418
+ function getLocalStorage(name) {
6419
+ var value = localStorage.getItem(name);
6420
+
6421
+ if (value) {
6422
+ try {
6423
+ return JSON.parse(value);
6424
+ } catch (e) {
6425
+ return value;
6426
+ }
6427
+ }
6428
+
6429
+ return null;
6430
+ }
6431
+
6432
+ function baseDriver(driver, name) {
6433
+ if (!name) {
6434
+ return null;
6435
+ }
6436
+
6437
+ var split = name.split('.');
6438
+ var value = driver(split.shift());
6439
+
6440
+ if (!split.length) {
6441
+ return value;
6442
+ }
6443
+
6444
+ if (value == null) {
6445
+ return null;
6446
+ }
6447
+
6448
+ return deepGet(value, split);
6449
+ }
6450
+ function cookieDriver(name) {
6451
+ return baseDriver(getCookie, name);
6452
+ }
6453
+ function localStorageDriver(name) {
6454
+ return baseDriver(getLocalStorage, name);
6455
+ }
6456
+
6163
6457
  function parseProp(name, id) {
6164
6458
  var prop;
6165
6459
 
@@ -6199,6 +6493,7 @@ function FormCreateFactory(config) {
6199
6493
  var parsers = {};
6200
6494
  var directives = {};
6201
6495
  var modelFields = {};
6496
+ var drivers = {};
6202
6497
  var useApps = [];
6203
6498
  var listener = [];
6204
6499
  var extendApiFn = [config.extendApi];
@@ -6357,23 +6652,66 @@ function FormCreateFactory(config) {
6357
6652
  formulas[name] = fn;
6358
6653
  }
6359
6654
 
6360
- function _emitData(id) {
6361
- Object.keys(instance).forEach(function (v) {
6362
- var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6363
- apis.forEach(function (that) {
6364
- that.bus.$emit('p.loadData.' + id);
6655
+ function setDriver(name, driver) {
6656
+ if (driver.parsers) {
6657
+ Object.keys(driver.parsers).forEach(function (k) {
6658
+ driver.parsers[k] = setPrototypeOf(driver.parsers[k], BaseParser);
6365
6659
  });
6366
- });
6660
+ }
6661
+
6662
+ driver.name = name;
6663
+ drivers[name] = driver;
6664
+ }
6665
+
6666
+ function refreshData(id) {
6667
+ if (id) {
6668
+ Object.keys(instance).forEach(function (v) {
6669
+ var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6670
+ apis.forEach(function (that) {
6671
+ that.bus.$emit('$loadData.' + id);
6672
+ });
6673
+ });
6674
+ }
6367
6675
  }
6368
6676
 
6369
6677
  function setData(id, data) {
6370
6678
  loadData[id] = data;
6679
+ refreshData(id);
6680
+ }
6371
6681
 
6372
- _emitData(id);
6682
+ function setDataDriver(id, data) {
6683
+ var callback = function callback() {
6684
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6685
+ args[_key] = arguments[_key];
6686
+ }
6687
+
6688
+ return invoke(function () {
6689
+ return data.apply(void 0, args);
6690
+ });
6691
+ };
6692
+
6693
+ callback._driver = true;
6694
+ setData(id, callback);
6373
6695
  }
6374
6696
 
6375
6697
  function getData(id, def) {
6376
- return hasProperty(loadData, id) ? loadData[id] : def;
6698
+ var split = (id || '').split('.');
6699
+ id = split.shift();
6700
+ var field = split.join('.');
6701
+
6702
+ if (hasProperty(loadData, id)) {
6703
+ var val = loadData[id];
6704
+
6705
+ if (val && val._driver) {
6706
+ val = val(field);
6707
+ } else if (split.length) {
6708
+ val = deepGet(val, split);
6709
+ }
6710
+
6711
+ return val == null || val === '' ? def : val;
6712
+ } else {
6713
+ return def;
6714
+ }
6377
6715
  }
6378
6716
 
6379
6717
  function extendApi(fn) {
@@ -6382,8 +6720,7 @@ function FormCreateFactory(config) {
6382
6720
 
6383
6721
  function removeData(id) {
6384
6722
  delete loadData[id];
6385
-
6386
- _emitData(id);
6723
+ refreshData(id);
6387
6724
  }
6388
6725
 
6389
6726
  function on(name, callback) {
@@ -6413,14 +6750,18 @@ function FormCreateFactory(config) {
6413
6750
  components: components,
6414
6751
  directives: directives
6415
6752
  },
6753
+ drivers: drivers,
6754
+ renderDriver: null,
6416
6755
  setData: setData,
6417
6756
  getData: getData,
6757
+ refreshData: refreshData,
6418
6758
  loadData: loadData,
6419
6759
  CreateNode: CreateNode,
6420
6760
  bus: new Mitt(),
6421
- unwatch: null,
6761
+ unwatch: [],
6422
6762
  options: ref({}),
6423
- extendApiFn: extendApiFn
6763
+ extendApiFn: extendApiFn,
6764
+ fetchCache: new WeakMap()
6424
6765
  });
6425
6766
  listener.forEach(function (item) {
6426
6767
  _this.bus.$on(item.name, item.callback);
@@ -6454,7 +6795,7 @@ function FormCreateFactory(config) {
6454
6795
  var _this2 = this;
6455
6796
 
6456
6797
  if (this.isSub()) {
6457
- this.unwatch = watch(function () {
6798
+ this.unwatch.push(watch(function () {
6458
6799
  return _this2.vm.setupState.parent.setupState.fc.options.value;
6459
6800
  }, function () {
6460
6801
  _this2.initOptions();
@@ -6462,12 +6803,221 @@ function FormCreateFactory(config) {
6462
6803
  _this2.$handle.api.refresh();
6463
6804
  }, {
6464
6805
  deep: true
6465
- });
6806
+ }));
6466
6807
  }
6467
6808
 
6809
+ var driver = this.vm.setupState.parent ? this.vm.setupState.parent.setupState.fc.renderDriver : this.vm.props.driver;
6810
+ this.renderDriver = this.drivers[driver];
6468
6811
  this.initOptions();
6469
6812
  this.$handle.init();
6470
6813
  },
6814
+ globalDataDriver: function globalDataDriver(id) {
6815
+ var _this3 = this;
6816
+
6817
+ var split = id.split('.');
6818
+ var key = split.shift();
6819
+ var option = this.options.value.globalData && this.options.value.globalData[key];
6820
+
6821
+ if (option) {
6822
+ if (option.type === 'static') {
6823
+ return deepGet(option.data, split);
6824
+ } else {
6825
+ var val;
6826
+ var res = this.fetchCache.get(option);
6827
+
6828
+ if (res) {
6829
+ if (res.status) {
6830
+ val = deepGet(res.data, split);
6831
+ }
6832
+
6833
+ if (!res.loading) {
6834
+ return val;
6835
+ }
6836
+
6837
+ res.loading = false;
6838
+ this.fetchCache.set(option, res);
6839
+ } else {
6840
+ this.fetchCache.set(option, {
6841
+ status: false
6842
+ });
6843
+ }
6844
+
6845
+ var reload = debounce(function () {
6846
+ unwatch();
6847
+
6848
+ var res = _this3.fetchCache.get(option);
6849
+
6850
+ if (_this3.options.value.globalData && Object.values(_this3.options.value.globalData).indexOf(option) !== -1) {
6851
+ if (res) {
6852
+ res.loading = true;
6853
+
6854
+ _this3.fetchCache.set(option, res);
6855
+ }
6856
+
6857
+ _this3.bus.$emit('$loadData.$globalData.' + key);
6858
+ } else {
6859
+ _this3.fetchCache["delete"](option);
6860
+ }
6861
+ }, option.wait || 600);
6862
+
6863
+ var _emit = function _emit(data) {
6864
+ _this3.fetchCache.set(option, {
6865
+ status: true,
6866
+ data: data
6867
+ });
6868
+
6869
+ _this3.bus.$emit('$loadData.$globalData.' + key);
6870
+ };
6871
+
6872
+ var callback = function callback(get, change) {
6873
+ if (change && option.watch === false) {
6874
+ return unwatch();
6875
+ }
6876
+
6877
+ if (change) {
6878
+ reload();
6879
+ return;
6880
+ }
6881
+
6882
+ var options = _this3.$handle.loadFetchVar(copy$1(option), get);
6883
+
6884
+ _this3.$handle.api.fetch(options).then(function (res) {
6885
+ _emit(res);
6886
+ })["catch"](function (e) {
6887
+ _emit(null);
6888
+ });
6889
+ };
6890
+
6891
+ var unwatch = this.watchLoadData(callback);
6892
+ this.unwatch.push(unwatch);
6893
+ return val;
6894
+ }
6895
+ }
6896
+ },
6897
+ globalVarDriver: function globalVarDriver(id) {
6898
+ var _this4 = this;
6899
+
6900
+ var split = id.split('.');
6901
+ var key = split.shift();
6902
+ var option = this.options.value.globalVariable && this.options.value.globalVariable[key];
6903
+
6904
+ if (option) {
6905
+ var handle = is.Function(option) ? option : option.handle;
6906
+
6907
+ if (handle) {
6908
+ var val;
6909
+ var unwatch = this.watchLoadData(function (get, change) {
6910
+ if (change) {
6911
+ unwatch();
6912
+
6913
+ _this4.bus.$emit('$loadData.$var.' + key);
6914
+ }
6915
+
6916
+ val = invoke(function () {
6917
+ return handle(get, _this4.$handle.api);
6918
+ });
6919
+ });
6920
+ this.unwatch.push(unwatch);
6921
+ return val;
6922
+ }
6923
+ }
6924
+ },
6925
+ getLoadData: function getLoadData(id, def) {
6926
+ var val = null;
6927
+
6928
+ if (id != null) {
6929
+ var split = id.split('.');
6930
+ var key = split.shift();
6931
+
6932
+ if (key === '$form') {
6933
+ val = this.$handle.api.top.formData();
6934
+ } else if (key === '$subForm') {
6935
+ val = this.$handle.api.formData();
6936
+ } else if (key === '$options') {
6937
+ val = this.options.value;
6938
+ } else if (key === '$globalData') {
6939
+ val = this.globalDataDriver(split.join('.'));
6940
+ split = [];
6941
+ } else if (key === '$var') {
6942
+ val = this.globalVarDriver(split.join('.'));
6943
+ split = [];
6944
+ } else {
6945
+ val = getData(id, def);
6946
+ split = [];
6947
+ }
6948
+
6949
+ if (split.length) {
6950
+ val = deepGet(val, split);
6951
+ }
6952
+ }
6953
+
6954
+ return val == null || val === '' ? def : val;
6955
+ },
6956
+ watchLoadData: function watchLoadData(fn) {
6957
+ var _this5 = this;
6958
+
6959
+ var unwatch = {};
6960
+
6961
+ var run = function run(flag) {
6962
+ invoke(function () {
6963
+ fn(get, flag);
6964
+ });
6965
+ };
6966
+
6967
+ var get = function get(id, def) {
6968
+ if (unwatch[id]) {
6969
+ return unwatch[id].val;
6970
+ }
6971
+
6972
+ var val = _this5.getLoadData(id, def);
6973
+
6974
+ var split = id.split('.');
6975
+ var key = split.shift();
6976
+ var key2 = split.shift() || '';
6977
+ var callback = debounce(function () {
6978
+ if (key !== id) {
6979
+ var temp = _this5.getLoadData(id, def);
6980
+
6981
+ if (JSON.stringify(temp) !== JSON.stringify(unwatch[id].val)) {
6982
+ unwatch[id].val = temp;
6983
+ run(true);
6984
+ }
6985
+ } else {
6986
+ run(true);
6987
+ }
6988
+ }, 0);
6989
+
6990
+ _this5.bus.$on('$loadData.' + key, callback);
6991
+
6992
+ if (key2) {
6993
+ _this5.bus.$on('$loadData.' + key + '.' + key2, callback);
6994
+ }
6995
+
6996
+ unwatch[id] = {
6997
+ fn: function fn() {
6998
+ _this5.bus.$off('$loadData.' + key, callback);
6999
+
7000
+ if (key2) {
7001
+ _this5.bus.$off('$loadData.' + key + '.' + key2, callback);
7002
+ }
7003
+ },
7004
+ val: val
7005
+ };
7006
+ return val;
7007
+ };
7008
+
7009
+ run(false);
7010
+
7011
+ var un = function un() {
7012
+ Object.keys(unwatch).forEach(function (k) {
7013
+ return unwatch[k].fn();
7014
+ });
7015
+ unwatch = {};
7016
+ };
7017
+
7018
+ this.unwatch.push(un);
7019
+ return un;
7020
+ },
6471
7021
  isSub: function isSub() {
6472
7022
  return this.vm.setupState.parent && this.vm.props.extendOption;
6473
7023
  },
@@ -6506,6 +7056,7 @@ function FormCreateFactory(config) {
6506
7056
  updateOptions: function updateOptions(options) {
6507
7057
  this.options.value = this.mergeOptions(this.options.value, options);
6508
7058
  this.$handle.$manager.updateOptions(this.options.value);
7059
+ this.bus.$emit('$loadData.$options');
6509
7060
  },
6510
7061
  api: function api() {
6511
7062
  return this.$handle.api;
@@ -6517,6 +7068,8 @@ function FormCreateFactory(config) {
6517
7068
  this.$handle.mounted();
6518
7069
  },
6519
7070
  unmount: function unmount() {
7071
+ var _this6 = this;
7072
+
6520
7073
  if (this.name) {
6521
7074
  if (this.inFor) {
6522
7075
  var idx = instance[this.name].indexOf(this);
@@ -6526,14 +7079,20 @@ function FormCreateFactory(config) {
6526
7079
  }
6527
7080
  }
6528
7081
 
6529
- this.unwatch && this.unwatch();
7082
+ listener.forEach(function (item) {
7083
+ _this6.bus.$off(item.name, item.callback);
7084
+ });
7085
+ this.unwatch.forEach(function (fn) {
7086
+ return fn();
7087
+ });
7088
+ this.unwatch = [];
6530
7089
  this.$handle.reloadRule([]);
6531
7090
  },
6532
7091
  updated: function updated() {
6533
- var _this3 = this;
7092
+ var _this7 = this;
6534
7093
 
6535
7094
  this.$handle.bindNextTick(function () {
6536
- return _this3.bus.$emit('next-tick', _this3.$handle.api);
7095
+ return _this7.bus.$emit('next-tick', _this7.$handle.api);
6537
7096
  });
6538
7097
  }
6539
7098
  });
@@ -6544,13 +7103,16 @@ function FormCreateFactory(config) {
6544
7103
  ui: config.ui,
6545
7104
  extendApi: extendApi,
6546
7105
  getData: getData,
7106
+ setDataDriver: setDataDriver,
6547
7107
  setData: setData,
6548
7108
  removeData: removeData,
7109
+ refreshData: refreshData,
6549
7110
  maker: maker,
6550
7111
  component: component,
6551
7112
  directive: directive,
6552
7113
  setModelField: setModelField,
6553
7114
  setFormula: setFormula,
7115
+ setDriver: setDriver,
6554
7116
  register: register,
6555
7117
  $vnode: $vnode,
6556
7118
  parser: parser,
@@ -6576,8 +7138,9 @@ function FormCreateFactory(config) {
6576
7138
  isMobile: isMobile,
6577
7139
  install: function install(app, options) {
6578
7140
  globalConfig = _objectSpread2(_objectSpread2({}, globalConfig), options || {});
6579
- if (app._installedFormCreate === true) return;
6580
- app._installedFormCreate = true;
7141
+ var key = '_installedFormCreate_' + config.ui;
7142
+ if (app[key] === true) return;
7143
+ app[key] = true;
6581
7144
 
6582
7145
  var $formCreate = function $formCreate(rules) {
6583
7146
  var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -6599,6 +7162,8 @@ function FormCreateFactory(config) {
6599
7162
 
6600
7163
  useAttr(create);
6601
7164
  useStatic(create);
7165
+ setDataDriver('$cookie', cookieDriver);
7166
+ setDataDriver('$localStorage', localStorageDriver);
6602
7167
  CreateNode.use({
6603
7168
  fragment: 'fcFragment'
6604
7169
  });
@@ -6623,7 +7188,10 @@ function FormCreateFactory(config) {
6623
7188
  inherit.formulas && extend(formulas, inherit.formulas);
6624
7189
  }
6625
7190
 
6626
- return create;
7191
+ var FcComponent = $form();
7192
+ setPrototypeOf(FcComponent, create);
7193
+ FcComponent.util = create;
7194
+ return FcComponent;
6627
7195
  }
6628
7196
 
6629
7197
  var DEFAULT_FORMATS = {
@@ -7253,7 +7821,7 @@ function useFrame(maker) {
7253
7821
  return maker;
7254
7822
  }
7255
7823
 
7256
- var css_248z = ".form-create .form-create .el-form-item{margin-bottom:22px}.form-create{width:100%}.form-create .fc-none,.form-create.is-preview .el-form-item.is-required>.el-form-item__label-wrap>.el-form-item__label:before,.form-create.is-preview .el-form-item.is-required>.el-form-item__label:before,.form-create.is-preview .fc-clock{display:none!important}";
7824
+ var css_248z = ".form-create .form-create .el-form-item{margin-bottom:22px}.form-create{width:100%}.form-create .fc-none,.form-create.is-preview .el-form-item.is-required>.el-form-item__label-wrap>.el-form-item__label:before,.form-create.is-preview .el-form-item.is-required>.el-form-item__label:before,.form-create.is-preview .fc-clock{display:none!important}.fc-wrap-left .el-form-item__label{justify-content:flex-start;justify-content:flex-end}.fc-wrap-top.el-form-item{display:block}.fc-wrap-top.el-form-item .el-form-item__label{display:block;height:auto;line-height:22px;margin-bottom:8px;text-align:left}.el-form--large .fc-wrap-top.el-form-item .el-form-item__label{line-height:22px;margin-bottom:12px}.el-form--default .fc-wrap-top.el-form-item .el-form-item__label{line-height:22px;margin-bottom:8px}.el-form--small .fc-wrap-top.el-form-item .el-form-item__label{line-height:20px;margin-bottom:4px}";
7257
7825
  styleInject(css_248z);
7258
7826
 
7259
7827
  function tidyBtnProp(btn, def) {
@@ -7506,7 +8074,7 @@ function install(FormCreate) {
7506
8074
  function elmFormCreate() {
7507
8075
  return FormCreateFactory({
7508
8076
  ui: 'element-ui',
7509
- version: '3.2.0',
8077
+ version: '3.2.2',
7510
8078
  manager: manager,
7511
8079
  extendApi: extendApi,
7512
8080
  install: install,