free-fe-core-modules 0.0.1 → 0.0.3

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.
Files changed (109) hide show
  1. package/components/Basic/EIcon.vue +2 -4
  2. package/components/Basic/LeveledMenus.vue +0 -5
  3. package/components/Basic/SummaryHead.vue +10 -3
  4. package/components/Dialog/BasicDialog.vue +10 -77
  5. package/components/Dialog/index.js +44 -34
  6. package/components/Dialog/index2.js +44 -0
  7. package/components/SelectLocales/index.vue +3 -4
  8. package/components/SlidingCarousel/index.vue +0 -1
  9. package/components/SlidingNews/index.vue +0 -1
  10. package/components/StickyButtons/index.vue +2 -2
  11. package/components/ThemeSwitch/index.vue +14 -8
  12. package/composible/useObjectData.js +69 -0
  13. package/free-field/Fields/AgreementCheck.js +170 -0
  14. package/free-field/Fields/ApiCall.js +123 -0
  15. package/{field-components/Fields/Boolean.vue → free-field/Fields/Boolean.js} +40 -46
  16. package/free-field/Fields/Category.js +28 -0
  17. package/free-field/Fields/Check.js +106 -0
  18. package/free-field/Fields/Customize.js +87 -0
  19. package/free-field/Fields/Date.js +133 -0
  20. package/free-field/Fields/DateRange.js +226 -0
  21. package/free-field/Fields/DynamicList.js +565 -0
  22. package/{field-components → free-field}/Fields/File.vue +3 -3
  23. package/{field-components → free-field}/Fields/FileList.vue +4 -4
  24. package/{field-components → free-field}/Fields/FileListCombined.vue +3 -3
  25. package/{field-components → free-field}/Fields/FixedList.vue +78 -83
  26. package/{field-components → free-field}/Fields/Image.vue +2 -2
  27. package/{field-components → free-field}/Fields/ImageList.vue +1 -1
  28. package/{field-components → free-field}/Fields/ImageListCombined.vue +1 -1
  29. package/free-field/Fields/InputFieldList.vue +324 -0
  30. package/{field-components → free-field}/Fields/Labels.vue +24 -15
  31. package/{field-components → free-field}/Fields/MixedTable.vue +53 -61
  32. package/free-field/Fields/Number.js +167 -0
  33. package/free-field/Fields/Password.js +81 -0
  34. package/{field-components → free-field}/Fields/Permission.vue +17 -13
  35. package/{field-components → free-field}/Fields/PermissionEditor.vue +63 -105
  36. package/{field-components → free-field}/Fields/QueryFilters.vue +65 -48
  37. package/{field-components → free-field}/Fields/RadioList.vue +36 -12
  38. package/{field-components → free-field}/Fields/Rich.vue +104 -114
  39. package/{field-components → free-field}/Fields/Search.vue +35 -26
  40. package/{field-components → free-field}/Fields/Select.vue +116 -88
  41. package/{field-components → free-field}/Fields/SelectionChain.vue +89 -67
  42. package/{field-components/Fields/Separator.vue → free-field/Fields/Separator.js} +11 -16
  43. package/{field-components → free-field}/Fields/SingleList.vue +27 -21
  44. package/free-field/Fields/Static.js +27 -0
  45. package/free-field/Fields/String.js +105 -0
  46. package/free-field/Fields/Text.js +80 -0
  47. package/{field-components → free-field}/Fields/Time.vue +59 -43
  48. package/{field-components → free-field}/Fields/TimeRange.vue +107 -92
  49. package/{field-components → free-field}/Fields/UltimateFile.vue +1 -1
  50. package/free-field/Fields/Year.js +137 -0
  51. package/{field-components → free-field}/Fields/YearRange.vue +63 -73
  52. package/{field-components → free-field}/Fields/index.js +16 -18
  53. package/free-field/composible/fieldWrapper.js +221 -0
  54. package/free-field/composible/freeFieldLabel.js +22 -0
  55. package/free-field/composible/readonlyContent.js +36 -0
  56. package/free-field/composible/useFileSizeUtils.js +52 -0
  57. package/free-field/composible/useFreeField.js +143 -0
  58. package/{field-components → free-field}/index.js +3 -3
  59. package/i18n/en-us/index.js +1 -1
  60. package/i18n/zh-cn/index.js +1 -1
  61. package/index.js +4 -22
  62. package/package.json +1 -1
  63. package/router/error/data.js +4 -1
  64. package/view/dict/index.vue +13 -4
  65. package/view/error/list.vue +22 -14
  66. package/view/menu/index.vue +19 -9
  67. package/view/system/index.vue +15 -2
  68. package/components/Dialog/index1.js +0 -49
  69. package/field-components/Fields/AgreementCheck.vue +0 -161
  70. package/field-components/Fields/ApiCall.vue +0 -139
  71. package/field-components/Fields/Category.vue +0 -33
  72. package/field-components/Fields/Check.vue +0 -131
  73. package/field-components/Fields/Customize.vue +0 -103
  74. package/field-components/Fields/Date.vue +0 -142
  75. package/field-components/Fields/DateRange.vue +0 -199
  76. package/field-components/Fields/DynamicList.vue +0 -575
  77. package/field-components/Fields/FieldEditor.vue +0 -379
  78. package/field-components/Fields/InputFieldList.vue +0 -299
  79. package/field-components/Fields/Number.vue +0 -247
  80. package/field-components/Fields/Password.vue +0 -79
  81. package/field-components/Fields/Static.vue +0 -22
  82. package/field-components/Fields/String.vue +0 -185
  83. package/field-components/Fields/Text.vue +0 -89
  84. package/field-components/Fields/Year.vue +0 -124
  85. package/field-components/Fields/components/FieldTypeOptions.vue +0 -248
  86. package/field-components/components/FieldComponents.vue +0 -246
  87. package/free-fields/AutoHide.js +0 -66
  88. package/free-fields/CenterContent.js +0 -15
  89. package/free-fields/Draggable.js +0 -30
  90. package/free-fields/Droppable.js +0 -114
  91. package/free-fields/EditableString.js +0 -63
  92. package/free-fields/FieldCategory.js +0 -83
  93. package/free-fields/FieldTypeSelect.js +0 -94
  94. package/free-fields/fieldEditors/arrayEditor.js +0 -3
  95. package/free-fields/fieldEditors/boolEditor.js +0 -22
  96. package/free-fields/fieldEditors/dateEditor.js +0 -23
  97. package/free-fields/fieldEditors/datetimeEditor.js +0 -23
  98. package/free-fields/fieldEditors/index.js +0 -21
  99. package/free-fields/fieldEditors/jsonEditor.js +0 -371
  100. package/free-fields/fieldEditors/labeledField.js +0 -74
  101. package/free-fields/fieldEditors/numberEditor.js +0 -51
  102. package/free-fields/fieldEditors/objectEditor.js +0 -3
  103. package/free-fields/fieldEditors/selectEditor.js +0 -0
  104. package/free-fields/fieldEditors/stringEditor.js +0 -49
  105. package/free-fields/fieldEditors/textEditor.js +0 -50
  106. package/free-fields/fieldEditors/timeEditor.js +0 -23
  107. package/free-fields/index.js +0 -402
  108. /package/{field-components/Display → free-field/Layout}/index.js +0 -0
  109. /package/{field-components → free-field}/style.sass +0 -0
@@ -0,0 +1,565 @@
1
+ import { ref, defineComponent, getCurrentInstance, h, computed, watchEffect } from 'vue';
2
+ import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
3
+ import { QTable, QTh, QTd, QTr, QIcon } from 'quasar';
4
+ import freeFieldLabel from '../composible/freeFieldLabel';
5
+ import FreeField from '../composible/fieldWrapper';
6
+
7
+ export default defineComponent({
8
+ name: 'InputFieldDynamicList',
9
+ fieldInfo: {
10
+ Category: 'Table',
11
+ Label: '动态列表',
12
+ Value: 'DynamicList',
13
+ demoField: {
14
+ Name: 'demo',
15
+ Label: '动态列表标签',
16
+ Options: {
17
+ Columns: [{
18
+ Label: '第一列',
19
+ List: [{
20
+ Name: 'CA',
21
+ Placeholder: '请填写',
22
+ Type: 'Number',
23
+ Options: { MaxLength: 4 },
24
+ }],
25
+ }, {
26
+ Label: '第二列',
27
+ List: [{
28
+ Name: 'CB',
29
+ Type: 'String',
30
+ }],
31
+ }],
32
+ Default: [{ }],
33
+ },
34
+ },
35
+ demoData: [{
36
+ CA: 'AA',
37
+ CB: 'BB',
38
+ }],
39
+ Extra: [
40
+ {
41
+ Type: 'DynamicList',
42
+ Label: '列',
43
+ Name: 'Options.Columns',
44
+ Options: {
45
+ Columns: [
46
+ {
47
+ Label: 'Label',
48
+ Name: 'Label',
49
+ },
50
+ {
51
+ Label: 'Name',
52
+ Name: 'Name',
53
+ required: true,
54
+ },
55
+ {
56
+ Label: 'Fields',
57
+ Name: 'List',
58
+ Type: 'FieldList',
59
+ Options: {
60
+ Columns: [
61
+ {
62
+ Label: '#',
63
+ Name: 'Index',
64
+ sortable: true,
65
+ },
66
+ {
67
+ Label: '类型',
68
+ Name: 'Type',
69
+ style: 'max-width: 120px;',
70
+ sortable: true,
71
+ },
72
+ {
73
+ Label: '标题',
74
+ Name: 'Label',
75
+ style: 'max-width: 200px;',
76
+ sortable: true,
77
+ },
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ },
83
+ },
84
+ {
85
+ Type: 'DynamicList',
86
+ Label: '默认内容',
87
+ Name: 'Options.Default',
88
+ Options: {
89
+ },
90
+ },
91
+ {
92
+ Type: 'Number',
93
+ Label: '最少行数',
94
+ Name: 'Options.MinRows',
95
+ },
96
+ {
97
+ Type: 'Number',
98
+ Label: '最大行数',
99
+ Name: 'Options.MaxRows',
100
+ },
101
+ {
102
+ Type: 'Boolean',
103
+ Label: '可调整顺序',
104
+ Name: 'Options.Sortable',
105
+ Default: true
106
+ },
107
+ {
108
+ Type: 'Boolean',
109
+ Label: '不可添加',
110
+ Name: 'Options.HideAdd',
111
+ },
112
+ {
113
+ Type: 'Boolean',
114
+ Label: '不可删除',
115
+ Name: 'Options.HideRemove',
116
+ },
117
+ {
118
+ Type: 'String',
119
+ Label: '统计信息模板',
120
+ Name: 'Options.Summary.Pattern',
121
+ },
122
+ {
123
+ Type: 'Number',
124
+ Label: '统计信息保留位数',
125
+ Name: 'Options.Summary.Digits',
126
+ Default: 2,
127
+ },
128
+ {
129
+ Type: 'DynamicList',
130
+ Label: '统计信息字段',
131
+ Name: 'Options.Summary.Fields',
132
+ Options: {
133
+ Columns: [
134
+ {
135
+ Label: '字段',
136
+ Name: 'Field',
137
+ },
138
+ {
139
+ Label: '统计方式',
140
+ Name: 'Way',
141
+ Type: 'Select',
142
+ Options: [
143
+ {
144
+ Label: '计数',
145
+ Value: 'count',
146
+ },
147
+ {
148
+ Label: '合计',
149
+ Value: 'sum',
150
+ },
151
+ ],
152
+ },
153
+ ],
154
+ },
155
+ },
156
+ ],
157
+ Description: '',
158
+ onOptionsChanged: (editor, d, opt) => {
159
+ if (!editor || !d || !opt || !opt.Extra) return;
160
+
161
+ d.Options = d.Options || {};
162
+ const theDefault = opt.Extra.find((ex) => ex.Name === 'Options.Default');
163
+ if (theDefault) {
164
+ //editor.$set(
165
+ // theDefault.Options,
166
+ // 'Columns',
167
+ // d.Options.Columns,
168
+ //);
169
+ theDefault.Options.Columns = d.Options.Columns;
170
+ }
171
+ },
172
+ },
173
+ props: {
174
+ ...freeFieldProps,
175
+ readonly: { type: Boolean, default: false },
176
+ selection: { type: String, default: 'none' },
177
+ },
178
+ emits: ['input', 'add', 'delete'],
179
+ methods: {
180
+ ...useFreeFieldMethods,
181
+ },
182
+ setup(props, { emit, slots, expose }){
183
+ if (!props.Field) {
184
+ return () => null;
185
+ }
186
+
187
+ const { fieldData, setFieldData } = useFreeField(props);
188
+
189
+ const tableData = ref([]);
190
+ const selected = ref([]);
191
+
192
+ const getSizedData = (d) => {
193
+ const dd = [];
194
+ if (d) {
195
+ for (let i = 0; i < d.length; i += 1) {
196
+ const fd = d[i];
197
+
198
+ dd[i] = fd;
199
+ if (fd.rowSize !== void 0) {
200
+ Object.keys(dd[i]).forEach((ddk) => {
201
+ if (Number(ddk) && Number(ddk) > fd.rowSize) {
202
+ delete dd[i][ddk];
203
+ }
204
+ });
205
+ }
206
+ }
207
+
208
+ if (props.Field.Options?.MinRows) {
209
+ for (let i = d.length; i < props.Field.Options?.MinRows; i += 1) {
210
+ dd.push({});
211
+ }
212
+ }
213
+ }
214
+
215
+ if (props.Field.Options?.MaxRows) dd.splice(props.Field.Options?.MaxRows);
216
+
217
+ return dd;
218
+ };
219
+
220
+ watchEffect(() => {
221
+ tableData.value = getSizedData(fieldData.value);
222
+ });
223
+
224
+ watchEffect(() => {
225
+ if (tableData.value?.length) {
226
+ for (let i = 0; i < tableData.value.length; i += 1) {
227
+ const td = tableData.value[i];
228
+
229
+ td.auto__index = i;
230
+ }
231
+ }
232
+ });
233
+
234
+ const before = (props.Field.Label !== void 0) ? h(freeFieldLabel, {
235
+ Field: props.Field,
236
+ }) : undefined;
237
+
238
+ const showAddBtn = computed(() => {
239
+ if (props.Field.Options?.MaxRows
240
+ && (props.tableData || []).length >= props.Field.Options?.MaxRows) {
241
+ return false;
242
+ }
243
+
244
+ if (props.Field.Options?.HideAdd) return false;
245
+
246
+ return true;
247
+ });
248
+
249
+ const showCell = (p) => {
250
+ const colNum = Number(p.col.name);
251
+
252
+ // eslint-disable-next-line no-restricted-globals
253
+ if (isNaN(colNum)) return true;
254
+
255
+ if (p.row.rowSize !== void 0) {
256
+ return colNum < p.row.rowSize && !!p.row[colNum];
257
+ }
258
+ return !!p.row[colNum];
259
+ };;
260
+
261
+ const columns = computed(() => {
262
+ if (!props.Field.Options?.Columns) {
263
+ return [];
264
+ }
265
+
266
+ let cls = [];
267
+ for (let i = 0; i < props.Field.Options?.Columns?.length; i += 1) {
268
+ const c = props.Field.Options.Columns[i];
269
+
270
+ const newC = { ...c };
271
+ newC.name = c.Name;
272
+ newC.label = c.Label;
273
+ newC.field = c.Name;
274
+ newC.required = c.required;
275
+ newC.align = c.align || 'center';
276
+ newC.sortable = c.sortable;
277
+ newC.sort = c.sort;
278
+ newC.format = c.format;
279
+ newC.style = c.style;
280
+ newC.classes = c.classes;
281
+ newC.headerStyle = c.headerStyle;
282
+ newC.headerClasses = c.headerClasses;
283
+
284
+ delete newC.Name;
285
+ delete newC.Label;
286
+
287
+ newC.ReadOnly = props.readonly || c.ReadOnly;
288
+
289
+ // sort list
290
+ if (newC.List && newC.List.length > 1) {
291
+ newC.List = (newC.List || []).sort((a, b) => a.Index - b.Index);
292
+ }
293
+
294
+ cls.push(newC);
295
+ }
296
+
297
+ if(props.Field.Options?.Sortable && cls.findIndex(cl => cl.name === 'index') < 0) {
298
+ cls = [
299
+ {
300
+ name: 'index',
301
+ label: '#',
302
+ // field : 'index',
303
+ required : true,
304
+ align : 'center',
305
+ sortable : true,
306
+ classes : 'index',
307
+ List: [{
308
+ Name: 'index',
309
+ Type: 'Number',
310
+ required : true,
311
+ Placeholder: '请填写',
312
+ }]
313
+ },
314
+ ...cls];
315
+ }
316
+
317
+ return cls.concat(
318
+ props.Field.ReadOnly
319
+ ? []
320
+ : [
321
+ {
322
+ name: 'listActions',
323
+ align: 'center',
324
+ },
325
+ ],
326
+ );
327
+ });
328
+
329
+ const columnField = (col, withLabel = false, pCol) => {
330
+ const field = { ...(col.List ? col.List[0] : col) };
331
+ field.Name = field.Name || field.name || field.field;
332
+
333
+ if (withLabel) {
334
+ field.Name = `${(pCol && pCol.field) ? `${pCol.field}.` : ''}${field.Name}`;
335
+ } else {
336
+ delete field.label;
337
+ delete field.Label;
338
+ }
339
+
340
+ delete field.field;
341
+
342
+ field.ReadOnly = props.Field.ReadOnly || field.ReadOnly;
343
+
344
+ return field;
345
+ };
346
+
347
+ const summaryContent = computed(() => {
348
+ if (
349
+ !tableData.value
350
+ || !props.Field.Options?.Summary?.Pattern
351
+ ) {
352
+ return '';
353
+ }
354
+ let summaryText = props.Field.Options?.Summary?.Pattern;
355
+
356
+ for (let i = 0; i < props.Field.Options?.Summary?.Fields?.length; i += 1) {
357
+ const sf = props.Field.Options?.Summary?.Fields[i];
358
+ const fdList = tableData.value.filter((fd) => !!fd[sf.Field]);
359
+ let vi = 0;
360
+
361
+ switch (sf.Way) {
362
+ case 'count':
363
+ vi = tableData.value.filter((fd) => !!fd[sf.Field]).length;
364
+ break;
365
+ case 'sum':
366
+ if (fdList) {
367
+ fdList.forEach((fdv) => {
368
+ vi += Number(fdv[sf.Field]) || 0;
369
+ });
370
+ }
371
+ break;
372
+ default:
373
+ break;
374
+ }
375
+
376
+ // round vi
377
+ vi = vi.toFixed(
378
+ props.Field.Options?.Summary?.Digits || 2,
379
+ );
380
+
381
+ summaryText = summaryText.replace(`$\{${i + 1}}`, vi);
382
+ }
383
+ return summaryText;
384
+ })
385
+
386
+ const cellChanged = () => {
387
+ setFieldData(tableData.value, emit);
388
+ }
389
+
390
+ const addRow = (r) => {
391
+ if (props.Field.Options?.EmitEvent) {
392
+ emit('add');
393
+ return;
394
+ }
395
+
396
+ tableData.value = tableData.value || [];
397
+ if (props.Field.Options?.MaxRows
398
+ && tableData.value.length >= props.Field.Options?.MaxRows) {
399
+ return;
400
+ }
401
+
402
+ tableData.value.push(r || {});
403
+ cellChanged();
404
+ };
405
+
406
+ const deleteRow = (p) => {
407
+ if (props.Field.Options?.EmitEvent) {
408
+ emit('delete', p.row);
409
+ return;
410
+ }
411
+
412
+ tableData.value = tableData.value || [];
413
+ if (props.Field.Options?.MinRows
414
+ && tableData.value.length <= props.Field.Options?.MinRows) {
415
+ return;
416
+ }
417
+
418
+ const removedIndex = tableData.value.findIndex(
419
+ (td) => td.auto__index === p.row.auto__index,
420
+ );
421
+ if (removedIndex >= 0) {
422
+ tableData.value.splice(removedIndex, 1);
423
+ cellChanged();
424
+ }
425
+ };
426
+
427
+ expose({
428
+ selected,
429
+ addRow,
430
+ deleteRow,
431
+ })
432
+
433
+ watchEffect(() => {
434
+ tableData.value = getSizedData(fieldData.value);
435
+ });
436
+
437
+
438
+ const top = () => [slots.warning && slots.warning(), slots.top && slots.top()];
439
+ const headerCellListActions = (slotProps) => h(QTh, {
440
+ props: slotProps,
441
+ style: 'width: 48px',
442
+ },
443
+ {
444
+ default: () => slots['header-actions'] ? slots['header-actions'](slotProps) :
445
+ (showAddBtn.value && h(QIcon,
446
+ {
447
+ name: 'add',
448
+ class: 'cursor-pointer',
449
+ clickable: true,
450
+ onClick: () => {
451
+ addRow();
452
+ },
453
+ }
454
+ ))
455
+ }
456
+ );
457
+
458
+ const bodyCell = (slotProps) => {
459
+ if (slotProps.col.name === "listActions") {
460
+ return h(QTd, null, {
461
+ default: () =>
462
+ slots["body-actions"]
463
+ ? slots["body-actions"](slotProps)
464
+ : !props.Field.Options?.HideRemove &&
465
+ h(QIcon, {
466
+ name: "delete",
467
+ class: "cursor-pointer full-width text-center",
468
+ clickable: true,
469
+ onClick: () => {
470
+ deleteRow(slotProps);
471
+ },
472
+ }),
473
+ });
474
+ } else if (showCell(slotProps)) {
475
+ return h(
476
+ QTd,
477
+ {
478
+ props: slotProps,
479
+ colspan: slotProps.value ? slotProps.value.colspan || "1" : "1",
480
+ rowspan: slotProps.value ? slotProps.value.rowspan || "1" : "1",
481
+ class: "items-center justify-center",
482
+ },
483
+ {
484
+ default: () =>
485
+ slotProps.col.List?.length > 1
486
+ ? h(
487
+ "span",
488
+ {
489
+ class: "full-height full-width abcClass",
490
+ },
491
+ slotProps.col.List.map((col) =>
492
+ h(FreeField, {
493
+ Field: columnField(col, true, slotProps.col),
494
+ values: slotProps.row,
495
+ style: "margin: 4px auto",
496
+ onInput: cellChanged,
497
+ })
498
+ )
499
+ )
500
+ : h(
501
+ "span",
502
+ {
503
+ class: "full-height full-width defClass",
504
+ },
505
+ [
506
+ h(FreeField, {
507
+ Field: columnField(slotProps.col),
508
+ values: slotProps.row,
509
+ borderless: true,
510
+ onInput: cellChanged,
511
+ }),
512
+ ]
513
+ ),
514
+ }
515
+ );
516
+ }
517
+ };
518
+
519
+ const bottom = () => h(QTr, {
520
+ class: 'summary-tr',
521
+ },[h(QTd, {
522
+ colspan: '100%',
523
+ class: 'text-right summary-td'
524
+ }, [summaryContent.value])]);
525
+
526
+ const tableNode = () => h(QTable,
527
+ {
528
+ flat: true,
529
+ bordered: true,
530
+ class:"q-ma-xs col",
531
+ style: props.Field.Info?.Style,
532
+ 'hide-bottom':!summaryContent.value,
533
+ separator: 'cell',
534
+ pagination: {rowsPerPage:100000},
535
+ ripple: false,
536
+
537
+ rules: props.Field.Rules,
538
+ 'row-key':"auto__index",
539
+
540
+ rows: tableData.value,
541
+ columns: columns.value,
542
+ selection: props.selection,
543
+ selected: selected.value,
544
+ 'onUpdate:selected': (v) => {
545
+ selected.value = v;
546
+ emit('input', v);
547
+ },
548
+ },
549
+ {
550
+ top: (props.Field.Warning || props.Field.showTop) && top,
551
+ 'header-cell-listActions': headerCellListActions,
552
+ 'body-cell': bodyCell,
553
+ bottom,
554
+ }
555
+ );
556
+
557
+
558
+ return () => h('div', {
559
+ class: 'input-field-dynamic-list row',
560
+ }, [
561
+ before,
562
+ tableNode(),
563
+ ]);
564
+ },
565
+ });
@@ -3,7 +3,7 @@
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
- v-if="typeof Field.Label !== 'undefined'"
6
+ v-if="Field.Label !== void 0"
7
7
  >
8
8
  <q-tooltip
9
9
  v-if="Field.Description"
@@ -45,7 +45,7 @@
45
45
  <a
46
46
  class="ellipsis"
47
47
  target="_blank"
48
- :href="runFilter('serverPath',file.id)"
48
+ :href="$filter('serverPath',file.id)"
49
49
  :download="file.name"
50
50
  >
51
51
  {{ file.name }}
@@ -135,7 +135,7 @@
135
135
  <a
136
136
  v-if="file && file.id"
137
137
  target="_blank"
138
- :href="runFilter('serverPath',file.id)"
138
+ :href="$filter('serverPath',file.id)"
139
139
  :download="file.name">
140
140
  {{ file.name }}
141
141
  </a>
@@ -3,7 +3,7 @@
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
- v-if="typeof Field.Label !== 'undefined'"
6
+ v-if="Field.Label !== void 0"
7
7
  >
8
8
  <q-tooltip
9
9
  v-if="Field.Description"
@@ -46,7 +46,7 @@
46
46
  <a
47
47
  class="ellipsis"
48
48
  target="_blank"
49
- :href="runFilter('serverPath',file.id)"
49
+ :href="$filter('serverPath',file.id)"
50
50
  :download="file.name"
51
51
  >
52
52
  {{ file.name }}
@@ -109,7 +109,7 @@
109
109
  <span class="file-name full-width ellipsis">
110
110
  <a
111
111
  target="_blank"
112
- :href="runFilter('serverPath',file.id)"
112
+ :href="$filter('serverPath',file.id)"
113
113
  :download="file.name">
114
114
  {{ file.name }}
115
115
  </a>
@@ -160,7 +160,7 @@
160
160
  <span class="file-name full-width ellipsis">
161
161
  <a
162
162
  target="_blank"
163
- :href="runFilter('serverPath',file.id)"
163
+ :href="$filter('serverPath',file.id)"
164
164
  :download="file.name">
165
165
  {{ file.name }}
166
166
  </a>
@@ -3,7 +3,7 @@
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
- v-if="typeof Field.Label !== 'undefined'"
6
+ v-if="Field.Label !== void 0"
7
7
  >
8
8
  <q-tooltip
9
9
  v-if="Field.Description"
@@ -30,7 +30,7 @@
30
30
  <span class="file-name full-width ellipsis">
31
31
  <a
32
32
  target="_blank"
33
- :href="runFilter('serverPath',file.id)"
33
+ :href="$filter('serverPath',file.id)"
34
34
  :download="file.name">
35
35
  {{ file.name }}
36
36
  </a>
@@ -71,7 +71,7 @@
71
71
  <span class="file-name full-width ellipsis">
72
72
  <a
73
73
  target="_blank"
74
- :href="runFilter('serverPath',file.id)"
74
+ :href="$filter('serverPath',file.id)"
75
75
  :download="file.name">
76
76
  {{ file.name }}
77
77
  </a>