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
@@ -12,7 +12,7 @@
12
12
  <span
13
13
  :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
14
14
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
15
- v-if="typeof Field.Label !== 'undefined'"
15
+ v-if="Field.Label !== void 0"
16
16
  >
17
17
  <q-tooltip
18
18
  v-if="Field.Description"
@@ -45,14 +45,14 @@
45
45
  v-else
46
46
  popup-content-class="input-field-select-control"
47
47
  hide-bottom-space
48
- v-model="fieldData"
48
+ :modelValue="fieldData.value"
49
+ @update:modelValue="setFieldData"
49
50
  :options="Field.Options || []"
50
51
  option-value="Value"
51
52
  option-label="Label"
52
53
  map-options
53
54
  :label="Field.Placeholder"
54
55
  emit-value
55
- v-bind="$attrs"
56
56
  :multiple="Field.Multiple"
57
57
  :readonly="Field.ReadOnly"
58
58
  :ref="`input_field_validator_${Field.Name || Field.Label}`"
@@ -63,7 +63,7 @@
63
63
  <span
64
64
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
65
65
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
66
- v-if="typeof Field.Label !== 'undefined'"
66
+ v-if="Field.Label !== void 0"
67
67
  >
68
68
  <q-tooltip
69
69
  v-if="Field.Description"
@@ -78,7 +78,6 @@
78
78
  </template>
79
79
 
80
80
  <template v-slot:option="scope">
81
- {{scope.itemProps}}
82
81
  <q-item
83
82
  v-bind="scope.itemProps"
84
83
  >
@@ -110,7 +109,7 @@
110
109
  <span
111
110
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
112
111
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
113
- v-if="typeof Field.Label !== 'undefined'"
112
+ v-if="Field.Label !== void 0"
114
113
  >
115
114
  <q-tooltip
116
115
  v-if="Field.Description"
@@ -155,12 +154,14 @@
155
154
  </template>
156
155
 
157
156
  <script>
158
- import { defineComponent } from 'vue';
159
- import mixins from 'free-fe-mixins';
157
+ import { ref, computed, defineComponent, getCurrentInstance, watch, watchEffect } from 'vue';
158
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
160
159
 
161
160
  export default defineComponent({
162
161
  name: 'InputFieldSelect',
163
- mixins: [mixins.InputFieldMixin],
162
+ props: {
163
+ ...freeFieldProps,
164
+ },
164
165
  emits:['udpate:fieldData', 'input'],
165
166
  fieldInfo: {
166
167
  Category: 'Simple',
@@ -239,124 +240,151 @@ export default defineComponent({
239
240
  },
240
241
  ],
241
242
  },
242
- data() {
243
- return {
244
- checked: [],
245
- dependencies: {},
246
- };
247
- },
248
- computed: {
249
- readonlyContent() {
250
- if (this.Field && this.Field.Options && Array.isArray(this.Field.Options)) {
243
+ setup(props, { emit, expose }) {
244
+ if (!props.Field) return () => null;
245
+
246
+ const { proxy:vm } = getCurrentInstance();
247
+
248
+ const { fieldData, getFieldData, setFieldData } = useFreeField(props);
249
+
250
+ const hasError = ref(false);
251
+ const checked = ref([]);
252
+ const dependencies = ref({});
253
+ const selectOptions = ref([]);
254
+
255
+ watchEffect(() => {
256
+ if (Array.isArray(props.Field.Options)) {
257
+ selectOptions.value = props.Field.Options;
258
+ }
259
+ });
260
+
261
+ const readonlyContent = computed(() => {
262
+ if (Array.isArray(props.Field.Options)) {
251
263
  let valueList;
252
- if (this.Field.Multiple) {
253
- if (Array.isArray(this.fieldData)) {
254
- valueList = this.fieldData;
255
- } else if (typeof this.fieldData === 'string') {
256
- valueList = this.fieldData.split(',');
264
+ if (props.Field.Multiple) {
265
+ if (Array.isArray(fieldData.value)) {
266
+ valueList = fieldData.value;
267
+ } else if (typeof fieldData.value === 'string') {
268
+ valueList = fieldData.value.split(',');
257
269
  }
258
270
  } else {
259
- valueList = [this.fieldData];
271
+ valueList = [fieldData.value];
260
272
  }
261
273
 
262
274
  const labelList = [];
263
275
  (valueList || []).forEach((vl) => {
264
- const theOpt = this.Field.Options.find((opt) => opt.Value === vl);
265
- if (theOpt) labelList.push(theOpt.Label || this.fieldData);
276
+ const theOpt = props.Field.Options.find((opt) => opt.Value === vl);
277
+ if (theOpt) labelList.push(theOpt.Label || fieldData.value);
266
278
  });
267
279
 
268
280
  return labelList.join(',');
269
281
  }
270
282
 
271
- return this.fieldData;
272
- },
273
- },
274
- watch: {
275
- fieldData() {
276
- if (this.Field.AsCheck) {
277
- if (this.fieldData) {
278
- this.checked = this.fieldData.toString().split(',');
283
+ return fieldData.value;
284
+ });
285
+
286
+
287
+ watch(fieldData, () => {
288
+ if (props.Field.AsCheck) {
289
+ if (fieldData.value) {
290
+ checked.value = `${fieldData.value}`.split(',');
279
291
  } else {
280
- this.checked = [];
292
+ checked.value = [];
281
293
  }
282
294
  }
283
- this.$emit('update:fieldData');
284
- },
285
- data: {
286
- handler() {
287
- if (!this.Field || !this.Field.Info || !this.Field.Info.Url || !this.data) return;
288
-
289
- this.Field.Info.Params = this.Field.Info.Params || '';
290
- if (this.Field.Info.Params) {
291
- const paramList = typeof this.Field.Info.Params === 'string' ? this.Field.Info.Params.split(',') : this.Field.Info.Params;
292
-
293
- for (let i = 0; i < paramList.length; i += 1) {
294
- if (Object.nestValue(this.data, paramList[i])
295
- !== Object.nestValue(this.dependencies, paramList[i])) {
296
- // changed
297
- this.apiCall();
298
- return;
299
- }
300
- }
301
- }
302
- },
303
- deep: true,
304
- immediate: true,
305
- },
306
- },
307
- methods: {
308
- selfValidate() {
309
- if (this.Field && this.Field.AsCheck && this.Field.Required) {
310
- const isValid = this.checked && this.checked.length > 0;
311
- this.hasError = !isValid;
295
+ });
296
+
297
+ const selfValidate = () => {
298
+ if (props.Field.AsCheck && props.Field.Required) {
299
+ const isValid = checked.value && checked.value.length > 0;
300
+ hasError.value = !isValid;
312
301
  return isValid;
313
302
  }
314
303
 
315
304
  return true;
316
- },
317
- checkChanged(v) {
318
- this.selfValidate();
305
+ };
306
+
307
+ expose ({
308
+ selfValidate,
309
+ })
310
+
311
+ const checkChanged = (v) => {
312
+ selfValidate();
319
313
 
320
- if (!this.Field.Multiple) {
321
- this.checked = [v];
314
+ if (!props.Field.Multiple) {
315
+ checked.value = [v];
322
316
  }
323
- this.fieldData = this.checked.join(',');
324
- this.$emit('input');
325
- },
326
- apiCall() {
327
- if (!this.Field.Info || !this.Field.Info.Url) {
317
+ setFieldData(checked.value.join(','));
318
+ emit('input');
319
+ };
320
+
321
+ const apiCall = () => {
322
+ if (!props.Field.Info?.Url) {
328
323
  return;
329
324
  }
330
325
 
331
326
  const paramObj = {};
332
- this.Field.Info.Params = this.Field.Info.Params || '';
333
- if (this.Field.Info.Params.length > 0) {
334
- if (typeof this.Field.Info.Params === 'string') {
335
- this.Field.Info.Params = this.Field.Info.Params.split(',');
327
+ const params = props.Field.Info.Params || '';
328
+ if (params.length > 0) {
329
+ if (typeof params === 'string') {
330
+ params = params.split(',');
336
331
  }
337
- for (let i = 0; i < this.Field.Info.Params.length; i += 1) {
338
- const param = this.Field.Info.Params[i];
332
+ for (let i = 0; i < params.length; i += 1) {
333
+ const param = params[i];
339
334
 
340
335
  if (param) {
341
- Object.setValue(paramObj, param, Object.nestValue(this.data, param));
342
- Object.setValue(this.dependencies, param, Object.nestValue(this.data, param));
336
+ paramObj[param] = getFieldData(param);
337
+ dependencies.value[param] = getFieldData(param);
343
338
  }
344
339
  }
345
340
  }
346
341
 
347
- this.postRequest(this.Field.Info.Url, paramObj).then((d) => {
342
+ vm.postRequest(props.Field.Info.Url, paramObj).then((d) => {
348
343
  if (d && d.msg === 'OK') {
349
344
  if (d.data && d.data.options) {
350
- this.Field.Options = d.data.options;
351
- if (d.data.options.findIndex((o) => o.Value === this.fieldData) < 0) {
352
- this.fieldData = undefined;
345
+ selectOptions.value = d.data.options;
346
+ if (d.data.options.findIndex((o) => o.Value === fieldData.value) < 0) {
347
+ setFieldData(undefined);
348
+ emit('input');
353
349
  }
354
350
  } else {
355
- this.Field.Options = [];
351
+ selectOptions.value = [];
356
352
  }
357
353
  }
358
354
  });
359
- },
355
+ };
356
+
357
+ watchEffect(() => {
358
+ if (!props.Field.Info?.Url || !props.values) return;
359
+
360
+ const params = props.Field.Info?.Params || '';
361
+ if (params) {
362
+ const paramList = typeof params === 'string' ? params.split(',') : params;
363
+
364
+ for (let i = 0; i < paramList.length; i += 1) {
365
+ if (getFieldData(paramList[i]) !== Object.nestValue(dependencies.value, paramList[i])) {
366
+ // changed
367
+ apiCall();
368
+ return;
369
+ }
370
+ }
371
+ }
372
+ });
373
+
374
+ return {
375
+ fieldData,
376
+ setFieldData,
377
+
378
+ hasError,
379
+ checked,
380
+ dependencies,
381
+
382
+ selectOptions,
383
+
384
+ readonlyContent,
385
+
386
+ checkChanged,
387
+ };
360
388
  },
361
389
  });
362
390
  </script>
@@ -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"
@@ -33,7 +33,6 @@
33
33
  map-options
34
34
  :label="valuesList[index] ? '' : option.Placeholder"
35
35
  emit-value
36
- v-bind="$attrs"
37
36
  @input="selectionChanged(index)"
38
37
  :ref="`input_field_validator_${index}`"
39
38
  ></q-select>
@@ -55,12 +54,14 @@
55
54
  </template>
56
55
 
57
56
  <script>
58
- import { defineComponent } from 'vue';
59
- import mixins from 'free-fe-mixins';
57
+ import { defineComponent, ref, watch, getCurrentInstance, } from 'vue';
58
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
60
59
 
61
60
  export default defineComponent({
62
61
  name: 'InputFieldSelectChain',
63
- mixins: [mixins.InputFieldMixin],
62
+ props: {
63
+ ...freeFieldProps,
64
+ },
64
65
  emits:['input'],
65
66
  fieldInfo: {
66
67
  Category: 'Advanced',
@@ -77,6 +78,11 @@ export default defineComponent({
77
78
  Label: '上级数据名',
78
79
  Name: 'Options.ParentName',
79
80
  },
81
+ {
82
+ Type: 'String',
83
+ Label: '数据名',
84
+ Name: 'Options.DataName',
85
+ },
80
86
  {
81
87
  Type: 'DynamicList',
82
88
  Label: '列',
@@ -107,92 +113,108 @@ export default defineComponent({
107
113
  ],
108
114
  Description: '',
109
115
  },
110
- data() {
111
- return {
112
- optionsList: [],
113
- valuesList: [],
114
- };
115
- },
116
- watch: {
117
- Field() {
118
- this.initOptions();
119
- },
120
- fieldData(v) {
121
- if(typeof v === 'undefined'){
122
- this.valuesList = [];
123
- }
124
- this.initOptions();
125
- },
126
- },
127
- created() {
128
- this.fieldData = this.fieldData || {};
129
- this.initOptions();
130
- },
131
- methods: {
132
- initOptions() {
133
- if (this.optionsList.length > 0) return;
116
+ setup(props, { emit }) {
117
+ if (!props.Field) return () => null;
134
118
 
135
- if (this.Field && this.Field.Options && this.Field.Options.Fields) {
136
- for (let i = 0; i < this.Field.Options.Fields.length; i += 1) {
137
- const fld = this.Field.Options.Fields[i];
119
+ const { proxy:vm } = getCurrentInstance();
138
120
 
139
- if (this.fieldData) this.fieldData[fld.Name] = this.fieldData[fld.Name] || fld.Default || '';
121
+ const { fieldData, setFieldData } = useFreeField(props);
140
122
 
141
- this.valuesList[i] = this.fieldData[fld.Name];
142
- if (i === 0 || this.valuesList[i - 1]) {
143
- this.getOptions(i);
144
- }
145
- }
146
- }
147
- },
148
- getOptions(index) {
149
- if (!this.Field || !this.Field.Options || !this.Field.Options.Fields) {
123
+ const optionsList = ref([]);
124
+ const valuesList = ref([]);
125
+
126
+ const getOptions = (index) => {
127
+ if (!props.Field.Options?.Fields) {
150
128
  return;
151
129
  }
152
130
 
153
- if (index > 0 && !this.valuesList[index - 1]) return;
131
+ if (index > 0 && !valuesList.value[index - 1]) return;
154
132
 
155
- if(this.Field.Options.Url){
133
+ if(props.Field.Options?.Url){
156
134
  const obj = {};
157
- obj[this.Field.Options.ParentName] = this.Field.Options.Fields[index - 1]
158
- ? this.valuesList.slice(0, index).join('.')
135
+ obj[props.Field.Options.ParentName] = props.Field.Options.Fields[index - 1]
136
+ ? valuesList.value.slice(0, index).join('.')
159
137
  : '';
160
138
 
161
- this.getRequest(this.Field.Options.Url, obj).then((d) => {
162
- if (d && d.msg === 'OK' && Array.isArray(d.data)) {
163
- //this.$set(this.optionsList, index, d.data);
164
- this.optionsList[index] = d.data;
139
+ vm.getRequest(props.Field.Options.Url, obj).then((d) => {
140
+ if (d && d.msg === 'OK') {
141
+ const dd = props.Field.Options?.DataName ? Object.nestValue(d.data, props.Field.Options.DataName) : d.data;
142
+
143
+ if (Array.isArray(dd)) {
144
+ optionsList.value[index] = dd;
145
+ }
165
146
  }
166
147
  });
167
- } else if(this.Field.Options.Data){
168
- let parent = this.Field.Options.Fields[index - 1]
169
- ? this.valuesList.slice(0, index).join('.')
148
+ } else if(props.Field.Options.Data){
149
+ let parent = props.Field.Options.Fields[index - 1]
150
+ ? valuesList.value.slice(0, index).join('.')
170
151
  : '';
171
152
 
172
153
  parent = parent && parent.split('.');
173
154
  parent = parent && parent.pop();
174
155
  parent = parent || '';
175
156
 
176
- //this.$set(this.optionsList, index, this.Field.Options.Data.filter(dd => dd[this.Field.Options.ParentName] === parent));
177
- this.optionsList[index] = this.Field.Options.Data.filter(dd => dd[this.Field.Options.ParentName] === parent);
157
+ optionsList.value[index] = props.Field.Options.Data.filter(dd => dd[props.Field.Options.ParentName] === parent);
158
+ }
159
+ };
160
+
161
+ const initOptions = () => {
162
+ if (optionsList.value.length > 0) return;
163
+
164
+ if (props.Field.Options?.Fields) {
165
+ for (let i = 0; i < props.Field.Options.Fields.length; i += 1) {
166
+ const fld = props.Field.Options.Fields[i];
167
+
168
+ if (fieldData.value) {
169
+ fieldData.value[fld.Name] = fieldData.value[fld.Name] || fld.Default || '';
170
+ }
171
+
172
+ valuesList.value[i] = fieldData.value && fieldData.value[fld.Name];
173
+ if (i === 0 || valuesList.value[i - 1]) {
174
+ getOptions(i);
175
+ }
176
+ }
178
177
  }
179
- },
180
- selectionChanged(index) {
181
- this.fieldData = this.fieldData || {};
182
- if (index < this.Field.Options.Fields.length - 1) {
183
- for (let i = index + 1; i < this.Field.Options.Fields.length; i += 1) {
184
- delete this.valuesList[i];
185
- delete this.optionsList[i];
186
- this.fieldData[this.Field.Options.Fields[i].Name] = '';
178
+ };
179
+
180
+ const selectionChanged = (index) => {
181
+ setFieldData(fieldData.value || {});
182
+
183
+ if (index < props.Field.Options?.Fields?.length - 1) {
184
+ for (let i = index + 1; i < props.Field.Options.Fields.length; i += 1) {
185
+ delete valuesList.value[i];
186
+ delete optionsList.value[i];
187
+ fieldData.value[props.Field.Options.Fields[i].Name] = '';
187
188
  }
188
- this.getOptions(index + 1);
189
+ getOptions(index + 1);
189
190
  }
190
191
 
191
- this.fieldData[this.Field.Options.Fields[index].Name] = this.valuesList[
192
+ fieldData.value[props.Field.Options.Fields[index].Name] = valuesList.value[
192
193
  index
193
194
  ];
194
- this.$emit('input');
195
- },
195
+ emit('input');
196
+ };
197
+
198
+ watch(fieldData, () => {
199
+ if(typeof fieldData.value === 'undefined'){
200
+ valuesList.value = [];
201
+ }
202
+ initOptions();
203
+ });
204
+
205
+ return {
206
+ fieldData,
207
+ setFieldData,
208
+ initOptions,
209
+
210
+ optionsList,
211
+ valuesList,
212
+
213
+ selectionChanged,
214
+ };
215
+ },
216
+ created() {
217
+ this.initOptions();
196
218
  },
197
219
  });
198
220
  </script>
@@ -1,26 +1,21 @@
1
- <template>
2
- <q-separator :inset="inset" class="input-field-separator"/>
3
- </template>
4
-
5
- <script>
6
- import { defineComponent } from 'vue';
1
+ import { defineComponent, h } from 'vue';
2
+ import { QSeparator } from 'quasar';
7
3
 
8
4
  export default defineComponent({
9
5
  name: 'InputFieldSeparator',
10
- props: {
11
- inset: { type: Boolean, default: true },
12
- },
13
6
  fieldInfo: {
14
7
  Category: 'Static',
15
8
  Label: '分割线',
16
9
  Value: 'Separator',
17
10
  Description: '',
18
11
  },
12
+ props: {
13
+ inset: { type: Boolean, default: true },
14
+ },
15
+ setup(props){
16
+ return () => h(QSeparator, {
17
+ class: 'input-field-separator',
18
+ inset: props.inset,
19
+ });
20
+ },
19
21
  });
20
- </script>
21
-
22
- <style lang="sass" scoped>
23
- .input-field-separator
24
- height: 1px
25
- background: $grey-4
26
- </style>
@@ -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"
@@ -34,12 +34,11 @@
34
34
  </template>
35
35
 
36
36
  <script>
37
- import { defineComponent } from 'vue';
38
- import mixins from 'free-fe-mixins';
37
+ import { defineComponent, ref, computed } from 'vue';
38
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
39
39
 
40
40
  export default defineComponent({
41
41
  name: 'InputFieldSingleList',
42
- mixins: [mixins.InputFieldMixin],
43
42
  fieldInfo: {
44
43
  Category: 'Table',
45
44
  Label: '单列表',
@@ -71,27 +70,29 @@ export default defineComponent({
71
70
  ],
72
71
  Description: '',
73
72
  },
74
- data() {
75
- return {
76
- tableData: [],
77
- };
73
+ props: {
74
+ ...freeFieldProps,
78
75
  },
79
- computed: {
80
- localData() {
76
+ setup(props) {
77
+ if (!props.Field) return () => null;
78
+
79
+ const { fieldData } = useFreeField(props);
80
+
81
+ const localData = computed(() => {
81
82
  let list = [];
82
- if (typeof this.fieldData !== 'undefined' && this.fieldData !== '') {
83
- if (Array.isArray(this.fieldData)) {
84
- list = this.fieldData;
85
- } else if (typeof this.fieldData === 'string') {
86
- const newStr = this.fieldData.replace(/,/g, ',');
83
+ if (fieldData.value !== void 0 && fieldData.value !== '') {
84
+ if (Array.isArray(fieldData.value)) {
85
+ list = fieldData.value;
86
+ } else if (typeof fieldData.value === 'string') {
87
+ const newStr = fieldData.value.replace(/,/g, ',');
87
88
  list = newStr.split(',');
88
89
  } else {
89
- list = [this.fieldData];
90
+ list = [fieldData.value];
90
91
  }
91
92
  }
92
93
 
93
- if (this.Field.Options) {
94
- if (this.Field.Options.NoSpace) {
94
+ if (props.Field.Options) {
95
+ if (props.Field.Options.NoSpace) {
95
96
  for (let i = 0; i < list.length; i += 1) {
96
97
  const l = list[i];
97
98
 
@@ -101,11 +102,11 @@ export default defineComponent({
101
102
  }
102
103
  }
103
104
 
104
- if (this.Field.Options.NoEmpty) {
105
+ if (props.Field.Options.NoEmpty) {
105
106
  list = list.filter((l) => !!l);
106
107
  }
107
108
 
108
- if (this.Field.Options.NoDup) {
109
+ if (props.Field.Options.NoDup) {
109
110
  const newList = [];
110
111
  for (let i = 0; i < list.length; i += 1) {
111
112
  const l = list[i];
@@ -119,7 +120,12 @@ export default defineComponent({
119
120
  }
120
121
 
121
122
  return list;
122
- },
123
+ });
124
+
125
+
126
+ return {
127
+ localData,
128
+ };
123
129
  },
124
130
  });
125
131
  </script>
@@ -0,0 +1,27 @@
1
+ import { defineComponent, h } from 'vue';
2
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
3
+
4
+ export default defineComponent({
5
+ name: 'InputFieldStatic',
6
+ fieldInfo: {
7
+ Category: 'Static',
8
+ Label: '固定内容',
9
+ Value: 'Static',
10
+ Description: '',
11
+ },
12
+ props: {
13
+ ...freeFieldProps,
14
+ },
15
+ setup(props, { slots }){
16
+ if (!props.Field) return {};
17
+
18
+ const { fieldData } = useFreeField(props);
19
+
20
+ return () => h('div', {
21
+ class: 'input-field-static',
22
+ }, [
23
+ slots.warning && slots.warning(),
24
+ fieldData.value,
25
+ ]);
26
+ },
27
+ });