@idooel/components 0.0.2-beta.27 → 0.0.2-beta.28

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.
@@ -4961,6 +4961,7 @@
4961
4961
  methods: {
4962
4962
  onFieldsChange() {
4963
4963
  this.executeOptionListExpression();
4964
+ this.dispatchExpression();
4964
4965
  },
4965
4966
  executeOptionListExpression() {
4966
4967
  this.elements.forEach(ele => {
@@ -4996,22 +4997,81 @@
4996
4997
  this.formModel = props;
4997
4998
  this.dispatchExpression();
4998
4999
  },
4999
- rebuildRules(rules = []) {
5000
- //TODO
5001
- rules.map(rule => {
5000
+ rebuildRules(ele) {
5001
+ const {
5002
+ rules = []
5003
+ } = ele;
5004
+ const nextRules = rules.map(rule => {
5005
+ const nextRule = {
5006
+ ...rule
5007
+ };
5002
5008
  const {
5003
- validator
5004
- } = rule;
5009
+ validator,
5010
+ required
5011
+ } = nextRule;
5012
+ // 支持 validator 函数
5005
5013
  if (validator) {
5006
- validator.formModel = this.getFieldsValue();
5007
- validator.exposed = this.exposedMethods;
5014
+ nextRule.validator = (rule, value, cb) => {
5015
+ validator.formModel = this.getFieldsValue();
5016
+ validator.exposed = this.exposedMethods;
5017
+ return validator(rule, value, cb);
5018
+ };
5019
+ }
5020
+ // 支持 rules 内部的 required 表达式
5021
+ if (required !== undefined && shared.type.isStr(required)) {
5022
+ nextRule.required = this.executeExpression(required);
5008
5023
  }
5024
+ return nextRule;
5009
5025
  });
5010
- return rules;
5026
+ // 支持顶层 required 表达式(优先级高于 rules 内部)
5027
+ const {
5028
+ required
5029
+ } = ele;
5030
+ if (required !== undefined) {
5031
+ const isRequired = this.executeExpression(required);
5032
+ const hasRequiredRule = nextRules.some(r => Object.keys(r).includes('required'));
5033
+ if (!hasRequiredRule) {
5034
+ nextRules.unshift({
5035
+ required: isRequired,
5036
+ message: `${ele.label}是必填项`
5037
+ });
5038
+ } else {
5039
+ nextRules.forEach(r => {
5040
+ if (Object.keys(r).includes('required')) {
5041
+ r.required = isRequired;
5042
+ }
5043
+ });
5044
+ }
5045
+ }
5046
+ return nextRules;
5011
5047
  },
5012
5048
  dispatchExpression() {
5013
5049
  this.evalDisabledExpression();
5014
5050
  this.evalShowExpression();
5051
+ this.evalRequiredExpression();
5052
+ },
5053
+ evalRequiredExpression() {
5054
+ this.elements.forEach(ele => {
5055
+ // 优先使用顶层 required 表达式
5056
+ let requiredExpr = ele.required;
5057
+ // 如果顶层没有,则从 rules 中查找
5058
+ if (requiredExpr === undefined && ele.rules) {
5059
+ const requiredRule = ele.rules.find(r => r.required !== undefined);
5060
+ if (requiredRule) {
5061
+ requiredExpr = requiredRule.required;
5062
+ }
5063
+ }
5064
+ if (requiredExpr !== undefined) {
5065
+ const ret = this.executeExpression(requiredExpr);
5066
+ const oldRequired = ele._required;
5067
+ this.$set(ele, '_required', ret);
5068
+ // 初始化或状态变化时更新版本号,强制组件重新渲染
5069
+ if (oldRequired === undefined || oldRequired !== ret) {
5070
+ const currentVersion = ele._rulesVersion || 0;
5071
+ this.$set(ele, '_rulesVersion', currentVersion + 1);
5072
+ }
5073
+ }
5074
+ });
5015
5075
  },
5016
5076
  evalDisabledExpression() {
5017
5077
  this.elements.forEach(ele => {
@@ -5035,12 +5095,13 @@
5035
5095
  executeExpression(expression$1) {
5036
5096
  if (shared.type.isBool(expression$1)) return expression$1;
5037
5097
  if (shared.type.isEmpty(expression$1)) return false;
5038
- return expression.parse(expression$1, {
5039
- ...this.getFieldsValue(),
5098
+ const scope = {
5040
5099
  ...this.formModel,
5100
+ ...this.getFieldsValue(),
5041
5101
  _route: this.$route.query,
5042
5102
  _routeMeta: this.$route.meta
5043
- });
5103
+ };
5104
+ return expression.parse(expression$1, scope);
5044
5105
  },
5045
5106
  onChange(value, props) {
5046
5107
  const {
@@ -5127,16 +5188,24 @@
5127
5188
  [
5128
5189
  _vm._l(_vm.elements, function (ele) {
5129
5190
  return [
5130
- _vm.executeExpression(ele._show)
5191
+ ele._show
5131
5192
  ? _c(
5132
5193
  "a-col",
5133
- { key: ele.name, attrs: { span: ele.span } },
5194
+ {
5195
+ key: ele.name + "_" + (ele._rulesVersion || 0),
5196
+ attrs: { span: ele.span },
5197
+ },
5134
5198
  [
5135
5199
  ele.type == "ele-input" || ele.type == "Input"
5136
5200
  ? [
5137
5201
  _c(
5138
5202
  "a-form-item",
5139
- { attrs: { label: ele.label + ":" } },
5203
+ {
5204
+ attrs: {
5205
+ label: ele.label + ":",
5206
+ required: ele._required,
5207
+ },
5208
+ },
5140
5209
  [
5141
5210
  _c("ele-input", {
5142
5211
  directives: [
@@ -5145,21 +5214,15 @@
5145
5214
  rawName: "v-decorator",
5146
5215
  value: [
5147
5216
  ele.name,
5148
- {
5149
- rules: _vm.rebuildRules(
5150
- ele.rules
5151
- ),
5152
- },
5217
+ { rules: _vm.rebuildRules(ele) },
5153
5218
  ],
5154
5219
  expression:
5155
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5220
+ "[ele.name, { rules: rebuildRules(ele) }]",
5156
5221
  },
5157
5222
  ],
5158
5223
  staticStyle: { width: "100%" },
5159
5224
  attrs: {
5160
- disabled: _vm.executeExpression(
5161
- ele._disabled
5162
- ),
5225
+ disabled: ele._disabled,
5163
5226
  "max-length": ele.maxLength,
5164
5227
  },
5165
5228
  on: {
@@ -5177,7 +5240,12 @@
5177
5240
  ? [
5178
5241
  _c(
5179
5242
  "a-form-item",
5180
- { attrs: { label: ele.label + ":" } },
5243
+ {
5244
+ attrs: {
5245
+ label: ele.label + ":",
5246
+ required: ele._required,
5247
+ },
5248
+ },
5181
5249
  [
5182
5250
  _c("ele-textarea", {
5183
5251
  directives: [
@@ -5186,23 +5254,17 @@
5186
5254
  rawName: "v-decorator",
5187
5255
  value: [
5188
5256
  ele.name,
5189
- {
5190
- rules: _vm.rebuildRules(
5191
- ele.rules
5192
- ),
5193
- },
5257
+ { rules: _vm.rebuildRules(ele) },
5194
5258
  ],
5195
5259
  expression:
5196
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5260
+ "[ele.name, { rules: rebuildRules(ele) }]",
5197
5261
  },
5198
5262
  ],
5199
5263
  staticStyle: { width: "100%" },
5200
5264
  attrs: {
5201
5265
  "max-length": ele.maxLength,
5202
5266
  autosize: ele.autosize,
5203
- disabled: _vm.executeExpression(
5204
- ele._disabled
5205
- ),
5267
+ disabled: ele._disabled,
5206
5268
  "allow-clear": ele.allowClear,
5207
5269
  placeholder: ele.placeholder,
5208
5270
  },
@@ -5220,7 +5282,12 @@
5220
5282
  ? [
5221
5283
  _c(
5222
5284
  "a-form-item",
5223
- { attrs: { label: ele.label + ":" } },
5285
+ {
5286
+ attrs: {
5287
+ label: ele.label + ":",
5288
+ required: ele._required,
5289
+ },
5290
+ },
5224
5291
  [
5225
5292
  _c("ele-select", {
5226
5293
  directives: [
@@ -5229,22 +5296,16 @@
5229
5296
  rawName: "v-decorator",
5230
5297
  value: [
5231
5298
  ele.name,
5232
- {
5233
- rules: _vm.rebuildRules(
5234
- ele.rules
5235
- ),
5236
- },
5299
+ { rules: _vm.rebuildRules(ele) },
5237
5300
  ],
5238
5301
  expression:
5239
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5302
+ "[ele.name, { rules: rebuildRules(ele) }]",
5240
5303
  },
5241
5304
  ],
5242
5305
  staticStyle: { width: "100%" },
5243
5306
  attrs: {
5244
5307
  "data-source": ele.optionList,
5245
- disabled: _vm.executeExpression(
5246
- ele._disabled
5247
- ),
5308
+ disabled: ele._disabled,
5248
5309
  multiple: ele.multiple,
5249
5310
  mode: ele.mode,
5250
5311
  code: ele.code,
@@ -5266,7 +5327,12 @@
5266
5327
  ? [
5267
5328
  _c(
5268
5329
  "a-form-item",
5269
- { attrs: { label: ele.label + ":" } },
5330
+ {
5331
+ attrs: {
5332
+ label: ele.label + ":",
5333
+ required: ele._required,
5334
+ },
5335
+ },
5270
5336
  [
5271
5337
  _c("ele-upload", {
5272
5338
  directives: [
@@ -5275,14 +5341,10 @@
5275
5341
  rawName: "v-decorator",
5276
5342
  value: [
5277
5343
  ele.name,
5278
- {
5279
- rules: _vm.rebuildRules(
5280
- ele.rules
5281
- ),
5282
- },
5344
+ { rules: _vm.rebuildRules(ele) },
5283
5345
  ],
5284
5346
  expression:
5285
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5347
+ "[ele.name, { rules: rebuildRules(ele) }]",
5286
5348
  },
5287
5349
  ],
5288
5350
  staticStyle: { width: "100%" },
@@ -5305,7 +5367,12 @@
5305
5367
  ? [
5306
5368
  _c(
5307
5369
  "a-form-item",
5308
- { attrs: { label: ele.label + ":" } },
5370
+ {
5371
+ attrs: {
5372
+ label: ele.label + ":",
5373
+ required: ele._required,
5374
+ },
5375
+ },
5309
5376
  [
5310
5377
  _c("ele-date-range", {
5311
5378
  directives: [
@@ -5314,22 +5381,14 @@
5314
5381
  rawName: "v-decorator",
5315
5382
  value: [
5316
5383
  ele.name,
5317
- {
5318
- rules: _vm.rebuildRules(
5319
- ele.rules
5320
- ),
5321
- },
5384
+ { rules: _vm.rebuildRules(ele) },
5322
5385
  ],
5323
5386
  expression:
5324
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5387
+ "[ele.name, { rules: rebuildRules(ele) }]",
5325
5388
  },
5326
5389
  ],
5327
5390
  staticStyle: { width: "100%" },
5328
- attrs: {
5329
- disabled: _vm.executeExpression(
5330
- ele._disabled
5331
- ),
5332
- },
5391
+ attrs: { disabled: ele._disabled },
5333
5392
  }),
5334
5393
  ],
5335
5394
  1
@@ -5339,7 +5398,12 @@
5339
5398
  ? [
5340
5399
  _c(
5341
5400
  "a-form-item",
5342
- { attrs: { label: ele.label + ":" } },
5401
+ {
5402
+ attrs: {
5403
+ label: ele.label + ":",
5404
+ required: ele._required,
5405
+ },
5406
+ },
5343
5407
  [
5344
5408
  _c("ele-date", {
5345
5409
  directives: [
@@ -5348,14 +5412,10 @@
5348
5412
  rawName: "v-decorator",
5349
5413
  value: [
5350
5414
  ele.name,
5351
- {
5352
- rules: _vm.rebuildRules(
5353
- ele.rules
5354
- ),
5355
- },
5415
+ { rules: _vm.rebuildRules(ele) },
5356
5416
  ],
5357
5417
  expression:
5358
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5418
+ "[ele.name, { rules: rebuildRules(ele) }]",
5359
5419
  },
5360
5420
  ],
5361
5421
  staticStyle: { width: "100%" },
@@ -5365,9 +5425,7 @@
5365
5425
  "show-time": ele.showTime,
5366
5426
  "show-today": ele.showToday,
5367
5427
  "value-format": ele.valueFormat,
5368
- disabled: _vm.executeExpression(
5369
- ele._disabled
5370
- ),
5428
+ disabled: ele._disabled,
5371
5429
  },
5372
5430
  }),
5373
5431
  ],
@@ -5379,7 +5437,12 @@
5379
5437
  ? [
5380
5438
  _c(
5381
5439
  "a-form-item",
5382
- { attrs: { label: ele.label + ":" } },
5440
+ {
5441
+ attrs: {
5442
+ label: ele.label + ":",
5443
+ required: ele._required,
5444
+ },
5445
+ },
5383
5446
  [
5384
5447
  _c("ele-select-entity", {
5385
5448
  directives: [
@@ -5388,14 +5451,10 @@
5388
5451
  rawName: "v-decorator",
5389
5452
  value: [
5390
5453
  ele.name,
5391
- {
5392
- rules: _vm.rebuildRules(
5393
- ele.rules
5394
- ),
5395
- },
5454
+ { rules: _vm.rebuildRules(ele) },
5396
5455
  ],
5397
5456
  expression:
5398
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5457
+ "[ele.name, { rules: rebuildRules(ele) }]",
5399
5458
  },
5400
5459
  ],
5401
5460
  staticStyle: { width: "100%" },
@@ -5409,7 +5468,12 @@
5409
5468
  ? [
5410
5469
  _c(
5411
5470
  "a-form-item",
5412
- { attrs: { label: ele.label + ":" } },
5471
+ {
5472
+ attrs: {
5473
+ label: ele.label + ":",
5474
+ required: ele._required,
5475
+ },
5476
+ },
5413
5477
  [
5414
5478
  _c(
5415
5479
  "ele-input-number",
@@ -5422,21 +5486,17 @@
5422
5486
  value: [
5423
5487
  ele.name,
5424
5488
  {
5425
- rules: _vm.rebuildRules(
5426
- ele.rules
5427
- ),
5489
+ rules: _vm.rebuildRules(ele),
5428
5490
  },
5429
5491
  ],
5430
5492
  expression:
5431
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5493
+ "[ele.name, { rules: rebuildRules(ele) }]",
5432
5494
  },
5433
5495
  ],
5434
5496
  staticStyle: { width: "100%" },
5435
5497
  attrs: {
5436
5498
  precision: ele.precision,
5437
- disabled: _vm.executeExpression(
5438
- ele._disabled
5439
- ),
5499
+ disabled: ele._disabled,
5440
5500
  },
5441
5501
  on: {
5442
5502
  change: function ($event) {
@@ -5458,7 +5518,12 @@
5458
5518
  ? [
5459
5519
  _c(
5460
5520
  "a-form-item",
5461
- { attrs: { label: ele.label + ":" } },
5521
+ {
5522
+ attrs: {
5523
+ label: ele.label + ":",
5524
+ required: ele._required,
5525
+ },
5526
+ },
5462
5527
  [
5463
5528
  _c("ele-checkbox", {
5464
5529
  directives: [
@@ -5467,22 +5532,16 @@
5467
5532
  rawName: "v-decorator",
5468
5533
  value: [
5469
5534
  ele.name,
5470
- {
5471
- rules: _vm.rebuildRules(
5472
- ele.rules
5473
- ),
5474
- },
5535
+ { rules: _vm.rebuildRules(ele) },
5475
5536
  ],
5476
5537
  expression:
5477
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5538
+ "[ele.name, { rules: rebuildRules(ele) }]",
5478
5539
  },
5479
5540
  ],
5480
5541
  staticStyle: { width: "100%" },
5481
5542
  attrs: {
5482
5543
  "data-source": ele.optionList,
5483
- disabled: _vm.executeExpression(
5484
- ele._disabled
5485
- ),
5544
+ disabled: ele._disabled,
5486
5545
  },
5487
5546
  }),
5488
5547
  ],
@@ -5493,7 +5552,12 @@
5493
5552
  ? [
5494
5553
  _c(
5495
5554
  "a-form-item",
5496
- { attrs: { label: ele.label + ":" } },
5555
+ {
5556
+ attrs: {
5557
+ label: ele.label + ":",
5558
+ required: ele._required,
5559
+ },
5560
+ },
5497
5561
  [
5498
5562
  _c("ele-radio", {
5499
5563
  directives: [
@@ -5502,21 +5566,15 @@
5502
5566
  rawName: "v-decorator",
5503
5567
  value: [
5504
5568
  ele.name,
5505
- {
5506
- rules: _vm.rebuildRules(
5507
- ele.rules
5508
- ),
5509
- },
5569
+ { rules: _vm.rebuildRules(ele) },
5510
5570
  ],
5511
5571
  expression:
5512
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5572
+ "[ele.name, { rules: rebuildRules(ele) }]",
5513
5573
  },
5514
5574
  ],
5515
5575
  staticStyle: { width: "100%" },
5516
5576
  attrs: {
5517
- disabled: _vm.executeExpression(
5518
- ele._disabled
5519
- ),
5577
+ disabled: ele._disabled,
5520
5578
  "data-source": ele.optionList,
5521
5579
  },
5522
5580
  on: {
@@ -5533,7 +5591,12 @@
5533
5591
  ? [
5534
5592
  _c(
5535
5593
  "a-form-item",
5536
- { attrs: { label: ele.label + ":" } },
5594
+ {
5595
+ attrs: {
5596
+ label: ele.label + ":",
5597
+ required: ele._required,
5598
+ },
5599
+ },
5537
5600
  [
5538
5601
  _c("ele-form-img-crop", {
5539
5602
  directives: [
@@ -5542,14 +5605,10 @@
5542
5605
  rawName: "v-decorator",
5543
5606
  value: [
5544
5607
  ele.name,
5545
- {
5546
- rules: _vm.rebuildRules(
5547
- ele.rules
5548
- ),
5549
- },
5608
+ { rules: _vm.rebuildRules(ele) },
5550
5609
  ],
5551
5610
  expression:
5552
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5611
+ "[ele.name, { rules: rebuildRules(ele) }]",
5553
5612
  },
5554
5613
  ],
5555
5614
  staticStyle: { width: "100%" },
@@ -5560,9 +5619,7 @@
5560
5619
  "cropper-config": ele.cropperConfig,
5561
5620
  uploadFileConfig: ele.uploadFileConfig,
5562
5621
  "oper-text": ele.operText,
5563
- disabled: _vm.executeExpression(
5564
- ele._disabled
5565
- ),
5622
+ disabled: ele._disabled,
5566
5623
  },
5567
5624
  on: {
5568
5625
  change: function ($event) {
@@ -5578,7 +5635,12 @@
5578
5635
  ? [
5579
5636
  _c(
5580
5637
  "a-form-item",
5581
- { attrs: { label: ele.label + ":" } },
5638
+ {
5639
+ attrs: {
5640
+ label: ele.label + ":",
5641
+ required: ele._required,
5642
+ },
5643
+ },
5582
5644
  [
5583
5645
  _c(
5584
5646
  "ele-tree-select",
@@ -5591,21 +5653,15 @@
5591
5653
  value: [
5592
5654
  ele.name,
5593
5655
  {
5594
- rules: _vm.rebuildRules(
5595
- ele.rules
5596
- ),
5656
+ rules: _vm.rebuildRules(ele),
5597
5657
  },
5598
5658
  ],
5599
5659
  expression:
5600
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5660
+ "[ele.name, { rules: rebuildRules(ele) }]",
5601
5661
  },
5602
5662
  ],
5603
5663
  staticStyle: { width: "100%" },
5604
- attrs: {
5605
- disabled: _vm.executeExpression(
5606
- ele._disabled
5607
- ),
5608
- },
5664
+ attrs: { disabled: ele._disabled },
5609
5665
  on: {
5610
5666
  change: function ($event) {
5611
5667
  return _vm.onChange($event, ele)
@@ -5625,7 +5681,12 @@
5625
5681
  ? [
5626
5682
  _c(
5627
5683
  "a-form-item",
5628
- { attrs: { label: ele.label + ":" } },
5684
+ {
5685
+ attrs: {
5686
+ label: ele.label + ":",
5687
+ required: ele._required,
5688
+ },
5689
+ },
5629
5690
  [
5630
5691
  _c(
5631
5692
  "ele-select-entity-modal-table",
@@ -5638,21 +5699,15 @@
5638
5699
  value: [
5639
5700
  ele.name,
5640
5701
  {
5641
- rules: _vm.rebuildRules(
5642
- ele.rules
5643
- ),
5702
+ rules: _vm.rebuildRules(ele),
5644
5703
  },
5645
5704
  ],
5646
5705
  expression:
5647
- "[ele.name, { rules: rebuildRules(ele.rules) }]",
5706
+ "[ele.name, { rules: rebuildRules(ele) }]",
5648
5707
  },
5649
5708
  ],
5650
5709
  staticStyle: { width: "100%" },
5651
- attrs: {
5652
- disabled: _vm.executeExpression(
5653
- ele._disabled
5654
- ),
5655
- },
5710
+ attrs: { disabled: ele._disabled },
5656
5711
  on: {
5657
5712
  change: function ($event) {
5658
5713
  return _vm.onChange($event, ele)
@@ -5691,11 +5746,11 @@
5691
5746
  /* style */
5692
5747
  const __vue_inject_styles__$w = function (inject) {
5693
5748
  if (!inject) return
5694
- inject("data-v-750019c0_0", { source: ".ele__form--wrapper[data-v-750019c0] {\n background: #fff;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["E:\\code\\OnlineStudy-Base\\base-elearning-frontend-model\\packages\\components\\packages\\form\\src\\index.vue","index.vue"],"names":[],"mappings":"AAiVA;EACA,gBAAA;AChVA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["<template>\r\n <div class=\"ele__form--wrapper\">\r\n <a-form :form=\"form\" layout=\"vertical\" class=\"ant-advanced-search-form\">\r\n <a-row :gutter=\"24\">\r\n <template v-for=\"ele in elements\">\r\n <a-col v-if=\"executeExpression(ele._show)\" :span=\"ele.span\" :key=\"ele.name\">\r\n <template v-if=\"ele.type == 'ele-input' || ele.type == 'Input'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-input \r\n @change=\"onChange($event, ele)\" \r\n :disabled=\"executeExpression(ele._disabled)\" \r\n :max-length=\"ele.maxLength\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-input>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-textarea' || ele.type == 'Textarea'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-textarea \r\n @change=\"onChange($event, ele)\"\r\n :max-length=\"ele.maxLength\"\r\n :autosize=\"ele.autosize\"\r\n :disabled=\"executeExpression(ele._disabled)\"\r\n :allow-clear=\"ele.allowClear\"\r\n :placeholder=\"ele.placeholder\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\"\r\n style=\"width:100%;\">\r\n </ele-textarea>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select' || ele.type == 'Select'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-select \r\n :data-source=\"ele.optionList\" \r\n :disabled=\"executeExpression(ele._disabled)\"\r\n :multiple=\"ele.multiple\"\r\n :mode=\"ele.mode\"\r\n :code=\"ele.code\"\r\n :init=\"ele.init\"\r\n :url=\"ele.url\"\r\n :params=\"ele.params\" \r\n @change=\"onChange($event, ele)\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-select>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-upload'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-upload v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n :ext=\"ele.ext\"\r\n :multiple=\"ele.multiple\"\r\n :accept=\"ele.accept\"\r\n :extensions=\"ele.extensions\"\r\n :size=\"ele.size\"\r\n :icon=\"ele.icon\"\r\n :url=\"ele.url\"\r\n :message=\"ele.message\" \r\n style=\"width:100%;\">\r\n </ele-upload>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-date-range'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-date-range \r\n :disabled=\"executeExpression(ele._disabled)\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-date-range>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-date'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-date\r\n :format=\"ele.format\"\r\n :mode=\"ele.mode\"\r\n :show-time=\"ele.showTime\"\r\n :show-today=\"ele.showToday\"\r\n :value-format=\"ele.valueFormat\"\r\n :disabled=\"executeExpression(ele._disabled)\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-date>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select-entity' || ele.type == 'SelectEntity'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-select-entity \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-select-entity>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'InputNumber' || ele.type == 'ele-input-number'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-input-number \r\n @change=\"onChange($event, ele)\" \r\n :precision=\"ele.precision\" \r\n :disabled=\"executeExpression(ele._disabled)\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n v-bind=\"ele.props\" \r\n style=\"width:100%;\">\r\n </ele-input-number>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-Checkbox' || ele.type == 'Checkbox'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-checkbox \r\n :data-source=\"ele.optionList\" \r\n :disabled=\"executeExpression(ele._disabled)\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-checkbox>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-radio' || ele.type == 'Radio'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-radio \r\n @change=\"onChange($event, ele)\" \r\n :disabled=\"executeExpression(ele._disabled)\" \r\n :data-source=\"ele.optionList\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-radio>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-form-img-crop'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-form-img-crop\r\n @change=\"onChange($event, ele)\"\r\n :width=\"ele.width\"\r\n :height=\"ele.height\"\r\n :modal-title=\"ele.modalTitle\"\r\n :cropper-config=\"ele.cropperConfig\"\r\n :uploadFileConfig=\"ele.uploadFileConfig\"\r\n :oper-text=\"ele.operText\"\r\n :disabled=\"executeExpression(ele._disabled)\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-form-img-crop>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-tree-select'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-tree-select\r\n @change=\"onChange($event, ele)\"\r\n :disabled=\"executeExpression(ele._disabled)\"\r\n v-bind=\"ele.meta\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-tree-select>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select-entity-modal-table'\">\r\n <a-form-item :label=\"`${ele.label}:`\">\r\n <ele-select-entity-modal-table\r\n @change=\"onChange($event, ele)\"\r\n :disabled=\"executeExpression(ele._disabled)\"\r\n v-bind=\"ele.meta\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele.rules) }]\" \r\n style=\"width:100%;\">\r\n </ele-select-entity-modal-table>\r\n </a-form-item>\r\n </template>\r\n </a-col>\r\n </template>\r\n </a-row>\r\n </a-form>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { parse } from '@idooel/expression'\r\nimport { type } from '@idooel/shared'\r\nimport { CONTEXT } from '../../utils'\r\nexport default {\r\n name: 'ele-form',\r\n props: {\r\n value: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n disabled: {\r\n type: [Boolean, String],\r\n default: '_routeMeta.disabled'\r\n },\r\n formName: {\r\n type: [Number, String],\r\n default: 'coordinated'\r\n },\r\n elements: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n data () {\r\n return {\r\n formModel: {}\r\n }\r\n },\r\n inject: {\r\n [CONTEXT]: {\r\n default: () => (() => ({}))\r\n }\r\n },\r\n computed: {\r\n contextData () {\r\n return this[CONTEXT].call(this)\r\n },\r\n globalDisabled () {\r\n return this.executeExpression(this.disabled)\r\n },\r\n form () {\r\n const ref = this.$form.createForm(this, { name: this.formName, onFieldsChange: this.onFieldsChange })\r\n return ref\r\n },\r\n exposedMethods () {\r\n return {\r\n setFieldsValue: this.setFieldsValue,\r\n getFieldsValue: this.getFieldsValue\r\n }\r\n }\r\n },\r\n created () {\r\n this.setDefaultValues()\r\n },\r\n methods: {\r\n onFieldsChange () {\r\n this.executeOptionListExpression()\r\n },\r\n executeOptionListExpression () {\r\n this.elements.forEach(ele => {\r\n if (ele.optionList) {\r\n const optionList = this.evalOptionListExpression(ele.optionList)\r\n this.$set(ele, 'optionList', optionList)\r\n }\r\n })\r\n },\r\n evalOptionListExpression (optionList = []) {\r\n const executeExpression = (expression) => {\r\n if (type.isBool(expression)) return expression\r\n if (type.isEmpty(expression)) return true\r\n const ret = parse(expression, { ...this.formModel, ...this.getFieldsValue(), _route: this.$route.query, _routeMeta: this.$route.meta })\r\n return ret\r\n }\r\n return optionList.map(item => {\r\n const { show } = item\r\n return { ...item, _show: executeExpression(show) }\r\n })\r\n },\r\n setFormModel (props = {}) {\r\n this.formModel = props\r\n this.dispatchExpression()\r\n },\r\n rebuildRules (rules = []) {\r\n //TODO\r\n rules.map(rule => {\r\n const { validator } = rule\r\n if (validator) {\r\n validator.formModel = this.getFieldsValue()\r\n validator.exposed = this.exposedMethods\r\n }\r\n })\r\n return rules\r\n },\r\n dispatchExpression () {\r\n this.evalDisabledExpression()\r\n this.evalShowExpression()\r\n },\r\n evalDisabledExpression () {\r\n this.elements.forEach(ele => {\r\n if (this.globalDisabled) return this.$set(ele, '_disabled', true)\r\n const { disabled } = ele\r\n const ret = this.executeExpression(disabled)\r\n this.$set(ele, '_disabled', ret)\r\n })\r\n },\r\n evalShowExpression () {\r\n this.elements.forEach(ele => {\r\n const { show = true } = ele\r\n const ret = this.executeExpression(show)\r\n this.$set(ele, '_show', ret)\r\n })\r\n },\r\n executeExpression (expression) {\r\n if (type.isBool(expression)) return expression\r\n if (type.isEmpty(expression)) return false\r\n return parse(expression, { ...this.getFieldsValue(), ...this.formModel, _route: this.$route.query, _routeMeta: this.$route.meta })\r\n },\r\n onChange (value, props) {\r\n const { name } = props\r\n this.$set(this.formModel, name, value)\r\n this.dispatchExpression()\r\n this.setFieldsValue({ [name]: value })\r\n this.$emit('change', { value, props, exposed: { ...this.exposedMethods } })\r\n },\r\n collectDefaultValues () {\r\n const ret = this.elements.reduce((ret, props) => {\r\n const { name, defaultValue } = props\r\n if (defaultValue) {\r\n ret[name] = defaultValue\r\n }\r\n return ret\r\n }, {})\r\n return ret\r\n },\r\n //TODO deprecated in the future, need to be implemented in the outer component\r\n setDefaultValues () {\r\n const defaultValues = this.collectDefaultValues()\r\n this.setFormModel(defaultValues)\r\n this.setFieldsValue(defaultValues)\r\n },\r\n validateFields () {\r\n return new Promise((resolve) => {\r\n this.form.validateFields((error, values) => {\r\n resolve(!error)\r\n })\r\n })\r\n },\r\n setFieldsValue (props = {}) {\r\n this.$nextTick(() => {\r\n this.form.setFieldsValue(props)\r\n })\r\n },\r\n getFieldsValue (fieldNames) {\r\n return this.form.getFieldsValue(fieldNames)\r\n }\r\n },\r\n mounted() {\r\n this.$emit('x:mounted', { setFormModel: this.setFormModel })\r\n this.dispatchExpression()\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ele__form--wrapper {\r\n background: #fff;\r\n .ant-form-item {\r\n }\r\n}\r\n</style>",".ele__form--wrapper {\n background: #fff;\n}\n\n/*# sourceMappingURL=index.vue.map */"]}, media: undefined });
5749
+ inject("data-v-7561ae99_0", { source: ".ele__form--wrapper[data-v-7561ae99] {\n background: #fff;\n}\n\n/*# sourceMappingURL=index.vue.map */", map: {"version":3,"sources":["E:\\code\\OnlineStudy-Base\\base-elearning-frontend-model\\packages\\components\\packages\\form\\src\\index.vue","index.vue"],"names":[],"mappings":"AAoYA;EACA,gBAAA;ACnYA;;AAEA,oCAAoC","file":"index.vue","sourcesContent":["<template>\r\n <div class=\"ele__form--wrapper\">\r\n <a-form :form=\"form\" layout=\"vertical\" class=\"ant-advanced-search-form\">\r\n <a-row :gutter=\"24\">\r\n <template v-for=\"ele in elements\">\r\n <a-col v-if=\"ele._show\" :span=\"ele.span\" :key=\"`${ele.name}_${ele._rulesVersion || 0}`\">\r\n <template v-if=\"ele.type == 'ele-input' || ele.type == 'Input'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-input \r\n @change=\"onChange($event, ele)\" \r\n :disabled=\"ele._disabled\" \r\n :max-length=\"ele.maxLength\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-input>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-textarea' || ele.type == 'Textarea'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-textarea \r\n @change=\"onChange($event, ele)\"\r\n :max-length=\"ele.maxLength\"\r\n :autosize=\"ele.autosize\"\r\n :disabled=\"ele._disabled\"\r\n :allow-clear=\"ele.allowClear\"\r\n :placeholder=\"ele.placeholder\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\"\r\n style=\"width:100%;\">\r\n </ele-textarea>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select' || ele.type == 'Select'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-select \r\n :data-source=\"ele.optionList\" \r\n :disabled=\"ele._disabled\"\r\n :multiple=\"ele.multiple\"\r\n :mode=\"ele.mode\"\r\n :code=\"ele.code\"\r\n :init=\"ele.init\"\r\n :url=\"ele.url\"\r\n :params=\"ele.params\" \r\n @change=\"onChange($event, ele)\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-select>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-upload'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-upload v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n :ext=\"ele.ext\"\r\n :multiple=\"ele.multiple\"\r\n :accept=\"ele.accept\"\r\n :extensions=\"ele.extensions\"\r\n :size=\"ele.size\"\r\n :icon=\"ele.icon\"\r\n :url=\"ele.url\"\r\n :message=\"ele.message\" \r\n style=\"width:100%;\">\r\n </ele-upload>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-date-range'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-date-range \r\n :disabled=\"ele._disabled\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-date-range>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-date'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-date\r\n :format=\"ele.format\"\r\n :mode=\"ele.mode\"\r\n :show-time=\"ele.showTime\"\r\n :show-today=\"ele.showToday\"\r\n :value-format=\"ele.valueFormat\"\r\n :disabled=\"ele._disabled\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-date>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select-entity' || ele.type == 'SelectEntity'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-select-entity \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-select-entity>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'InputNumber' || ele.type == 'ele-input-number'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-input-number \r\n @change=\"onChange($event, ele)\" \r\n :precision=\"ele.precision\" \r\n :disabled=\"ele._disabled\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n v-bind=\"ele.props\" \r\n style=\"width:100%;\">\r\n </ele-input-number>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-Checkbox' || ele.type == 'Checkbox'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-checkbox \r\n :data-source=\"ele.optionList\" \r\n :disabled=\"ele._disabled\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-checkbox>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-radio' || ele.type == 'Radio'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-radio \r\n @change=\"onChange($event, ele)\" \r\n :disabled=\"ele._disabled\" \r\n :data-source=\"ele.optionList\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-radio>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-form-img-crop'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-form-img-crop\r\n @change=\"onChange($event, ele)\"\r\n :width=\"ele.width\"\r\n :height=\"ele.height\"\r\n :modal-title=\"ele.modalTitle\"\r\n :cropper-config=\"ele.cropperConfig\"\r\n :uploadFileConfig=\"ele.uploadFileConfig\"\r\n :oper-text=\"ele.operText\"\r\n :disabled=\"ele._disabled\" \r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-form-img-crop>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-tree-select'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-tree-select\r\n @change=\"onChange($event, ele)\"\r\n :disabled=\"ele._disabled\"\r\n v-bind=\"ele.meta\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-tree-select>\r\n </a-form-item>\r\n </template>\r\n <template v-else-if=\"ele.type == 'ele-select-entity-modal-table'\">\r\n <a-form-item :label=\"`${ele.label}:`\" :required=\"ele._required\">\r\n <ele-select-entity-modal-table\r\n @change=\"onChange($event, ele)\"\r\n :disabled=\"ele._disabled\"\r\n v-bind=\"ele.meta\"\r\n v-decorator=\"[ele.name, { rules: rebuildRules(ele) }]\" \r\n style=\"width:100%;\">\r\n </ele-select-entity-modal-table>\r\n </a-form-item>\r\n </template>\r\n </a-col>\r\n </template>\r\n </a-row>\r\n </a-form>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { parse } from '@idooel/expression'\r\nimport { type } from '@idooel/shared'\r\nimport { CONTEXT } from '../../utils'\r\nexport default {\r\n name: 'ele-form',\r\n props: {\r\n value: {\r\n type: Object,\r\n default: () => ({})\r\n },\r\n disabled: {\r\n type: [Boolean, String],\r\n default: '_routeMeta.disabled'\r\n },\r\n formName: {\r\n type: [Number, String],\r\n default: 'coordinated'\r\n },\r\n elements: {\r\n type: Array,\r\n default: () => []\r\n }\r\n },\r\n data () {\r\n return {\r\n formModel: {}\r\n }\r\n },\r\n inject: {\r\n [CONTEXT]: {\r\n default: () => (() => ({}))\r\n }\r\n },\r\n computed: {\r\n contextData () {\r\n return this[CONTEXT].call(this)\r\n },\r\n globalDisabled () {\r\n return this.executeExpression(this.disabled)\r\n },\r\n form () {\r\n const ref = this.$form.createForm(this, { name: this.formName, onFieldsChange: this.onFieldsChange })\r\n return ref\r\n },\r\n exposedMethods () {\r\n return {\r\n setFieldsValue: this.setFieldsValue,\r\n getFieldsValue: this.getFieldsValue\r\n }\r\n }\r\n },\r\n created () {\r\n this.setDefaultValues()\r\n },\r\n methods: {\r\n onFieldsChange () {\r\n this.executeOptionListExpression()\r\n this.dispatchExpression()\r\n },\r\n executeOptionListExpression () {\r\n this.elements.forEach(ele => {\r\n if (ele.optionList) {\r\n const optionList = this.evalOptionListExpression(ele.optionList)\r\n this.$set(ele, 'optionList', optionList)\r\n }\r\n })\r\n },\r\n evalOptionListExpression (optionList = []) {\r\n const executeExpression = (expression) => {\r\n if (type.isBool(expression)) return expression\r\n if (type.isEmpty(expression)) return true\r\n const ret = parse(expression, { ...this.formModel, ...this.getFieldsValue(), _route: this.$route.query, _routeMeta: this.$route.meta })\r\n return ret\r\n }\r\n return optionList.map(item => {\r\n const { show } = item\r\n return { ...item, _show: executeExpression(show) }\r\n })\r\n },\r\n setFormModel (props = {}) {\r\n this.formModel = props\r\n this.dispatchExpression()\r\n },\r\n rebuildRules (ele) {\r\n const { rules = [] } = ele\r\n const nextRules = rules.map(rule => {\r\n const nextRule = { ...rule }\r\n const { validator, required } = nextRule\r\n // 支持 validator 函数\r\n if (validator) {\r\n nextRule.validator = (rule, value, cb) => {\r\n validator.formModel = this.getFieldsValue()\r\n validator.exposed = this.exposedMethods\r\n return validator(rule, value, cb)\r\n }\r\n }\r\n // 支持 rules 内部的 required 表达式\r\n if (required !== undefined && type.isStr(required)) {\r\n nextRule.required = this.executeExpression(required)\r\n }\r\n return nextRule\r\n })\r\n // 支持顶层 required 表达式(优先级高于 rules 内部)\r\n const { required } = ele\r\n if (required !== undefined) {\r\n const isRequired = this.executeExpression(required)\r\n const hasRequiredRule = nextRules.some(r => Object.keys(r).includes('required'))\r\n if (!hasRequiredRule) {\r\n nextRules.unshift({ required: isRequired, message: `${ele.label}是必填项` })\r\n } else {\r\n nextRules.forEach(r => {\r\n if (Object.keys(r).includes('required')) {\r\n r.required = isRequired\r\n }\r\n })\r\n }\r\n }\r\n return nextRules\r\n },\r\n dispatchExpression () {\r\n this.evalDisabledExpression()\r\n this.evalShowExpression()\r\n this.evalRequiredExpression()\r\n },\r\n evalRequiredExpression () {\r\n this.elements.forEach(ele => {\r\n // 优先使用顶层 required 表达式\r\n let requiredExpr = ele.required\r\n // 如果顶层没有,则从 rules 中查找\r\n if (requiredExpr === undefined && ele.rules) {\r\n const requiredRule = ele.rules.find(r => r.required !== undefined)\r\n if (requiredRule) {\r\n requiredExpr = requiredRule.required\r\n }\r\n }\r\n if (requiredExpr !== undefined) {\r\n const ret = this.executeExpression(requiredExpr)\r\n const oldRequired = ele._required\r\n this.$set(ele, '_required', ret)\r\n // 初始化或状态变化时更新版本号,强制组件重新渲染\r\n if (oldRequired === undefined || oldRequired !== ret) {\r\n const currentVersion = ele._rulesVersion || 0\r\n this.$set(ele, '_rulesVersion', currentVersion + 1)\r\n }\r\n }\r\n })\r\n },\r\n evalDisabledExpression () {\r\n this.elements.forEach(ele => {\r\n if (this.globalDisabled) return this.$set(ele, '_disabled', true)\r\n const { disabled } = ele\r\n const ret = this.executeExpression(disabled)\r\n this.$set(ele, '_disabled', ret)\r\n })\r\n },\r\n evalShowExpression () {\r\n this.elements.forEach(ele => {\r\n const { show = true } = ele\r\n const ret = this.executeExpression(show)\r\n this.$set(ele, '_show', ret)\r\n })\r\n },\r\n executeExpression (expression) {\r\n if (type.isBool(expression)) return expression\r\n if (type.isEmpty(expression)) return false\r\n const scope = { ...this.formModel, ...this.getFieldsValue(), _route: this.$route.query, _routeMeta: this.$route.meta }\r\n return parse(expression, scope)\r\n },\r\n onChange (value, props) {\r\n const { name } = props\r\n this.$set(this.formModel, name, value)\r\n this.dispatchExpression()\r\n this.setFieldsValue({ [name]: value })\r\n this.$emit('change', { value, props, exposed: { ...this.exposedMethods } })\r\n },\r\n collectDefaultValues () {\r\n const ret = this.elements.reduce((ret, props) => {\r\n const { name, defaultValue } = props\r\n if (defaultValue) {\r\n ret[name] = defaultValue\r\n }\r\n return ret\r\n }, {})\r\n return ret\r\n },\r\n //TODO deprecated in the future, need to be implemented in the outer component\r\n setDefaultValues () {\r\n const defaultValues = this.collectDefaultValues()\r\n this.setFormModel(defaultValues)\r\n this.setFieldsValue(defaultValues)\r\n },\r\n validateFields () {\r\n return new Promise((resolve) => {\r\n this.form.validateFields((error, values) => {\r\n resolve(!error)\r\n })\r\n })\r\n },\r\n setFieldsValue (props = {}) {\r\n this.$nextTick(() => {\r\n this.form.setFieldsValue(props)\r\n })\r\n },\r\n getFieldsValue (fieldNames) {\r\n return this.form.getFieldsValue(fieldNames)\r\n }\r\n },\r\n mounted() {\r\n this.$emit('x:mounted', { setFormModel: this.setFormModel })\r\n this.dispatchExpression()\r\n }\r\n}\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.ele__form--wrapper {\r\n background: #fff;\r\n .ant-form-item {\r\n }\r\n}\r\n</style>",".ele__form--wrapper {\n background: #fff;\n}\n\n/*# sourceMappingURL=index.vue.map */"]}, media: undefined });
5695
5750
 
5696
5751
  };
5697
5752
  /* scoped */
5698
- const __vue_scope_id__$w = "data-v-750019c0";
5753
+ const __vue_scope_id__$w = "data-v-7561ae99";
5699
5754
  /* module identifier */
5700
5755
  const __vue_module_identifier__$w = undefined;
5701
5756
  /* functional template */