rb-document-form-constructor 0.1.2 → 0.1.6

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,283 +1,84 @@
1
- let __clone = function (data) {
2
- return JSON.parse(JSON.stringify(data));
3
- };
4
-
5
- let __assign = function () {
6
- __assign = Object.assign || function __assign(t) {
7
- for (var s, i = 1, n = arguments.length; i < n; i++) {
8
- s = arguments[i];
9
-
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
11
- }
12
-
13
- return t;
14
- };
1
+ import crypto from 'crypto';
15
2
 
16
- return __assign.apply(this, arguments);
17
- };
18
-
19
- let fcInputs = {
20
- text: {
21
- text: 'Текст',
22
- name: 'text',
23
- type: 'b-form-input',
24
- props: {
25
- placeholder: {
26
- type: 'string',
27
- default: null,
28
- label: 'Надпись внутри',
29
- visible: true
30
- },
31
- type: {
32
- type: 'string',
33
- default: 'text',
34
- label: 'Тип данных',
35
- visible: false
36
- }
37
- },
38
- propsData: {},
39
- defaultValue: null
40
- },
41
- number: {
42
- text: 'Число',
43
- name: 'number',
44
- type: 'b-form-input',
45
- props: {
46
- placeholder: {
47
- type: 'string',
48
- default: null,
49
- label: 'Надпись внутри',
50
- visible: true
51
- },
52
- type: {
53
- type: 'string',
54
- default: 'number',
55
- label: 'Тип данных',
56
- visible: false
57
- }
58
- },
59
- propsData: {},
60
- defaultValue: null
61
- },
62
- memo: {
63
- text: 'Большой текст',
64
- name: 'memo',
65
- type: 'b-form-textarea',
66
- props: {
67
- placeholder: {
68
- type: 'string',
69
- default: null,
70
- label: 'Надпись внутри',
71
- visible: true
72
- }
73
- },
74
- propsData: {},
75
- defaultValue: null
76
- },
77
- date: {
78
- text: 'Дата',
79
- name: 'date',
80
- type: 'rb-date-picker-input',
81
- props: {},
82
- propsData: {},
83
- defaultValue: null
84
- },
85
- phone: {
86
- text: 'Телефон',
87
- name: 'phone',
88
- type: 'rb-phone-input',
89
- props: {
90
- placeholder: {
91
- type: 'string',
92
- default: 'Телефон',
93
- label: 'Надпись внутри',
94
- visible: true
95
- }
96
- },
97
- propsData: {},
98
- defaultValue: null
99
- }
100
- };
101
- let fcPrimitiveInputs = {
102
- text: [__clone(fcInputs.text), __clone(fcInputs.number), __clone(fcInputs.memo), __clone(fcInputs.phone)],
103
- memo: [__clone(fcInputs.memo), __clone(fcInputs.text)],
104
- number: [__clone(fcInputs.text), __clone(fcInputs.number)],
105
- date: [__clone(fcInputs.date)]
106
- };
107
- let fcDictInputs = [];
108
- let fcRefInputs = {};
109
- let fcRefInputConfigs = {};
110
- let baseConfig = {
111
- inputs: __clone(fcInputs),
112
- primitiveInputs: __clone(fcPrimitiveInputs),
113
- dictInputs: __clone(fcDictInputs),
114
- refInputs: __clone(fcRefInputs),
115
- refInputConfigs: __clone(fcRefInputConfigs),
116
- icons: {
117
- iconExpandFacet: 'icon-chevron-up',
118
- iconCollapseFacet: 'icon-chevron-down',
119
- iconCloseFieldSidebar: 'icon-chevron-right',
120
- iconOpenFieldSidebar: 'icon-chevron-left',
121
- iconAdd: 'icon-add',
122
- iconEdit: 'icon-edit',
123
- iconDelete: 'icon-delete',
124
- iconDrag: 'icon-reorder'
125
- }
126
- };
127
3
  const UtFormConfig = {
128
- config: {},
129
-
130
- init(formConfig) {
131
- this.config = __clone(baseConfig);
132
-
133
- if (formConfig) {
134
- if (formConfig.inputs) {
135
- this.mergeInputsInMap(this.config.inputs, formConfig.inputs);
136
- }
137
-
138
- if (formConfig.primitiveInputs) {
139
- this.mergeInputInMapOfArrays(this.config.primitiveInputs, formConfig.primitiveInputs);
140
- }
141
-
142
- if (formConfig.dictInputs) {
143
- this.mergeInputsInArray(this.config.dictInputs, formConfig.dictInputs);
144
- }
145
-
146
- if (formConfig.refInputs) {
147
- this.mergeInputInMapOfArrays(this.config.refInputs, formConfig.refInputs);
148
- }
149
-
150
- if (formConfig.refInputConfigs) {
151
- this.config.refInputConfigs = formConfig.refInputConfigs;
152
- }
153
-
154
- if (formConfig.icons) {
155
- this.config.icons = __assign(this.config.icons, formConfig.icons);
156
- }
4
+ findField(fieldName, formConfig) {
5
+ if (!formConfig || !formConfig.sections) {
6
+ return null;
157
7
  }
158
- },
159
8
 
160
- mergeInputInMapOfArrays(inputs, formConfigInputs) {
161
- for (let dataType in formConfigInputs) {
162
- let foundInputs = inputs[dataType];
9
+ let found = null;
10
+ formConfig.sections.every(r => {
11
+ if (r.columns) {
12
+ r.columns.every(c => {
13
+ c.fields.forEach(f => {
14
+ if (f.name === fieldName) {
15
+ found = f;
16
+ }
17
+ });
163
18
 
164
- if (foundInputs) {
165
- this.mergeInputsInArray(foundInputs, formConfigInputs[dataType]);
166
- } else {
167
- inputs[dataType] = formConfigInputs[dataType];
19
+ if (found) {
20
+ return false;
21
+ }
22
+ });
168
23
  }
169
- }
170
- },
171
-
172
- mergeInputsInMap(inputs, formConfigInputs) {
173
- for (let name in formConfigInputs) {
174
- inputs[name] = __assign(inputs[name] ? inputs[name] : {}, formConfigInputs[name] ? formConfigInputs[name] : {});
175
- }
176
- },
177
24
 
178
- mergeInputsInArray(inputs, formConfigInputs) {
179
- formConfigInputs.forEach(input => {
180
- let index = inputs.findIndex(item => item.name === input.name);
181
-
182
- if (index >= 0) {
183
- inputs[index] = input;
184
- } else {
185
- inputs.push(input);
25
+ if (found) {
26
+ return false;
186
27
  }
187
28
  });
29
+ return found;
188
30
  },
189
31
 
190
- getAllInputTypes() {
191
- return this.config.inputs;
192
- },
193
-
194
- getAllDictInputs() {
195
- return this.config.dictInputs;
196
- },
197
-
198
- getInputTypes(field) {
199
- if (!field) {
200
- return [];
201
- }
202
-
203
- if (field.dict) {
204
- return this.config.dictInputs;
205
- }
206
-
207
- if (field.ref) {
208
- return this.config.refInputs[field.ref];
209
- }
210
-
211
- return this.config.primitiveInputs[field.type];
212
- },
213
-
214
- getDefaultInput(field) {
215
- let input = null;
216
-
217
- if (field.ref && this.config.refInputs[field.ref]) {
218
- input = __clone(this.config.refInputs[field.ref][0]);
219
- this.applyDefaultProps(input);
220
-
221
- if (this.config.refInputConfigs[field.ref] && this.config.refInputConfigs[field.ref][input.name]) {
222
- this.applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
223
- }
224
- } else if (field.dict) {
225
- input = __clone(this.config.dictInputs[0]);
226
- input.props.dict.default = field.ref;
227
- this.applyDefaultProps(input);
228
- } else {
229
- input = __clone(this.config.primitiveInputs[field.type][0]);
230
- this.applyDefaultProps(input);
32
+ findRule(ruleId, formConfig) {
33
+ if (!formConfig || !formConfig.sections) {
34
+ return null;
231
35
  }
232
36
 
233
- return input;
234
- },
235
-
236
- getInputTypeByName(name, field) {
237
- let input = JSON.parse(JSON.stringify(this.config.inputs[name]));
37
+ let found = null;
38
+ formConfig.sections.every(s => {
39
+ if (s.columns) {
40
+ s.columns.every(c => {
41
+ c.fields.every(f => {
42
+ if (f.rules) {
43
+ f.rules.forEach(r => {
44
+ if (r.id === ruleId) {
45
+ found = r;
46
+ }
47
+ });
48
+ }
238
49
 
239
- if (field.ref && this.config.refInputConfigs[field.ref]) {
240
- this.applyDefaultProps(input);
50
+ if (found) {
51
+ return false;
52
+ }
53
+ });
241
54
 
242
- if (this.config.refInputConfigs[field.ref] && this.config.refInputConfigs[field.ref][input.name]) {
243
- this.applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
55
+ if (found) {
56
+ return false;
57
+ }
58
+ });
244
59
  }
245
- } else if (field.dict) {
246
- input.props.dict.default = field.ref;
247
- this.applyDefaultProps(input);
248
- } else {
249
- this.applyDefaultProps(input);
250
- }
251
-
252
- return input;
253
- },
254
60
 
255
- applyDefaultProps(input) {
256
- for (let propName in input.props) {
257
- input.propsData[propName] = input.props[propName].default;
258
- }
259
- },
260
-
261
- applyRefProps(input, refConfig) {
262
- if (refConfig !== null && refConfig !== void 0 && refConfig.propsData) {
263
- for (let propName in refConfig.propsData) {
264
- input.propsData[propName] = refConfig.propsData[propName];
61
+ if (found) {
62
+ return false;
265
63
  }
266
- }
64
+ });
65
+ return found;
267
66
  },
268
67
 
269
- parseFacets(formConfig) {
270
- let facets = [];
271
- formConfig.sections.every(section => {
272
- section.columns.every(c => {
273
- c.fields.forEach(f => {
274
- if (!(facets.indexOf(f.facet) >= 0)) {
275
- facets.push(f.facet);
68
+ getFields(formConfig) {
69
+ let fields = [];
70
+ formConfig.sections.forEach(s => {
71
+ if (s.columns) {
72
+ s.columns.forEach(c => {
73
+ if (c.fields) {
74
+ c.fields.forEach(f => {
75
+ fields.push(f);
76
+ });
276
77
  }
277
78
  });
278
- });
79
+ }
279
80
  });
280
- return facets;
81
+ return fields;
281
82
  }
282
83
 
283
84
  };
@@ -301,7 +102,7 @@ const UtFormConfig = {
301
102
  //
302
103
  //
303
104
  //
304
- var script$4 = {
105
+ var script$5 = {
305
106
  name: 'DocTemplateSectionModal',
306
107
  props: {
307
108
  section: Object,
@@ -435,10 +236,10 @@ function normalizeComponent(template, style, script, scopeId, isFunctionalTempla
435
236
  }
436
237
 
437
238
  /* script */
438
- const __vue_script__$4 = script$4;
239
+ const __vue_script__$5 = script$5;
439
240
  /* template */
440
241
 
441
- var __vue_render__$4 = function () {
242
+ var __vue_render__$5 = function () {
442
243
  var _vm = this;
443
244
 
444
245
  var _h = _vm.$createElement;
@@ -486,19 +287,19 @@ var __vue_render__$4 = function () {
486
287
  })], 1)], 1)], 1)], 1)], 1);
487
288
  };
488
289
 
489
- var __vue_staticRenderFns__$4 = [];
290
+ var __vue_staticRenderFns__$5 = [];
490
291
  /* style */
491
292
 
492
- const __vue_inject_styles__$4 = undefined;
293
+ const __vue_inject_styles__$5 = undefined;
493
294
  /* scoped */
494
295
 
495
- const __vue_scope_id__$4 = undefined;
296
+ const __vue_scope_id__$5 = undefined;
496
297
  /* module identifier */
497
298
 
498
- const __vue_module_identifier__$4 = undefined;
299
+ const __vue_module_identifier__$5 = undefined;
499
300
  /* functional template */
500
301
 
501
- const __vue_is_functional_template__$4 = false;
302
+ const __vue_is_functional_template__$5 = false;
502
303
  /* style inject */
503
304
 
504
305
  /* style inject SSR */
@@ -506,9 +307,9 @@ const __vue_is_functional_template__$4 = false;
506
307
  /* style inject shadow dom */
507
308
 
508
309
  const __vue_component__$6 = /*#__PURE__*/normalizeComponent({
509
- render: __vue_render__$4,
510
- staticRenderFns: __vue_staticRenderFns__$4
511
- }, __vue_inject_styles__$4, __vue_script__$4, __vue_scope_id__$4, __vue_is_functional_template__$4, __vue_module_identifier__$4, false, undefined, undefined, undefined);
310
+ render: __vue_render__$5,
311
+ staticRenderFns: __vue_staticRenderFns__$5
312
+ }, __vue_inject_styles__$5, __vue_script__$5, __vue_scope_id__$5, __vue_is_functional_template__$5, __vue_module_identifier__$5, false, undefined, undefined, undefined);
512
313
 
513
314
  var DocTemplateSectionModal = __vue_component__$6;
514
315
 
@@ -5900,18 +5701,321 @@ if (typeof window !== "undefined" && "Vue" in window) {
5900
5701
 
5901
5702
  });
5902
5703
 
5903
- //
5904
- var script$3 = {
5905
- name: 'DocTemplateFacetList',
5906
- components: {
5907
- draggable: vuedraggable_umd
5908
- },
5909
- props: {
5910
- facets: {
5911
- type: Array,
5912
- default: () => []
5913
- }
5914
- },
5704
+ let __clone = function (data) {
5705
+ return JSON.parse(JSON.stringify(data));
5706
+ };
5707
+
5708
+ let __assign = function () {
5709
+ __assign = Object.assign || function __assign(t) {
5710
+ for (let s, i = 1, n = arguments.length; i < n; i++) {
5711
+ s = arguments[i];
5712
+
5713
+ for (let p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
5714
+ }
5715
+
5716
+ return t;
5717
+ };
5718
+
5719
+ return __assign.apply(this, arguments);
5720
+ };
5721
+
5722
+ let __mergeInputInMapOfArrays = function (inputs, formConfigInputs) {
5723
+ for (let dataType in formConfigInputs) {
5724
+ let foundInputs = inputs[dataType];
5725
+
5726
+ if (foundInputs) {
5727
+ __mergeInputsInArray(foundInputs, formConfigInputs[dataType]);
5728
+ } else {
5729
+ inputs[dataType] = formConfigInputs[dataType];
5730
+ }
5731
+ }
5732
+ };
5733
+
5734
+ let __mergeInputsInMap = function (inputs, formConfigInputs) {
5735
+ for (let name in formConfigInputs) {
5736
+ inputs[name] = __assign(inputs[name] ? inputs[name] : {}, formConfigInputs[name] ? formConfigInputs[name] : {});
5737
+ }
5738
+ };
5739
+
5740
+ let __mergeInputsInArray = function (inputs, formConfigInputs) {
5741
+ formConfigInputs.forEach(input => {
5742
+ let index = inputs.findIndex(item => item.name === input.name);
5743
+
5744
+ if (index >= 0) {
5745
+ inputs[index] = input;
5746
+ } else {
5747
+ inputs.push(input);
5748
+ }
5749
+ });
5750
+ };
5751
+
5752
+ let __applyDefaultProps = function (input) {
5753
+ for (let propName in input.props) {
5754
+ input.propsData[propName] = input.props[propName].default;
5755
+ }
5756
+ };
5757
+
5758
+ let __applyRefProps = function (input, refConfig) {
5759
+ if (refConfig !== null && refConfig !== void 0 && refConfig.propsData) {
5760
+ for (let propName in refConfig.propsData) {
5761
+ input.propsData[propName] = refConfig.propsData[propName];
5762
+ }
5763
+ }
5764
+ };
5765
+
5766
+ let fcInputs = {
5767
+ text: {
5768
+ text: 'Текст',
5769
+ name: 'text',
5770
+ type: 'b-form-input',
5771
+ props: {
5772
+ placeholder: {
5773
+ type: 'string',
5774
+ default: null,
5775
+ label: 'Надпись внутри',
5776
+ visible: true
5777
+ },
5778
+ type: {
5779
+ type: 'string',
5780
+ default: 'text',
5781
+ label: 'Тип данных',
5782
+ visible: false
5783
+ }
5784
+ },
5785
+ propsData: {},
5786
+ defaultValue: null
5787
+ },
5788
+ number: {
5789
+ text: 'Число',
5790
+ name: 'number',
5791
+ type: 'b-form-input',
5792
+ props: {
5793
+ placeholder: {
5794
+ type: 'string',
5795
+ default: null,
5796
+ label: 'Надпись внутри',
5797
+ visible: true
5798
+ },
5799
+ type: {
5800
+ type: 'string',
5801
+ default: 'number',
5802
+ label: 'Тип данных',
5803
+ visible: false
5804
+ }
5805
+ },
5806
+ propsData: {},
5807
+ defaultValue: null
5808
+ },
5809
+ memo: {
5810
+ text: 'Большой текст',
5811
+ name: 'memo',
5812
+ type: 'b-form-textarea',
5813
+ props: {
5814
+ placeholder: {
5815
+ type: 'string',
5816
+ default: null,
5817
+ label: 'Надпись внутри',
5818
+ visible: true
5819
+ }
5820
+ },
5821
+ propsData: {},
5822
+ defaultValue: null
5823
+ },
5824
+ date: {
5825
+ text: 'Дата',
5826
+ name: 'date',
5827
+ type: 'rb-date-picker-input',
5828
+ props: {},
5829
+ propsData: {},
5830
+ defaultValue: null
5831
+ },
5832
+ phone: {
5833
+ text: 'Телефон',
5834
+ name: 'phone',
5835
+ type: 'rb-phone-input',
5836
+ props: {
5837
+ placeholder: {
5838
+ type: 'string',
5839
+ default: 'Телефон',
5840
+ label: 'Надпись внутри',
5841
+ visible: true
5842
+ }
5843
+ },
5844
+ propsData: {},
5845
+ defaultValue: null
5846
+ }
5847
+ };
5848
+ let fcPrimitiveInputs = {
5849
+ text: [__clone(fcInputs.text), __clone(fcInputs.number), __clone(fcInputs.memo), __clone(fcInputs.phone)],
5850
+ memo: [__clone(fcInputs.memo), __clone(fcInputs.text)],
5851
+ number: [__clone(fcInputs.text), __clone(fcInputs.number)],
5852
+ date: [__clone(fcInputs.date)]
5853
+ };
5854
+ let fcDictInputs = [];
5855
+ let fcRefInputs = {};
5856
+ let fcRefInputConfigs = {};
5857
+ let baseConfig = {
5858
+ inputs: __clone(fcInputs),
5859
+ primitiveInputs: __clone(fcPrimitiveInputs),
5860
+ dictInputs: __clone(fcDictInputs),
5861
+ refInputs: __clone(fcRefInputs),
5862
+ refInputConfigs: __clone(fcRefInputConfigs),
5863
+ rules: [],
5864
+ icons: {
5865
+ iconExpandFacet: 'icon-chevron-up',
5866
+ iconCollapseFacet: 'icon-chevron-down',
5867
+ iconCloseFieldSidebar: 'icon-chevron-right',
5868
+ iconOpenFieldSidebar: 'icon-chevron-left',
5869
+ iconAdd: 'icon-add',
5870
+ iconEdit: 'icon-edit',
5871
+ iconDelete: 'icon-delete',
5872
+ iconDrag: 'icon-reorder'
5873
+ },
5874
+ ruleContext: {}
5875
+ };
5876
+ const UtFormConstructor = {
5877
+ config: {},
5878
+
5879
+ init(formConfig) {
5880
+ this.config = __clone(baseConfig);
5881
+
5882
+ if (formConfig) {
5883
+ if (formConfig.inputs) {
5884
+ __mergeInputsInMap(this.config.inputs, formConfig.inputs);
5885
+ }
5886
+
5887
+ if (formConfig.primitiveInputs) {
5888
+ __mergeInputInMapOfArrays(this.config.primitiveInputs, formConfig.primitiveInputs);
5889
+ }
5890
+
5891
+ if (formConfig.dictInputs) {
5892
+ __mergeInputsInArray(this.config.dictInputs, formConfig.dictInputs);
5893
+ }
5894
+
5895
+ if (formConfig.refInputs) {
5896
+ __mergeInputInMapOfArrays(this.config.refInputs, formConfig.refInputs);
5897
+ }
5898
+
5899
+ if (formConfig.refInputConfigs) {
5900
+ this.config.refInputConfigs = formConfig.refInputConfigs;
5901
+ }
5902
+
5903
+ if (formConfig.icons) {
5904
+ this.config.icons = __assign(this.config.icons, formConfig.icons);
5905
+ }
5906
+
5907
+ if (formConfig.rules) {
5908
+ this.config.rules = formConfig.rules;
5909
+ }
5910
+
5911
+ if (formConfig.ruleContext) {
5912
+ this.config.ruleContext = formConfig.ruleContext;
5913
+ }
5914
+ }
5915
+ },
5916
+
5917
+ getInputTypes(field) {
5918
+ if (!field) {
5919
+ return [];
5920
+ }
5921
+
5922
+ if (field.dict && !this.config.refInputs[field.ref]) {
5923
+ return this.config.dictInputs;
5924
+ }
5925
+
5926
+ if (field.ref) {
5927
+ return this.config.refInputs[field.ref];
5928
+ }
5929
+
5930
+ return this.config.primitiveInputs[field.type];
5931
+ },
5932
+
5933
+ getDefaultInput(field) {
5934
+ let input = null;
5935
+
5936
+ if (field.ref && this.config.refInputs[field.ref]) {
5937
+ input = __clone(this.config.refInputs[field.ref][0]);
5938
+
5939
+ __applyDefaultProps(input);
5940
+
5941
+ if (this.config.refInputConfigs[field.ref] && this.config.refInputConfigs[field.ref][input.name]) {
5942
+ __applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
5943
+ }
5944
+ } else if (field.dict) {
5945
+ input = __clone(this.config.dictInputs[0]);
5946
+ input.props.dict.default = field.ref;
5947
+
5948
+ __applyDefaultProps(input);
5949
+ } else {
5950
+ input = __clone(this.config.primitiveInputs[field.type][0]);
5951
+
5952
+ __applyDefaultProps(input);
5953
+ }
5954
+
5955
+ return input;
5956
+ },
5957
+
5958
+ getInputTypeByName(name, field) {
5959
+ let input = JSON.parse(JSON.stringify(this.config.inputs[name]));
5960
+
5961
+ if (field.ref && this.config.refInputs[field.ref]) {
5962
+ __applyDefaultProps(input);
5963
+
5964
+ if (this.config.refInputConfigs[field.ref] && this.config.refInputConfigs[field.ref][input.name]) {
5965
+ __applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
5966
+ }
5967
+ } else if (field.dict) {
5968
+ input.props.dict.default = field.ref;
5969
+
5970
+ __applyDefaultProps(input);
5971
+ } else {
5972
+ __applyDefaultProps(input);
5973
+ }
5974
+
5975
+ input.propsData['ref'] = field.name;
5976
+ return input;
5977
+ },
5978
+
5979
+ getAvailableFieldRules(field) {
5980
+ return this.config.rules.filter(rule => {
5981
+ return !rule.fields || rule.fields.length === 0 || rule.fields.indexOf(field.name) >= 0;
5982
+ });
5983
+ },
5984
+
5985
+ getRuleContext() {
5986
+ return this.config.ruleContext;
5987
+ },
5988
+
5989
+ runRule(context, script) {
5990
+ let appendScript = `
5991
+ var doc = this.form.doc;
5992
+ var form = this.form;
5993
+ var event = this.event;
5994
+ var eventName = this.eventName;
5995
+
5996
+ `;
5997
+
5998
+ let func = function (script) {
5999
+ return eval(script);
6000
+ };
6001
+
6002
+ func.call(context, appendScript + script);
6003
+ }
6004
+
6005
+ };
6006
+
6007
+ //
6008
+ var script$4 = {
6009
+ name: 'DocTemplateFacetList',
6010
+ components: {
6011
+ draggable: vuedraggable_umd
6012
+ },
6013
+ props: {
6014
+ facets: {
6015
+ type: Array,
6016
+ default: () => []
6017
+ }
6018
+ },
5915
6019
 
5916
6020
  data() {
5917
6021
  return {
@@ -5923,11 +6027,11 @@ var script$3 = {
5923
6027
 
5924
6028
  computed: {
5925
6029
  iconExpandFacet() {
5926
- return UtFormConfig.config.icons.iconExpandFacet;
6030
+ return UtFormConstructor.config.icons.iconExpandFacet;
5927
6031
  },
5928
6032
 
5929
6033
  iconCollapseFacet() {
5930
- return UtFormConfig.config.icons.iconCollapseFacet;
6034
+ return UtFormConstructor.config.icons.iconCollapseFacet;
5931
6035
  }
5932
6036
 
5933
6037
  },
@@ -5944,7 +6048,7 @@ var script$3 = {
5944
6048
  methods: {
5945
6049
  onFieldCloned(cloneField) {
5946
6050
  let field = JSON.parse(JSON.stringify(cloneField));
5947
- field.input = UtFormConfig.getDefaultInput(field);
6051
+ field.input = UtFormConstructor.getDefaultInput(field);
5948
6052
  return field;
5949
6053
  },
5950
6054
 
@@ -5975,101 +6079,593 @@ var script$3 = {
5975
6079
  });
5976
6080
  this.innerFacets = facets;
5977
6081
  },
5978
-
5979
- handleFacetsProp() {
5980
- let innerFacets = this.facets.map(f => ({ ...f,
5981
- expanded: false
5982
- }));
5983
- this.innerFacets = JSON.parse(JSON.stringify(innerFacets));
5984
- this.allFacets = JSON.parse(JSON.stringify(innerFacets));
6082
+
6083
+ handleFacetsProp() {
6084
+ let innerFacets = this.facets.map(f => ({ ...f,
6085
+ expanded: false
6086
+ }));
6087
+ this.innerFacets = JSON.parse(JSON.stringify(innerFacets));
6088
+ this.allFacets = JSON.parse(JSON.stringify(innerFacets));
6089
+ }
6090
+
6091
+ },
6092
+
6093
+ created() {
6094
+ this.handleFacetsProp();
6095
+ }
6096
+
6097
+ };
6098
+
6099
+ /* script */
6100
+ const __vue_script__$4 = script$4;
6101
+ /* template */
6102
+
6103
+ var __vue_render__$4 = function () {
6104
+ var _vm = this;
6105
+
6106
+ var _h = _vm.$createElement;
6107
+
6108
+ var _c = _vm._self._c || _h;
6109
+
6110
+ return _c('div', {
6111
+ staticClass: "rb-facets-sidebar"
6112
+ }, [_c('h4', [_vm._v("Компоненты")]), _vm._v(" "), _c('b-form', [_c('b-form-row', [_c('b-col', {
6113
+ attrs: {
6114
+ "lg": "12"
6115
+ }
6116
+ }, [_c('b-form-group', [_c('b-form-input', {
6117
+ attrs: {
6118
+ "placeholder": "Название поля"
6119
+ },
6120
+ model: {
6121
+ value: _vm.facetSearchStr,
6122
+ callback: function ($$v) {
6123
+ _vm.facetSearchStr = $$v;
6124
+ },
6125
+ expression: "facetSearchStr"
6126
+ }
6127
+ })], 1)], 1)], 1)], 1), _vm._v(" "), _c('div', {
6128
+ staticClass: "rb-facet-list"
6129
+ }, _vm._l(_vm.innerFacets, function (facet) {
6130
+ return _c('div', {
6131
+ key: facet.name,
6132
+ staticClass: "rb-facet"
6133
+ }, [_c('h6', {
6134
+ staticClass: "rb-facet-label d-flex cursor-pointer",
6135
+ on: {
6136
+ "click": function ($event) {
6137
+ facet.expanded = !facet.expanded;
6138
+ }
6139
+ }
6140
+ }, [_c('rb-text', {
6141
+ staticClass: "flex-fill"
6142
+ }, [_vm._v(_vm._s(facet.labelRu))]), _vm._v(" "), _c('rb-icon', {
6143
+ attrs: {
6144
+ "icon": facet.expanded ? _vm.iconCollapseFacet : _vm.iconExpandFacet
6145
+ }
6146
+ })], 1), _vm._v(" "), facet.expanded ? _c('b-list-group', [_c('draggable', {
6147
+ attrs: {
6148
+ "clone": _vm.onFieldCloned,
6149
+ "animation": 200,
6150
+ "group": {
6151
+ name: 'fields',
6152
+ pull: 'clone',
6153
+ put: false
6154
+ },
6155
+ "ghost-class": "rb-facet-field-moving"
6156
+ },
6157
+ on: {
6158
+ "end": function ($event) {
6159
+ return _vm.onFieldMoveEnd($event);
6160
+ }
6161
+ },
6162
+ model: {
6163
+ value: facet.fields,
6164
+ callback: function ($$v) {
6165
+ _vm.$set(facet, "fields", $$v);
6166
+ },
6167
+ expression: "facet.fields"
6168
+ }
6169
+ }, _vm._l(facet.fields, function (field) {
6170
+ return _c('b-list-group-item', {
6171
+ key: field.name,
6172
+ staticClass: "cursor-pointer"
6173
+ }, [_c('rb-text', [_vm._v(_vm._s(field.labelRu))])], 1);
6174
+ }), 1)], 1) : _vm._e()], 1);
6175
+ }), 0)], 1);
6176
+ };
6177
+
6178
+ var __vue_staticRenderFns__$4 = [];
6179
+ /* style */
6180
+
6181
+ const __vue_inject_styles__$4 = undefined;
6182
+ /* scoped */
6183
+
6184
+ const __vue_scope_id__$4 = undefined;
6185
+ /* module identifier */
6186
+
6187
+ const __vue_module_identifier__$4 = undefined;
6188
+ /* functional template */
6189
+
6190
+ const __vue_is_functional_template__$4 = false;
6191
+ /* style inject */
6192
+
6193
+ /* style inject SSR */
6194
+
6195
+ /* style inject shadow dom */
6196
+
6197
+ const __vue_component__$5 = /*#__PURE__*/normalizeComponent({
6198
+ render: __vue_render__$4,
6199
+ staticRenderFns: __vue_staticRenderFns__$4
6200
+ }, __vue_inject_styles__$4, __vue_script__$4, __vue_scope_id__$4, __vue_is_functional_template__$4, __vue_module_identifier__$4, false, undefined, undefined, undefined);
6201
+
6202
+ var DocTemplateFacetList = __vue_component__$5;
6203
+
6204
+ const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
6205
+
6206
+ let poolPtr = rnds8Pool.length;
6207
+ function rng() {
6208
+ if (poolPtr > rnds8Pool.length - 16) {
6209
+ crypto.randomFillSync(rnds8Pool);
6210
+ poolPtr = 0;
6211
+ }
6212
+
6213
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
6214
+ }
6215
+
6216
+ var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
6217
+
6218
+ function validate(uuid) {
6219
+ return typeof uuid === 'string' && REGEX.test(uuid);
6220
+ }
6221
+
6222
+ /**
6223
+ * Convert array of 16 byte values to UUID string format of the form:
6224
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
6225
+ */
6226
+
6227
+ const byteToHex = [];
6228
+
6229
+ for (let i = 0; i < 256; ++i) {
6230
+ byteToHex.push((i + 0x100).toString(16).substr(1));
6231
+ }
6232
+
6233
+ function stringify(arr, offset = 0) {
6234
+ // Note: Be careful editing this code! It's been tuned for performance
6235
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
6236
+ const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
6237
+ // of the following:
6238
+ // - One or more input array values don't map to a hex octet (leading to
6239
+ // "undefined" in the uuid)
6240
+ // - Invalid input values for the RFC `version` or `variant` fields
6241
+
6242
+ if (!validate(uuid)) {
6243
+ throw TypeError('Stringified UUID is invalid');
6244
+ }
6245
+
6246
+ return uuid;
6247
+ }
6248
+
6249
+ function v4(options, buf, offset) {
6250
+ options = options || {};
6251
+ const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
6252
+
6253
+ rnds[6] = rnds[6] & 0x0f | 0x40;
6254
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
6255
+
6256
+ if (buf) {
6257
+ offset = offset || 0;
6258
+
6259
+ for (let i = 0; i < 16; ++i) {
6260
+ buf[offset + i] = rnds[i];
6261
+ }
6262
+
6263
+ return buf;
6264
+ }
6265
+
6266
+ return stringify(rnds);
6267
+ }
6268
+
6269
+ //
6270
+ var script$3 = {
6271
+ name: 'FieldRuleFormModal',
6272
+ components: {
6273
+ DocForm
6274
+ },
6275
+ props: {
6276
+ field: Object,
6277
+ rule: Object,
6278
+ formConfig: Object,
6279
+ mode: {
6280
+ type: String,
6281
+ default: 'ins'
6282
+ },
6283
+ onAfterOk: Function
6284
+ },
6285
+
6286
+ data() {
6287
+ return {
6288
+ id: 'rb-field-rule-form-modal',
6289
+ state: this.getDefaultState(),
6290
+ innerFormConfig: null,
6291
+ innerRule: null
6292
+ };
6293
+ },
6294
+
6295
+ computed: {
6296
+ title() {
6297
+ return this.mode === 'ins' ? 'Добавление правила' : 'Редактирование правила';
6298
+ },
6299
+
6300
+ fields() {
6301
+ return UtFormConfig.getFields(this.formConfig);
6302
+ },
6303
+
6304
+ rulePresets() {
6305
+ return UtFormConstructor.getAvailableFieldRules(this.field);
6306
+ }
6307
+
6308
+ },
6309
+ watch: {
6310
+ formConfig() {
6311
+ this.copyToInnerFormConfig();
6312
+ },
6313
+
6314
+ rule() {
6315
+ if (this.rule) {
6316
+ this.innerRule = this.rule;
6317
+ } else {
6318
+ this.innerRule = this.getDefaultRule();
6319
+ }
6320
+ }
6321
+
6322
+ },
6323
+ methods: {
6324
+ validateFields(fieldName) {
6325
+ let fields = fieldName ? [fieldName] : ['name', 'event', 'script'];
6326
+ fields.forEach(field => {
6327
+ if (!this.innerRule[field]) {
6328
+ this.state[field] = false;
6329
+ this.state[`${field}_feedback`] = 'Заполните название';
6330
+ } else {
6331
+ this.state[field] = true;
6332
+ this.state[`${field}_feedback`] = null;
6333
+ }
6334
+ });
6335
+ },
6336
+
6337
+ copyToInnerFormConfig() {
6338
+ this.innerFormConfig = JSON.parse(JSON.stringify(this.formConfig));
6339
+ },
6340
+
6341
+ applyRuleToInnerFormConfig() {
6342
+ if (this.innerFormConfig) {
6343
+ let foundRule = UtFormConfig.findRule(this.innerRule.id, this.innerFormConfig);
6344
+
6345
+ if (!foundRule) {
6346
+ let foundField = UtFormConfig.findField(this.field.name, this.innerFormConfig);
6347
+
6348
+ if (foundField) {
6349
+ foundField.rules = foundField.rules ? foundField.rules : [];
6350
+ foundField.rules.push(this.rule);
6351
+ }
6352
+ } else {
6353
+ Object.assign(foundRule, this.innerRule);
6354
+ }
6355
+ }
6356
+ },
6357
+
6358
+ onActivateTab(index) {
6359
+ if (index > 0) {
6360
+ this.copyToInnerFormConfig();
6361
+ this.applyRuleToInnerFormConfig();
6362
+ }
6363
+ },
6364
+
6365
+ getDefaultState() {
6366
+ return {
6367
+ name: null,
6368
+ event: null,
6369
+ script: null
6370
+ };
6371
+ },
6372
+
6373
+ getDefaultRule() {
6374
+ return {
6375
+ id: v4(),
6376
+ name: null,
6377
+ event: null,
6378
+ script: null
6379
+ };
6380
+ },
6381
+
6382
+ resetModal() {
6383
+ this.state = this.getDefaultState();
6384
+ this.innerRule = null;
6385
+ },
6386
+
6387
+ addVariableToScript(varName) {
6388
+ let r = this.innerRule;
6389
+ r.script = r.script ? r.script + varName : varName;
6390
+ },
6391
+
6392
+ addSetVariableToScript(field) {
6393
+ let r = this.innerRule;
6394
+ let setVariableScript = `doc['${field.name}'] = Значение;`;
6395
+ r.script = r.script ? r.script + setVariableScript : setVariableScript;
6396
+ },
6397
+
6398
+ addCallInputFunction(field) {
6399
+ let r = this.innerRule;
6400
+ let setVariableScript = `form.$refs['${field.name}'].Название функции();`;
6401
+ r.script = r.script ? r.script + setVariableScript : setVariableScript;
6402
+ },
6403
+
6404
+ onRuleSelected(ruleName) {
6405
+ let rule = this.rulePresets.find(rule => rule.name === ruleName);
6406
+
6407
+ if (rule) {
6408
+ Object.assign(this.innerRule, rule);
6409
+ this.innerRule.script = this.innerRule.script.trim();
6410
+ }
6411
+ },
6412
+
6413
+ onOk() {
6414
+ this.validateFields();
6415
+
6416
+ if (this.state.name && this.state.script) {
6417
+ if (this.onAfterOk) {
6418
+ this.onAfterOk(this.innerRule);
6419
+ }
6420
+
6421
+ this.$nextTick(() => {
6422
+ this.resetModal();
6423
+ this.$bvModal.hide(this.id);
6424
+ });
6425
+ }
6426
+ }
6427
+
6428
+ },
6429
+
6430
+ created() {
6431
+ this.copyToInnerFormConfig();
6432
+ }
6433
+
6434
+ };
6435
+
6436
+ /* script */
6437
+ const __vue_script__$3 = script$3;
6438
+ /* template */
6439
+
6440
+ var __vue_render__$3 = function () {
6441
+ var _vm = this;
6442
+
6443
+ var _h = _vm.$createElement;
6444
+
6445
+ var _c = _vm._self._c || _h;
6446
+
6447
+ return _c('b-modal', {
6448
+ attrs: {
6449
+ "id": _vm.id,
6450
+ "title": _vm.title,
6451
+ "modal-class": "rb-field-rule-form-modal",
6452
+ "size": "lg",
6453
+ "ok-title": "Сохранить правило",
6454
+ "cancel-variant": "outline-gray",
6455
+ "cancel-title": "Отмена"
6456
+ },
6457
+ on: {
6458
+ "ok": function ($event) {
6459
+ $event.preventDefault();
6460
+ return _vm.onOk.apply(null, arguments);
6461
+ }
6462
+ }
6463
+ }, [_c('b-card', {
6464
+ attrs: {
6465
+ "no-body": ""
6466
+ }
6467
+ }, [_c('b-tabs', {
6468
+ attrs: {
6469
+ "card": ""
6470
+ },
6471
+ on: {
6472
+ "activate-tab": _vm.onActivateTab
6473
+ }
6474
+ }, [_c('b-tab', {
6475
+ attrs: {
6476
+ "title": "Правило",
6477
+ "active": ""
6478
+ }
6479
+ }, [_vm.innerRule ? _c('b-form', [_c('b-form-row', [_c('b-col', {
6480
+ attrs: {
6481
+ "log": "12"
6482
+ }
6483
+ }, [_vm.rulePresets.length > 0 ? _c('b-form-group', {
6484
+ attrs: {
6485
+ "label": "Выбрать"
6486
+ },
6487
+ scopedSlots: _vm._u([{
6488
+ key: "description",
6489
+ fn: function () {
6490
+ return [_vm._v("\n Выберите готовое правило из списка и если нужно, измените\n ")];
6491
+ },
6492
+ proxy: true
6493
+ }], null, false, 3419583775)
6494
+ }, [_vm._v(" "), _c('b-form-select', {
6495
+ on: {
6496
+ "input": function ($event) {
6497
+ return _vm.onRuleSelected($event);
6498
+ }
6499
+ }
6500
+ }, _vm._l(_vm.rulePresets, function (r) {
6501
+ return _c('b-form-select-option', {
6502
+ key: r.name,
6503
+ attrs: {
6504
+ "value": r.name
6505
+ }
6506
+ }, [_vm._v("\n " + _vm._s(r.name) + "\n ")]);
6507
+ }), 1)], 1) : _vm._e()], 1), _vm._v(" "), _c('b-col', {
6508
+ attrs: {
6509
+ "lg": "12"
6510
+ }
6511
+ }, [_c('b-form-group', {
6512
+ attrs: {
6513
+ "label": "Название"
6514
+ },
6515
+ scopedSlots: _vm._u([{
6516
+ key: "description",
6517
+ fn: function () {
6518
+ return [_vm._v("\n Задайте уникальное название, чтобы отличать правило в списке\n ")];
6519
+ },
6520
+ proxy: true
6521
+ }], null, false, 3665649506)
6522
+ }, [_vm._v(" "), _c('b-form-input', {
6523
+ attrs: {
6524
+ "state": _vm.state.name,
6525
+ "invalid-feedback": _vm.state.name_feedback
6526
+ },
6527
+ model: {
6528
+ value: _vm.innerRule.name,
6529
+ callback: function ($$v) {
6530
+ _vm.$set(_vm.innerRule, "name", $$v);
6531
+ },
6532
+ expression: "innerRule.name"
5985
6533
  }
5986
-
5987
- },
5988
-
5989
- created() {
5990
- this.handleFacetsProp();
5991
- }
5992
-
5993
- };
5994
-
5995
- /* script */
5996
- const __vue_script__$3 = script$3;
5997
- /* template */
5998
-
5999
- var __vue_render__$3 = function () {
6000
- var _vm = this;
6001
-
6002
- var _h = _vm.$createElement;
6003
-
6004
- var _c = _vm._self._c || _h;
6005
-
6006
- return _c('div', {
6007
- staticClass: "rb-facets-sidebar"
6008
- }, [_c('h4', [_vm._v("Компоненты")]), _vm._v(" "), _c('b-form', [_c('b-form-row', [_c('b-col', {
6534
+ })], 1)], 1), _vm._v(" "), _c('b-col', {
6009
6535
  attrs: {
6010
6536
  "lg": "12"
6011
6537
  }
6012
- }, [_c('b-form-group', [_c('b-form-input', {
6538
+ }, [_c('b-form-group', {
6013
6539
  attrs: {
6014
- "placeholder": "Название поля"
6540
+ "label": "Событие"
6541
+ },
6542
+ scopedSlots: _vm._u([{
6543
+ key: "description",
6544
+ fn: function () {
6545
+ return [_vm._v("\n При возникновении этого события будет выполняться правило\n ")];
6546
+ },
6547
+ proxy: true
6548
+ }], null, false, 1461632685)
6549
+ }, [_vm._v(" "), _c('b-form-select', {
6550
+ attrs: {
6551
+ "state": _vm.state.event,
6552
+ "invalid-feedback": _vm.state.event_feedback
6015
6553
  },
6016
6554
  model: {
6017
- value: _vm.facetSearchStr,
6555
+ value: _vm.innerRule.event,
6018
6556
  callback: function ($$v) {
6019
- _vm.facetSearchStr = $$v;
6557
+ _vm.$set(_vm.innerRule, "event", $$v);
6020
6558
  },
6021
- expression: "facetSearchStr"
6559
+ expression: "innerRule.event"
6022
6560
  }
6023
- })], 1)], 1)], 1)], 1), _vm._v(" "), _c('div', {
6024
- staticClass: "rb-facet-list"
6025
- }, _vm._l(_vm.innerFacets, function (facet) {
6026
- return _c('div', {
6027
- key: facet.name,
6028
- staticClass: "rb-facet"
6029
- }, [_c('h6', {
6030
- staticClass: "rb-facet-label d-flex"
6031
- }, [_c('rb-text', {
6032
- staticClass: "flex-fill"
6033
- }, [_vm._v(_vm._s(facet.labelRu))]), _vm._v(" "), _c('rb-icon', {
6034
- staticClass: "cursor-pointer",
6035
- attrs: {
6036
- "icon": facet.expanded ? _vm.iconCollapseFacet : _vm.iconExpandFacet
6561
+ }, [_c('b-form-select-option', {
6562
+ attrs: {
6563
+ "value": 'input'
6564
+ }
6565
+ }, [_vm._v("\n Ввод значения\n ")]), _vm._v(" "), _c('b-form-select-option', {
6566
+ attrs: {
6567
+ "value": 'change'
6568
+ }
6569
+ }, [_vm._v("\n Изменение значения\n ")]), _vm._v(" "), _c('b-form-select-option', {
6570
+ attrs: {
6571
+ "value": 'click'
6572
+ }
6573
+ }, [_vm._v("\n Клик\n ")])], 1)], 1)], 1), _vm._v(" "), _c('b-col', {
6574
+ attrs: {
6575
+ "lg": "12"
6576
+ }
6577
+ }, [_c('b-form-group', {
6578
+ attrs: {
6579
+ "label": "Скрипт"
6580
+ },
6581
+ scopedSlots: _vm._u([{
6582
+ key: "description",
6583
+ fn: function () {
6584
+ return [_vm._v("\n Здесь указывается скрипт правила. Скрипт должен быть написан на языке\n javascript\n ")];
6037
6585
  },
6586
+ proxy: true
6587
+ }], null, false, 2031959747)
6588
+ }, [_vm._v(" "), _c('div', {
6589
+ staticClass: "rb-script-input"
6590
+ }, [_c('b-button-toolbar', [_c('b-dropdown', {
6591
+ staticClass: "mx-1",
6592
+ attrs: {
6593
+ "text": "Переменные",
6594
+ "variant": "outline-secondary",
6595
+ "size": "sm"
6596
+ }
6597
+ }, [_c('b-dropdown-item', {
6598
+ on: {
6599
+ "click": function ($event) {
6600
+ return _vm.addVariableToScript('doc');
6601
+ }
6602
+ }
6603
+ }, [_vm._v("\n Документ\n ")]), _vm._v(" "), _c('b-dropdown-item', {
6604
+ on: {
6605
+ "click": function ($event) {
6606
+ return _vm.addVariableToScript('form');
6607
+ }
6608
+ }
6609
+ }, [_vm._v("\n Форма\n ")]), _vm._v(" "), _c('b-dropdown-item', {
6610
+ on: {
6611
+ "click": function ($event) {
6612
+ return _vm.addVariableToScript('event');
6613
+ }
6614
+ }
6615
+ }, [_vm._v("\n Значение события\n ")])], 1), _vm._v(" "), _c('b-dropdown', {
6616
+ staticClass: "mx-1",
6617
+ attrs: {
6618
+ "text": "Задать значение",
6619
+ "variant": "outline-secondary",
6620
+ "size": "sm"
6621
+ }
6622
+ }, _vm._l(_vm.fields, function (f) {
6623
+ return _vm.fields ? _c('b-dropdown-item', {
6624
+ key: f.name,
6038
6625
  on: {
6039
6626
  "click": function ($event) {
6040
- facet.expanded = !facet.expanded;
6627
+ return _vm.addSetVariableToScript(f);
6041
6628
  }
6042
6629
  }
6043
- })], 1), _vm._v(" "), facet.expanded ? _c('b-list-group', [_c('draggable', {
6044
- attrs: {
6045
- "clone": _vm.onFieldCloned,
6046
- "animation": 200,
6047
- "group": {
6048
- name: 'fields',
6049
- pull: 'clone',
6050
- put: false
6051
- },
6052
- "ghost-class": "rb-facet-field-moving"
6053
- },
6630
+ }, [_vm._v("\n " + _vm._s(f.name) + "\n ")]) : _vm._e();
6631
+ }), 1), _vm._v(" "), _c('b-dropdown', {
6632
+ staticClass: "mx-1",
6633
+ attrs: {
6634
+ "text": "Вызвать функцию инпута",
6635
+ "variant": "outline-secondary",
6636
+ "size": "sm"
6637
+ }
6638
+ }, _vm._l(_vm.fields, function (f) {
6639
+ return _vm.fields ? _c('b-dropdown-item', {
6640
+ key: f.name,
6054
6641
  on: {
6055
- "end": function ($event) {
6056
- return _vm.onFieldMoveEnd($event);
6642
+ "click": function ($event) {
6643
+ return _vm.addCallInputFunction(f);
6057
6644
  }
6058
- },
6059
- model: {
6060
- value: facet.fields,
6061
- callback: function ($$v) {
6062
- _vm.$set(facet, "fields", $$v);
6063
- },
6064
- expression: "facet.fields"
6065
6645
  }
6066
- }, _vm._l(facet.fields, function (field) {
6067
- return _c('b-list-group-item', {
6068
- key: field.name,
6069
- staticClass: "cursor-pointer"
6070
- }, [_c('rb-text', [_vm._v(_vm._s(field.labelRu))])], 1);
6071
- }), 1)], 1) : _vm._e()], 1);
6072
- }), 0)], 1);
6646
+ }, [_vm._v("\n " + _vm._s(f.name) + "\n ")]) : _vm._e();
6647
+ }), 1)], 1), _vm._v(" "), _c('b-form-textarea', {
6648
+ attrs: {
6649
+ "state": _vm.state.script,
6650
+ "invalid-feedback": _vm.state.script_feedback,
6651
+ "rows": "8"
6652
+ },
6653
+ model: {
6654
+ value: _vm.innerRule.script,
6655
+ callback: function ($$v) {
6656
+ _vm.$set(_vm.innerRule, "script", $$v);
6657
+ },
6658
+ expression: "innerRule.script"
6659
+ }
6660
+ })], 1)])], 1)], 1)], 1) : _vm._e()], 1), _vm._v(" "), _vm.innerFormConfig ? _c('b-tab', {
6661
+ attrs: {
6662
+ "title": "Протестировать правило"
6663
+ }
6664
+ }, [_c('doc-form', {
6665
+ attrs: {
6666
+ "form-config": _vm.innerFormConfig
6667
+ }
6668
+ })], 1) : _vm._e()], 1)], 1)], 1);
6073
6669
  };
6074
6670
 
6075
6671
  var __vue_staticRenderFns__$3 = [];
@@ -6091,16 +6687,19 @@ const __vue_is_functional_template__$3 = false;
6091
6687
 
6092
6688
  /* style inject shadow dom */
6093
6689
 
6094
- const __vue_component__$5 = /*#__PURE__*/normalizeComponent({
6690
+ const __vue_component__$4 = /*#__PURE__*/normalizeComponent({
6095
6691
  render: __vue_render__$3,
6096
6692
  staticRenderFns: __vue_staticRenderFns__$3
6097
6693
  }, __vue_inject_styles__$3, __vue_script__$3, __vue_scope_id__$3, __vue_is_functional_template__$3, __vue_module_identifier__$3, false, undefined, undefined, undefined);
6098
6694
 
6099
- var DocTemplateFacetList = __vue_component__$5;
6695
+ var FieldRuleFormModal = __vue_component__$4;
6100
6696
 
6101
6697
  //
6102
6698
  var script$2 = {
6103
6699
  name: 'DocTemplateFieldSidebar',
6700
+ components: {
6701
+ FieldRuleFormModal
6702
+ },
6104
6703
  props: {
6105
6704
  value: {
6106
6705
  type: Object,
@@ -6109,28 +6708,43 @@ var script$2 = {
6109
6708
  visible: {
6110
6709
  type: Boolean,
6111
6710
  default: null
6112
- }
6711
+ },
6712
+ formConfig: Object
6113
6713
  },
6114
6714
 
6115
6715
  data() {
6116
6716
  return {
6117
6717
  innerVisible: null,
6118
6718
  field: null,
6119
- currentInputName: null
6719
+ currentInputName: null,
6720
+ modalId: 'rb-field-rule-form-modal',
6721
+ ruleModalCfg: {
6722
+ rule: {},
6723
+ mode: 'ins'
6724
+ },
6725
+ rulesHash: v4()
6120
6726
  };
6121
6727
  },
6122
6728
 
6123
6729
  computed: {
6124
6730
  inputOptions() {
6125
- return this.field ? UtFormConfig.getInputTypes(this.field) : [];
6731
+ return this.field ? UtFormConstructor.getInputTypes(this.field) : [];
6126
6732
  },
6127
6733
 
6128
6734
  iconCloseSidebar() {
6129
- return UtFormConfig.config.icons.iconCloseFieldSidebar;
6735
+ return UtFormConstructor.config.icons.iconCloseFieldSidebar;
6130
6736
  },
6131
6737
 
6132
6738
  iconOpenSidebar() {
6133
- return UtFormConfig.config.icons.iconOpenFieldSidebar;
6739
+ return UtFormConstructor.config.icons.iconOpenFieldSidebar;
6740
+ },
6741
+
6742
+ iconAdd() {
6743
+ return UtFormConstructor.config.icons.iconAdd;
6744
+ },
6745
+
6746
+ rules() {
6747
+ return UtFormConstructor.getAvailableFieldRules(this.field);
6134
6748
  }
6135
6749
 
6136
6750
  },
@@ -6153,7 +6767,7 @@ var script$2 = {
6153
6767
  },
6154
6768
 
6155
6769
  currentInputName() {
6156
- this.field.input = UtFormConfig.getInputTypeByName(this.currentInputName, this.field);
6770
+ this.field.input = UtFormConstructor.getInputTypeByName(this.currentInputName, this.field);
6157
6771
  }
6158
6772
 
6159
6773
  },
@@ -6179,6 +6793,49 @@ var script$2 = {
6179
6793
  } else {
6180
6794
  return {};
6181
6795
  }
6796
+ },
6797
+
6798
+ addRule() {
6799
+ this.ruleModalCfg = {
6800
+ mode: 'ins',
6801
+ rule: {
6802
+ name: null,
6803
+ script: null
6804
+ },
6805
+ onAfterOk: rule => {
6806
+ this.field.rules = this.field.rules ? this.field.rules : [];
6807
+ this.field.rules.push({ ...rule
6808
+ });
6809
+ this.rulesHash = v4();
6810
+ }
6811
+ };
6812
+ this.$bvModal.show(this.modalId);
6813
+ },
6814
+
6815
+ editRule(rule, event) {
6816
+ if (event.target.classList && event.target.classList.contains('rb-remove-rule')) {
6817
+ return;
6818
+ }
6819
+
6820
+ this.ruleModalCfg = {
6821
+ mode: 'upd',
6822
+ rule: { ...rule
6823
+ },
6824
+ onAfterOk: modalRule => {
6825
+ Object.assign(rule, modalRule);
6826
+ }
6827
+ };
6828
+ this.$bvModal.show(this.modalId);
6829
+ },
6830
+
6831
+ removeRule(rule) {
6832
+ let index = this.field.rules.findIndex(r => r.id === rule.id);
6833
+
6834
+ if (index >= 0) {
6835
+ this.field.rules.splice(index, 1);
6836
+ }
6837
+
6838
+ this.rulesHash = v4();
6182
6839
  }
6183
6840
 
6184
6841
  },
@@ -6389,7 +7046,7 @@ var __vue_render__$2 = function () {
6389
7046
  staticClass: "rb-form-section"
6390
7047
  }, [_c('div', {
6391
7048
  staticClass: "rb-title"
6392
- }, [_vm._v("\n Значение по-умолчанию\n ")]), _vm._v(" "), _c('b-form-row', [_c('b-col', {
7049
+ }, [_vm._v("Значение по-умолчанию")]), _vm._v(" "), _c('b-form-row', [_c('b-col', {
6393
7050
  attrs: {
6394
7051
  "lg": "12"
6395
7052
  }
@@ -6407,7 +7064,55 @@ var __vue_render__$2 = function () {
6407
7064
  },
6408
7065
  expression: "field.defaultValue"
6409
7066
  }
6410
- }, 'component', _vm.field.input.propsData, false))], 1)], 1)], 1)], 1) : _vm._e()]) : _vm._e()], 1);
7067
+ }, 'component', _vm.field.input.propsData, false))], 1)], 1)], 1)], 1) : _vm._e(), _vm._v(" "), _c('div', {
7068
+ staticClass: "rb-form-section"
7069
+ }, [_c('div', {
7070
+ staticClass: "rb-title"
7071
+ }, [_vm._v("Правила")]), _vm._v(" "), _c('b-list-group', {
7072
+ attrs: {
7073
+ "data-hash": _vm.rulesHash
7074
+ }
7075
+ }, [_vm._l(_vm.field.rules, function (rule) {
7076
+ return _c('b-list-group-item', {
7077
+ key: rule.id,
7078
+ staticClass: "cursor-pointer d-flex justify-content-between align-items-center",
7079
+ attrs: {
7080
+ "data-hash": _vm.rulesHash
7081
+ },
7082
+ on: {
7083
+ "click": function ($event) {
7084
+ return _vm.editRule(rule, $event);
7085
+ }
7086
+ }
7087
+ }, [_c('rb-text', [_vm._v(_vm._s(rule.name))]), _vm._v(" "), _c('rb-icon', {
7088
+ staticClass: "rb-remove-rule",
7089
+ attrs: {
7090
+ "icon": "icon-close"
7091
+ },
7092
+ on: {
7093
+ "click": function ($event) {
7094
+ return _vm.removeRule(rule);
7095
+ }
7096
+ }
7097
+ })], 1);
7098
+ }), _vm._v(" "), _c('b-list-group-item', {
7099
+ staticClass: "cursor-pointer",
7100
+ on: {
7101
+ "click": _vm.addRule
7102
+ }
7103
+ }, [_c('rb-icon', {
7104
+ attrs: {
7105
+ "icon": _vm.iconAdd
7106
+ }
7107
+ }), _vm._v(" "), _c('rb-text', [_vm._v("Добавить правило ...")])], 1)], 2)], 1)]) : _vm._e(), _vm._v(" "), _c('field-rule-form-modal', {
7108
+ attrs: {
7109
+ "rule": _vm.ruleModalCfg.rule,
7110
+ "form-config": _vm.formConfig,
7111
+ "field": _vm.field,
7112
+ "mode": _vm.ruleModalCfg.mode,
7113
+ "on-after-ok": _vm.ruleModalCfg.onAfterOk
7114
+ }
7115
+ })], 1);
6411
7116
  };
6412
7117
 
6413
7118
  var __vue_staticRenderFns__$2 = [];
@@ -6429,12 +7134,12 @@ const __vue_is_functional_template__$2 = false;
6429
7134
 
6430
7135
  /* style inject shadow dom */
6431
7136
 
6432
- const __vue_component__$4 = /*#__PURE__*/normalizeComponent({
7137
+ const __vue_component__$3 = /*#__PURE__*/normalizeComponent({
6433
7138
  render: __vue_render__$2,
6434
7139
  staticRenderFns: __vue_staticRenderFns__$2
6435
7140
  }, __vue_inject_styles__$2, __vue_script__$2, __vue_scope_id__$2, __vue_is_functional_template__$2, __vue_module_identifier__$2, false, undefined, undefined, undefined);
6436
7141
 
6437
- var DocTemplateFieldSidebar = __vue_component__$4;
7142
+ var DocTemplateFieldSidebar = __vue_component__$3;
6438
7143
 
6439
7144
  //
6440
7145
  var script$1 = {
@@ -6479,24 +7184,28 @@ var script$1 = {
6479
7184
 
6480
7185
  computed: {
6481
7186
  iconAdd() {
6482
- return UtFormConfig.config.icons.iconAdd;
7187
+ return UtFormConstructor.config.icons.iconAdd;
6483
7188
  },
6484
7189
 
6485
7190
  iconEdit() {
6486
- return UtFormConfig.config.icons.iconEdit;
7191
+ return UtFormConstructor.config.icons.iconEdit;
6487
7192
  },
6488
7193
 
6489
7194
  iconDelete() {
6490
- return UtFormConfig.config.icons.iconDelete;
7195
+ return UtFormConstructor.config.icons.iconDelete;
6491
7196
  },
6492
7197
 
6493
7198
  iconDrag() {
6494
- return UtFormConfig.config.icons.iconDrag;
7199
+ return UtFormConstructor.config.icons.iconDrag;
6495
7200
  }
6496
7201
 
6497
7202
  },
6498
7203
  methods: {
6499
- showProperties(field) {
7204
+ showProperties(field, event) {
7205
+ if (event.target.classList && event.target.classList.contains('rb-remove-field')) {
7206
+ return;
7207
+ }
7208
+
6500
7209
  this.sidebarVisible = true;
6501
7210
  this.sidebarField = field;
6502
7211
  },
@@ -6570,12 +7279,7 @@ var script$1 = {
6570
7279
  let index = newIndex != null ? newIndex : -1;
6571
7280
 
6572
7281
  if (index < 0) {
6573
- column.fields.every((f, i) => {
6574
- if (field.name === f.name) {
6575
- index = i;
6576
- return false;
6577
- }
6578
- });
7282
+ index = column.fields.findIndex(f => field.name === f.name);
6579
7283
  }
6580
7284
 
6581
7285
  if (index >= 0) {
@@ -6655,7 +7359,7 @@ var __vue_render__$1 = function () {
6655
7359
  staticClass: "rb-form-constructor flex-fill"
6656
7360
  }, [_c('div', {
6657
7361
  staticClass: "rb-constructor-toolbar d-flex flex-row"
6658
- }, [_c('h4', [_vm._v("Верстка документа")]), _vm._v(" "), _c('div', {
7362
+ }, [_c('h4', [_vm._v("Добавить секцию: ")]), _vm._v(" "), _c('div', {
6659
7363
  staticClass: "rb-layout-buttons"
6660
7364
  }, [_c('b-button', {
6661
7365
  attrs: {
@@ -6667,7 +7371,7 @@ var __vue_render__$1 = function () {
6667
7371
  return _vm.addSection(1);
6668
7372
  }
6669
7373
  }
6670
- }, [_c('rb-text', [_vm._v("1 колонка")]), _vm._v(" "), _c('rb-icon', {
7374
+ }, [_c('rb-text', [_vm._v("Секция с 1 колонкой")]), _vm._v(" "), _c('rb-icon', {
6671
7375
  attrs: {
6672
7376
  "icon": _vm.iconAdd
6673
7377
  }
@@ -6681,7 +7385,7 @@ var __vue_render__$1 = function () {
6681
7385
  return _vm.addSection(2);
6682
7386
  }
6683
7387
  }
6684
- }, [_c('rb-text', [_vm._v("2 колонки")]), _vm._v(" "), _c('rb-icon', {
7388
+ }, [_c('rb-text', [_vm._v("Секция с 2 колонками")]), _vm._v(" "), _c('rb-icon', {
6685
7389
  attrs: {
6686
7390
  "icon": _vm.iconAdd
6687
7391
  }
@@ -6695,7 +7399,7 @@ var __vue_render__$1 = function () {
6695
7399
  return _vm.addSection(3);
6696
7400
  }
6697
7401
  }
6698
- }, [_c('rb-text', [_vm._v("3 колонки")]), _vm._v(" "), _c('rb-icon', {
7402
+ }, [_c('rb-text', [_vm._v("Секция с 3 колонками")]), _vm._v(" "), _c('rb-icon', {
6699
7403
  attrs: {
6700
7404
  "icon": _vm.iconAdd
6701
7405
  }
@@ -6797,7 +7501,7 @@ var __vue_render__$1 = function () {
6797
7501
  staticClass: "cursor-pointer",
6798
7502
  on: {
6799
7503
  "click": function ($event) {
6800
- return _vm.showProperties(field);
7504
+ return _vm.showProperties(field, $event);
6801
7505
  }
6802
7506
  }
6803
7507
  }, [_c('b-col', {
@@ -6817,6 +7521,7 @@ var __vue_render__$1 = function () {
6817
7521
  "icon": _vm.iconDrag
6818
7522
  }
6819
7523
  }), _vm._v(" "), _c('rb-text', [_vm._v(_vm._s(field.labelRu))]), _vm._v(" "), _c('rb-icon', {
7524
+ staticClass: "rb-remove-field",
6820
7525
  attrs: {
6821
7526
  "icon": _vm.iconDelete
6822
7527
  },
@@ -6841,7 +7546,8 @@ var __vue_render__$1 = function () {
6841
7546
  }), 1)]);
6842
7547
  }), 1)], 1), _vm._v(" "), _c('doc-template-field-sidebar', {
6843
7548
  attrs: {
6844
- "visible": _vm.sidebarVisible
7549
+ "visible": _vm.sidebarVisible,
7550
+ "form-config": _vm.formConfig
6845
7551
  },
6846
7552
  on: {
6847
7553
  "hide": function ($event) {
@@ -6883,56 +7589,58 @@ const __vue_is_functional_template__$1 = false;
6883
7589
 
6884
7590
  /* style inject shadow dom */
6885
7591
 
6886
- const __vue_component__$2 = /*#__PURE__*/normalizeComponent({
7592
+ const __vue_component__$1 = /*#__PURE__*/normalizeComponent({
6887
7593
  render: __vue_render__$1,
6888
7594
  staticRenderFns: __vue_staticRenderFns__$1
6889
7595
  }, __vue_inject_styles__$1, __vue_script__$1, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, false, undefined, undefined, undefined);
6890
7596
 
6891
- var __vue_component__$3 = __vue_component__$2;
7597
+ var __vue_component__$2 = __vue_component__$1;
6892
7598
 
6893
- //
6894
- //
6895
- //
6896
- //
6897
- //
6898
- //
6899
- //
6900
- //
6901
- //
6902
- //
6903
- //
6904
- //
6905
- //
6906
- //
6907
- //
6908
- //
6909
- //
6910
- //
6911
- //
6912
- //
6913
- //
6914
- //
6915
- //
6916
- //
6917
7599
  //
6918
7600
  var script = {
6919
7601
  name: 'DocForm',
6920
7602
  props: {
6921
7603
  formConfig: Object,
7604
+ applyDefaultValues: {
7605
+ type: Boolean,
7606
+ default: true
7607
+ },
6922
7608
  doc: {
6923
7609
  type: Object,
6924
7610
  default: () => ({})
7611
+ },
7612
+ validationState: {
7613
+ type: Object,
7614
+ default: () => ({})
7615
+ }
7616
+ },
7617
+ methods: {
7618
+ onEventFired(eventName, event, field) {
7619
+ if (field.rules) {
7620
+ field.rules.forEach(rule => {
7621
+ if (rule.event === eventName && rule.script) {
7622
+ let ruleContext = UtFormConstructor.getRuleContext();
7623
+ ruleContext.form = this;
7624
+ ruleContext.event = event;
7625
+ ruleContext.eventName = eventName;
7626
+ UtFormConstructor.runRule(ruleContext, rule.script);
7627
+ }
7628
+ });
7629
+ }
6925
7630
  }
7631
+
6926
7632
  },
6927
7633
 
6928
7634
  created() {
6929
- this.formConfig.sections.forEach(r => {
6930
- r.columns.forEach(c => {
6931
- c.fields.forEach(f => {
6932
- this.doc[f.name] = f.defaultValue;
7635
+ if (this.applyDefaultValues) {
7636
+ this.formConfig.sections.forEach(r => {
7637
+ r.columns.forEach(c => {
7638
+ c.fields.forEach(f => {
7639
+ this.$set(this.doc, f.name, f.defaultValue == null ? null : f.defaultValue);
7640
+ });
6933
7641
  });
6934
7642
  });
6935
- });
7643
+ }
6936
7644
  }
6937
7645
 
6938
7646
  };
@@ -6959,14 +7667,10 @@ var __vue_render__ = function () {
6959
7667
  }, _vm._l(section.columns, function (column) {
6960
7668
  return _c('div', {
6961
7669
  key: column.index,
6962
- staticClass: "rb-form-column",
6963
- class: {
6964
- 'rb-single-column': section.columnCount === 1
6965
- }
6966
- }, _vm._l(column.fields, function (field) {
6967
- return _c('b-form-row', {
6968
- key: field.name,
6969
- staticClass: "cursor-pointer"
7670
+ staticClass: "rb-form-column"
7671
+ }, [_vm._l(column.fields, function (field) {
7672
+ return [field.visible ? _c('b-form-row', {
7673
+ key: field.name
6970
7674
  }, [_c('b-col', {
6971
7675
  attrs: {
6972
7676
  "lg": "12"
@@ -6978,7 +7682,24 @@ var __vue_render__ = function () {
6978
7682
  "label": field.labelRu
6979
7683
  }
6980
7684
  }, [_c(field.input.type, _vm._b({
7685
+ ref: field.name,
7686
+ refInFor: true,
6981
7687
  tag: "component",
7688
+ attrs: {
7689
+ "disabled": !field.editable,
7690
+ "state": _vm.validationState[field.name]
7691
+ },
7692
+ on: {
7693
+ "input": function ($event) {
7694
+ return _vm.onEventFired('input', $event, field);
7695
+ },
7696
+ "change": function ($event) {
7697
+ return _vm.onEventFired('change', $event, field);
7698
+ },
7699
+ "click": function ($event) {
7700
+ return _vm.onEventFired('click', $event, field);
7701
+ }
7702
+ },
6982
7703
  model: {
6983
7704
  value: _vm.doc[field.name],
6984
7705
  callback: function ($$v) {
@@ -6986,8 +7707,8 @@ var __vue_render__ = function () {
6986
7707
  },
6987
7708
  expression: "doc[field.name]"
6988
7709
  }
6989
- }, 'component', field.input.propsData, false))], 1)], 1)], 1);
6990
- }), 1);
7710
+ }, 'component', field.input.propsData, false))], 1)], 1)], 1) : _vm._e()];
7711
+ })], 2);
6991
7712
  }), 0)]);
6992
7713
  }), 0);
6993
7714
  };
@@ -7016,7 +7737,7 @@ const __vue_component__ = /*#__PURE__*/normalizeComponent({
7016
7737
  staticRenderFns: __vue_staticRenderFns__
7017
7738
  }, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined);
7018
7739
 
7019
- var __vue_component__$1 = __vue_component__;
7740
+ var DocForm = __vue_component__;
7020
7741
 
7021
7742
  /* eslint-disable import/prefer-default-export */
7022
7743
 
@@ -7026,8 +7747,8 @@ var components = /*#__PURE__*/Object.freeze({
7026
7747
  DocTemplateSectionModal: DocTemplateSectionModal,
7027
7748
  DocTemplateFacetList: DocTemplateFacetList,
7028
7749
  DocTemplateFieldSidebar: DocTemplateFieldSidebar,
7029
- DocTemplateConstructor: __vue_component__$3,
7030
- DocForm: __vue_component__$1
7750
+ DocTemplateConstructor: __vue_component__$2,
7751
+ DocForm: DocForm
7031
7752
  });
7032
7753
 
7033
7754
  // Import vue components
@@ -7039,4 +7760,4 @@ const install = function installRbDocumentFormConstructor(Vue) {
7039
7760
  });
7040
7761
  }; // Create module definition for Vue.use()
7041
7762
 
7042
- export { __vue_component__$1 as DocForm, __vue_component__$3 as DocTemplateConstructor, DocTemplateFacetList, DocTemplateFieldSidebar, DocTemplateSectionModal, UtFormConfig, install as default };
7763
+ export { DocForm, __vue_component__$2 as DocTemplateConstructor, DocTemplateFacetList, DocTemplateFieldSidebar, DocTemplateSectionModal, UtFormConfig, install as default };