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