@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.
@@ -2046,8 +2046,20 @@
2046
2046
 
2047
2047
  var components = [Checkbox, Frame, Radio, Select, Tree, Upload, Group, Sub, script];
2048
2048
 
2049
- function toString(val) {
2050
- return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
2049
+ function debounce(fn, wait) {
2050
+ var timeout = null;
2051
+ return function () {
2052
+ var _this = this;
2053
+
2054
+ for (var _len = arguments.length, arg = new Array(_len), _key = 0; _key < _len; _key++) {
2055
+ arg[_key] = arguments[_key];
2056
+ }
2057
+
2058
+ if (timeout !== null) clearTimeout(timeout);
2059
+ timeout = setTimeout(function () {
2060
+ return fn.call.apply(fn, [_this].concat(arg));
2061
+ }, wait);
2062
+ };
2051
2063
  }
2052
2064
 
2053
2065
  function toLine(name) {
@@ -2059,129 +2071,6 @@
2059
2071
  return str.replace(str[0], str[0].toLocaleUpperCase());
2060
2072
  }
2061
2073
 
2062
- function format(type, msg, rule) {
2063
- return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2064
- }
2065
- function err(msg, rule) {
2066
- console.error(format('err', msg, rule));
2067
- }
2068
- function logError(e) {
2069
- err(e.toString());
2070
- console.error(e);
2071
- }
2072
-
2073
- var PREFIX = '[[FORM-CREATE-PREFIX-';
2074
- var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2075
- var $T = '$FN:';
2076
- var $TX = '$FNX:';
2077
- var $ON = '$GLOBAL:';
2078
- var FUNCTION = 'function';
2079
- function toJson(obj, space) {
2080
- return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2081
- if (val && val._isVue === true) return undefined;
2082
-
2083
- if (_typeof(val) !== FUNCTION) {
2084
- return val;
2085
- }
2086
-
2087
- if (val.__json) {
2088
- return val.__json;
2089
- }
2090
-
2091
- if (val.__origin) val = val.__origin;
2092
- if (val.__emit) return undefined;
2093
- return PREFIX + val + SUFFIX;
2094
- }, space);
2095
- }
2096
-
2097
- function makeFn(fn) {
2098
- return new Function('return ' + fn)();
2099
- }
2100
-
2101
- function parseFn(fn, mode) {
2102
- if (fn && is.String(fn) && fn.length > 4) {
2103
- var v = fn.trim();
2104
- var flag = false;
2105
-
2106
- try {
2107
- if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2108
- v = v.replace(SUFFIX, '').replace(PREFIX, '');
2109
- flag = true;
2110
- } else if (v.indexOf($T) === 0) {
2111
- v = v.replace($T, '');
2112
- flag = true;
2113
- } else if (v.indexOf($ON) === 0) {
2114
- var name = v.replace($ON, '');
2115
-
2116
- v = function v() {
2117
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2118
- args[_key] = arguments[_key];
2119
- }
2120
-
2121
- var callback = args[0].api.getGlobalEvent(name);
2122
-
2123
- if (callback) {
2124
- return callback.call.apply(callback, [this].concat(args));
2125
- }
2126
-
2127
- return undefined;
2128
- };
2129
-
2130
- v.__json = fn;
2131
- v.__inject = true;
2132
- return v;
2133
- } else if (v.indexOf($TX) === 0) {
2134
- v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2135
- v.__json = fn;
2136
- v.__inject = true;
2137
- return v;
2138
- } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2139
- flag = true;
2140
- }
2141
-
2142
- if (!flag) return fn;
2143
- var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2144
- val.__json = fn;
2145
- return val;
2146
- } catch (e) {
2147
- err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2148
- return undefined;
2149
- }
2150
- }
2151
-
2152
- return fn;
2153
- }
2154
- function parseJson(json, mode) {
2155
- return JSON.parse(json, function (k, v) {
2156
- if (is.Undef(v) || !v.indexOf) return v;
2157
- return parseFn(v, mode);
2158
- });
2159
- }
2160
-
2161
- var id$2 = 0;
2162
- function uniqueId() {
2163
- var num = 370 + ++id$2;
2164
- return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
2165
- }
2166
-
2167
- function deepSet(data, idx, val) {
2168
- var _data = data,
2169
- to;
2170
- (idx || '').split('.').forEach(function (v) {
2171
- if (to) {
2172
- if (!_data[to] || _typeof(_data[to]) != 'object') {
2173
- _data[to] = {};
2174
- }
2175
-
2176
- _data = _data[to];
2177
- }
2178
-
2179
- to = v;
2180
- });
2181
- _data[to] = val;
2182
- return _data;
2183
- }
2184
-
2185
2074
  var getRuleInject = function getRuleInject(vm, parent) {
2186
2075
  if (!vm || vm === parent) {
2187
2076
  return;
@@ -2216,6 +2105,7 @@
2216
2105
  }
2217
2106
  },
2218
2107
  extendOption: Boolean,
2108
+ driver: String,
2219
2109
  modelValue: Object,
2220
2110
  disabled: {
2221
2111
  type: Boolean,
@@ -2326,10 +2216,31 @@
2326
2216
  document.head.appendChild(styleEl);
2327
2217
  }
2328
2218
  });
2219
+ var emit$topForm = debounce(function () {
2220
+ fc.bus.$emit('$loadData.$topForm');
2221
+ }, 100);
2222
+ var emit$form = debounce(function () {
2223
+ fc.bus.$emit('$loadData.$form');
2224
+ }, 100);
2225
+
2226
+ var emit$change = function emit$change(field) {
2227
+ fc.bus.$emit('change-$form.' + field);
2228
+ };
2229
+
2329
2230
  vue.onMounted(function () {
2231
+ if (parent) {
2232
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2233
+ fapi.top.bus.$on('change', emit$change);
2234
+ }
2235
+
2330
2236
  fc.mounted();
2331
2237
  });
2332
2238
  vue.onBeforeUnmount(function () {
2239
+ if (parent) {
2240
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2241
+ fapi.top.bus.$off('change', emit$change);
2242
+ }
2243
+
2333
2244
  styleEl && document.head.removeChild(styleEl);
2334
2245
  rmSubForm();
2335
2246
  data.destroyed = true;
@@ -2392,6 +2303,13 @@
2392
2303
 
2393
2304
  data.updateValue = json;
2394
2305
  vm.emit('update:modelValue', value);
2306
+ vue.nextTick(function () {
2307
+ emit$form();
2308
+
2309
+ if (!parent) {
2310
+ emit$topForm();
2311
+ }
2312
+ });
2395
2313
  }
2396
2314
  });
2397
2315
  },
@@ -2479,6 +2397,105 @@
2479
2397
  return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2480
2398
  }
2481
2399
 
2400
+ function format(type, msg, rule) {
2401
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2402
+ }
2403
+ function err(msg, rule) {
2404
+ console.error(format('err', msg, rule));
2405
+ }
2406
+ function logError(e) {
2407
+ err(e.toString());
2408
+ console.error(e);
2409
+ }
2410
+
2411
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2412
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2413
+ var $T = '$FN:';
2414
+ var $TX = '$FNX:';
2415
+ var $ON = '$GLOBAL:';
2416
+ var FUNCTION = 'function';
2417
+ function toJson(obj, space) {
2418
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2419
+ if (val && val._isVue === true) return undefined;
2420
+
2421
+ if (_typeof(val) !== FUNCTION) {
2422
+ return val;
2423
+ }
2424
+
2425
+ if (val.__json) {
2426
+ return val.__json;
2427
+ }
2428
+
2429
+ if (val.__origin) val = val.__origin;
2430
+ if (val.__emit) return undefined;
2431
+ return PREFIX + val + SUFFIX;
2432
+ }, space);
2433
+ }
2434
+
2435
+ function makeFn(fn) {
2436
+ return new Function('return ' + fn)();
2437
+ }
2438
+
2439
+ function parseFn(fn, mode) {
2440
+ if (fn && is.String(fn) && fn.length > 4) {
2441
+ var v = fn.trim();
2442
+ var flag = false;
2443
+
2444
+ try {
2445
+ if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2446
+ v = v.replace(SUFFIX, '').replace(PREFIX, '');
2447
+ flag = true;
2448
+ } else if (v.indexOf($T) === 0) {
2449
+ v = v.replace($T, '');
2450
+ flag = true;
2451
+ } else if (v.indexOf($ON) === 0) {
2452
+ var name = v.replace($ON, '');
2453
+
2454
+ v = function v() {
2455
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2456
+ args[_key] = arguments[_key];
2457
+ }
2458
+
2459
+ var callback = args[0].api.getGlobalEvent(name);
2460
+
2461
+ if (callback) {
2462
+ return callback.call.apply(callback, [this].concat(args));
2463
+ }
2464
+
2465
+ return undefined;
2466
+ };
2467
+
2468
+ v.__json = fn;
2469
+ v.__inject = true;
2470
+ return v;
2471
+ } else if (v.indexOf($TX) === 0) {
2472
+ v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2473
+ v.__json = fn;
2474
+ v.__inject = true;
2475
+ return v;
2476
+ } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2477
+ flag = true;
2478
+ }
2479
+
2480
+ if (!flag) return fn;
2481
+ var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2482
+ val.__json = fn;
2483
+ return val;
2484
+ } catch (e) {
2485
+ err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2486
+ return undefined;
2487
+ }
2488
+ }
2489
+
2490
+ return fn;
2491
+ }
2492
+ function parseJson(json, mode) {
2493
+ return JSON.parse(json, function (k, v) {
2494
+ if (is.Undef(v) || !v.indexOf) return v;
2495
+ return parseFn(v, mode);
2496
+ });
2497
+ }
2498
+
2482
2499
  function enumerable(value, writable) {
2483
2500
  return {
2484
2501
  value: value,
@@ -2697,6 +2714,27 @@
2697
2714
  return new RegExp(b, 'g').test(a);
2698
2715
  }
2699
2716
  };
2717
+ function deepGet(val, split) {
2718
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2719
+ if (val != null) {
2720
+ val = val[k];
2721
+ }
2722
+ });
2723
+ return val;
2724
+ }
2725
+ function extractVar(str) {
2726
+ var regex = /{{\s*(.*?)\s*}}/g;
2727
+ var match;
2728
+ var matches = {};
2729
+
2730
+ while ((match = regex.exec(str)) !== null) {
2731
+ if (match[1]) {
2732
+ matches[match[1]] = true;
2733
+ }
2734
+ }
2735
+
2736
+ return Object.keys(matches);
2737
+ }
2700
2738
 
2701
2739
  function baseRule() {
2702
2740
  return {
@@ -2836,7 +2874,7 @@
2836
2874
 
2837
2875
  var headers = option.headers || {};
2838
2876
  Object.keys(headers).forEach(function (item) {
2839
- if (headers[item] !== null) {
2877
+ if (headers[item] != null) {
2840
2878
  xhr.setRequestHeader(item, headers[item]);
2841
2879
  }
2842
2880
  });
@@ -2856,12 +2894,7 @@
2856
2894
  fn = parse;
2857
2895
  } else if (parse && is.String(parse)) {
2858
2896
  fn = function fn(v) {
2859
- parse.split('.').forEach(function (k) {
2860
- if (v) {
2861
- v = v[k];
2862
- }
2863
- });
2864
- return v;
2897
+ return deepGet(v, parse);
2865
2898
  };
2866
2899
  }
2867
2900
 
@@ -3326,6 +3359,18 @@
3326
3359
  findRules(ctx ? ctx.loadChildrenPending() : rule.children);
3327
3360
  return rules;
3328
3361
  },
3362
+ getParentSubRule: function getParentSubRule(id) {
3363
+ var flag = _typeof(id) === 'object';
3364
+ var ctx = flag ? byCtx(id) : h.getCtx(id);
3365
+
3366
+ if (ctx) {
3367
+ var group = ctx.getParentGroup();
3368
+
3369
+ if (group) {
3370
+ return group.rule;
3371
+ }
3372
+ }
3373
+ },
3329
3374
  getChildrenFormData: function getChildrenFormData(id) {
3330
3375
  var rules = api.getChildrenRuleList(id);
3331
3376
  return rules.reduce(function (formData, rule) {
@@ -3335,12 +3380,14 @@
3335
3380
  },
3336
3381
  setChildrenFormData: function setChildrenFormData(id, formData, cover) {
3337
3382
  var rules = api.getChildrenRuleList(id);
3338
- rules.forEach(function (rule) {
3339
- if (hasProperty(formData, rule.field)) {
3340
- rule.value = formData[rule.field];
3341
- } else if (cover) {
3342
- rule.value = undefined;
3343
- }
3383
+ h.deferSyncValue(function () {
3384
+ rules.forEach(function (rule) {
3385
+ if (hasProperty(formData, rule.field)) {
3386
+ rule.value = formData[rule.field];
3387
+ } else if (cover) {
3388
+ rule.value = undefined;
3389
+ }
3390
+ });
3344
3391
  });
3345
3392
  },
3346
3393
  getGlobalEvent: function getGlobalEvent(name) {
@@ -3402,11 +3449,14 @@
3402
3449
  });
3403
3450
  },
3404
3451
  getData: function getData(id, def) {
3405
- return h.fc.getData(id, def);
3452
+ return h.fc.getLoadData(id, def);
3406
3453
  },
3407
3454
  setData: function setData(id, data) {
3408
3455
  return h.fc.setData(id, data);
3409
3456
  },
3457
+ refreshData: function refreshData(id) {
3458
+ return h.fc.refreshData(id);
3459
+ },
3410
3460
  helper: {
3411
3461
  tidyFields: tidyFields,
3412
3462
  props: props
@@ -3485,6 +3535,34 @@
3485
3535
  return str.replace(str[0], str[0].toLowerCase());
3486
3536
  }
3487
3537
 
3538
+ function toString(val) {
3539
+ return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
3540
+ }
3541
+
3542
+ var id$2 = 0;
3543
+ function uniqueId() {
3544
+ var num = 370 + ++id$2;
3545
+ return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
3546
+ }
3547
+
3548
+ function deepSet(data, idx, val) {
3549
+ var _data = data,
3550
+ to;
3551
+ (idx || '').split('.').forEach(function (v) {
3552
+ if (to) {
3553
+ if (!_data[to] || _typeof(_data[to]) != 'object') {
3554
+ _data[to] = {};
3555
+ }
3556
+
3557
+ _data = _data[to];
3558
+ }
3559
+
3560
+ to = v;
3561
+ });
3562
+ _data[to] = val;
3563
+ return _data;
3564
+ }
3565
+
3488
3566
  function useRender$1(Render) {
3489
3567
  extend(Render.prototype, {
3490
3568
  initRender: function initRender() {
@@ -3740,7 +3818,7 @@
3740
3818
  return vn;
3741
3819
  },
3742
3820
  getModelField: function getModelField(ctx) {
3743
- 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';
3821
+ 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';
3744
3822
  },
3745
3823
  isFragment: function isFragment(ctx) {
3746
3824
  return ctx.type === 'fragment' || ctx.type === 'template';
@@ -3796,6 +3874,9 @@
3796
3874
 
3797
3875
  _this7.onMounted(ctx, vn.el);
3798
3876
  },
3877
+ 'fc.updateValue': function fcUpdateValue(data) {
3878
+ _this7.$handle.onUpdateValue(ctx, data);
3879
+ },
3799
3880
  'fc.el': function fcEl(el) {
3800
3881
  ctx.exportEl = el;
3801
3882
 
@@ -3871,10 +3952,18 @@
3871
3952
  },
3872
3953
  defaultRender: function defaultRender(ctx, children) {
3873
3954
  var prop = ctx.prop;
3874
- if (prop.component) return this.vNode.makeComponent(prop.component, prop, children);
3955
+
3956
+ if (prop.component) {
3957
+ if (typeof prop.component === 'string') {
3958
+ return this.vNode.make(prop.component, prop, children);
3959
+ } else {
3960
+ return this.vNode.makeComponent(prop.component, prop, children);
3961
+ }
3962
+ }
3963
+
3875
3964
  if (this.vNode[ctx.type]) return this.vNode[ctx.type](prop, children);
3876
3965
  if (this.vNode[ctx.originType]) return this.vNode[ctx.originType](prop, children);
3877
- return this.vNode.make(lower(ctx.originType), prop, children);
3966
+ return this.vNode.make(lower(prop.type), prop, children);
3878
3967
  },
3879
3968
  renderRule: function renderRule(rule, children, origin) {
3880
3969
  var _this9 = this;
@@ -4049,23 +4138,76 @@
4049
4138
  _fn = _fn.__origin;
4050
4139
  }
4051
4140
 
4052
- var h = this;
4141
+ var h = this;
4142
+
4143
+ var fn = function fn() {
4144
+ var data = h.getInjectData(self, _inject2);
4145
+
4146
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
4147
+ args[_key2] = arguments[_key2];
4148
+ }
4149
+
4150
+ data.args = [].concat(args);
4151
+ args.unshift(data);
4152
+ return _fn.apply(this, args);
4153
+ };
4154
+
4155
+ fn.__origin = _fn;
4156
+ fn.__json = _fn.__json;
4157
+ return fn;
4158
+ },
4159
+ loadStrVar: function loadStrVar(str, get) {
4160
+ var _this3 = this;
4161
+
4162
+ if (str && typeof str === 'string' && str.indexOf('{{') > -1 && str.indexOf('}}') > -1) {
4163
+ var tmp = str;
4164
+ var vars = extractVar(str);
4165
+ var lastVal;
4166
+ vars.forEach(function (v) {
4167
+ var split = v.split('||');
4168
+ var field = split[0].trim();
4169
+
4170
+ if (field) {
4171
+ var def = (split[1] || '').trim();
4172
+ var val = get ? get(field, def) : _this3.fc.getLoadData(field, def);
4173
+ lastVal = val;
4174
+ str = str.replaceAll("{{".concat(v, "}}"), val == null ? '' : val);
4175
+ }
4176
+ });
4177
+
4178
+ if (vars.length === 1 && tmp === "{{".concat(vars[0], "}}")) {
4179
+ return lastVal;
4180
+ }
4181
+ }
4182
+
4183
+ return str;
4184
+ },
4185
+ loadFetchVar: function loadFetchVar(options, get) {
4186
+ var _this4 = this;
4187
+
4188
+ var loadVal = function loadVal(str) {
4189
+ return _this4.loadStrVar(str, get);
4190
+ };
4053
4191
 
4054
- var fn = function fn() {
4055
- var data = h.getInjectData(self, _inject2);
4192
+ options.action = loadVal(options.action);
4056
4193
 
4057
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
4058
- args[_key2] = arguments[_key2];
4059
- }
4194
+ if (options.headers) {
4195
+ var _headers = {};
4196
+ Object.keys(options.headers).forEach(function (k) {
4197
+ _headers[loadVal(k)] = loadVal(options.headers[k]);
4198
+ });
4199
+ options.headers = _headers;
4200
+ }
4060
4201
 
4061
- data.args = [].concat(args);
4062
- args.unshift(data);
4063
- return _fn.apply(this, args);
4064
- };
4202
+ if (options.data) {
4203
+ var _data = {};
4204
+ Object.keys(options.data).forEach(function (k) {
4205
+ _data[loadVal(k)] = loadVal(options.data[k]);
4206
+ });
4207
+ options.data = _data;
4208
+ }
4065
4209
 
4066
- fn.__origin = _fn;
4067
- fn.__json = _fn.__json;
4068
- return fn;
4210
+ return options;
4069
4211
  }
4070
4212
  });
4071
4213
  }
@@ -4185,7 +4327,6 @@
4185
4327
  defaultValue: isInput ? deepCopy(defaultValue) : undefined,
4186
4328
  field: rule.field || undefined
4187
4329
  });
4188
- this.updateType();
4189
4330
  this.updateKey();
4190
4331
  bind(this);
4191
4332
  this.update(handle, true);
@@ -4321,6 +4462,7 @@
4321
4462
  updateType: function updateType() {
4322
4463
  this.originType = this.rule.type;
4323
4464
  this.type = toCase(this.rule.type);
4465
+ this.trueType = this.$handle.getType(this.originType);
4324
4466
  },
4325
4467
  setParser: function setParser(parser) {
4326
4468
  this.parser = parser;
@@ -4409,7 +4551,6 @@
4409
4551
  computed: {},
4410
4552
  el: undef,
4411
4553
  $handle: undef,
4412
- $render: undef,
4413
4554
  $api: undef,
4414
4555
  vm: undef,
4415
4556
  vNode: undef,
@@ -4465,7 +4606,6 @@
4465
4606
  $render: handle.$render,
4466
4607
  $api: handle.api,
4467
4608
  vm: handle.vm,
4468
- trueType: handle.getType(this.originType),
4469
4609
  vNode: handle.$render.vNode,
4470
4610
  updated: false,
4471
4611
  cacheValue: this.rule.value
@@ -4473,6 +4613,7 @@
4473
4613
  !init && this.unwatch();
4474
4614
  this.watchTo();
4475
4615
  this.link();
4616
+ this.updateType();
4476
4617
  }
4477
4618
  });
4478
4619
 
@@ -4944,6 +5085,28 @@
4944
5085
  this.setValue(ctx, val, value);
4945
5086
  }
4946
5087
  },
5088
+ onUpdateValue: function onUpdateValue(ctx, data) {
5089
+ var _this = this;
5090
+
5091
+ this.deferSyncValue(function () {
5092
+ var group = ctx.getParentGroup();
5093
+ var subForm = group ? _this.subRuleData[group.id] : null;
5094
+ var subData = {};
5095
+ Object.keys(data || {}).forEach(function (k) {
5096
+ if (subForm && hasProperty(subForm, k)) {
5097
+ subData[k] = data[k];
5098
+ } else if (hasProperty(_this.api.form, k)) {
5099
+ _this.api.form[k] = data[k];
5100
+ } else if (_this.api.top !== _this.api && hasProperty(_this.api.top.form, k)) {
5101
+ _this.api.top.form[k] = data[k];
5102
+ }
5103
+ });
5104
+
5105
+ if (Object.keys(subData).length) {
5106
+ _this.api.setChildrenFormData(group.rule, subData);
5107
+ }
5108
+ });
5109
+ },
4947
5110
  onBaseInput: function onBaseInput(ctx, value) {
4948
5111
  this.setFormData(ctx, value);
4949
5112
  ctx.modelValue = value;
@@ -4975,11 +5138,23 @@
4975
5138
  return this.formData[ctx.id];
4976
5139
  },
4977
5140
  syncForm: function syncForm() {
4978
- var _this = this;
5141
+ var _this2 = this;
4979
5142
 
4980
5143
  var data = vue.reactive({});
4981
- this.fields().reduce(function (initial, field) {
4982
- var ctx = _this.getCtx(field);
5144
+ var fields = this.fields();
5145
+
5146
+ if (this.options.appendValue !== false) {
5147
+ Object.keys(this.appendData).reduce(function (initial, field) {
5148
+ if (fields.indexOf(field) === -1) {
5149
+ initial[field] = vue.toRef(_this2.appendData, field);
5150
+ }
5151
+
5152
+ return initial;
5153
+ }, data);
5154
+ }
5155
+
5156
+ fields.reduce(function (initial, field) {
5157
+ var ctx = _this2.getCtx(field);
4983
5158
 
4984
5159
  initial[field] = vue.toRef(ctx.rule, 'value');
4985
5160
  return initial;
@@ -5019,7 +5194,7 @@
5019
5194
  return this.deferSyncFn.sync = true;
5020
5195
  }
5021
5196
 
5022
- this.vm.setupState.updateValue(_objectSpread2(_objectSpread2({}, this.options.appendValue !== false ? this.appendData : {}), this.form));
5197
+ this.vm.setupState.updateValue(_objectSpread2({}, this.form));
5023
5198
  },
5024
5199
  isChange: function isChange(ctx, value) {
5025
5200
  return JSON.stringify(this.getFormData(ctx), strFn) !== JSON.stringify(value, strFn);
@@ -5028,11 +5203,11 @@
5028
5203
  return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5029
5204
  },
5030
5205
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5031
- var _this2 = this;
5206
+ var _this3 = this;
5032
5207
 
5033
5208
  if (is.Function(ctx.rule.update)) {
5034
5209
  var state = invoke(function () {
5035
- return ctx.rule.update(val, ctx.origin, _this2.api, {
5210
+ return ctx.rule.update(val, ctx.origin, _this3.api, {
5036
5211
  origin: origin || 'change',
5037
5212
  linkField: field
5038
5213
  });
@@ -5056,18 +5231,18 @@
5056
5231
  this.refreshUpdate(ctx, val, origin, field);
5057
5232
  },
5058
5233
  appendLink: function appendLink(ctx) {
5059
- var _this3 = this;
5234
+ var _this4 = this;
5060
5235
 
5061
5236
  var link = ctx.rule.link;
5062
5237
  is.trueArray(link) && link.forEach(function (field) {
5063
5238
  var fn = function fn() {
5064
- return _this3.refreshRule(ctx, ctx.rule.value, 'link', field);
5239
+ return _this4.refreshRule(ctx, ctx.rule.value, 'link', field);
5065
5240
  };
5066
5241
 
5067
- _this3.bus.$on('change-' + field, fn);
5242
+ _this4.bus.$on('change-' + field, fn);
5068
5243
 
5069
5244
  ctx.linkOn.push(function () {
5070
- return _this3.bus.$off('change-' + field, fn);
5245
+ return _this4.bus.$off('change-' + field, fn);
5071
5246
  });
5072
5247
  });
5073
5248
  },
@@ -5091,9 +5266,17 @@
5091
5266
  },
5092
5267
  mounted: function mounted(ctx) {},
5093
5268
  render: function render(children, ctx) {
5269
+ if (ctx.$handle.fc.renderDriver && ctx.$handle.fc.renderDriver.defaultRender) {
5270
+ return ctx.$handle.fc.renderDriver.defaultRender(ctx, children);
5271
+ }
5272
+
5094
5273
  return ctx.$render.defaultRender(ctx, children);
5095
5274
  },
5096
5275
  preview: function preview(children, ctx) {
5276
+ if (ctx.$handle.fc.renderDriver && ctx.$handle.fc.renderDriver.defaultPreview) {
5277
+ return ctx.$handle.fc.renderDriver.defaultPreview(ctx, children);
5278
+ }
5279
+
5097
5280
  return this.render(children, ctx);
5098
5281
  },
5099
5282
  mergeProp: function mergeProp(ctx) {}
@@ -5152,6 +5335,18 @@
5152
5335
  },
5153
5336
  getParser: function getParser(ctx) {
5154
5337
  var list = this.fc.parsers;
5338
+ var renderDriver = this.fc.renderDriver;
5339
+
5340
+ if (renderDriver) {
5341
+ var _list = renderDriver.parsers || {};
5342
+
5343
+ var parser = _list[ctx.originType] || _list[toCase(ctx.type)] || _list[ctx.trueType];
5344
+
5345
+ if (parser) {
5346
+ return parser;
5347
+ }
5348
+ }
5349
+
5155
5350
  return list[ctx.originType] || list[toCase(ctx.type)] || list[ctx.trueType] || BaseParser;
5156
5351
  },
5157
5352
  bindParser: function bindParser(ctx) {
@@ -5349,7 +5544,7 @@
5349
5544
 
5350
5545
  this.deferSyncValue(function () {
5351
5546
  o && o.forEach(function (child) {
5352
- if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx && child.__fc__.root !== n) {
5547
+ if ((n || []).indexOf(child) === -1 && child && !is.String(child) && child.__fc__ && child.__fc__.parent === ctx) {
5353
5548
  _this2.rmCtx(child.__fc__);
5354
5549
  }
5355
5550
  });
@@ -5900,6 +6095,17 @@
5900
6095
  }), opt, this.mergeOptionsRule);
5901
6096
  },
5902
6097
  updateOptions: function updateOptions(options) {
6098
+ var _this3 = this;
6099
+
6100
+ if (this.$handle.fc.renderDriver && this.$handle.fc.renderDriver.updateOptions) {
6101
+ invoke(function () {
6102
+ _this3.$handle.fc.renderDriver.updateOptions(options, {
6103
+ handle: _this3.$handle,
6104
+ api: _this3.$handle.api
6105
+ });
6106
+ });
6107
+ }
6108
+
5903
6109
  this.options = this.mergeOptions([options], this.getDefaultOptions());
5904
6110
  this.update();
5905
6111
  },
@@ -5918,39 +6124,48 @@
5918
6124
  var loadData = {
5919
6125
  name: 'loadData',
5920
6126
  _fn: [],
5921
- created: function created(inject, rule, api) {
6127
+ mounted: function mounted(inject, rule, api) {
5922
6128
  this.deleted(inject);
5923
6129
  var attrs = toArray(inject.getValue());
5924
- var events = [];
6130
+ var unwatchs = [];
5925
6131
  attrs.forEach(function (attr) {
5926
- if (attr) {
5927
- var on = function on() {
5928
- if (attr.watch !== false) {
5929
- fc.bus.$off('p.loadData.' + attr.attr, on);
5930
- fc.bus.$once('p.loadData.' + attr.attr, on);
6132
+ if (attr && (attr.attr || attr.template)) {
6133
+ var unwatch = fc.watchLoadData(debounce(function (get) {
6134
+ var value;
6135
+
6136
+ if (attr.template) {
6137
+ value = fc.$handle.loadStrVar(attr.template, get);
6138
+ } else {
6139
+ value = get(attr.attr, attr["default"]);
5931
6140
  }
5932
6141
 
5933
- var value = undefined;
6142
+ if (attr.copy !== false) {
6143
+ value = deepCopy(value);
6144
+ }
5934
6145
 
5935
- if (attr.attr) {
5936
- value = fc.loadData[attr.attr] || attr["default"];
6146
+ var _rule = attr.modify ? rule : inject.getProp();
5937
6147
 
5938
- if (attr.copy !== false) {
5939
- value = deepCopy(value);
6148
+ if (attr.to === 'child') {
6149
+ if (_rule.children) {
6150
+ _rule.children[0] = value;
6151
+ } else {
6152
+ _rule.children = [value];
5940
6153
  }
6154
+ } else {
6155
+ deepSet(_rule, attr.to || 'options', value);
5941
6156
  }
5942
6157
 
5943
- deepSet(inject.getProp(), attr.to || 'options', value);
5944
6158
  api.sync(rule);
5945
- };
6159
+ }, attr.wait || 300));
5946
6160
 
5947
- events.push(function () {
5948
- return fc.bus.$off('p.loadData.' + attr.attr, on);
5949
- });
5950
- on();
6161
+ if (attr.watch !== false) {
6162
+ unwatchs.push(unwatch);
6163
+ } else {
6164
+ unwatch();
6165
+ }
5951
6166
  }
5952
6167
  });
5953
- this._fn[inject.id] = events;
6168
+ this._fn[inject.id] = unwatchs;
5954
6169
  },
5955
6170
  deleted: function deleted(inject) {
5956
6171
  if (this._fn[inject.id]) {
@@ -6013,6 +6228,7 @@
6013
6228
 
6014
6229
  function run(inject, rule, api) {
6015
6230
  var option = inject.value;
6231
+ fetchAttr.deleted(inject);
6016
6232
 
6017
6233
  if (is.Function(option)) {
6018
6234
  option = option(rule, api);
@@ -6067,76 +6283,89 @@
6067
6283
  }
6068
6284
  };
6069
6285
 
6070
- var config = _objectSpread2(_objectSpread2({
6071
- headers: {}
6072
- }, option), {}, {
6073
- onSuccess: function onSuccess(body, flag) {
6074
- if (check()) return;
6286
+ fetchAttr._fn[inject.id] = fc.watchLoadData(debounce(function (get, change) {
6287
+ if (change && option.watch === false) {
6288
+ return fetchAttr._fn[inject.id]();
6289
+ }
6075
6290
 
6076
- var fn = function fn(v) {
6077
- return flag ? v : hasProperty(v, 'data') ? v.data : v;
6078
- };
6291
+ var _option = fc.$handle.loadFetchVar(deepCopy(option), get);
6079
6292
 
6080
- var parse = parseFn(option.parse);
6293
+ var config = _objectSpread2(_objectSpread2({
6294
+ headers: {}
6295
+ }, _option), {}, {
6296
+ onSuccess: function onSuccess(body, flag) {
6297
+ if (check()) return;
6081
6298
 
6082
- if (is.Function(parse)) {
6083
- fn = parse;
6084
- } else if (parse && is.String(parse)) {
6085
- fn = function fn(v) {
6086
- parse.split('.').forEach(function (k) {
6087
- if (v) {
6088
- v = v[k];
6089
- }
6090
- });
6091
- return v;
6299
+ var fn = function fn(v) {
6300
+ return flag ? v : hasProperty(v, 'data') ? v.data : v;
6092
6301
  };
6093
- }
6094
6302
 
6095
- set(fn(body, rule, api));
6096
- api.sync(rule);
6097
- },
6098
- onError: function onError(e) {
6099
- set(undefined);
6100
- if (check()) return;
6303
+ var parse = parseFn(_option.parse);
6101
6304
 
6102
- (_onError || function (e) {
6103
- return err(e.message || 'fetch fail ' + option.action);
6104
- })(e, rule, api);
6105
- }
6106
- });
6305
+ if (is.Function(parse)) {
6306
+ fn = parse;
6307
+ } else if (parse && is.String(parse)) {
6308
+ fn = function fn(v) {
6309
+ return deepGet(v, parse);
6310
+ };
6311
+ }
6107
6312
 
6108
- fc.$handle.beforeFetch(config, {
6109
- rule: rule,
6110
- api: api
6111
- }).then(function () {
6112
- if (is.Function(option.action)) {
6113
- option.action(rule, api).then(function (val) {
6114
- config.onSuccess(val, true);
6115
- })["catch"](function (e) {
6116
- config.onError(e);
6117
- });
6118
- return;
6119
- }
6313
+ set(fn(body, rule, api));
6314
+ api.sync(rule);
6315
+ },
6316
+ onError: function onError(e) {
6317
+ set(undefined);
6318
+ if (check()) return;
6120
6319
 
6121
- invoke(function () {
6122
- return fc.create.fetch(config, {
6123
- inject: inject,
6124
- rule: rule,
6125
- api: api
6320
+ (_onError || function (e) {
6321
+ return err(e.message || 'fetch fail ' + _option.action);
6322
+ })(e, rule, api);
6323
+ }
6324
+ });
6325
+
6326
+ fc.$handle.beforeFetch(config, {
6327
+ rule: rule,
6328
+ api: api
6329
+ }).then(function () {
6330
+ if (is.Function(_option.action)) {
6331
+ _option.action(rule, api).then(function (val) {
6332
+ config.onSuccess(val, true);
6333
+ })["catch"](function (e) {
6334
+ config.onError(e);
6335
+ });
6336
+
6337
+ return;
6338
+ }
6339
+
6340
+ invoke(function () {
6341
+ return fc.create.fetch(config, {
6342
+ inject: inject,
6343
+ rule: rule,
6344
+ api: api
6345
+ });
6126
6346
  });
6127
6347
  });
6128
- });
6348
+ }, option.wait || 600));
6129
6349
  }
6130
6350
 
6131
- return {
6351
+ var fetchAttr = {
6132
6352
  name: 'fetch',
6133
- loaded: function loaded() {
6353
+ _fn: [],
6354
+ mounted: function mounted() {
6134
6355
  run.apply(void 0, arguments);
6135
6356
  },
6136
6357
  watch: function watch() {
6137
6358
  run.apply(void 0, arguments);
6359
+ },
6360
+ deleted: function deleted(inject) {
6361
+ if (this._fn[inject.id]) {
6362
+ this._fn[inject.id]();
6363
+ }
6364
+
6365
+ inject.clearProp();
6138
6366
  }
6139
6367
  };
6368
+ return fetchAttr;
6140
6369
  };
6141
6370
 
6142
6371
  var $provider = {
@@ -6164,6 +6393,71 @@
6164
6393
  }
6165
6394
  };
6166
6395
 
6396
+ function getCookie(name) {
6397
+ name = name + '=';
6398
+ var decodedCookie = decodeURIComponent(document.cookie);
6399
+ var cookieArray = decodedCookie.split(';');
6400
+
6401
+ for (var i = 0; i < cookieArray.length; i++) {
6402
+ var cookie = cookieArray[i];
6403
+
6404
+ while (cookie.charAt(0) === ' ') {
6405
+ cookie = cookie.substring(1);
6406
+ }
6407
+
6408
+ if (cookie.indexOf(name) === 0) {
6409
+ cookie = cookie.substring(name.length, cookie.length);
6410
+
6411
+ try {
6412
+ return JSON.parse(cookie);
6413
+ } catch (e) {
6414
+ return cookie;
6415
+ }
6416
+ }
6417
+ }
6418
+
6419
+ return null;
6420
+ }
6421
+
6422
+ function getLocalStorage(name) {
6423
+ var value = localStorage.getItem(name);
6424
+
6425
+ if (value) {
6426
+ try {
6427
+ return JSON.parse(value);
6428
+ } catch (e) {
6429
+ return value;
6430
+ }
6431
+ }
6432
+
6433
+ return null;
6434
+ }
6435
+
6436
+ function baseDriver(driver, name) {
6437
+ if (!name) {
6438
+ return null;
6439
+ }
6440
+
6441
+ var split = name.split('.');
6442
+ var value = driver(split.shift());
6443
+
6444
+ if (!split.length) {
6445
+ return value;
6446
+ }
6447
+
6448
+ if (value == null) {
6449
+ return null;
6450
+ }
6451
+
6452
+ return deepGet(value, split);
6453
+ }
6454
+ function cookieDriver(name) {
6455
+ return baseDriver(getCookie, name);
6456
+ }
6457
+ function localStorageDriver(name) {
6458
+ return baseDriver(getLocalStorage, name);
6459
+ }
6460
+
6167
6461
  function parseProp(name, id) {
6168
6462
  var prop;
6169
6463
 
@@ -6203,6 +6497,7 @@
6203
6497
  var parsers = {};
6204
6498
  var directives = {};
6205
6499
  var modelFields = {};
6500
+ var drivers = {};
6206
6501
  var useApps = [];
6207
6502
  var listener = [];
6208
6503
  var extendApiFn = [config.extendApi];
@@ -6361,23 +6656,66 @@
6361
6656
  formulas[name] = fn;
6362
6657
  }
6363
6658
 
6364
- function _emitData(id) {
6365
- Object.keys(instance).forEach(function (v) {
6366
- var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6367
- apis.forEach(function (that) {
6368
- that.bus.$emit('p.loadData.' + id);
6659
+ function setDriver(name, driver) {
6660
+ if (driver.parsers) {
6661
+ Object.keys(driver.parsers).forEach(function (k) {
6662
+ driver.parsers[k] = setPrototypeOf(driver.parsers[k], BaseParser);
6369
6663
  });
6370
- });
6664
+ }
6665
+
6666
+ driver.name = name;
6667
+ drivers[name] = driver;
6668
+ }
6669
+
6670
+ function refreshData(id) {
6671
+ if (id) {
6672
+ Object.keys(instance).forEach(function (v) {
6673
+ var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6674
+ apis.forEach(function (that) {
6675
+ that.bus.$emit('$loadData.' + id);
6676
+ });
6677
+ });
6678
+ }
6371
6679
  }
6372
6680
 
6373
6681
  function setData(id, data) {
6374
6682
  loadData[id] = data;
6683
+ refreshData(id);
6684
+ }
6375
6685
 
6376
- _emitData(id);
6686
+ function setDataDriver(id, data) {
6687
+ var callback = function callback() {
6688
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6689
+ args[_key] = arguments[_key];
6690
+ }
6691
+
6692
+ return invoke(function () {
6693
+ return data.apply(void 0, args);
6694
+ });
6695
+ };
6696
+
6697
+ callback._driver = true;
6698
+ setData(id, callback);
6377
6699
  }
6378
6700
 
6379
6701
  function getData(id, def) {
6380
- return hasProperty(loadData, id) ? loadData[id] : def;
6702
+ var split = (id || '').split('.');
6703
+ id = split.shift();
6704
+ var field = split.join('.');
6705
+
6706
+ if (hasProperty(loadData, id)) {
6707
+ var val = loadData[id];
6708
+
6709
+ if (val && val._driver) {
6710
+ val = val(field);
6711
+ } else if (split.length) {
6712
+ val = deepGet(val, split);
6713
+ }
6714
+
6715
+ return val == null || val === '' ? def : val;
6716
+ } else {
6717
+ return def;
6718
+ }
6381
6719
  }
6382
6720
 
6383
6721
  function extendApi(fn) {
@@ -6386,8 +6724,7 @@
6386
6724
 
6387
6725
  function removeData(id) {
6388
6726
  delete loadData[id];
6389
-
6390
- _emitData(id);
6727
+ refreshData(id);
6391
6728
  }
6392
6729
 
6393
6730
  function on(name, callback) {
@@ -6417,14 +6754,18 @@
6417
6754
  components: components,
6418
6755
  directives: directives
6419
6756
  },
6757
+ drivers: drivers,
6758
+ renderDriver: null,
6420
6759
  setData: setData,
6421
6760
  getData: getData,
6761
+ refreshData: refreshData,
6422
6762
  loadData: loadData,
6423
6763
  CreateNode: CreateNode,
6424
6764
  bus: new Mitt(),
6425
- unwatch: null,
6765
+ unwatch: [],
6426
6766
  options: vue.ref({}),
6427
- extendApiFn: extendApiFn
6767
+ extendApiFn: extendApiFn,
6768
+ fetchCache: new WeakMap()
6428
6769
  });
6429
6770
  listener.forEach(function (item) {
6430
6771
  _this.bus.$on(item.name, item.callback);
@@ -6458,7 +6799,7 @@
6458
6799
  var _this2 = this;
6459
6800
 
6460
6801
  if (this.isSub()) {
6461
- this.unwatch = vue.watch(function () {
6802
+ this.unwatch.push(vue.watch(function () {
6462
6803
  return _this2.vm.setupState.parent.setupState.fc.options.value;
6463
6804
  }, function () {
6464
6805
  _this2.initOptions();
@@ -6466,12 +6807,221 @@
6466
6807
  _this2.$handle.api.refresh();
6467
6808
  }, {
6468
6809
  deep: true
6469
- });
6810
+ }));
6470
6811
  }
6471
6812
 
6813
+ var driver = this.vm.setupState.parent ? this.vm.setupState.parent.setupState.fc.renderDriver : this.vm.props.driver;
6814
+ this.renderDriver = this.drivers[driver];
6472
6815
  this.initOptions();
6473
6816
  this.$handle.init();
6474
6817
  },
6818
+ globalDataDriver: function globalDataDriver(id) {
6819
+ var _this3 = this;
6820
+
6821
+ var split = id.split('.');
6822
+ var key = split.shift();
6823
+ var option = this.options.value.globalData && this.options.value.globalData[key];
6824
+
6825
+ if (option) {
6826
+ if (option.type === 'static') {
6827
+ return deepGet(option.data, split);
6828
+ } else {
6829
+ var val;
6830
+ var res = this.fetchCache.get(option);
6831
+
6832
+ if (res) {
6833
+ if (res.status) {
6834
+ val = deepGet(res.data, split);
6835
+ }
6836
+
6837
+ if (!res.loading) {
6838
+ return val;
6839
+ }
6840
+
6841
+ res.loading = false;
6842
+ this.fetchCache.set(option, res);
6843
+ } else {
6844
+ this.fetchCache.set(option, {
6845
+ status: false
6846
+ });
6847
+ }
6848
+
6849
+ var reload = debounce(function () {
6850
+ unwatch();
6851
+
6852
+ var res = _this3.fetchCache.get(option);
6853
+
6854
+ if (_this3.options.value.globalData && Object.values(_this3.options.value.globalData).indexOf(option) !== -1) {
6855
+ if (res) {
6856
+ res.loading = true;
6857
+
6858
+ _this3.fetchCache.set(option, res);
6859
+ }
6860
+
6861
+ _this3.bus.$emit('$loadData.$globalData.' + key);
6862
+ } else {
6863
+ _this3.fetchCache["delete"](option);
6864
+ }
6865
+ }, option.wait || 600);
6866
+
6867
+ var _emit = function _emit(data) {
6868
+ _this3.fetchCache.set(option, {
6869
+ status: true,
6870
+ data: data
6871
+ });
6872
+
6873
+ _this3.bus.$emit('$loadData.$globalData.' + key);
6874
+ };
6875
+
6876
+ var callback = function callback(get, change) {
6877
+ if (change && option.watch === false) {
6878
+ return unwatch();
6879
+ }
6880
+
6881
+ if (change) {
6882
+ reload();
6883
+ return;
6884
+ }
6885
+
6886
+ var options = _this3.$handle.loadFetchVar(copy$1(option), get);
6887
+
6888
+ _this3.$handle.api.fetch(options).then(function (res) {
6889
+ _emit(res);
6890
+ })["catch"](function (e) {
6891
+ _emit(null);
6892
+ });
6893
+ };
6894
+
6895
+ var unwatch = this.watchLoadData(callback);
6896
+ this.unwatch.push(unwatch);
6897
+ return val;
6898
+ }
6899
+ }
6900
+ },
6901
+ globalVarDriver: function globalVarDriver(id) {
6902
+ var _this4 = this;
6903
+
6904
+ var split = id.split('.');
6905
+ var key = split.shift();
6906
+ var option = this.options.value.globalVariable && this.options.value.globalVariable[key];
6907
+
6908
+ if (option) {
6909
+ var handle = is.Function(option) ? option : option.handle;
6910
+
6911
+ if (handle) {
6912
+ var val;
6913
+ var unwatch = this.watchLoadData(function (get, change) {
6914
+ if (change) {
6915
+ unwatch();
6916
+
6917
+ _this4.bus.$emit('$loadData.$var.' + key);
6918
+ }
6919
+
6920
+ val = invoke(function () {
6921
+ return handle(get, _this4.$handle.api);
6922
+ });
6923
+ });
6924
+ this.unwatch.push(unwatch);
6925
+ return val;
6926
+ }
6927
+ }
6928
+ },
6929
+ getLoadData: function getLoadData(id, def) {
6930
+ var val = null;
6931
+
6932
+ if (id != null) {
6933
+ var split = id.split('.');
6934
+ var key = split.shift();
6935
+
6936
+ if (key === '$form') {
6937
+ val = this.$handle.api.top.formData();
6938
+ } else if (key === '$subForm') {
6939
+ val = this.$handle.api.formData();
6940
+ } else if (key === '$options') {
6941
+ val = this.options.value;
6942
+ } else if (key === '$globalData') {
6943
+ val = this.globalDataDriver(split.join('.'));
6944
+ split = [];
6945
+ } else if (key === '$var') {
6946
+ val = this.globalVarDriver(split.join('.'));
6947
+ split = [];
6948
+ } else {
6949
+ val = getData(id, def);
6950
+ split = [];
6951
+ }
6952
+
6953
+ if (split.length) {
6954
+ val = deepGet(val, split);
6955
+ }
6956
+ }
6957
+
6958
+ return val == null || val === '' ? def : val;
6959
+ },
6960
+ watchLoadData: function watchLoadData(fn) {
6961
+ var _this5 = this;
6962
+
6963
+ var unwatch = {};
6964
+
6965
+ var run = function run(flag) {
6966
+ invoke(function () {
6967
+ fn(get, flag);
6968
+ });
6969
+ };
6970
+
6971
+ var get = function get(id, def) {
6972
+ if (unwatch[id]) {
6973
+ return unwatch[id].val;
6974
+ }
6975
+
6976
+ var val = _this5.getLoadData(id, def);
6977
+
6978
+ var split = id.split('.');
6979
+ var key = split.shift();
6980
+ var key2 = split.shift() || '';
6981
+ var callback = debounce(function () {
6982
+ if (key !== id) {
6983
+ var temp = _this5.getLoadData(id, def);
6984
+
6985
+ if (JSON.stringify(temp) !== JSON.stringify(unwatch[id].val)) {
6986
+ unwatch[id].val = temp;
6987
+ run(true);
6988
+ }
6989
+ } else {
6990
+ run(true);
6991
+ }
6992
+ }, 0);
6993
+
6994
+ _this5.bus.$on('$loadData.' + key, callback);
6995
+
6996
+ if (key2) {
6997
+ _this5.bus.$on('$loadData.' + key + '.' + key2, callback);
6998
+ }
6999
+
7000
+ unwatch[id] = {
7001
+ fn: function fn() {
7002
+ _this5.bus.$off('$loadData.' + key, callback);
7003
+
7004
+ if (key2) {
7005
+ _this5.bus.$off('$loadData.' + key + '.' + key2, callback);
7006
+ }
7007
+ },
7008
+ val: val
7009
+ };
7010
+ return val;
7011
+ };
7012
+
7013
+ run(false);
7014
+
7015
+ var un = function un() {
7016
+ Object.keys(unwatch).forEach(function (k) {
7017
+ return unwatch[k].fn();
7018
+ });
7019
+ unwatch = {};
7020
+ };
7021
+
7022
+ this.unwatch.push(un);
7023
+ return un;
7024
+ },
6475
7025
  isSub: function isSub() {
6476
7026
  return this.vm.setupState.parent && this.vm.props.extendOption;
6477
7027
  },
@@ -6510,6 +7060,7 @@
6510
7060
  updateOptions: function updateOptions(options) {
6511
7061
  this.options.value = this.mergeOptions(this.options.value, options);
6512
7062
  this.$handle.$manager.updateOptions(this.options.value);
7063
+ this.bus.$emit('$loadData.$options');
6513
7064
  },
6514
7065
  api: function api() {
6515
7066
  return this.$handle.api;
@@ -6521,6 +7072,8 @@
6521
7072
  this.$handle.mounted();
6522
7073
  },
6523
7074
  unmount: function unmount() {
7075
+ var _this6 = this;
7076
+
6524
7077
  if (this.name) {
6525
7078
  if (this.inFor) {
6526
7079
  var idx = instance[this.name].indexOf(this);
@@ -6530,14 +7083,20 @@
6530
7083
  }
6531
7084
  }
6532
7085
 
6533
- this.unwatch && this.unwatch();
7086
+ listener.forEach(function (item) {
7087
+ _this6.bus.$off(item.name, item.callback);
7088
+ });
7089
+ this.unwatch.forEach(function (fn) {
7090
+ return fn();
7091
+ });
7092
+ this.unwatch = [];
6534
7093
  this.$handle.reloadRule([]);
6535
7094
  },
6536
7095
  updated: function updated() {
6537
- var _this3 = this;
7096
+ var _this7 = this;
6538
7097
 
6539
7098
  this.$handle.bindNextTick(function () {
6540
- return _this3.bus.$emit('next-tick', _this3.$handle.api);
7099
+ return _this7.bus.$emit('next-tick', _this7.$handle.api);
6541
7100
  });
6542
7101
  }
6543
7102
  });
@@ -6548,13 +7107,16 @@
6548
7107
  ui: config.ui,
6549
7108
  extendApi: extendApi,
6550
7109
  getData: getData,
7110
+ setDataDriver: setDataDriver,
6551
7111
  setData: setData,
6552
7112
  removeData: removeData,
7113
+ refreshData: refreshData,
6553
7114
  maker: maker,
6554
7115
  component: component,
6555
7116
  directive: directive,
6556
7117
  setModelField: setModelField,
6557
7118
  setFormula: setFormula,
7119
+ setDriver: setDriver,
6558
7120
  register: register,
6559
7121
  $vnode: $vnode,
6560
7122
  parser: parser,
@@ -6580,8 +7142,9 @@
6580
7142
  isMobile: isMobile,
6581
7143
  install: function install(app, options) {
6582
7144
  globalConfig = _objectSpread2(_objectSpread2({}, globalConfig), options || {});
6583
- if (app._installedFormCreate === true) return;
6584
- app._installedFormCreate = true;
7145
+ var key = '_installedFormCreate_' + config.ui;
7146
+ if (app[key] === true) return;
7147
+ app[key] = true;
6585
7148
 
6586
7149
  var $formCreate = function $formCreate(rules) {
6587
7150
  var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -6603,6 +7166,8 @@
6603
7166
 
6604
7167
  useAttr(create);
6605
7168
  useStatic(create);
7169
+ setDataDriver('$cookie', cookieDriver);
7170
+ setDataDriver('$localStorage', localStorageDriver);
6606
7171
  CreateNode.use({
6607
7172
  fragment: 'fcFragment'
6608
7173
  });
@@ -6627,7 +7192,10 @@
6627
7192
  inherit.formulas && extend(formulas, inherit.formulas);
6628
7193
  }
6629
7194
 
6630
- return create;
7195
+ var FcComponent = $form();
7196
+ setPrototypeOf(FcComponent, create);
7197
+ FcComponent.util = create;
7198
+ return FcComponent;
6631
7199
  }
6632
7200
 
6633
7201
  var DEFAULT_FORMATS = {
@@ -7257,7 +7825,7 @@
7257
7825
  return maker;
7258
7826
  }
7259
7827
 
7260
- 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}";
7828
+ 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}";
7261
7829
  styleInject(css_248z);
7262
7830
 
7263
7831
  function tidyBtnProp(btn, def) {
@@ -7510,7 +8078,7 @@
7510
8078
  function elmFormCreate() {
7511
8079
  return FormCreateFactory({
7512
8080
  ui: 'element-ui',
7513
- version: '3.2.0',
8081
+ version: '3.2.2',
7514
8082
  manager: manager,
7515
8083
  extendApi: extendApi,
7516
8084
  install: install,