free-fe-core-modules 0.0.2 → 0.0.4

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 +23 -3
  4. package/components/Dialog/BasicDialog.vue +2 -3
  5. package/components/SlidingCarousel/index.vue +13 -3
  6. package/components/SlidingNews/index.vue +13 -3
  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/FixedList.vue +78 -83
  19. package/free-field/Fields/InputFieldList.vue +324 -0
  20. package/{field-components → free-field}/Fields/Labels.vue +24 -15
  21. package/{field-components → free-field}/Fields/MixedTable.vue +53 -61
  22. package/free-field/Fields/Number.js +167 -0
  23. package/free-field/Fields/Password.js +81 -0
  24. package/{field-components → free-field}/Fields/Permission.vue +17 -13
  25. package/{field-components → free-field}/Fields/PermissionEditor.vue +62 -105
  26. package/{field-components → free-field}/Fields/QueryFilters.vue +65 -48
  27. package/{field-components → free-field}/Fields/RadioList.vue +36 -12
  28. package/{field-components → free-field}/Fields/Rich.vue +104 -114
  29. package/{field-components → free-field}/Fields/Search.vue +35 -26
  30. package/{field-components → free-field}/Fields/Select.vue +116 -87
  31. package/{field-components → free-field}/Fields/SelectionChain.vue +89 -67
  32. package/{field-components/Fields/Separator.vue → free-field/Fields/Separator.js} +11 -16
  33. package/{field-components → free-field}/Fields/SingleList.vue +27 -21
  34. package/free-field/Fields/Static.js +27 -0
  35. package/free-field/Fields/String.js +105 -0
  36. package/free-field/Fields/Text.js +80 -0
  37. package/{field-components → free-field}/Fields/Time.vue +59 -43
  38. package/{field-components → free-field}/Fields/TimeRange.vue +107 -92
  39. package/free-field/Fields/Year.js +137 -0
  40. package/{field-components → free-field}/Fields/YearRange.vue +63 -73
  41. package/{field-components → free-field}/Fields/index.js +28 -30
  42. package/free-field/composible/fieldWrapper.js +221 -0
  43. package/free-field/composible/freeFieldLabel.js +22 -0
  44. package/free-field/composible/readonlyContent.js +36 -0
  45. package/free-field/composible/useFileSizeUtils.js +52 -0
  46. package/free-field/composible/useFreeField.js +143 -0
  47. package/{field-components → free-field}/index.js +3 -3
  48. package/i18n/en-us/index.js +1 -1
  49. package/i18n/zh-cn/index.js +1 -1
  50. package/index.js +1 -4
  51. package/package.json +2 -2
  52. package/router/error/data.js +4 -1
  53. package/view/dict/index.vue +13 -2
  54. package/view/error/list.vue +22 -14
  55. package/view/menu/index.vue +19 -4
  56. package/view/system/index.vue +15 -2
  57. package/field-components/Fields/AgreementCheck.vue +0 -161
  58. package/field-components/Fields/ApiCall.vue +0 -139
  59. package/field-components/Fields/Category.vue +0 -33
  60. package/field-components/Fields/Check.vue +0 -131
  61. package/field-components/Fields/Customize.vue +0 -103
  62. package/field-components/Fields/Date.vue +0 -142
  63. package/field-components/Fields/DateRange.vue +0 -199
  64. package/field-components/Fields/DynamicList.vue +0 -575
  65. package/field-components/Fields/FieldEditor.vue +0 -379
  66. package/field-components/Fields/File.vue +0 -382
  67. package/field-components/Fields/FileList.vue +0 -405
  68. package/field-components/Fields/FileListCombined.vue +0 -142
  69. package/field-components/Fields/Image.vue +0 -328
  70. package/field-components/Fields/ImageList.vue +0 -285
  71. package/field-components/Fields/ImageListCombined.vue +0 -76
  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/UltimateFile.vue +0 -100
  79. package/field-components/Fields/Year.vue +0 -124
  80. package/field-components/Fields/components/FieldTypeOptions.vue +0 -248
  81. package/field-components/components/FieldComponents.vue +0 -246
  82. package/free-fields/AutoHide.js +0 -66
  83. package/free-fields/CenterContent.js +0 -15
  84. package/free-fields/Draggable.js +0 -30
  85. package/free-fields/Droppable.js +0 -114
  86. package/free-fields/EditableString.js +0 -63
  87. package/free-fields/FieldCategory.js +0 -83
  88. package/free-fields/FieldTypeSelect.js +0 -94
  89. package/free-fields/fieldEditors/arrayEditor.js +0 -3
  90. package/free-fields/fieldEditors/boolEditor.js +0 -22
  91. package/free-fields/fieldEditors/dateEditor.js +0 -23
  92. package/free-fields/fieldEditors/datetimeEditor.js +0 -23
  93. package/free-fields/fieldEditors/index.js +0 -21
  94. package/free-fields/fieldEditors/jsonEditor.js +0 -371
  95. package/free-fields/fieldEditors/labeledField.js +0 -74
  96. package/free-fields/fieldEditors/numberEditor.js +0 -51
  97. package/free-fields/fieldEditors/objectEditor.js +0 -3
  98. package/free-fields/fieldEditors/selectEditor.js +0 -0
  99. package/free-fields/fieldEditors/stringEditor.js +0 -49
  100. package/free-fields/fieldEditors/textEditor.js +0 -50
  101. package/free-fields/fieldEditors/timeEditor.js +0 -23
  102. package/free-fields/index.js +0 -402
  103. /package/{field-components/Display → free-field/Layout}/index.js +0 -0
  104. /package/{field-components → free-field}/style.sass +0 -0
@@ -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 v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
9
9
  {{Field.Label || ''}}
@@ -72,12 +72,11 @@
72
72
  </template>
73
73
 
74
74
  <script>
75
- import { defineComponent } from 'vue';
76
- import mixins from 'free-fe-mixins';
75
+ import { defineComponent, watchEffect, ref, computed } from 'vue';
76
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
77
77
 
78
78
  export default defineComponent({
79
79
  name: 'InputFieldFixedList',
80
- mixins: [mixins.InputFieldMixin],
81
80
  emits:['input'],
82
81
  fieldInfo: {
83
82
  Category: 'Table',
@@ -203,35 +202,55 @@ export default defineComponent({
203
202
  }
204
203
  },
205
204
  },
206
- data() {
207
- return {
208
- tableData: [],
209
- };
205
+ props: {
206
+ ...freeFieldProps,
210
207
  },
211
- computed: {
212
- tableTdClass() {
213
- return (index) => (((index || 0) % 2) ? 'col-zebra-even' : 'col-zebra-odd');
214
- },
215
- showCell() {
216
- return (p) => {
208
+ setup(props, { emit }) {
209
+ if (!props.Field) return {};
210
+
211
+ const { fieldData, setFieldData } = useFreeField(props);
212
+ const tableData = ref(props.Field.Options?.Default || []);
213
+
214
+ watchEffect(() => {
215
+ if (fieldData.value) {
216
+ const dd = [];
217
+ for (let i = 0; i < fieldData.value.length; i += 1) {
218
+ const fd = fieldData.value[i];
219
+
220
+ dd[i] = fd;
221
+ if (fd.rowSize !== void 0) {
222
+ Object.keys(dd[i]).forEach((ddk) => {
223
+ if (Number(ddk) && Number(ddk) > fd.rowSize) {
224
+ delete dd[i][ddk];
225
+ }
226
+ });
227
+ }
228
+ }
229
+
230
+ tableData.value = dd;
231
+ }
232
+ })
233
+
234
+ const tableTdClass = (index) => (((index || 0) % 2) ? 'col-zebra-even' : 'col-zebra-odd');
235
+ const showCell = (p) => {
217
236
  const colNum = Number(p.col.name);
218
237
 
219
238
  // eslint-disable-next-line no-restricted-globals
220
239
  if (isNaN(colNum)) return true;
221
240
 
222
- if (typeof p.row.rowSize !== 'undefined') {
241
+ if (p.row.rowSize !== void 0) {
223
242
  return colNum < p.row.rowSize && !!p.row[colNum];
224
243
  }
225
244
  return !!p.row[colNum];
226
- };
227
- },
228
- columns() {
229
- if (!this.Field || !this.Field.Options || !this.Field.Options.Columns) {
245
+ };
246
+
247
+ const columns = computed(() => {
248
+ if (!props.Field.Options?.Columns) {
230
249
  return [];
231
250
  }
232
251
 
233
252
  const cls = [];
234
- this.Field.Options.Columns.forEach((c) => {
253
+ props.Field.Options.Columns.forEach((c) => {
235
254
  const newC = { ...c };
236
255
  newC.name = c.Name;
237
256
  newC.label = c.Label;
@@ -258,46 +277,43 @@ export default defineComponent({
258
277
  });
259
278
 
260
279
  return cls;
261
- },
262
- columnField() {
263
- return (col, withLabel = false, pCol) => {
264
- const field = { ...(col.List ? col.List[0] : col) };
265
- field.Name = field.Name || field.name || field.field;
280
+ });
266
281
 
267
- if (withLabel) {
268
- field.Name = `${(pCol && pCol.field) ? `${pCol.field}.` : ''}${field.Name}`;
269
- } else {
270
- delete field.Label;
271
- delete field.label;
272
- }
282
+ const columnField = (col, withLabel = false, pCol) => {
283
+ const field = { ...(col.List ? col.List[0] : col) };
284
+ field.Name = field.Name || field.name || field.field;
273
285
 
274
- delete field.field;
286
+ if (withLabel) {
287
+ field.Name = `${(pCol && pCol.field) ? `${pCol.field}.` : ''}${field.Name}`;
288
+ } else {
289
+ delete field.Label;
290
+ delete field.label;
291
+ }
275
292
 
276
- field.ReadOnly = this.Field.ReadOnly || field.ReadOnly;
293
+ delete field.field;
277
294
 
278
- return field;
279
- };
280
- },
281
- summaryContent() {
295
+ field.ReadOnly = props.Field.ReadOnly || field.ReadOnly;
296
+
297
+ return field;
298
+ };
299
+
300
+ const summaryContent = computed(() => {
282
301
  if (
283
- !this.tableData
284
- || !this.Field
285
- || !this.Field.Options
286
- || !this.Field.Options.Summary
287
- || !this.Field.Options.Summary.Pattern
302
+ !tableData.value
303
+ || !props.Field.Options?.Summary?.Pattern
288
304
  ) {
289
305
  return '';
290
306
  }
291
- let summaryText = this.Field.Options.Summary.Pattern;
307
+ let summaryText = props.Field.Options.Summary.Pattern;
292
308
 
293
- for (let i = 0; i < this.Field.Options.Summary.Fields.length; i += 1) {
294
- const sf = this.Field.Options.Summary.Fields[i];
295
- const fdList = this.tableData.filter((fd) => !!fd[sf.Field]);
309
+ for (let i = 0; i < props.Field.Options.Summary.Fields.length; i += 1) {
310
+ const sf = props.Field.Options.Summary.Fields[i];
311
+ const fdList = tableData.value.filter((fd) => !!fd[sf.Field]);
296
312
  let vi = 0;
297
313
 
298
314
  switch (sf.Way) {
299
315
  case 'count':
300
- vi = this.tableData.filter((fd) => !!fd[sf.Field]).length;
316
+ vi = tableData.value.filter((fd) => !!fd[sf.Field]).length;
301
317
  break;
302
318
  case 'sum':
303
319
  if (fdList) {
@@ -312,50 +328,29 @@ export default defineComponent({
312
328
 
313
329
  // round vi
314
330
  vi = vi.toFixed(
315
- (this.Field
316
- && this.Field.Options
317
- && this.Field.Options.Summary
318
- && this.Field.Options.Summary.Digits)
331
+ (this.Field.Options?.Summary?.Digits)
319
332
  || 2,
320
333
  );
321
334
 
322
335
  summaryText = summaryText.replace(`$\{${i + 1}}`, vi);
323
336
  }
324
337
  return summaryText;
325
- },
326
- },
327
- watch: {
328
- fieldData() {
329
- if (this.fieldData) {
330
- this.tableData = this.fieldData;
331
- const dd = [];
332
- for (let i = 0; i < this.fieldData.length; i += 1) {
333
- const fd = this.fieldData[i];
338
+ });
334
339
 
335
- dd[i] = fd;
336
- if (typeof fd.rowSize !== 'undefined') {
337
- Object.keys(dd[i]).forEach((ddk) => {
338
- if (Number(ddk) && Number(ddk) > fd.rowSize) {
339
- delete dd[i][ddk];
340
- }
341
- });
342
- }
343
- }
340
+ const cellChanged = () => {
341
+ setFieldData(tableData.value, emit);
342
+ };
344
343
 
345
- this.tableData = dd;
346
- }
347
- },
348
- },
349
- created() {
350
- if (!this.fieldData && this.Field.Options) {
351
- this.tableData = this.Field.Options.Default || [];
352
- }
353
- },
354
- methods: {
355
- cellChanged() {
356
- this.fieldData = this.tableData;
357
- this.$emit('input');
358
- },
344
+ return {
345
+ fieldData,
346
+ tableData,
347
+ tableTdClass,
348
+ showCell,
349
+ columns,
350
+ columnField,
351
+ summaryContent,
352
+ cellChanged,
353
+ };
359
354
  },
360
355
  });
361
356
  </script>
@@ -0,0 +1,324 @@
1
+ <template>
2
+ <div class="input-field-list">
3
+ <dynamic-list
4
+ :Field="localField"
5
+ :values="values"
6
+ readonly
7
+ ref="fieldList"
8
+ selection="multiple"
9
+ >
10
+ <template v-slot:top>
11
+ <q-btn-group class="action-buttons">
12
+ <q-btn
13
+ icon="content_copy"
14
+ @click="copy"
15
+ >
16
+ <q-tooltip>拷贝选中</q-tooltip>
17
+ </q-btn>
18
+ <q-btn
19
+ icon="content_paste"
20
+ @click="paste"
21
+ >
22
+ <q-tooltip>粘贴</q-tooltip>
23
+ </q-btn>
24
+ <q-btn
25
+ icon="update"
26
+ @click="batch"
27
+ v-if="fieldListLength > 1"
28
+ >
29
+ <q-tooltip>批量修改</q-tooltip>
30
+ </q-btn>
31
+ </q-btn-group>
32
+ </template>
33
+ <template v-slot:header-actions>
34
+ <q-btn
35
+ flat
36
+ round
37
+ icon="add"
38
+ @click="addField"
39
+ ></q-btn>
40
+ </template>
41
+ <template v-slot:body-actions="props">
42
+ <q-btn
43
+ flat
44
+ round
45
+ icon="edit"
46
+ @click="editField(props.row)"
47
+ ></q-btn>
48
+ <q-btn
49
+ flat
50
+ round
51
+ icon="delete"
52
+ @click="deleteField(props)"
53
+ ></q-btn>
54
+ </template>
55
+ <template v-slot:warning>
56
+ <slot name="warning"></slot>
57
+ </template>
58
+ </dynamic-list>
59
+
60
+ <free-field
61
+ :Field="editingFieldField"
62
+ :values="editingField"
63
+ @cancel="editorCancelled"
64
+ @save="saveField"
65
+ @input="editorInput"
66
+ @update:field="editingFieldChanged"
67
+ ></free-field>
68
+ </div>
69
+ </template>
70
+
71
+ <script>
72
+ import { defineComponent, ref, unref, computed, watchEffect } from 'vue';
73
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
74
+ import DynamicList from './DynamicList';
75
+
76
+ const clipBoardStore = {
77
+ content: '',
78
+ items: [],
79
+ };
80
+
81
+ export default defineComponent({
82
+ name: 'InputFieldList',
83
+ emits:['save', 'delete', 'cancel','paste:fields', 'batch:fields'],
84
+ fieldInfo: {
85
+ Category: 'Advanced',
86
+ Label: '字段列表',
87
+ Value: 'FieldList',
88
+ Description: '',
89
+ },
90
+ props: {
91
+ ...freeFieldProps,
92
+ },
93
+ components: {
94
+ DynamicList,
95
+ },
96
+ setup(props, { emit }) {
97
+ if (!props.Field) return {};
98
+
99
+ const { fieldData, getFieldData, setData } = useFreeField(props);
100
+
101
+ const showEditor = ref(false);
102
+ const editingField = ref({});
103
+ const changedFields = ref([]);
104
+ const fieldList = ref(null);
105
+
106
+ const editingFieldField = ref(undefined);
107
+
108
+ watchEffect(() => {
109
+ editingFieldField.value = {
110
+ Type: 'FieldEditor',
111
+ Name: '.',
112
+ show: showEditor.value,
113
+ };
114
+ });
115
+
116
+ const localField = computed(() => ({
117
+ Type: 'DynamicList',
118
+ showTop: true,
119
+ Name: props.Field.Name || 'Fields',
120
+ Options: {
121
+ Columns:
122
+ props.Field.Options?.Columns
123
+ || [
124
+ {
125
+ Label: '#',
126
+ Name: 'Index',
127
+ sortable: true,
128
+ style: 'max-width: 100px;',
129
+ },
130
+ // {
131
+ // Label: '日期',
132
+ // Name: 'LastUpdateDate',
133
+ // style: 'max-width: 160px;',
134
+ // sortable: true,
135
+ // Options: {
136
+ // Filters: 'normalDate',
137
+ // },
138
+ // },
139
+ {
140
+ Label: '名称',
141
+ Name: 'Name',
142
+ style: 'max-width: 300px; overflow: hidden',
143
+ sortable: true,
144
+ },
145
+ {
146
+ Label: '标题',
147
+ Name: 'Label',
148
+ style: 'max-width: 300px; min-width: 100px',
149
+ sortable: true,
150
+ },
151
+ {
152
+ Label: '类型',
153
+ Name: 'Type',
154
+ style: 'max-width: 200px; min-width: 100px',
155
+ sortable: true,
156
+ },
157
+ ],
158
+ },
159
+ }));
160
+
161
+
162
+ const addField = () => {
163
+ let newIndex = 1;
164
+
165
+ const fData = props.Field.Name ? fieldData.value : getFieldData('Fields');
166
+
167
+ if (fData?.length) {
168
+ newIndex = fData.map((fd) => fd.Index).sort((a,b) => a.Index-b.Index).filter((fd) => !!fd).pop();
169
+ newIndex = (newIndex || 0) + 1;
170
+ }
171
+
172
+ editingField.value = {
173
+ Index: newIndex,
174
+ };
175
+
176
+ showEditor.value = true;
177
+ };
178
+ const saveField = () => {
179
+ if (!editingField.value) return;
180
+ const theField = { ...editingField.value };
181
+
182
+ if (theField.isBatchEditing) {
183
+ if (fieldList.value.selected.length > 0) {
184
+ const items = [];
185
+ for (let i = 0; i < fieldList.value.selected.length; i += 1) {
186
+ const item = fieldList.value.selected[i];
187
+
188
+ if (item && item.id) {
189
+ items.push(item.id);
190
+ }
191
+ }
192
+
193
+ const newFld = {};
194
+ for (let i = 0; i < changedFields.value.length; i += 1) {
195
+ const fld = changedFields.value[i];
196
+ if (fld && theField[fld] !== void 0) {
197
+ newFld[fld] = theField[fld];
198
+ }
199
+ }
200
+ editingField.value = undefined;
201
+ emit(
202
+ 'batch:fields',
203
+ { ...newFld, ids: items.join(',') },
204
+ );
205
+ }
206
+ } else {
207
+ if (typeof theField.auto__index === 'undefined') {
208
+ // adding new
209
+ fieldList.value.addRow(theField);
210
+ }
211
+
212
+ editingField.value = undefined;
213
+
214
+ emit('save', theField);
215
+ }
216
+
217
+ showEditor.value = false;
218
+ };
219
+ const deleteField = (p) => {
220
+ fieldList.value.deleteRow(p);
221
+ emit('delete', p.row);
222
+ };
223
+ const copy = () => {
224
+ clipBoardStore.items = [];
225
+
226
+ if (
227
+ !fieldList.value
228
+ || !fieldList.value.selected
229
+ || fieldList.value.selected.length <= 0
230
+ ) {
231
+ return;
232
+ }
233
+
234
+ const items = [];
235
+ for (let i = 0; i < fieldList.value.selected.length; i += 1) {
236
+ const item = fieldList.value.selected[i];
237
+
238
+ if (item) {
239
+ items.push(item.id);
240
+ }
241
+ clipBoardStore.items.push({...unref(item)});
242
+ }
243
+
244
+ if (items.length <= 0) return;
245
+
246
+ clipBoardStore.content = `EIS_FLOW_FIELD_COPY:${items.join(',')}`;
247
+ };
248
+ const paste = () => {
249
+ // local paste
250
+ if (clipBoardStore.items && clipBoardStore.items.length > 0) {
251
+ const fName = props.Field.Name || 'Fields';
252
+ const fData = props.Field.Name ? fieldData.value : getFieldData('Fields');
253
+
254
+ setData(fName, fData.concat(clipBoardStore.items.map((i) => {
255
+ delete i.id;
256
+ delete i.auto__index;
257
+ return i;
258
+ })).sort((a, b) => a.Index - b.Index))
259
+ }
260
+
261
+ // emit to parent
262
+ if (
263
+ clipBoardStore.content
264
+ && clipBoardStore.content.startsWith('EIS_FLOW_FIELD_COPY:')
265
+ ) {
266
+ emit(
267
+ 'paste:fields',
268
+ clipBoardStore.content.substring('EIS_FLOW_FIELD_COPY:'.length),
269
+ clipBoardStore.items,
270
+ );
271
+ }
272
+
273
+ fieldList.value.selected = [];
274
+ };
275
+ const editingFieldChanged = (f) => {
276
+ if (!f) return;
277
+ changedFields.value.push(f);
278
+ };
279
+ const batch = () => {
280
+ if (
281
+ !fieldList.value
282
+ || !fieldList.value.selected
283
+ || fieldList.value.selected.length <= 0
284
+ ) {
285
+ return;
286
+ }
287
+
288
+ editingField.value = {
289
+ isBatchEditing: true,
290
+ };
291
+ };
292
+
293
+ return {
294
+ fieldData,
295
+ editingField,
296
+ changedFields,
297
+ editingFieldField,
298
+ localField,
299
+ fieldList,
300
+ fieldListLength: computed(() => fieldList.value?.selected?.length),
301
+ addField,
302
+ saveField,
303
+ deleteField,
304
+ copy,
305
+ paste,
306
+ editingFieldChanged,
307
+ batch,
308
+
309
+ editField: (row) => {
310
+ editingField.value = row || {};
311
+ showEditor.value = true;
312
+ },
313
+ editorCancelled: () => {
314
+ editingField.value = undefined;
315
+ emit('cancel');
316
+ showEditor.value = false;
317
+ },
318
+ editorInput: () => {
319
+ emit('input');
320
+ },
321
+ };
322
+ },
323
+ });
324
+ </script>
@@ -7,7 +7,7 @@
7
7
  <span
8
8
  :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
9
9
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
10
- v-if="typeof Field.Label !== 'undefined'"
10
+ v-if="Field.Label !== void 0"
11
11
  >
12
12
  <q-tooltip
13
13
  v-if="Field.Description"
@@ -44,7 +44,7 @@
44
44
  >
45
45
  <template v-slot:prepend>
46
46
  <q-chip
47
- v-for="(label, index) in fieldData"
47
+ v-for="(label, index) in fieldData.value"
48
48
  :key="index"
49
49
  removable
50
50
  :value="!!fieldData[index]"
@@ -57,7 +57,7 @@
57
57
  <span
58
58
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
59
59
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
60
- v-if="typeof Field.Label !== 'undefined'"
60
+ v-if="Field.Label !== void 0"
61
61
  >
62
62
  <q-tooltip
63
63
  v-if="Field.Description"
@@ -86,11 +86,13 @@
86
86
 
87
87
  <script>
88
88
  import { defineComponent } from 'vue';
89
- import mixins from 'free-fe-mixins';
89
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
90
90
 
91
91
  export default defineComponent({
92
92
  name: 'InputFieldLabels',
93
- mixins: [mixins.InputFieldMixin],
93
+ props: {
94
+ ...freeFieldProps,
95
+ },
94
96
  emits:['input'],
95
97
  fieldInfo: {
96
98
  Category: 'Simple',
@@ -112,15 +114,23 @@ export default defineComponent({
112
114
  newLabel: '',
113
115
  };
114
116
  },
115
- created() {
116
- // init labels
117
- if (this.Field.Type === 'Labels') {
118
- this.data[this.Field.Name] = this.data[this.Field.Name] || [];
117
+ setup(props) {
118
+ const { fieldData, setFieldData } = useFreeField(props);
119
+
120
+ return {
121
+ fieldData,
122
+ setFieldData,
119
123
  }
120
124
  },
125
+ // created() {
126
+ // // init labels
127
+ // if (this.Field.Type === 'Labels') {
128
+ // this.data[this.Field.Name] = this.data[this.Field.Name] || [];
129
+ // }
130
+ // },
121
131
  computed: {
122
132
  reaonlyContent() {
123
- return (this.fieldData || []).filter((f) => !!f).join(',');
133
+ return (this.fieldData.value || []).filter((f) => !!f).join(',');
124
134
  },
125
135
  },
126
136
  methods: {
@@ -140,23 +150,22 @@ export default defineComponent({
140
150
  if (!labelList || labelList.length <= 0) return;
141
151
 
142
152
  let changed = false;
153
+ const currentList = this.fieldData.value || [];
143
154
 
144
155
  for (let i = 0; i < labelList.length; i += 1) {
145
156
  const l = labelList[i];
146
157
 
147
158
  if (
148
159
  l
149
- && (!this.data
150
- || !this.data[this.Field.Name]
151
- || this.data[this.Field.Name].indexOf(l) < 0)
160
+ && (currentList.indexOf(l) < 0)
152
161
  ) {
153
- this.data[this.Field.Name].push(l);
162
+ currentList.push(l);
154
163
  changed = true;
155
164
  }
156
165
  }
157
166
 
158
167
  if (changed) {
159
- this.$emit('input');
168
+ this.setFieldData(currentList);
160
169
  }
161
170
 
162
171
  this.newLabel = '';