free-fe-core-modules 0.0.3 → 0.0.5
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.
- package/components/Basic/SummaryHead.vue +13 -2
- package/components/Dialog/BasicDialog.vue +11 -3
- package/components/SlidingCarousel/index.vue +13 -2
- package/components/SlidingNews/index.vue +13 -2
- package/composible/useFormValidator.js +56 -0
- package/free-field/Fields/AgreementCheck.js +6 -2
- package/free-field/Fields/Date.js +13 -5
- package/free-field/Fields/DateRange.js +14 -8
- package/free-field/Fields/DynamicList.js +33 -33
- package/free-field/Fields/FixedList.vue +9 -5
- package/free-field/Fields/Labels.vue +7 -1
- package/free-field/Fields/MixedTable.vue +9 -3
- package/free-field/Fields/Number.js +12 -6
- package/free-field/Fields/Password.js +12 -6
- package/free-field/Fields/PermissionEditor.vue +0 -1
- package/free-field/Fields/Search.vue +8 -2
- package/free-field/Fields/Select.vue +4 -1
- package/free-field/Fields/SelectionChain.vue +8 -2
- package/free-field/Fields/String.js +11 -5
- package/free-field/Fields/Text.js +12 -6
- package/free-field/Fields/Time.vue +8 -2
- package/free-field/Fields/TimeRange.vue +9 -3
- package/free-field/Fields/Year.js +12 -6
- package/free-field/Fields/YearRange.vue +9 -6
- package/free-field/Fields/index.js +12 -12
- package/free-field/composible/fieldWrapper.js +59 -51
- package/package.json +2 -2
- package/view/menu/index.vue +15 -11
- package/free-field/Fields/File.vue +0 -382
- package/free-field/Fields/FileList.vue +0 -405
- package/free-field/Fields/FileListCombined.vue +0 -142
- package/free-field/Fields/Image.vue +0 -328
- package/free-field/Fields/ImageList.vue +0 -285
- package/free-field/Fields/ImageListCombined.vue +0 -76
- package/free-field/Fields/UltimateFile.vue +0 -100
|
@@ -76,15 +76,26 @@
|
|
|
76
76
|
|
|
77
77
|
<script>
|
|
78
78
|
import { defineComponent } from 'vue';
|
|
79
|
-
import
|
|
79
|
+
import { useObjectData, objectDataProps } from '../../composible/useObjectData';
|
|
80
80
|
|
|
81
81
|
export default defineComponent({
|
|
82
82
|
name: 'SummaryHead',
|
|
83
|
-
mixins: [mixins.ArrayDataMixin],
|
|
84
83
|
props: {
|
|
84
|
+
...objectDataProps,
|
|
85
85
|
has_multiple_head: { type: Boolean, default: false },
|
|
86
86
|
values: {type: Object, default: () => ({})},
|
|
87
87
|
},
|
|
88
|
+
setup(props, ctx) {
|
|
89
|
+
const {
|
|
90
|
+
data,
|
|
91
|
+
refreshData,
|
|
92
|
+
} = useObjectData(props, ctx);
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
data,
|
|
96
|
+
refreshData,
|
|
97
|
+
};
|
|
98
|
+
},
|
|
88
99
|
created() {
|
|
89
100
|
if (this.values) {
|
|
90
101
|
this.data = this.values;
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
:key="index"
|
|
66
66
|
:Field="field"
|
|
67
67
|
:values="fieldsData"
|
|
68
|
-
|
|
68
|
+
ref="fieldsToValid"
|
|
69
69
|
@input="onInputFieldInput(field)"
|
|
70
70
|
></free-field>
|
|
71
71
|
</div>
|
|
@@ -100,14 +100,14 @@
|
|
|
100
100
|
</template>
|
|
101
101
|
|
|
102
102
|
<script>
|
|
103
|
-
import mixins from 'free-fe-mixins';
|
|
104
103
|
import { defineComponent } from 'vue';
|
|
104
|
+
import { useFormValidator } from '../../composible/useFormValidator';
|
|
105
105
|
import FreeField from '../../free-field/composible/fieldWrapper';
|
|
106
106
|
import EIcon from '../Basic/EIcon.vue';
|
|
107
107
|
|
|
108
108
|
export default defineComponent({
|
|
109
109
|
name: 'BasicDialog',
|
|
110
|
-
mixins: [mixins.InputFieldValidator],
|
|
110
|
+
// mixins: [mixins.InputFieldValidator],
|
|
111
111
|
emits: ['hide', 'ok', 'cancel'],
|
|
112
112
|
props: {
|
|
113
113
|
persistent: { type: Boolean, default: true },
|
|
@@ -154,6 +154,14 @@ export default defineComponent({
|
|
|
154
154
|
FreeField,
|
|
155
155
|
EIcon,
|
|
156
156
|
},
|
|
157
|
+
setup(props, { expose }) {
|
|
158
|
+
const { validate } = useFormValidator('fieldsToValid');
|
|
159
|
+
expose({
|
|
160
|
+
validate,
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
return {};
|
|
164
|
+
},
|
|
157
165
|
data() {
|
|
158
166
|
return {
|
|
159
167
|
timeLeft: 0,
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
</template>
|
|
27
27
|
|
|
28
28
|
<script>
|
|
29
|
-
import mixins from 'free-fe-mixins';
|
|
30
29
|
import { defineComponent } from 'vue';
|
|
30
|
+
import { useObjectData, objectDataProps } from '../../composible/useObjectData';
|
|
31
31
|
|
|
32
32
|
export default defineComponent({
|
|
33
33
|
name: 'SlidingCarousel',
|
|
34
|
-
mixins: [mixins.ArrayDataMixin],
|
|
35
34
|
props: {
|
|
35
|
+
...objectDataProps,
|
|
36
36
|
interval: { type: Number, default: 3000 },
|
|
37
37
|
height: { type: String, default: '220px' },
|
|
38
38
|
width: { type: String, default: '100%' },
|
|
@@ -42,6 +42,17 @@ export default defineComponent({
|
|
|
42
42
|
swipeable: { type: Boolean, default: true },
|
|
43
43
|
thumbnails: { type: Boolean, default: true },
|
|
44
44
|
},
|
|
45
|
+
setup(props, ctx) {
|
|
46
|
+
const {
|
|
47
|
+
data,
|
|
48
|
+
refreshData,
|
|
49
|
+
} = useObjectData(props, ctx);
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
data,
|
|
53
|
+
refreshData,
|
|
54
|
+
};
|
|
55
|
+
},
|
|
45
56
|
data() {
|
|
46
57
|
return {
|
|
47
58
|
slide: 0,
|
|
@@ -65,13 +65,13 @@
|
|
|
65
65
|
</template>
|
|
66
66
|
|
|
67
67
|
<script>
|
|
68
|
-
import mixins from 'free-fe-mixins';
|
|
69
68
|
import { defineComponent } from 'vue';
|
|
69
|
+
import { useObjectData, objectDataProps } from '../../composible/useObjectData';
|
|
70
70
|
|
|
71
71
|
export default defineComponent({
|
|
72
72
|
name: 'SlidingNews',
|
|
73
|
-
mixins: [mixins.ArrayDataMixin],
|
|
74
73
|
props: {
|
|
74
|
+
...objectDataProps,
|
|
75
75
|
interval: { type: Number, default: 3000 },
|
|
76
76
|
height: { type: String, default: '40px' },
|
|
77
77
|
width: { type: String, default: '100%' },
|
|
@@ -83,6 +83,17 @@ export default defineComponent({
|
|
|
83
83
|
transitionPrev: { type: String, default: 'slide-up' },
|
|
84
84
|
transitionNext: { type: String, default: 'slide-down' },
|
|
85
85
|
},
|
|
86
|
+
setup(props, ctx) {
|
|
87
|
+
const {
|
|
88
|
+
data,
|
|
89
|
+
refreshData,
|
|
90
|
+
} = useObjectData(props, ctx);
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
data,
|
|
94
|
+
refreshData,
|
|
95
|
+
};
|
|
96
|
+
},
|
|
86
97
|
data() {
|
|
87
98
|
return {
|
|
88
99
|
visible: true,
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { unref, getCurrentInstance, computed } from "vue";
|
|
2
|
+
|
|
3
|
+
export function useFormValidator(...list) {
|
|
4
|
+
const { proxy:vm } = getCurrentInstance();
|
|
5
|
+
|
|
6
|
+
return {
|
|
7
|
+
validate: computed(() => {
|
|
8
|
+
return (...args) => {
|
|
9
|
+
if (vm.shouldHide) return true;
|
|
10
|
+
|
|
11
|
+
// could have customized validate function in component
|
|
12
|
+
if (vm.selfValidate && typeof vm.selfValidate === 'function') {
|
|
13
|
+
return vm.selfValidate();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const refsList = [];
|
|
17
|
+
for(let i = 0; i < list.length; i += 1) {
|
|
18
|
+
if (typeof list[i] === 'string') {
|
|
19
|
+
list[i] = vm.$refs[list[i]];
|
|
20
|
+
} else if (typeof list[i] === 'function') {
|
|
21
|
+
list[i] = list[i]();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (Array.isArray(list[i])) {
|
|
25
|
+
refsList.push(...list[i])
|
|
26
|
+
} else {
|
|
27
|
+
refsList.push(list[i])
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (refsList.length <= 0) return true;
|
|
32
|
+
|
|
33
|
+
let hasErr = false;
|
|
34
|
+
for (let i = 0; i < refsList.length; i += 1) {
|
|
35
|
+
let refi = unref(refsList[i]);
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
const validFun = unref(refi.validate || refi.methods?.validate || refi.component?.exposed?.validate|| refi.component?.ctx?.validate);
|
|
39
|
+
const shouldHide = unref(refi.shouldHide || refi.component?.ctx?.shouldHide);
|
|
40
|
+
|
|
41
|
+
if (typeof validFun === 'function' && shouldHide !== true) {
|
|
42
|
+
hasErr = !validFun() || hasErr;
|
|
43
|
+
|
|
44
|
+
if (hasErr) {
|
|
45
|
+
console.error('got error', args)
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return !hasErr;
|
|
52
|
+
};
|
|
53
|
+
}),
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, h, ref, getCurrentInstance } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
3
2
|
import { QCheckbox } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
4
4
|
|
|
5
5
|
export default defineComponent({
|
|
6
6
|
name: 'InputFieldAgreementCheck',
|
|
@@ -21,7 +21,7 @@ export default defineComponent({
|
|
|
21
21
|
...freeFieldProps,
|
|
22
22
|
},
|
|
23
23
|
emits: ['input'],
|
|
24
|
-
setup(props, { emit }){
|
|
24
|
+
setup(props, { emit, expose }){
|
|
25
25
|
if (!props.Field) return {};
|
|
26
26
|
|
|
27
27
|
const { proxy:vm } = getCurrentInstance();
|
|
@@ -106,6 +106,10 @@ export default defineComponent({
|
|
|
106
106
|
return isValid;
|
|
107
107
|
};
|
|
108
108
|
|
|
109
|
+
defineExpose({
|
|
110
|
+
validate,
|
|
111
|
+
})
|
|
112
|
+
|
|
109
113
|
const checkboxNode = () => h(QCheckbox, {
|
|
110
114
|
disable: props.Field?.ReadOnly,
|
|
111
115
|
label: props.Field?.showLabel ? '' : props.Field?.Label,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ref, defineComponent, getCurrentInstance, h, computed } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
3
2
|
import { QInput, QIcon, QPopupProxy, QDate } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
4
4
|
import freeFieldLabel from '../composible/freeFieldLabel';
|
|
5
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
5
6
|
|
|
6
7
|
export default defineComponent({
|
|
7
8
|
name: 'InputFieldDate',
|
|
@@ -40,7 +41,7 @@ export default defineComponent({
|
|
|
40
41
|
methods: {
|
|
41
42
|
...useFreeFieldMethods,
|
|
42
43
|
},
|
|
43
|
-
setup(props, { emit, slots }){
|
|
44
|
+
setup(props, { emit, slots, expose }){
|
|
44
45
|
if (!props.Field) return {};
|
|
45
46
|
|
|
46
47
|
const { proxy: vm } = getCurrentInstance();
|
|
@@ -80,7 +81,7 @@ export default defineComponent({
|
|
|
80
81
|
|
|
81
82
|
const showPopup = ref(false);
|
|
82
83
|
|
|
83
|
-
const DateNode = () => h(QInput, {
|
|
84
|
+
const DateNode = computed(() => h(QInput, {
|
|
84
85
|
hideBottomSpace: true,
|
|
85
86
|
readonly: props.Field?.ReadOnly,
|
|
86
87
|
|
|
@@ -121,12 +122,19 @@ export default defineComponent({
|
|
|
121
122
|
class: 'cursor-pointer',
|
|
122
123
|
name: 'event'
|
|
123
124
|
}),
|
|
124
|
-
});
|
|
125
|
+
}));
|
|
126
|
+
|
|
127
|
+
const {
|
|
128
|
+
validate,
|
|
129
|
+
} = useFormValidator(DateNode);
|
|
130
|
+
expose({
|
|
131
|
+
validate,
|
|
132
|
+
})
|
|
125
133
|
|
|
126
134
|
return () => h('div', {
|
|
127
135
|
class: 'simple-field input-field-date row items-center no-wrap',
|
|
128
136
|
}, [
|
|
129
|
-
props.Field.ReadOnly ? readonlyNode() : DateNode
|
|
137
|
+
props.Field.ReadOnly ? readonlyNode() : DateNode.value,
|
|
130
138
|
slots.warning && slots.warning(),
|
|
131
139
|
]);
|
|
132
140
|
},
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { ref, defineComponent, getCurrentInstance, h, computed, watch, watchEffect } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
3
2
|
import { QInput, QIcon, QPopupProxy, QDate } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
4
4
|
import freeFieldLabel from '../composible/freeFieldLabel';
|
|
5
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
5
6
|
|
|
6
7
|
export default defineComponent({
|
|
7
8
|
name: 'InputFieldDateRange',
|
|
@@ -40,7 +41,7 @@ export default defineComponent({
|
|
|
40
41
|
methods: {
|
|
41
42
|
...useFreeFieldMethods,
|
|
42
43
|
},
|
|
43
|
-
setup(props, { emit, slots }){
|
|
44
|
+
setup(props, { emit, slots, expose }){
|
|
44
45
|
if (!props.Field) return {};
|
|
45
46
|
|
|
46
47
|
const { proxy: vm } = getCurrentInstance();
|
|
@@ -119,7 +120,7 @@ export default defineComponent({
|
|
|
119
120
|
const showMaxPopup = ref(false);
|
|
120
121
|
|
|
121
122
|
|
|
122
|
-
const minDateNode = () => h(QInput, {
|
|
123
|
+
const minDateNode = computed(() => h(QInput, {
|
|
123
124
|
hideBottomSpace: true,
|
|
124
125
|
readonly: props.Field?.ReadOnly,
|
|
125
126
|
|
|
@@ -162,9 +163,9 @@ export default defineComponent({
|
|
|
162
163
|
class: 'cursor-pointer',
|
|
163
164
|
name: 'event'
|
|
164
165
|
}),
|
|
165
|
-
});
|
|
166
|
+
}));
|
|
166
167
|
|
|
167
|
-
const maxDateNode = () => h(QInput, {
|
|
168
|
+
const maxDateNode = computed(() => h(QInput, {
|
|
168
169
|
hideBottomSpace: true,
|
|
169
170
|
readonly: props.Field?.ReadOnly,
|
|
170
171
|
|
|
@@ -206,7 +207,12 @@ export default defineComponent({
|
|
|
206
207
|
class: 'cursor-pointer',
|
|
207
208
|
name: 'event'
|
|
208
209
|
}),
|
|
209
|
-
});
|
|
210
|
+
}));
|
|
211
|
+
|
|
212
|
+
const { validate } = useFormValidator(minDateNode, maxDateNode);
|
|
213
|
+
expose({
|
|
214
|
+
validate,
|
|
215
|
+
})
|
|
210
216
|
|
|
211
217
|
return () => h('div', {
|
|
212
218
|
class: 'simple-field input-field-date row items-center no-wrap',
|
|
@@ -214,11 +220,11 @@ export default defineComponent({
|
|
|
214
220
|
props.Field.ReadOnly ? readonlyNode() : h('div', {
|
|
215
221
|
class: 'row items-center no-wrap'
|
|
216
222
|
}, [
|
|
217
|
-
minDateNode
|
|
223
|
+
minDateNode.value,
|
|
218
224
|
h('span', {
|
|
219
225
|
class: 'input-field-range-separator'
|
|
220
226
|
},props.Field.Separator || '~'),
|
|
221
|
-
maxDateNode
|
|
227
|
+
maxDateNode.value,
|
|
222
228
|
]),
|
|
223
229
|
slots.warning && slots.warning(),
|
|
224
230
|
]);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ref, defineComponent, getCurrentInstance, h, computed, watchEffect } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
3
2
|
import { QTable, QTh, QTd, QTr, QIcon } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
4
4
|
import freeFieldLabel from '../composible/freeFieldLabel';
|
|
5
5
|
import FreeField from '../composible/fieldWrapper';
|
|
6
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
6
7
|
|
|
7
8
|
export default defineComponent({
|
|
8
9
|
name: 'InputFieldDynamicList',
|
|
@@ -424,10 +425,16 @@ export default defineComponent({
|
|
|
424
425
|
}
|
|
425
426
|
};
|
|
426
427
|
|
|
428
|
+
const fieldsToValidate = ref([]);
|
|
429
|
+
const {
|
|
430
|
+
validate
|
|
431
|
+
} = useFormValidator(fieldsToValidate);
|
|
432
|
+
|
|
427
433
|
expose({
|
|
428
434
|
selected,
|
|
429
435
|
addRow,
|
|
430
436
|
deleteRow,
|
|
437
|
+
validate,
|
|
431
438
|
})
|
|
432
439
|
|
|
433
440
|
watchEffect(() => {
|
|
@@ -456,6 +463,22 @@ export default defineComponent({
|
|
|
456
463
|
);
|
|
457
464
|
|
|
458
465
|
const bodyCell = (slotProps) => {
|
|
466
|
+
fieldsToValidate.value = slotProps.col?.List?.length > 1 ? slotProps.col.List.map((col) =>
|
|
467
|
+
h(FreeField, {
|
|
468
|
+
Field: columnField(col, true, slotProps.col),
|
|
469
|
+
values: slotProps.row,
|
|
470
|
+
style: "margin: 4px auto",
|
|
471
|
+
onInput: cellChanged,
|
|
472
|
+
})
|
|
473
|
+
) : [
|
|
474
|
+
h(FreeField, {
|
|
475
|
+
Field: columnField(slotProps.col),
|
|
476
|
+
values: slotProps.row,
|
|
477
|
+
borderless: true,
|
|
478
|
+
onInput: cellChanged,
|
|
479
|
+
}),
|
|
480
|
+
];
|
|
481
|
+
|
|
459
482
|
if (slotProps.col.name === "listActions") {
|
|
460
483
|
return h(QTd, null, {
|
|
461
484
|
default: () =>
|
|
@@ -480,38 +503,15 @@ export default defineComponent({
|
|
|
480
503
|
rowspan: slotProps.value ? slotProps.value.rowspan || "1" : "1",
|
|
481
504
|
class: "items-center justify-center",
|
|
482
505
|
},
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
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
|
-
}
|
|
506
|
+
[
|
|
507
|
+
h(
|
|
508
|
+
"span",
|
|
509
|
+
{
|
|
510
|
+
class: "full-height full-width",
|
|
511
|
+
},
|
|
512
|
+
fieldsToValidate.value,
|
|
513
|
+
)
|
|
514
|
+
]
|
|
515
515
|
);
|
|
516
516
|
}
|
|
517
517
|
};
|
|
@@ -45,8 +45,7 @@
|
|
|
45
45
|
:Field="columnField(col, true, props.col)"
|
|
46
46
|
:values="props.row"
|
|
47
47
|
@input="cellChanged()"
|
|
48
|
-
|
|
49
|
-
columnField(col, true, props.col).Name}-${index}-${props.row.auto__index}`"
|
|
48
|
+
ref="fieldsToValid"
|
|
50
49
|
></free-field>
|
|
51
50
|
</span>
|
|
52
51
|
<span v-else class="full-width full-height">
|
|
@@ -55,8 +54,7 @@
|
|
|
55
54
|
:values="props.row"
|
|
56
55
|
@input="cellChanged()"
|
|
57
56
|
borderless
|
|
58
|
-
|
|
59
|
-
columnField(props.col, false).Name}-${props.row.auto__index}`"
|
|
57
|
+
ref="fieldToValid"
|
|
60
58
|
></free-field>
|
|
61
59
|
</span>
|
|
62
60
|
</q-td>
|
|
@@ -74,6 +72,7 @@
|
|
|
74
72
|
<script>
|
|
75
73
|
import { defineComponent, watchEffect, ref, computed } from 'vue';
|
|
76
74
|
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
75
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
77
76
|
|
|
78
77
|
export default defineComponent({
|
|
79
78
|
name: 'InputFieldFixedList',
|
|
@@ -205,7 +204,7 @@ export default defineComponent({
|
|
|
205
204
|
props: {
|
|
206
205
|
...freeFieldProps,
|
|
207
206
|
},
|
|
208
|
-
setup(props, { emit }) {
|
|
207
|
+
setup(props, { emit, expose }) {
|
|
209
208
|
if (!props.Field) return {};
|
|
210
209
|
|
|
211
210
|
const { fieldData, setFieldData } = useFreeField(props);
|
|
@@ -341,6 +340,11 @@ export default defineComponent({
|
|
|
341
340
|
setFieldData(tableData.value, emit);
|
|
342
341
|
};
|
|
343
342
|
|
|
343
|
+
const { validate } = useFormValidator('fieldsToValid', 'fieldToValid')
|
|
344
|
+
expose({
|
|
345
|
+
validate,
|
|
346
|
+
})
|
|
347
|
+
|
|
344
348
|
return {
|
|
345
349
|
fieldData,
|
|
346
350
|
tableData,
|
|
@@ -87,6 +87,7 @@
|
|
|
87
87
|
<script>
|
|
88
88
|
import { defineComponent } from 'vue';
|
|
89
89
|
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
90
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
90
91
|
|
|
91
92
|
export default defineComponent({
|
|
92
93
|
name: 'InputFieldLabels',
|
|
@@ -114,9 +115,14 @@ export default defineComponent({
|
|
|
114
115
|
newLabel: '',
|
|
115
116
|
};
|
|
116
117
|
},
|
|
117
|
-
setup(props) {
|
|
118
|
+
setup(props, { expose }) {
|
|
118
119
|
const { fieldData, setFieldData } = useFreeField(props);
|
|
119
120
|
|
|
121
|
+
const { validate } = useFormValidator('input_field_validator_label');
|
|
122
|
+
expose({
|
|
123
|
+
validate,
|
|
124
|
+
});
|
|
125
|
+
|
|
120
126
|
return {
|
|
121
127
|
fieldData,
|
|
122
128
|
setFieldData,
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
:Field="{...f, ReadOnly: Field.ReadOnly || f.ReadOnly}"
|
|
55
55
|
:values="fieldData.value"
|
|
56
56
|
@input="cellChanged(f)"
|
|
57
|
-
|
|
57
|
+
ref="fieldsToValid"
|
|
58
58
|
></free-field>
|
|
59
59
|
</span>
|
|
60
60
|
<span
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
:values="fieldData.value"
|
|
67
67
|
@input="cellChanged(r[rk].List[0])"
|
|
68
68
|
borderless
|
|
69
|
-
|
|
69
|
+
ref="fieldToValid"
|
|
70
70
|
></free-field>
|
|
71
71
|
</span>
|
|
72
72
|
</q-td>
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
<script>
|
|
92
92
|
import { computed, defineComponent } from 'vue';
|
|
93
93
|
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
94
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
94
95
|
|
|
95
96
|
export default defineComponent({
|
|
96
97
|
name: 'InputFieldMixedTable',
|
|
@@ -271,7 +272,7 @@ export default defineComponent({
|
|
|
271
272
|
props: {
|
|
272
273
|
...freeFieldProps,
|
|
273
274
|
},
|
|
274
|
-
setup(props, { emit }) {
|
|
275
|
+
setup(props, { emit, expose }) {
|
|
275
276
|
if (!props.Field) return () => null;
|
|
276
277
|
|
|
277
278
|
const { fieldData, setFieldData } = useFreeField(props);
|
|
@@ -342,6 +343,11 @@ export default defineComponent({
|
|
|
342
343
|
return summaryText;
|
|
343
344
|
});
|
|
344
345
|
|
|
346
|
+
const { validate } = useFormValidator('fieldsToValid', 'fieldToValid');
|
|
347
|
+
expose({
|
|
348
|
+
validate,
|
|
349
|
+
});
|
|
350
|
+
|
|
345
351
|
return {
|
|
346
352
|
fieldData,
|
|
347
353
|
setFieldData,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { defineComponent, h, watch } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
1
|
+
import { defineComponent, h, watch, computed } from 'vue';
|
|
3
2
|
import { QInput } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
4
4
|
import ReadonlyContent from '../composible/readonlyContent';
|
|
5
5
|
import freeFieldLabel from '../composible/freeFieldLabel';
|
|
6
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
6
7
|
|
|
7
8
|
export default defineComponent({
|
|
8
9
|
name: 'InputFieldNumber',
|
|
@@ -95,7 +96,7 @@ export default defineComponent({
|
|
|
95
96
|
methods: {
|
|
96
97
|
...useFreeFieldMethods,
|
|
97
98
|
},
|
|
98
|
-
setup(props, { emit, slots }){
|
|
99
|
+
setup(props, { emit, slots , expose }){
|
|
99
100
|
if (!props.Field) return {};
|
|
100
101
|
|
|
101
102
|
const { fieldData, setFieldData } = useFreeField(props);
|
|
@@ -134,7 +135,7 @@ export default defineComponent({
|
|
|
134
135
|
class: 'postfix',
|
|
135
136
|
}, props.Field.Options?.Postfix));
|
|
136
137
|
|
|
137
|
-
const inputNode = () => h(QInput, {
|
|
138
|
+
const inputNode = computed(() => h(QInput, {
|
|
138
139
|
type: 'number',
|
|
139
140
|
maxlength: props.Field.Options?.MaxLength,
|
|
140
141
|
autocomplete: 'off',
|
|
@@ -155,12 +156,17 @@ export default defineComponent({
|
|
|
155
156
|
before,
|
|
156
157
|
prepend,
|
|
157
158
|
append,
|
|
158
|
-
});
|
|
159
|
+
}));
|
|
160
|
+
|
|
161
|
+
const { validate } = useFormValidator(inputNode);
|
|
162
|
+
expose({
|
|
163
|
+
validate,
|
|
164
|
+
})
|
|
159
165
|
|
|
160
166
|
return () => h('div', {
|
|
161
167
|
class: 'simple-field input-field-number row items-center no-wrap',
|
|
162
168
|
}, [
|
|
163
|
-
props.Field.ReadOnly ? readonlyNode() : inputNode
|
|
169
|
+
props.Field.ReadOnly ? readonlyNode() : inputNode.value,
|
|
164
170
|
slots.warning && slots.warning(),
|
|
165
171
|
]);
|
|
166
172
|
},
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { defineComponent, h, ref } from 'vue';
|
|
2
|
-
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
1
|
+
import { defineComponent, h, ref, computed } from 'vue';
|
|
3
2
|
import { QInput, QIcon } from 'quasar';
|
|
3
|
+
import { useFreeField, freeFieldProps, useFreeFieldMethods } from '../composible/useFreeField';
|
|
4
4
|
import freeFieldLabel from '../composible/freeFieldLabel';
|
|
5
|
+
import { useFormValidator} from '../../composible/useFormValidator';
|
|
5
6
|
|
|
6
7
|
export default defineComponent({
|
|
7
8
|
name: 'InputFieldPassword',
|
|
@@ -31,7 +32,7 @@ export default defineComponent({
|
|
|
31
32
|
methods: {
|
|
32
33
|
...useFreeFieldMethods,
|
|
33
34
|
},
|
|
34
|
-
setup(props, { emit, slots }){
|
|
35
|
+
setup(props, { emit, slots, expose }){
|
|
35
36
|
if (!props.Field) return {};
|
|
36
37
|
|
|
37
38
|
const { fieldData, setFieldData } = useFreeField(props);
|
|
@@ -49,7 +50,7 @@ export default defineComponent({
|
|
|
49
50
|
},
|
|
50
51
|
});
|
|
51
52
|
|
|
52
|
-
const inputNode = () => h(QInput, {
|
|
53
|
+
const inputNode = () => computed(h(QInput, {
|
|
53
54
|
type: isPwd.value ? 'password' : 'text',
|
|
54
55
|
maxlength: props.Field.Options?.MaxLength,
|
|
55
56
|
autocomplete: props.Field.Options?.autocomplete ? '' : 'new-password',
|
|
@@ -69,12 +70,17 @@ export default defineComponent({
|
|
|
69
70
|
}, {
|
|
70
71
|
before,
|
|
71
72
|
append,
|
|
72
|
-
});
|
|
73
|
+
}));
|
|
74
|
+
|
|
75
|
+
const { validate } = useFormValidator(inputNode);
|
|
76
|
+
expose({
|
|
77
|
+
validate,
|
|
78
|
+
})
|
|
73
79
|
|
|
74
80
|
return () => h('div', {
|
|
75
81
|
class: 'simple-field input-field-password row items-center no-wrap',
|
|
76
82
|
}, [
|
|
77
|
-
inputNode
|
|
83
|
+
inputNode.value,
|
|
78
84
|
slots.warning && slots.warning(),
|
|
79
85
|
]);
|
|
80
86
|
},
|