@form-create/element-ui 3.2.0 → 3.2.1

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.1
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;
@@ -2326,10 +2215,24 @@
2326
2215
  document.head.appendChild(styleEl);
2327
2216
  }
2328
2217
  });
2218
+ var emit$topForm = debounce(function () {
2219
+ fc.bus.$emit('$loadData.$topForm');
2220
+ }, 100);
2221
+ var emit$form = debounce(function () {
2222
+ fc.bus.$emit('$loadData.$form');
2223
+ }, 100);
2329
2224
  vue.onMounted(function () {
2225
+ if (parent) {
2226
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2227
+ }
2228
+
2330
2229
  fc.mounted();
2331
2230
  });
2332
2231
  vue.onBeforeUnmount(function () {
2232
+ if (parent) {
2233
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2234
+ }
2235
+
2333
2236
  styleEl && document.head.removeChild(styleEl);
2334
2237
  rmSubForm();
2335
2238
  data.destroyed = true;
@@ -2392,6 +2295,13 @@
2392
2295
 
2393
2296
  data.updateValue = json;
2394
2297
  vm.emit('update:modelValue', value);
2298
+ vue.nextTick(function () {
2299
+ emit$form();
2300
+
2301
+ if (!parent) {
2302
+ emit$topForm();
2303
+ }
2304
+ });
2395
2305
  }
2396
2306
  });
2397
2307
  },
@@ -2479,6 +2389,105 @@
2479
2389
  return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2480
2390
  }
2481
2391
 
2392
+ function format(type, msg, rule) {
2393
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2394
+ }
2395
+ function err(msg, rule) {
2396
+ console.error(format('err', msg, rule));
2397
+ }
2398
+ function logError(e) {
2399
+ err(e.toString());
2400
+ console.error(e);
2401
+ }
2402
+
2403
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2404
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2405
+ var $T = '$FN:';
2406
+ var $TX = '$FNX:';
2407
+ var $ON = '$GLOBAL:';
2408
+ var FUNCTION = 'function';
2409
+ function toJson(obj, space) {
2410
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2411
+ if (val && val._isVue === true) return undefined;
2412
+
2413
+ if (_typeof(val) !== FUNCTION) {
2414
+ return val;
2415
+ }
2416
+
2417
+ if (val.__json) {
2418
+ return val.__json;
2419
+ }
2420
+
2421
+ if (val.__origin) val = val.__origin;
2422
+ if (val.__emit) return undefined;
2423
+ return PREFIX + val + SUFFIX;
2424
+ }, space);
2425
+ }
2426
+
2427
+ function makeFn(fn) {
2428
+ return new Function('return ' + fn)();
2429
+ }
2430
+
2431
+ function parseFn(fn, mode) {
2432
+ if (fn && is.String(fn) && fn.length > 4) {
2433
+ var v = fn.trim();
2434
+ var flag = false;
2435
+
2436
+ try {
2437
+ if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2438
+ v = v.replace(SUFFIX, '').replace(PREFIX, '');
2439
+ flag = true;
2440
+ } else if (v.indexOf($T) === 0) {
2441
+ v = v.replace($T, '');
2442
+ flag = true;
2443
+ } else if (v.indexOf($ON) === 0) {
2444
+ var name = v.replace($ON, '');
2445
+
2446
+ v = function v() {
2447
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2448
+ args[_key] = arguments[_key];
2449
+ }
2450
+
2451
+ var callback = args[0].api.getGlobalEvent(name);
2452
+
2453
+ if (callback) {
2454
+ return callback.call.apply(callback, [this].concat(args));
2455
+ }
2456
+
2457
+ return undefined;
2458
+ };
2459
+
2460
+ v.__json = fn;
2461
+ v.__inject = true;
2462
+ return v;
2463
+ } else if (v.indexOf($TX) === 0) {
2464
+ v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2465
+ v.__json = fn;
2466
+ v.__inject = true;
2467
+ return v;
2468
+ } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2469
+ flag = true;
2470
+ }
2471
+
2472
+ if (!flag) return fn;
2473
+ var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2474
+ val.__json = fn;
2475
+ return val;
2476
+ } catch (e) {
2477
+ err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2478
+ return undefined;
2479
+ }
2480
+ }
2481
+
2482
+ return fn;
2483
+ }
2484
+ function parseJson(json, mode) {
2485
+ return JSON.parse(json, function (k, v) {
2486
+ if (is.Undef(v) || !v.indexOf) return v;
2487
+ return parseFn(v, mode);
2488
+ });
2489
+ }
2490
+
2482
2491
  function enumerable(value, writable) {
2483
2492
  return {
2484
2493
  value: value,
@@ -2697,6 +2706,27 @@
2697
2706
  return new RegExp(b, 'g').test(a);
2698
2707
  }
2699
2708
  };
2709
+ function deepGet(val, split) {
2710
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2711
+ if (val != null) {
2712
+ val = val[k];
2713
+ }
2714
+ });
2715
+ return val;
2716
+ }
2717
+ function extractVar(str) {
2718
+ var regex = /{{\s*(.*?)\s*}}/g;
2719
+ var match;
2720
+ var matches = {};
2721
+
2722
+ while ((match = regex.exec(str)) !== null) {
2723
+ if (match[1]) {
2724
+ matches[match[1]] = true;
2725
+ }
2726
+ }
2727
+
2728
+ return Object.keys(matches);
2729
+ }
2700
2730
 
2701
2731
  function baseRule() {
2702
2732
  return {
@@ -2836,7 +2866,7 @@
2836
2866
 
2837
2867
  var headers = option.headers || {};
2838
2868
  Object.keys(headers).forEach(function (item) {
2839
- if (headers[item] !== null) {
2869
+ if (headers[item] != null) {
2840
2870
  xhr.setRequestHeader(item, headers[item]);
2841
2871
  }
2842
2872
  });
@@ -2856,12 +2886,7 @@
2856
2886
  fn = parse;
2857
2887
  } else if (parse && is.String(parse)) {
2858
2888
  fn = function fn(v) {
2859
- parse.split('.').forEach(function (k) {
2860
- if (v) {
2861
- v = v[k];
2862
- }
2863
- });
2864
- return v;
2889
+ return deepGet(v, parse);
2865
2890
  };
2866
2891
  }
2867
2892
 
@@ -3326,6 +3351,18 @@
3326
3351
  findRules(ctx ? ctx.loadChildrenPending() : rule.children);
3327
3352
  return rules;
3328
3353
  },
3354
+ getParentSubRule: function getParentSubRule(id) {
3355
+ var flag = _typeof(id) === 'object';
3356
+ var ctx = flag ? byCtx(id) : h.getCtx(id);
3357
+
3358
+ if (ctx) {
3359
+ var group = ctx.getParentGroup();
3360
+
3361
+ if (group) {
3362
+ return group.rule;
3363
+ }
3364
+ }
3365
+ },
3329
3366
  getChildrenFormData: function getChildrenFormData(id) {
3330
3367
  var rules = api.getChildrenRuleList(id);
3331
3368
  return rules.reduce(function (formData, rule) {
@@ -3335,12 +3372,14 @@
3335
3372
  },
3336
3373
  setChildrenFormData: function setChildrenFormData(id, formData, cover) {
3337
3374
  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
- }
3375
+ h.deferSyncValue(function () {
3376
+ rules.forEach(function (rule) {
3377
+ if (hasProperty(formData, rule.field)) {
3378
+ rule.value = formData[rule.field];
3379
+ } else if (cover) {
3380
+ rule.value = undefined;
3381
+ }
3382
+ });
3344
3383
  });
3345
3384
  },
3346
3385
  getGlobalEvent: function getGlobalEvent(name) {
@@ -3402,7 +3441,7 @@
3402
3441
  });
3403
3442
  },
3404
3443
  getData: function getData(id, def) {
3405
- return h.fc.getData(id, def);
3444
+ return h.fc.getLoadData(id, def);
3406
3445
  },
3407
3446
  setData: function setData(id, data) {
3408
3447
  return h.fc.setData(id, data);
@@ -3485,6 +3524,34 @@
3485
3524
  return str.replace(str[0], str[0].toLowerCase());
3486
3525
  }
3487
3526
 
3527
+ function toString(val) {
3528
+ return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
3529
+ }
3530
+
3531
+ var id$2 = 0;
3532
+ function uniqueId() {
3533
+ var num = 370 + ++id$2;
3534
+ return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
3535
+ }
3536
+
3537
+ function deepSet(data, idx, val) {
3538
+ var _data = data,
3539
+ to;
3540
+ (idx || '').split('.').forEach(function (v) {
3541
+ if (to) {
3542
+ if (!_data[to] || _typeof(_data[to]) != 'object') {
3543
+ _data[to] = {};
3544
+ }
3545
+
3546
+ _data = _data[to];
3547
+ }
3548
+
3549
+ to = v;
3550
+ });
3551
+ _data[to] = val;
3552
+ return _data;
3553
+ }
3554
+
3488
3555
  function useRender$1(Render) {
3489
3556
  extend(Render.prototype, {
3490
3557
  initRender: function initRender() {
@@ -3796,6 +3863,9 @@
3796
3863
 
3797
3864
  _this7.onMounted(ctx, vn.el);
3798
3865
  },
3866
+ 'fc.updateValue': function fcUpdateValue(data) {
3867
+ _this7.$handle.onUpdateValue(ctx, data);
3868
+ },
3799
3869
  'fc.el': function fcEl(el) {
3800
3870
  ctx.exportEl = el;
3801
3871
 
@@ -4066,6 +4136,52 @@
4066
4136
  fn.__origin = _fn;
4067
4137
  fn.__json = _fn.__json;
4068
4138
  return fn;
4139
+ },
4140
+ loadStrVar: function loadStrVar(str, get) {
4141
+ var _this3 = this;
4142
+
4143
+ if (str && typeof str === 'string' && str.indexOf('{{') > -1 && str.indexOf('}}') > -1) {
4144
+ var vars = extractVar(str);
4145
+ vars.forEach(function (v) {
4146
+ var split = v.split('||');
4147
+ var field = split[0].trim();
4148
+
4149
+ if (field) {
4150
+ var def = (split[1] || '').trim();
4151
+ var val = get ? get(field, def) : _this3.fc.getLoadData(field, def);
4152
+ str = str.replaceAll("{{".concat(v, "}}"), val == null ? '' : val);
4153
+ }
4154
+ });
4155
+ }
4156
+
4157
+ return str;
4158
+ },
4159
+ loadFetchVar: function loadFetchVar(options, get) {
4160
+ var _this4 = this;
4161
+
4162
+ var loadVal = function loadVal(str) {
4163
+ return _this4.loadStrVar(str, get);
4164
+ };
4165
+
4166
+ options.action = loadVal(options.action);
4167
+
4168
+ if (options.headers) {
4169
+ var _headers = {};
4170
+ Object.keys(options.headers).forEach(function (k) {
4171
+ _headers[loadVal(k)] = loadVal(options.headers[k]);
4172
+ });
4173
+ options.headers = _headers;
4174
+ }
4175
+
4176
+ if (options.data) {
4177
+ var _data = {};
4178
+ Object.keys(options.data).forEach(function (k) {
4179
+ _data[loadVal(k)] = loadVal(options.data[k]);
4180
+ });
4181
+ options.data = _data;
4182
+ }
4183
+
4184
+ return options;
4069
4185
  }
4070
4186
  });
4071
4187
  }
@@ -4185,7 +4301,6 @@
4185
4301
  defaultValue: isInput ? deepCopy(defaultValue) : undefined,
4186
4302
  field: rule.field || undefined
4187
4303
  });
4188
- this.updateType();
4189
4304
  this.updateKey();
4190
4305
  bind(this);
4191
4306
  this.update(handle, true);
@@ -4321,6 +4436,7 @@
4321
4436
  updateType: function updateType() {
4322
4437
  this.originType = this.rule.type;
4323
4438
  this.type = toCase(this.rule.type);
4439
+ this.trueType = this.$handle.getType(this.originType);
4324
4440
  },
4325
4441
  setParser: function setParser(parser) {
4326
4442
  this.parser = parser;
@@ -4409,7 +4525,6 @@
4409
4525
  computed: {},
4410
4526
  el: undef,
4411
4527
  $handle: undef,
4412
- $render: undef,
4413
4528
  $api: undef,
4414
4529
  vm: undef,
4415
4530
  vNode: undef,
@@ -4465,7 +4580,6 @@
4465
4580
  $render: handle.$render,
4466
4581
  $api: handle.api,
4467
4582
  vm: handle.vm,
4468
- trueType: handle.getType(this.originType),
4469
4583
  vNode: handle.$render.vNode,
4470
4584
  updated: false,
4471
4585
  cacheValue: this.rule.value
@@ -4473,6 +4587,7 @@
4473
4587
  !init && this.unwatch();
4474
4588
  this.watchTo();
4475
4589
  this.link();
4590
+ this.updateType();
4476
4591
  }
4477
4592
  });
4478
4593
 
@@ -4944,6 +5059,28 @@
4944
5059
  this.setValue(ctx, val, value);
4945
5060
  }
4946
5061
  },
5062
+ onUpdateValue: function onUpdateValue(ctx, data) {
5063
+ var _this = this;
5064
+
5065
+ this.deferSyncValue(function () {
5066
+ var group = ctx.getParentGroup();
5067
+ var subForm = group ? _this.subRuleData[group.id] : null;
5068
+ var subData = {};
5069
+ Object.keys(data || {}).forEach(function (k) {
5070
+ if (subForm && hasProperty(subForm, k)) {
5071
+ subData[k] = data[k];
5072
+ } else if (hasProperty(_this.api.form, k)) {
5073
+ _this.api.form[k] = data[k];
5074
+ } else if (_this.api.top !== _this.api && hasProperty(_this.api.top.form, k)) {
5075
+ _this.api.top.form[k] = data[k];
5076
+ }
5077
+ });
5078
+
5079
+ if (Object.keys(subData).length) {
5080
+ _this.api.setChildrenFormData(group.rule, subData);
5081
+ }
5082
+ });
5083
+ },
4947
5084
  onBaseInput: function onBaseInput(ctx, value) {
4948
5085
  this.setFormData(ctx, value);
4949
5086
  ctx.modelValue = value;
@@ -4975,11 +5112,11 @@
4975
5112
  return this.formData[ctx.id];
4976
5113
  },
4977
5114
  syncForm: function syncForm() {
4978
- var _this = this;
5115
+ var _this2 = this;
4979
5116
 
4980
5117
  var data = vue.reactive({});
4981
5118
  this.fields().reduce(function (initial, field) {
4982
- var ctx = _this.getCtx(field);
5119
+ var ctx = _this2.getCtx(field);
4983
5120
 
4984
5121
  initial[field] = vue.toRef(ctx.rule, 'value');
4985
5122
  return initial;
@@ -5028,11 +5165,11 @@
5028
5165
  return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5029
5166
  },
5030
5167
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5031
- var _this2 = this;
5168
+ var _this3 = this;
5032
5169
 
5033
5170
  if (is.Function(ctx.rule.update)) {
5034
5171
  var state = invoke(function () {
5035
- return ctx.rule.update(val, ctx.origin, _this2.api, {
5172
+ return ctx.rule.update(val, ctx.origin, _this3.api, {
5036
5173
  origin: origin || 'change',
5037
5174
  linkField: field
5038
5175
  });
@@ -5056,18 +5193,18 @@
5056
5193
  this.refreshUpdate(ctx, val, origin, field);
5057
5194
  },
5058
5195
  appendLink: function appendLink(ctx) {
5059
- var _this3 = this;
5196
+ var _this4 = this;
5060
5197
 
5061
5198
  var link = ctx.rule.link;
5062
5199
  is.trueArray(link) && link.forEach(function (field) {
5063
5200
  var fn = function fn() {
5064
- return _this3.refreshRule(ctx, ctx.rule.value, 'link', field);
5201
+ return _this4.refreshRule(ctx, ctx.rule.value, 'link', field);
5065
5202
  };
5066
5203
 
5067
- _this3.bus.$on('change-' + field, fn);
5204
+ _this4.bus.$on('change-' + field, fn);
5068
5205
 
5069
5206
  ctx.linkOn.push(function () {
5070
- return _this3.bus.$off('change-' + field, fn);
5207
+ return _this4.bus.$off('change-' + field, fn);
5071
5208
  });
5072
5209
  });
5073
5210
  },
@@ -5918,39 +6055,37 @@
5918
6055
  var loadData = {
5919
6056
  name: 'loadData',
5920
6057
  _fn: [],
5921
- created: function created(inject, rule, api) {
6058
+ mounted: function mounted(inject, rule, api) {
5922
6059
  this.deleted(inject);
5923
6060
  var attrs = toArray(inject.getValue());
5924
- var events = [];
6061
+ var unwatchs = [];
5925
6062
  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);
5931
- }
6063
+ if (attr && (attr.attr || attr.template)) {
6064
+ var unwatch = fc.watchLoadData(debounce(function (get) {
6065
+ var value;
5932
6066
 
5933
- var value = undefined;
5934
-
5935
- if (attr.attr) {
5936
- value = fc.loadData[attr.attr] || attr["default"];
6067
+ if (attr.template) {
6068
+ value = fc.$handle.loadStrVar(attr.template, get);
6069
+ } else {
6070
+ value = get(attr.attr, attr["default"]);
6071
+ }
5937
6072
 
5938
- if (attr.copy !== false) {
5939
- value = deepCopy(value);
5940
- }
6073
+ if (attr.copy !== false) {
6074
+ value = deepCopy(value);
5941
6075
  }
5942
6076
 
5943
6077
  deepSet(inject.getProp(), attr.to || 'options', value);
5944
6078
  api.sync(rule);
5945
- };
6079
+ }, attr.wait || 300));
5946
6080
 
5947
- events.push(function () {
5948
- return fc.bus.$off('p.loadData.' + attr.attr, on);
5949
- });
5950
- on();
6081
+ if (attr.watch !== false) {
6082
+ unwatchs.push(unwatch);
6083
+ } else {
6084
+ unwatch();
6085
+ }
5951
6086
  }
5952
6087
  });
5953
- this._fn[inject.id] = events;
6088
+ this._fn[inject.id] = unwatchs;
5954
6089
  },
5955
6090
  deleted: function deleted(inject) {
5956
6091
  if (this._fn[inject.id]) {
@@ -6013,6 +6148,7 @@
6013
6148
 
6014
6149
  function run(inject, rule, api) {
6015
6150
  var option = inject.value;
6151
+ fetchAttr.deleted(inject);
6016
6152
 
6017
6153
  if (is.Function(option)) {
6018
6154
  option = option(rule, api);
@@ -6067,76 +6203,85 @@
6067
6203
  }
6068
6204
  };
6069
6205
 
6070
- var config = _objectSpread2(_objectSpread2({
6071
- headers: {}
6072
- }, option), {}, {
6073
- onSuccess: function onSuccess(body, flag) {
6074
- if (check()) return;
6206
+ fetchAttr._fn[inject.id] = fc.watchLoadData(debounce(function (get) {
6207
+ var _option = fc.$handle.loadFetchVar(deepCopy(option), get);
6075
6208
 
6076
- var fn = function fn(v) {
6077
- return flag ? v : hasProperty(v, 'data') ? v.data : v;
6078
- };
6209
+ var config = _objectSpread2(_objectSpread2({
6210
+ headers: {}
6211
+ }, _option), {}, {
6212
+ onSuccess: function onSuccess(body, flag) {
6213
+ if (check()) return;
6079
6214
 
6080
- var parse = parseFn(option.parse);
6081
-
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;
6215
+ var fn = function fn(v) {
6216
+ return flag ? v : hasProperty(v, 'data') ? v.data : v;
6092
6217
  };
6093
- }
6094
6218
 
6095
- set(fn(body, rule, api));
6096
- api.sync(rule);
6097
- },
6098
- onError: function onError(e) {
6099
- set(undefined);
6100
- if (check()) return;
6219
+ var parse = parseFn(_option.parse);
6101
6220
 
6102
- (_onError || function (e) {
6103
- return err(e.message || 'fetch fail ' + option.action);
6104
- })(e, rule, api);
6105
- }
6106
- });
6221
+ if (is.Function(parse)) {
6222
+ fn = parse;
6223
+ } else if (parse && is.String(parse)) {
6224
+ fn = function fn(v) {
6225
+ return deepGet(v, parse);
6226
+ };
6227
+ }
6107
6228
 
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
- }
6229
+ set(fn(body, rule, api));
6230
+ api.sync(rule);
6231
+ },
6232
+ onError: function onError(e) {
6233
+ set(undefined);
6234
+ if (check()) return;
6120
6235
 
6121
- invoke(function () {
6122
- return fc.create.fetch(config, {
6123
- inject: inject,
6124
- rule: rule,
6125
- api: api
6236
+ (_onError || function (e) {
6237
+ return err(e.message || 'fetch fail ' + _option.action);
6238
+ })(e, rule, api);
6239
+ }
6240
+ });
6241
+
6242
+ fc.$handle.beforeFetch(config, {
6243
+ rule: rule,
6244
+ api: api
6245
+ }).then(function () {
6246
+ if (is.Function(_option.action)) {
6247
+ _option.action(rule, api).then(function (val) {
6248
+ config.onSuccess(val, true);
6249
+ })["catch"](function (e) {
6250
+ config.onError(e);
6251
+ });
6252
+
6253
+ return;
6254
+ }
6255
+
6256
+ invoke(function () {
6257
+ return fc.create.fetch(config, {
6258
+ inject: inject,
6259
+ rule: rule,
6260
+ api: api
6261
+ });
6126
6262
  });
6127
6263
  });
6128
- });
6264
+ }, option.wait || 1000));
6129
6265
  }
6130
6266
 
6131
- return {
6267
+ var fetchAttr = {
6132
6268
  name: 'fetch',
6133
- loaded: function loaded() {
6269
+ _fn: [],
6270
+ mounted: function mounted() {
6134
6271
  run.apply(void 0, arguments);
6135
6272
  },
6136
6273
  watch: function watch() {
6137
6274
  run.apply(void 0, arguments);
6275
+ },
6276
+ deleted: function deleted(inject) {
6277
+ if (this._fn[inject.id]) {
6278
+ this._fn[inject.id]();
6279
+ }
6280
+
6281
+ inject.clearProp();
6138
6282
  }
6139
6283
  };
6284
+ return fetchAttr;
6140
6285
  };
6141
6286
 
6142
6287
  var $provider = {
@@ -6164,6 +6309,71 @@
6164
6309
  }
6165
6310
  };
6166
6311
 
6312
+ function getCookie(name) {
6313
+ name = name + '=';
6314
+ var decodedCookie = decodeURIComponent(document.cookie);
6315
+ var cookieArray = decodedCookie.split(';');
6316
+
6317
+ for (var i = 0; i < cookieArray.length; i++) {
6318
+ var cookie = cookieArray[i];
6319
+
6320
+ while (cookie.charAt(0) === ' ') {
6321
+ cookie = cookie.substring(1);
6322
+ }
6323
+
6324
+ if (cookie.indexOf(name) === 0) {
6325
+ cookie = cookie.substring(name.length, cookie.length);
6326
+
6327
+ try {
6328
+ return JSON.parse(cookie);
6329
+ } catch (e) {
6330
+ return cookie;
6331
+ }
6332
+ }
6333
+ }
6334
+
6335
+ return null;
6336
+ }
6337
+
6338
+ function getLocalStorage(name) {
6339
+ var value = localStorage.getItem(name);
6340
+
6341
+ if (value) {
6342
+ try {
6343
+ return JSON.parse(value);
6344
+ } catch (e) {
6345
+ return value;
6346
+ }
6347
+ }
6348
+
6349
+ return null;
6350
+ }
6351
+
6352
+ function baseDriver(driver, name) {
6353
+ if (!name) {
6354
+ return null;
6355
+ }
6356
+
6357
+ var split = name.split('.');
6358
+ var value = driver(split.shift());
6359
+
6360
+ if (!split.length) {
6361
+ return value;
6362
+ }
6363
+
6364
+ if (value == null) {
6365
+ return null;
6366
+ }
6367
+
6368
+ return deepGet(value, split);
6369
+ }
6370
+ function cookieDriver(name) {
6371
+ return baseDriver(getCookie, name);
6372
+ }
6373
+ function localStorageDriver(name) {
6374
+ return baseDriver(getLocalStorage, name);
6375
+ }
6376
+
6167
6377
  function parseProp(name, id) {
6168
6378
  var prop;
6169
6379
 
@@ -6361,23 +6571,53 @@
6361
6571
  formulas[name] = fn;
6362
6572
  }
6363
6573
 
6364
- function _emitData(id) {
6574
+ function emitData(id) {
6365
6575
  Object.keys(instance).forEach(function (v) {
6366
6576
  var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6367
6577
  apis.forEach(function (that) {
6368
- that.bus.$emit('p.loadData.' + id);
6578
+ that.bus.$emit('$loadData.' + id);
6369
6579
  });
6370
6580
  });
6371
6581
  }
6372
6582
 
6373
6583
  function setData(id, data) {
6374
6584
  loadData[id] = data;
6585
+ emitData(id);
6586
+ }
6587
+
6588
+ function setDataDriver(id, data) {
6589
+ var callback = function callback() {
6590
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6591
+ args[_key] = arguments[_key];
6592
+ }
6593
+
6594
+ return invoke(function () {
6595
+ return data.apply(void 0, args);
6596
+ });
6597
+ };
6375
6598
 
6376
- _emitData(id);
6599
+ callback._driver = true;
6600
+ setData(id, callback);
6377
6601
  }
6378
6602
 
6379
6603
  function getData(id, def) {
6380
- return hasProperty(loadData, id) ? loadData[id] : def;
6604
+ var split = (id || '').split('.');
6605
+ id = split.shift();
6606
+ var field = split.join('.');
6607
+
6608
+ if (hasProperty(loadData, id)) {
6609
+ var val = loadData[id];
6610
+
6611
+ if (val && val._driver) {
6612
+ val = val(field);
6613
+ } else if (split.length) {
6614
+ val = deepGet(val, split);
6615
+ }
6616
+
6617
+ return val == null || val === '' ? def : val;
6618
+ } else {
6619
+ return def;
6620
+ }
6381
6621
  }
6382
6622
 
6383
6623
  function extendApi(fn) {
@@ -6386,8 +6626,7 @@
6386
6626
 
6387
6627
  function removeData(id) {
6388
6628
  delete loadData[id];
6389
-
6390
- _emitData(id);
6629
+ emitData(id);
6391
6630
  }
6392
6631
 
6393
6632
  function on(name, callback) {
@@ -6419,12 +6658,14 @@
6419
6658
  },
6420
6659
  setData: setData,
6421
6660
  getData: getData,
6661
+ emitData: emitData,
6422
6662
  loadData: loadData,
6423
6663
  CreateNode: CreateNode,
6424
6664
  bus: new Mitt(),
6425
6665
  unwatch: null,
6426
6666
  options: vue.ref({}),
6427
- extendApiFn: extendApiFn
6667
+ extendApiFn: extendApiFn,
6668
+ fetchCache: new WeakMap()
6428
6669
  });
6429
6670
  listener.forEach(function (item) {
6430
6671
  _this.bus.$on(item.name, item.callback);
@@ -6472,6 +6713,159 @@
6472
6713
  this.initOptions();
6473
6714
  this.$handle.init();
6474
6715
  },
6716
+ globalDataDriver: function globalDataDriver(id) {
6717
+ var _this3 = this;
6718
+
6719
+ var split = id.split('.');
6720
+ var key = split.shift();
6721
+ var option = this.options.value.globalData && this.options.value.globalData[key];
6722
+
6723
+ if (option) {
6724
+ if (option.type === 'static') {
6725
+ return deepGet(option.data, split);
6726
+ } else {
6727
+ var val;
6728
+ var res = this.fetchCache.get(option);
6729
+
6730
+ if (res) {
6731
+ if (res.status) {
6732
+ val = deepGet(res.data, split);
6733
+ }
6734
+
6735
+ if (!res.loading) {
6736
+ return val;
6737
+ }
6738
+
6739
+ res.loading = false;
6740
+ this.fetchCache.set(option, res);
6741
+ } else {
6742
+ this.fetchCache.set(option, {
6743
+ status: false
6744
+ });
6745
+ }
6746
+
6747
+ var reload = debounce(function () {
6748
+ unwatch();
6749
+
6750
+ var res = _this3.fetchCache.get(option);
6751
+
6752
+ if (_this3.options.value.globalData && Object.values(_this3.options.value.globalData).indexOf(option) !== -1) {
6753
+ if (res) {
6754
+ res.loading = true;
6755
+
6756
+ _this3.fetchCache.set(option, res);
6757
+ }
6758
+
6759
+ _this3.bus.$emit('$loadData.$globalData');
6760
+ } else {
6761
+ _this3.fetchCache["delete"](option);
6762
+ }
6763
+ }, option.wait || 1000);
6764
+
6765
+ var callback = function callback(get, change) {
6766
+ if (change) {
6767
+ reload();
6768
+ return;
6769
+ }
6770
+
6771
+ var options = _this3.$handle.loadFetchVar(copy$1(option), get);
6772
+
6773
+ _this3.$handle.api.fetch(options).then(function (res) {
6774
+ _this3.fetchCache.set(option, {
6775
+ status: true,
6776
+ data: res
6777
+ });
6778
+
6779
+ _this3.bus.$emit('$loadData.$globalData');
6780
+ });
6781
+ };
6782
+
6783
+ var unwatch = this.watchLoadData(callback);
6784
+ return val;
6785
+ }
6786
+ }
6787
+ },
6788
+ getLoadData: function getLoadData(id, def) {
6789
+ var val = null;
6790
+
6791
+ if (id != null) {
6792
+ var split = id.split('.');
6793
+ var key = split.shift();
6794
+
6795
+ if (key === '$form') {
6796
+ val = this.$handle.api.top.formData();
6797
+ } else if (key === '$subForm') {
6798
+ val = this.$handle.api.formData();
6799
+ } else if (key === '$options') {
6800
+ val = this.options.value;
6801
+ } else if (key === '$globalData') {
6802
+ val = this.globalDataDriver(split.join('.'));
6803
+ split = [];
6804
+ } else {
6805
+ val = getData(id, def);
6806
+ split = [];
6807
+ }
6808
+
6809
+ if (split.length) {
6810
+ val = deepGet(val, split);
6811
+ }
6812
+ }
6813
+
6814
+ console.log(id, val);
6815
+ return val == null || val === '' ? def : val;
6816
+ },
6817
+ watchLoadData: function watchLoadData(fn) {
6818
+ var _this4 = this;
6819
+
6820
+ var unwatch = {};
6821
+
6822
+ var run = function run(flag) {
6823
+ invoke(function () {
6824
+ fn(get, flag);
6825
+ });
6826
+ };
6827
+
6828
+ var get = function get(id, def) {
6829
+ if (unwatch[id]) {
6830
+ return unwatch[id].val;
6831
+ }
6832
+
6833
+ var val = _this4.getLoadData(id, def);
6834
+
6835
+ var key = id.split('.').shift();
6836
+
6837
+ var callback = function callback() {
6838
+ if (key !== id) {
6839
+ var temp = _this4.getLoadData(id, def);
6840
+
6841
+ if (JSON.stringify(temp) !== JSON.stringify(unwatch[id].val)) {
6842
+ unwatch[id].val = temp;
6843
+ run(true);
6844
+ }
6845
+ } else {
6846
+ run(true);
6847
+ }
6848
+ };
6849
+
6850
+ _this4.bus.$on('$loadData.' + key, callback);
6851
+
6852
+ unwatch[id] = {
6853
+ fn: function fn() {
6854
+ _this4.bus.$off('$loadData.' + key, callback);
6855
+ },
6856
+ val: val
6857
+ };
6858
+ return val;
6859
+ };
6860
+
6861
+ run(false);
6862
+ return function () {
6863
+ Object.keys(unwatch).forEach(function (k) {
6864
+ return unwatch[k].fn();
6865
+ });
6866
+ unwatch = {};
6867
+ };
6868
+ },
6475
6869
  isSub: function isSub() {
6476
6870
  return this.vm.setupState.parent && this.vm.props.extendOption;
6477
6871
  },
@@ -6510,6 +6904,7 @@
6510
6904
  updateOptions: function updateOptions(options) {
6511
6905
  this.options.value = this.mergeOptions(this.options.value, options);
6512
6906
  this.$handle.$manager.updateOptions(this.options.value);
6907
+ this.bus.$emit('$loadData.$options');
6513
6908
  },
6514
6909
  api: function api() {
6515
6910
  return this.$handle.api;
@@ -6521,6 +6916,8 @@
6521
6916
  this.$handle.mounted();
6522
6917
  },
6523
6918
  unmount: function unmount() {
6919
+ var _this5 = this;
6920
+
6524
6921
  if (this.name) {
6525
6922
  if (this.inFor) {
6526
6923
  var idx = instance[this.name].indexOf(this);
@@ -6530,14 +6927,17 @@
6530
6927
  }
6531
6928
  }
6532
6929
 
6930
+ listener.forEach(function (item) {
6931
+ _this5.bus.$off(item.name, item.callback);
6932
+ });
6533
6933
  this.unwatch && this.unwatch();
6534
6934
  this.$handle.reloadRule([]);
6535
6935
  },
6536
6936
  updated: function updated() {
6537
- var _this3 = this;
6937
+ var _this6 = this;
6538
6938
 
6539
6939
  this.$handle.bindNextTick(function () {
6540
- return _this3.bus.$emit('next-tick', _this3.$handle.api);
6940
+ return _this6.bus.$emit('next-tick', _this6.$handle.api);
6541
6941
  });
6542
6942
  }
6543
6943
  });
@@ -6548,6 +6948,7 @@
6548
6948
  ui: config.ui,
6549
6949
  extendApi: extendApi,
6550
6950
  getData: getData,
6951
+ setDataDriver: setDataDriver,
6551
6952
  setData: setData,
6552
6953
  removeData: removeData,
6553
6954
  maker: maker,
@@ -6580,8 +6981,9 @@
6580
6981
  isMobile: isMobile,
6581
6982
  install: function install(app, options) {
6582
6983
  globalConfig = _objectSpread2(_objectSpread2({}, globalConfig), options || {});
6583
- if (app._installedFormCreate === true) return;
6584
- app._installedFormCreate = true;
6984
+ var key = '_installedFormCreate_' + config.ui;
6985
+ if (app[key] === true) return;
6986
+ app[key] = true;
6585
6987
 
6586
6988
  var $formCreate = function $formCreate(rules) {
6587
6989
  var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -6603,6 +7005,8 @@
6603
7005
 
6604
7006
  useAttr(create);
6605
7007
  useStatic(create);
7008
+ setDataDriver('$cookie', cookieDriver);
7009
+ setDataDriver('$localStorage', localStorageDriver);
6606
7010
  CreateNode.use({
6607
7011
  fragment: 'fcFragment'
6608
7012
  });
@@ -6627,7 +7031,10 @@
6627
7031
  inherit.formulas && extend(formulas, inherit.formulas);
6628
7032
  }
6629
7033
 
6630
- return create;
7034
+ var FcComponent = $form();
7035
+ setPrototypeOf(FcComponent, create);
7036
+ FcComponent.util = create;
7037
+ return FcComponent;
6631
7038
  }
6632
7039
 
6633
7040
  var DEFAULT_FORMATS = {
@@ -7257,7 +7664,7 @@
7257
7664
  return maker;
7258
7665
  }
7259
7666
 
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}";
7667
+ 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
7668
  styleInject(css_248z);
7262
7669
 
7263
7670
  function tidyBtnProp(btn, def) {
@@ -7510,7 +7917,7 @@
7510
7917
  function elmFormCreate() {
7511
7918
  return FormCreateFactory({
7512
7919
  ui: 'element-ui',
7513
- version: '3.2.0',
7920
+ version: '3.2.1',
7514
7921
  manager: manager,
7515
7922
  extendApi: extendApi,
7516
7923
  install: install,