@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.
@@ -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;
@@ -2322,10 +2211,24 @@ function $FormCreate(FormCreate, components, directives) {
2322
2211
  document.head.appendChild(styleEl);
2323
2212
  }
2324
2213
  });
2214
+ var emit$topForm = debounce(function () {
2215
+ fc.bus.$emit('$loadData.$topForm');
2216
+ }, 100);
2217
+ var emit$form = debounce(function () {
2218
+ fc.bus.$emit('$loadData.$form');
2219
+ }, 100);
2325
2220
  onMounted(function () {
2221
+ if (parent) {
2222
+ fapi.top.bus.$on('$loadData.$form', emit$topForm);
2223
+ }
2224
+
2326
2225
  fc.mounted();
2327
2226
  });
2328
2227
  onBeforeUnmount(function () {
2228
+ if (parent) {
2229
+ fapi.top.bus.$off('$loadData.$form', emit$topForm);
2230
+ }
2231
+
2329
2232
  styleEl && document.head.removeChild(styleEl);
2330
2233
  rmSubForm();
2331
2234
  data.destroyed = true;
@@ -2388,6 +2291,13 @@ function $FormCreate(FormCreate, components, directives) {
2388
2291
 
2389
2292
  data.updateValue = json;
2390
2293
  vm.emit('update:modelValue', value);
2294
+ nextTick(function () {
2295
+ emit$form();
2296
+
2297
+ if (!parent) {
2298
+ emit$topForm();
2299
+ }
2300
+ });
2391
2301
  }
2392
2302
  });
2393
2303
  },
@@ -2475,6 +2385,105 @@ function attrs() {
2475
2385
  return [].concat(keyAttrs, _toConsumableArray(normalMerge), _toConsumableArray(toArrayMerge), _toConsumableArray(functionalMerge), arrayAttrs, normalAttrs);
2476
2386
  }
2477
2387
 
2388
+ function format(type, msg, rule) {
2389
+ return "[form-create ".concat(type, "]: ").concat(msg) + (rule ? '\n\nrule: ' + JSON.stringify(rule.getRule ? rule.getRule() : rule) : '');
2390
+ }
2391
+ function err(msg, rule) {
2392
+ console.error(format('err', msg, rule));
2393
+ }
2394
+ function logError(e) {
2395
+ err(e.toString());
2396
+ console.error(e);
2397
+ }
2398
+
2399
+ var PREFIX = '[[FORM-CREATE-PREFIX-';
2400
+ var SUFFIX = '-FORM-CREATE-SUFFIX]]';
2401
+ var $T = '$FN:';
2402
+ var $TX = '$FNX:';
2403
+ var $ON = '$GLOBAL:';
2404
+ var FUNCTION = 'function';
2405
+ function toJson(obj, space) {
2406
+ return JSON.stringify(deepExtend(Array.isArray(obj) ? [] : {}, obj, true), function (key, val) {
2407
+ if (val && val._isVue === true) return undefined;
2408
+
2409
+ if (_typeof(val) !== FUNCTION) {
2410
+ return val;
2411
+ }
2412
+
2413
+ if (val.__json) {
2414
+ return val.__json;
2415
+ }
2416
+
2417
+ if (val.__origin) val = val.__origin;
2418
+ if (val.__emit) return undefined;
2419
+ return PREFIX + val + SUFFIX;
2420
+ }, space);
2421
+ }
2422
+
2423
+ function makeFn(fn) {
2424
+ return new Function('return ' + fn)();
2425
+ }
2426
+
2427
+ function parseFn(fn, mode) {
2428
+ if (fn && is.String(fn) && fn.length > 4) {
2429
+ var v = fn.trim();
2430
+ var flag = false;
2431
+
2432
+ try {
2433
+ if (v.indexOf(SUFFIX) > 0 && v.indexOf(PREFIX) === 0) {
2434
+ v = v.replace(SUFFIX, '').replace(PREFIX, '');
2435
+ flag = true;
2436
+ } else if (v.indexOf($T) === 0) {
2437
+ v = v.replace($T, '');
2438
+ flag = true;
2439
+ } else if (v.indexOf($ON) === 0) {
2440
+ var name = v.replace($ON, '');
2441
+
2442
+ v = function v() {
2443
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2444
+ args[_key] = arguments[_key];
2445
+ }
2446
+
2447
+ var callback = args[0].api.getGlobalEvent(name);
2448
+
2449
+ if (callback) {
2450
+ return callback.call.apply(callback, [this].concat(args));
2451
+ }
2452
+
2453
+ return undefined;
2454
+ };
2455
+
2456
+ v.__json = fn;
2457
+ v.__inject = true;
2458
+ return v;
2459
+ } else if (v.indexOf($TX) === 0) {
2460
+ v = makeFn('function($inject){' + v.replace($TX, '') + '}');
2461
+ v.__json = fn;
2462
+ v.__inject = true;
2463
+ return v;
2464
+ } else if (!mode && v.indexOf(FUNCTION) === 0 && v !== FUNCTION) {
2465
+ flag = true;
2466
+ }
2467
+
2468
+ if (!flag) return fn;
2469
+ var val = makeFn(v.indexOf(FUNCTION) === -1 && v.indexOf('(') !== 0 ? FUNCTION + ' ' + v : v);
2470
+ val.__json = fn;
2471
+ return val;
2472
+ } catch (e) {
2473
+ err("\u89E3\u6790\u5931\u8D25:".concat(v, "\n\nerr: ").concat(e));
2474
+ return undefined;
2475
+ }
2476
+ }
2477
+
2478
+ return fn;
2479
+ }
2480
+ function parseJson(json, mode) {
2481
+ return JSON.parse(json, function (k, v) {
2482
+ if (is.Undef(v) || !v.indexOf) return v;
2483
+ return parseFn(v, mode);
2484
+ });
2485
+ }
2486
+
2478
2487
  function enumerable(value, writable) {
2479
2488
  return {
2480
2489
  value: value,
@@ -2693,6 +2702,27 @@ var condition = {
2693
2702
  return new RegExp(b, 'g').test(a);
2694
2703
  }
2695
2704
  };
2705
+ function deepGet(val, split) {
2706
+ (Array.isArray(split) ? split : (split || '').split('.')).forEach(function (k) {
2707
+ if (val != null) {
2708
+ val = val[k];
2709
+ }
2710
+ });
2711
+ return val;
2712
+ }
2713
+ function extractVar(str) {
2714
+ var regex = /{{\s*(.*?)\s*}}/g;
2715
+ var match;
2716
+ var matches = {};
2717
+
2718
+ while ((match = regex.exec(str)) !== null) {
2719
+ if (match[1]) {
2720
+ matches[match[1]] = true;
2721
+ }
2722
+ }
2723
+
2724
+ return Object.keys(matches);
2725
+ }
2696
2726
 
2697
2727
  function baseRule() {
2698
2728
  return {
@@ -2832,7 +2862,7 @@ function fetch$1(option) {
2832
2862
 
2833
2863
  var headers = option.headers || {};
2834
2864
  Object.keys(headers).forEach(function (item) {
2835
- if (headers[item] !== null) {
2865
+ if (headers[item] != null) {
2836
2866
  xhr.setRequestHeader(item, headers[item]);
2837
2867
  }
2838
2868
  });
@@ -2852,12 +2882,7 @@ function asyncFetch(config) {
2852
2882
  fn = parse;
2853
2883
  } else if (parse && is.String(parse)) {
2854
2884
  fn = function fn(v) {
2855
- parse.split('.').forEach(function (k) {
2856
- if (v) {
2857
- v = v[k];
2858
- }
2859
- });
2860
- return v;
2885
+ return deepGet(v, parse);
2861
2886
  };
2862
2887
  }
2863
2888
 
@@ -3322,6 +3347,18 @@ function Api(h) {
3322
3347
  findRules(ctx ? ctx.loadChildrenPending() : rule.children);
3323
3348
  return rules;
3324
3349
  },
3350
+ getParentSubRule: function getParentSubRule(id) {
3351
+ var flag = _typeof(id) === 'object';
3352
+ var ctx = flag ? byCtx(id) : h.getCtx(id);
3353
+
3354
+ if (ctx) {
3355
+ var group = ctx.getParentGroup();
3356
+
3357
+ if (group) {
3358
+ return group.rule;
3359
+ }
3360
+ }
3361
+ },
3325
3362
  getChildrenFormData: function getChildrenFormData(id) {
3326
3363
  var rules = api.getChildrenRuleList(id);
3327
3364
  return rules.reduce(function (formData, rule) {
@@ -3331,12 +3368,14 @@ function Api(h) {
3331
3368
  },
3332
3369
  setChildrenFormData: function setChildrenFormData(id, formData, cover) {
3333
3370
  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
- }
3371
+ h.deferSyncValue(function () {
3372
+ rules.forEach(function (rule) {
3373
+ if (hasProperty(formData, rule.field)) {
3374
+ rule.value = formData[rule.field];
3375
+ } else if (cover) {
3376
+ rule.value = undefined;
3377
+ }
3378
+ });
3340
3379
  });
3341
3380
  },
3342
3381
  getGlobalEvent: function getGlobalEvent(name) {
@@ -3398,7 +3437,7 @@ function Api(h) {
3398
3437
  });
3399
3438
  },
3400
3439
  getData: function getData(id, def) {
3401
- return h.fc.getData(id, def);
3440
+ return h.fc.getLoadData(id, def);
3402
3441
  },
3403
3442
  setData: function setData(id, data) {
3404
3443
  return h.fc.setData(id, data);
@@ -3481,6 +3520,34 @@ function lower(str) {
3481
3520
  return str.replace(str[0], str[0].toLowerCase());
3482
3521
  }
3483
3522
 
3523
+ function toString(val) {
3524
+ return val == null ? '' : _typeof(val) === 'object' ? JSON.stringify(val, null, 2) : String(val);
3525
+ }
3526
+
3527
+ var id$2 = 0;
3528
+ function uniqueId() {
3529
+ var num = 370 + ++id$2;
3530
+ return 'F' + Math.random().toString(36).substr(3, 3) + Number("".concat(Date.now())).toString(36) + num.toString(36) + 'c';
3531
+ }
3532
+
3533
+ function deepSet(data, idx, val) {
3534
+ var _data = data,
3535
+ to;
3536
+ (idx || '').split('.').forEach(function (v) {
3537
+ if (to) {
3538
+ if (!_data[to] || _typeof(_data[to]) != 'object') {
3539
+ _data[to] = {};
3540
+ }
3541
+
3542
+ _data = _data[to];
3543
+ }
3544
+
3545
+ to = v;
3546
+ });
3547
+ _data[to] = val;
3548
+ return _data;
3549
+ }
3550
+
3484
3551
  function useRender$1(Render) {
3485
3552
  extend(Render.prototype, {
3486
3553
  initRender: function initRender() {
@@ -3792,6 +3859,9 @@ function useRender$1(Render) {
3792
3859
 
3793
3860
  _this7.onMounted(ctx, vn.el);
3794
3861
  },
3862
+ 'fc.updateValue': function fcUpdateValue(data) {
3863
+ _this7.$handle.onUpdateValue(ctx, data);
3864
+ },
3795
3865
  'fc.el': function fcEl(el) {
3796
3866
  ctx.exportEl = el;
3797
3867
 
@@ -4062,6 +4132,52 @@ function useInject(Handler) {
4062
4132
  fn.__origin = _fn;
4063
4133
  fn.__json = _fn.__json;
4064
4134
  return fn;
4135
+ },
4136
+ loadStrVar: function loadStrVar(str, get) {
4137
+ var _this3 = this;
4138
+
4139
+ if (str && typeof str === 'string' && str.indexOf('{{') > -1 && str.indexOf('}}') > -1) {
4140
+ var vars = extractVar(str);
4141
+ vars.forEach(function (v) {
4142
+ var split = v.split('||');
4143
+ var field = split[0].trim();
4144
+
4145
+ if (field) {
4146
+ var def = (split[1] || '').trim();
4147
+ var val = get ? get(field, def) : _this3.fc.getLoadData(field, def);
4148
+ str = str.replaceAll("{{".concat(v, "}}"), val == null ? '' : val);
4149
+ }
4150
+ });
4151
+ }
4152
+
4153
+ return str;
4154
+ },
4155
+ loadFetchVar: function loadFetchVar(options, get) {
4156
+ var _this4 = this;
4157
+
4158
+ var loadVal = function loadVal(str) {
4159
+ return _this4.loadStrVar(str, get);
4160
+ };
4161
+
4162
+ options.action = loadVal(options.action);
4163
+
4164
+ if (options.headers) {
4165
+ var _headers = {};
4166
+ Object.keys(options.headers).forEach(function (k) {
4167
+ _headers[loadVal(k)] = loadVal(options.headers[k]);
4168
+ });
4169
+ options.headers = _headers;
4170
+ }
4171
+
4172
+ if (options.data) {
4173
+ var _data = {};
4174
+ Object.keys(options.data).forEach(function (k) {
4175
+ _data[loadVal(k)] = loadVal(options.data[k]);
4176
+ });
4177
+ options.data = _data;
4178
+ }
4179
+
4180
+ return options;
4065
4181
  }
4066
4182
  });
4067
4183
  }
@@ -4181,7 +4297,6 @@ function RuleContext(handle, rule, defaultValue) {
4181
4297
  defaultValue: isInput ? deepCopy(defaultValue) : undefined,
4182
4298
  field: rule.field || undefined
4183
4299
  });
4184
- this.updateType();
4185
4300
  this.updateKey();
4186
4301
  bind(this);
4187
4302
  this.update(handle, true);
@@ -4317,6 +4432,7 @@ extend(RuleContext.prototype, {
4317
4432
  updateType: function updateType() {
4318
4433
  this.originType = this.rule.type;
4319
4434
  this.type = toCase(this.rule.type);
4435
+ this.trueType = this.$handle.getType(this.originType);
4320
4436
  },
4321
4437
  setParser: function setParser(parser) {
4322
4438
  this.parser = parser;
@@ -4405,7 +4521,6 @@ extend(RuleContext.prototype, {
4405
4521
  computed: {},
4406
4522
  el: undef,
4407
4523
  $handle: undef,
4408
- $render: undef,
4409
4524
  $api: undef,
4410
4525
  vm: undef,
4411
4526
  vNode: undef,
@@ -4461,7 +4576,6 @@ extend(RuleContext.prototype, {
4461
4576
  $render: handle.$render,
4462
4577
  $api: handle.api,
4463
4578
  vm: handle.vm,
4464
- trueType: handle.getType(this.originType),
4465
4579
  vNode: handle.$render.vNode,
4466
4580
  updated: false,
4467
4581
  cacheValue: this.rule.value
@@ -4469,6 +4583,7 @@ extend(RuleContext.prototype, {
4469
4583
  !init && this.unwatch();
4470
4584
  this.watchTo();
4471
4585
  this.link();
4586
+ this.updateType();
4472
4587
  }
4473
4588
  });
4474
4589
 
@@ -4940,6 +5055,28 @@ function useInput(Handler) {
4940
5055
  this.setValue(ctx, val, value);
4941
5056
  }
4942
5057
  },
5058
+ onUpdateValue: function onUpdateValue(ctx, data) {
5059
+ var _this = this;
5060
+
5061
+ this.deferSyncValue(function () {
5062
+ var group = ctx.getParentGroup();
5063
+ var subForm = group ? _this.subRuleData[group.id] : null;
5064
+ var subData = {};
5065
+ Object.keys(data || {}).forEach(function (k) {
5066
+ if (subForm && hasProperty(subForm, k)) {
5067
+ subData[k] = data[k];
5068
+ } else if (hasProperty(_this.api.form, k)) {
5069
+ _this.api.form[k] = data[k];
5070
+ } else if (_this.api.top !== _this.api && hasProperty(_this.api.top.form, k)) {
5071
+ _this.api.top.form[k] = data[k];
5072
+ }
5073
+ });
5074
+
5075
+ if (Object.keys(subData).length) {
5076
+ _this.api.setChildrenFormData(group.rule, subData);
5077
+ }
5078
+ });
5079
+ },
4943
5080
  onBaseInput: function onBaseInput(ctx, value) {
4944
5081
  this.setFormData(ctx, value);
4945
5082
  ctx.modelValue = value;
@@ -4971,11 +5108,11 @@ function useInput(Handler) {
4971
5108
  return this.formData[ctx.id];
4972
5109
  },
4973
5110
  syncForm: function syncForm() {
4974
- var _this = this;
5111
+ var _this2 = this;
4975
5112
 
4976
5113
  var data = reactive({});
4977
5114
  this.fields().reduce(function (initial, field) {
4978
- var ctx = _this.getCtx(field);
5115
+ var ctx = _this2.getCtx(field);
4979
5116
 
4980
5117
  initial[field] = toRef(ctx.rule, 'value');
4981
5118
  return initial;
@@ -5024,11 +5161,11 @@ function useInput(Handler) {
5024
5161
  return (is.Object(value) || Array.isArray(value)) && value === ctx.rule.value;
5025
5162
  },
5026
5163
  refreshUpdate: function refreshUpdate(ctx, val, origin, field) {
5027
- var _this2 = this;
5164
+ var _this3 = this;
5028
5165
 
5029
5166
  if (is.Function(ctx.rule.update)) {
5030
5167
  var state = invoke(function () {
5031
- return ctx.rule.update(val, ctx.origin, _this2.api, {
5168
+ return ctx.rule.update(val, ctx.origin, _this3.api, {
5032
5169
  origin: origin || 'change',
5033
5170
  linkField: field
5034
5171
  });
@@ -5052,18 +5189,18 @@ function useInput(Handler) {
5052
5189
  this.refreshUpdate(ctx, val, origin, field);
5053
5190
  },
5054
5191
  appendLink: function appendLink(ctx) {
5055
- var _this3 = this;
5192
+ var _this4 = this;
5056
5193
 
5057
5194
  var link = ctx.rule.link;
5058
5195
  is.trueArray(link) && link.forEach(function (field) {
5059
5196
  var fn = function fn() {
5060
- return _this3.refreshRule(ctx, ctx.rule.value, 'link', field);
5197
+ return _this4.refreshRule(ctx, ctx.rule.value, 'link', field);
5061
5198
  };
5062
5199
 
5063
- _this3.bus.$on('change-' + field, fn);
5200
+ _this4.bus.$on('change-' + field, fn);
5064
5201
 
5065
5202
  ctx.linkOn.push(function () {
5066
- return _this3.bus.$off('change-' + field, fn);
5203
+ return _this4.bus.$off('change-' + field, fn);
5067
5204
  });
5068
5205
  });
5069
5206
  },
@@ -5914,39 +6051,37 @@ var loadData = function loadData(fc) {
5914
6051
  var loadData = {
5915
6052
  name: 'loadData',
5916
6053
  _fn: [],
5917
- created: function created(inject, rule, api) {
6054
+ mounted: function mounted(inject, rule, api) {
5918
6055
  this.deleted(inject);
5919
6056
  var attrs = toArray(inject.getValue());
5920
- var events = [];
6057
+ var unwatchs = [];
5921
6058
  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);
5927
- }
6059
+ if (attr && (attr.attr || attr.template)) {
6060
+ var unwatch = fc.watchLoadData(debounce(function (get) {
6061
+ var value;
5928
6062
 
5929
- var value = undefined;
5930
-
5931
- if (attr.attr) {
5932
- value = fc.loadData[attr.attr] || attr["default"];
6063
+ if (attr.template) {
6064
+ value = fc.$handle.loadStrVar(attr.template, get);
6065
+ } else {
6066
+ value = get(attr.attr, attr["default"]);
6067
+ }
5933
6068
 
5934
- if (attr.copy !== false) {
5935
- value = deepCopy(value);
5936
- }
6069
+ if (attr.copy !== false) {
6070
+ value = deepCopy(value);
5937
6071
  }
5938
6072
 
5939
6073
  deepSet(inject.getProp(), attr.to || 'options', value);
5940
6074
  api.sync(rule);
5941
- };
6075
+ }, attr.wait || 300));
5942
6076
 
5943
- events.push(function () {
5944
- return fc.bus.$off('p.loadData.' + attr.attr, on);
5945
- });
5946
- on();
6077
+ if (attr.watch !== false) {
6078
+ unwatchs.push(unwatch);
6079
+ } else {
6080
+ unwatch();
6081
+ }
5947
6082
  }
5948
6083
  });
5949
- this._fn[inject.id] = events;
6084
+ this._fn[inject.id] = unwatchs;
5950
6085
  },
5951
6086
  deleted: function deleted(inject) {
5952
6087
  if (this._fn[inject.id]) {
@@ -6009,6 +6144,7 @@ var fetch = function fetch(fc) {
6009
6144
 
6010
6145
  function run(inject, rule, api) {
6011
6146
  var option = inject.value;
6147
+ fetchAttr.deleted(inject);
6012
6148
 
6013
6149
  if (is.Function(option)) {
6014
6150
  option = option(rule, api);
@@ -6063,76 +6199,85 @@ var fetch = function fetch(fc) {
6063
6199
  }
6064
6200
  };
6065
6201
 
6066
- var config = _objectSpread2(_objectSpread2({
6067
- headers: {}
6068
- }, option), {}, {
6069
- onSuccess: function onSuccess(body, flag) {
6070
- if (check()) return;
6202
+ fetchAttr._fn[inject.id] = fc.watchLoadData(debounce(function (get) {
6203
+ var _option = fc.$handle.loadFetchVar(deepCopy(option), get);
6071
6204
 
6072
- var fn = function fn(v) {
6073
- return flag ? v : hasProperty(v, 'data') ? v.data : v;
6074
- };
6205
+ var config = _objectSpread2(_objectSpread2({
6206
+ headers: {}
6207
+ }, _option), {}, {
6208
+ onSuccess: function onSuccess(body, flag) {
6209
+ if (check()) return;
6075
6210
 
6076
- var parse = parseFn(option.parse);
6077
-
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;
6211
+ var fn = function fn(v) {
6212
+ return flag ? v : hasProperty(v, 'data') ? v.data : v;
6088
6213
  };
6089
- }
6090
6214
 
6091
- set(fn(body, rule, api));
6092
- api.sync(rule);
6093
- },
6094
- onError: function onError(e) {
6095
- set(undefined);
6096
- if (check()) return;
6215
+ var parse = parseFn(_option.parse);
6097
6216
 
6098
- (_onError || function (e) {
6099
- return err(e.message || 'fetch fail ' + option.action);
6100
- })(e, rule, api);
6101
- }
6102
- });
6217
+ if (is.Function(parse)) {
6218
+ fn = parse;
6219
+ } else if (parse && is.String(parse)) {
6220
+ fn = function fn(v) {
6221
+ return deepGet(v, parse);
6222
+ };
6223
+ }
6103
6224
 
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
- }
6225
+ set(fn(body, rule, api));
6226
+ api.sync(rule);
6227
+ },
6228
+ onError: function onError(e) {
6229
+ set(undefined);
6230
+ if (check()) return;
6116
6231
 
6117
- invoke(function () {
6118
- return fc.create.fetch(config, {
6119
- inject: inject,
6120
- rule: rule,
6121
- api: api
6232
+ (_onError || function (e) {
6233
+ return err(e.message || 'fetch fail ' + _option.action);
6234
+ })(e, rule, api);
6235
+ }
6236
+ });
6237
+
6238
+ fc.$handle.beforeFetch(config, {
6239
+ rule: rule,
6240
+ api: api
6241
+ }).then(function () {
6242
+ if (is.Function(_option.action)) {
6243
+ _option.action(rule, api).then(function (val) {
6244
+ config.onSuccess(val, true);
6245
+ })["catch"](function (e) {
6246
+ config.onError(e);
6247
+ });
6248
+
6249
+ return;
6250
+ }
6251
+
6252
+ invoke(function () {
6253
+ return fc.create.fetch(config, {
6254
+ inject: inject,
6255
+ rule: rule,
6256
+ api: api
6257
+ });
6122
6258
  });
6123
6259
  });
6124
- });
6260
+ }, option.wait || 1000));
6125
6261
  }
6126
6262
 
6127
- return {
6263
+ var fetchAttr = {
6128
6264
  name: 'fetch',
6129
- loaded: function loaded() {
6265
+ _fn: [],
6266
+ mounted: function mounted() {
6130
6267
  run.apply(void 0, arguments);
6131
6268
  },
6132
6269
  watch: function watch() {
6133
6270
  run.apply(void 0, arguments);
6271
+ },
6272
+ deleted: function deleted(inject) {
6273
+ if (this._fn[inject.id]) {
6274
+ this._fn[inject.id]();
6275
+ }
6276
+
6277
+ inject.clearProp();
6134
6278
  }
6135
6279
  };
6280
+ return fetchAttr;
6136
6281
  };
6137
6282
 
6138
6283
  var $provider = {
@@ -6160,6 +6305,71 @@ var html = {
6160
6305
  }
6161
6306
  };
6162
6307
 
6308
+ function getCookie(name) {
6309
+ name = name + '=';
6310
+ var decodedCookie = decodeURIComponent(document.cookie);
6311
+ var cookieArray = decodedCookie.split(';');
6312
+
6313
+ for (var i = 0; i < cookieArray.length; i++) {
6314
+ var cookie = cookieArray[i];
6315
+
6316
+ while (cookie.charAt(0) === ' ') {
6317
+ cookie = cookie.substring(1);
6318
+ }
6319
+
6320
+ if (cookie.indexOf(name) === 0) {
6321
+ cookie = cookie.substring(name.length, cookie.length);
6322
+
6323
+ try {
6324
+ return JSON.parse(cookie);
6325
+ } catch (e) {
6326
+ return cookie;
6327
+ }
6328
+ }
6329
+ }
6330
+
6331
+ return null;
6332
+ }
6333
+
6334
+ function getLocalStorage(name) {
6335
+ var value = localStorage.getItem(name);
6336
+
6337
+ if (value) {
6338
+ try {
6339
+ return JSON.parse(value);
6340
+ } catch (e) {
6341
+ return value;
6342
+ }
6343
+ }
6344
+
6345
+ return null;
6346
+ }
6347
+
6348
+ function baseDriver(driver, name) {
6349
+ if (!name) {
6350
+ return null;
6351
+ }
6352
+
6353
+ var split = name.split('.');
6354
+ var value = driver(split.shift());
6355
+
6356
+ if (!split.length) {
6357
+ return value;
6358
+ }
6359
+
6360
+ if (value == null) {
6361
+ return null;
6362
+ }
6363
+
6364
+ return deepGet(value, split);
6365
+ }
6366
+ function cookieDriver(name) {
6367
+ return baseDriver(getCookie, name);
6368
+ }
6369
+ function localStorageDriver(name) {
6370
+ return baseDriver(getLocalStorage, name);
6371
+ }
6372
+
6163
6373
  function parseProp(name, id) {
6164
6374
  var prop;
6165
6375
 
@@ -6357,23 +6567,53 @@ function FormCreateFactory(config) {
6357
6567
  formulas[name] = fn;
6358
6568
  }
6359
6569
 
6360
- function _emitData(id) {
6570
+ function emitData(id) {
6361
6571
  Object.keys(instance).forEach(function (v) {
6362
6572
  var apis = Array.isArray(instance[v]) ? instance[v] : [instance[v]];
6363
6573
  apis.forEach(function (that) {
6364
- that.bus.$emit('p.loadData.' + id);
6574
+ that.bus.$emit('$loadData.' + id);
6365
6575
  });
6366
6576
  });
6367
6577
  }
6368
6578
 
6369
6579
  function setData(id, data) {
6370
6580
  loadData[id] = data;
6581
+ emitData(id);
6582
+ }
6583
+
6584
+ function setDataDriver(id, data) {
6585
+ var callback = function callback() {
6586
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
6587
+ args[_key] = arguments[_key];
6588
+ }
6589
+
6590
+ return invoke(function () {
6591
+ return data.apply(void 0, args);
6592
+ });
6593
+ };
6371
6594
 
6372
- _emitData(id);
6595
+ callback._driver = true;
6596
+ setData(id, callback);
6373
6597
  }
6374
6598
 
6375
6599
  function getData(id, def) {
6376
- return hasProperty(loadData, id) ? loadData[id] : def;
6600
+ var split = (id || '').split('.');
6601
+ id = split.shift();
6602
+ var field = split.join('.');
6603
+
6604
+ if (hasProperty(loadData, id)) {
6605
+ var val = loadData[id];
6606
+
6607
+ if (val && val._driver) {
6608
+ val = val(field);
6609
+ } else if (split.length) {
6610
+ val = deepGet(val, split);
6611
+ }
6612
+
6613
+ return val == null || val === '' ? def : val;
6614
+ } else {
6615
+ return def;
6616
+ }
6377
6617
  }
6378
6618
 
6379
6619
  function extendApi(fn) {
@@ -6382,8 +6622,7 @@ function FormCreateFactory(config) {
6382
6622
 
6383
6623
  function removeData(id) {
6384
6624
  delete loadData[id];
6385
-
6386
- _emitData(id);
6625
+ emitData(id);
6387
6626
  }
6388
6627
 
6389
6628
  function on(name, callback) {
@@ -6415,12 +6654,14 @@ function FormCreateFactory(config) {
6415
6654
  },
6416
6655
  setData: setData,
6417
6656
  getData: getData,
6657
+ emitData: emitData,
6418
6658
  loadData: loadData,
6419
6659
  CreateNode: CreateNode,
6420
6660
  bus: new Mitt(),
6421
6661
  unwatch: null,
6422
6662
  options: ref({}),
6423
- extendApiFn: extendApiFn
6663
+ extendApiFn: extendApiFn,
6664
+ fetchCache: new WeakMap()
6424
6665
  });
6425
6666
  listener.forEach(function (item) {
6426
6667
  _this.bus.$on(item.name, item.callback);
@@ -6468,6 +6709,159 @@ function FormCreateFactory(config) {
6468
6709
  this.initOptions();
6469
6710
  this.$handle.init();
6470
6711
  },
6712
+ globalDataDriver: function globalDataDriver(id) {
6713
+ var _this3 = this;
6714
+
6715
+ var split = id.split('.');
6716
+ var key = split.shift();
6717
+ var option = this.options.value.globalData && this.options.value.globalData[key];
6718
+
6719
+ if (option) {
6720
+ if (option.type === 'static') {
6721
+ return deepGet(option.data, split);
6722
+ } else {
6723
+ var val;
6724
+ var res = this.fetchCache.get(option);
6725
+
6726
+ if (res) {
6727
+ if (res.status) {
6728
+ val = deepGet(res.data, split);
6729
+ }
6730
+
6731
+ if (!res.loading) {
6732
+ return val;
6733
+ }
6734
+
6735
+ res.loading = false;
6736
+ this.fetchCache.set(option, res);
6737
+ } else {
6738
+ this.fetchCache.set(option, {
6739
+ status: false
6740
+ });
6741
+ }
6742
+
6743
+ var reload = debounce(function () {
6744
+ unwatch();
6745
+
6746
+ var res = _this3.fetchCache.get(option);
6747
+
6748
+ if (_this3.options.value.globalData && Object.values(_this3.options.value.globalData).indexOf(option) !== -1) {
6749
+ if (res) {
6750
+ res.loading = true;
6751
+
6752
+ _this3.fetchCache.set(option, res);
6753
+ }
6754
+
6755
+ _this3.bus.$emit('$loadData.$globalData');
6756
+ } else {
6757
+ _this3.fetchCache["delete"](option);
6758
+ }
6759
+ }, option.wait || 1000);
6760
+
6761
+ var callback = function callback(get, change) {
6762
+ if (change) {
6763
+ reload();
6764
+ return;
6765
+ }
6766
+
6767
+ var options = _this3.$handle.loadFetchVar(copy$1(option), get);
6768
+
6769
+ _this3.$handle.api.fetch(options).then(function (res) {
6770
+ _this3.fetchCache.set(option, {
6771
+ status: true,
6772
+ data: res
6773
+ });
6774
+
6775
+ _this3.bus.$emit('$loadData.$globalData');
6776
+ });
6777
+ };
6778
+
6779
+ var unwatch = this.watchLoadData(callback);
6780
+ return val;
6781
+ }
6782
+ }
6783
+ },
6784
+ getLoadData: function getLoadData(id, def) {
6785
+ var val = null;
6786
+
6787
+ if (id != null) {
6788
+ var split = id.split('.');
6789
+ var key = split.shift();
6790
+
6791
+ if (key === '$form') {
6792
+ val = this.$handle.api.top.formData();
6793
+ } else if (key === '$subForm') {
6794
+ val = this.$handle.api.formData();
6795
+ } else if (key === '$options') {
6796
+ val = this.options.value;
6797
+ } else if (key === '$globalData') {
6798
+ val = this.globalDataDriver(split.join('.'));
6799
+ split = [];
6800
+ } else {
6801
+ val = getData(id, def);
6802
+ split = [];
6803
+ }
6804
+
6805
+ if (split.length) {
6806
+ val = deepGet(val, split);
6807
+ }
6808
+ }
6809
+
6810
+ console.log(id, val);
6811
+ return val == null || val === '' ? def : val;
6812
+ },
6813
+ watchLoadData: function watchLoadData(fn) {
6814
+ var _this4 = this;
6815
+
6816
+ var unwatch = {};
6817
+
6818
+ var run = function run(flag) {
6819
+ invoke(function () {
6820
+ fn(get, flag);
6821
+ });
6822
+ };
6823
+
6824
+ var get = function get(id, def) {
6825
+ if (unwatch[id]) {
6826
+ return unwatch[id].val;
6827
+ }
6828
+
6829
+ var val = _this4.getLoadData(id, def);
6830
+
6831
+ var key = id.split('.').shift();
6832
+
6833
+ var callback = function callback() {
6834
+ if (key !== id) {
6835
+ var temp = _this4.getLoadData(id, def);
6836
+
6837
+ if (JSON.stringify(temp) !== JSON.stringify(unwatch[id].val)) {
6838
+ unwatch[id].val = temp;
6839
+ run(true);
6840
+ }
6841
+ } else {
6842
+ run(true);
6843
+ }
6844
+ };
6845
+
6846
+ _this4.bus.$on('$loadData.' + key, callback);
6847
+
6848
+ unwatch[id] = {
6849
+ fn: function fn() {
6850
+ _this4.bus.$off('$loadData.' + key, callback);
6851
+ },
6852
+ val: val
6853
+ };
6854
+ return val;
6855
+ };
6856
+
6857
+ run(false);
6858
+ return function () {
6859
+ Object.keys(unwatch).forEach(function (k) {
6860
+ return unwatch[k].fn();
6861
+ });
6862
+ unwatch = {};
6863
+ };
6864
+ },
6471
6865
  isSub: function isSub() {
6472
6866
  return this.vm.setupState.parent && this.vm.props.extendOption;
6473
6867
  },
@@ -6506,6 +6900,7 @@ function FormCreateFactory(config) {
6506
6900
  updateOptions: function updateOptions(options) {
6507
6901
  this.options.value = this.mergeOptions(this.options.value, options);
6508
6902
  this.$handle.$manager.updateOptions(this.options.value);
6903
+ this.bus.$emit('$loadData.$options');
6509
6904
  },
6510
6905
  api: function api() {
6511
6906
  return this.$handle.api;
@@ -6517,6 +6912,8 @@ function FormCreateFactory(config) {
6517
6912
  this.$handle.mounted();
6518
6913
  },
6519
6914
  unmount: function unmount() {
6915
+ var _this5 = this;
6916
+
6520
6917
  if (this.name) {
6521
6918
  if (this.inFor) {
6522
6919
  var idx = instance[this.name].indexOf(this);
@@ -6526,14 +6923,17 @@ function FormCreateFactory(config) {
6526
6923
  }
6527
6924
  }
6528
6925
 
6926
+ listener.forEach(function (item) {
6927
+ _this5.bus.$off(item.name, item.callback);
6928
+ });
6529
6929
  this.unwatch && this.unwatch();
6530
6930
  this.$handle.reloadRule([]);
6531
6931
  },
6532
6932
  updated: function updated() {
6533
- var _this3 = this;
6933
+ var _this6 = this;
6534
6934
 
6535
6935
  this.$handle.bindNextTick(function () {
6536
- return _this3.bus.$emit('next-tick', _this3.$handle.api);
6936
+ return _this6.bus.$emit('next-tick', _this6.$handle.api);
6537
6937
  });
6538
6938
  }
6539
6939
  });
@@ -6544,6 +6944,7 @@ function FormCreateFactory(config) {
6544
6944
  ui: config.ui,
6545
6945
  extendApi: extendApi,
6546
6946
  getData: getData,
6947
+ setDataDriver: setDataDriver,
6547
6948
  setData: setData,
6548
6949
  removeData: removeData,
6549
6950
  maker: maker,
@@ -6576,8 +6977,9 @@ function FormCreateFactory(config) {
6576
6977
  isMobile: isMobile,
6577
6978
  install: function install(app, options) {
6578
6979
  globalConfig = _objectSpread2(_objectSpread2({}, globalConfig), options || {});
6579
- if (app._installedFormCreate === true) return;
6580
- app._installedFormCreate = true;
6980
+ var key = '_installedFormCreate_' + config.ui;
6981
+ if (app[key] === true) return;
6982
+ app[key] = true;
6581
6983
 
6582
6984
  var $formCreate = function $formCreate(rules) {
6583
6985
  var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -6599,6 +7001,8 @@ function FormCreateFactory(config) {
6599
7001
 
6600
7002
  useAttr(create);
6601
7003
  useStatic(create);
7004
+ setDataDriver('$cookie', cookieDriver);
7005
+ setDataDriver('$localStorage', localStorageDriver);
6602
7006
  CreateNode.use({
6603
7007
  fragment: 'fcFragment'
6604
7008
  });
@@ -6623,7 +7027,10 @@ function FormCreateFactory(config) {
6623
7027
  inherit.formulas && extend(formulas, inherit.formulas);
6624
7028
  }
6625
7029
 
6626
- return create;
7030
+ var FcComponent = $form();
7031
+ setPrototypeOf(FcComponent, create);
7032
+ FcComponent.util = create;
7033
+ return FcComponent;
6627
7034
  }
6628
7035
 
6629
7036
  var DEFAULT_FORMATS = {
@@ -7253,7 +7660,7 @@ function useFrame(maker) {
7253
7660
  return maker;
7254
7661
  }
7255
7662
 
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}";
7663
+ 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
7664
  styleInject(css_248z);
7258
7665
 
7259
7666
  function tidyBtnProp(btn, def) {
@@ -7506,7 +7913,7 @@ function install(FormCreate) {
7506
7913
  function elmFormCreate() {
7507
7914
  return FormCreateFactory({
7508
7915
  ui: 'element-ui',
7509
- version: '3.2.0',
7916
+ version: '3.2.1',
7510
7917
  manager: manager,
7511
7918
  extendApi: extendApi,
7512
7919
  install: install,