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.
- package/components/Basic/EIcon.vue +2 -4
- package/components/Basic/LeveledMenus.vue +0 -5
- package/components/Basic/SummaryHead.vue +10 -1
- package/components/Dialog/BasicDialog.vue +1 -1
- package/components/SlidingCarousel/index.vue +0 -1
- package/components/SlidingNews/index.vue +0 -1
- package/components/ThemeSwitch/index.vue +7 -5
- package/composible/useObjectData.js +69 -0
- package/free-field/Fields/AgreementCheck.js +170 -0
- package/free-field/Fields/ApiCall.js +123 -0
- package/{field-components/Fields/Boolean.vue → free-field/Fields/Boolean.js} +40 -46
- package/free-field/Fields/Category.js +28 -0
- package/free-field/Fields/Check.js +106 -0
- package/free-field/Fields/Customize.js +87 -0
- package/free-field/Fields/Date.js +133 -0
- package/free-field/Fields/DateRange.js +226 -0
- package/free-field/Fields/DynamicList.js +565 -0
- package/{field-components → free-field}/Fields/File.vue +1 -1
- package/{field-components → free-field}/Fields/FileList.vue +1 -1
- package/{field-components → free-field}/Fields/FileListCombined.vue +1 -1
- package/{field-components → free-field}/Fields/FixedList.vue +78 -83
- package/{field-components → free-field}/Fields/ImageList.vue +1 -1
- package/{field-components → free-field}/Fields/ImageListCombined.vue +1 -1
- package/free-field/Fields/InputFieldList.vue +324 -0
- package/{field-components → free-field}/Fields/Labels.vue +24 -15
- package/{field-components → free-field}/Fields/MixedTable.vue +53 -61
- package/free-field/Fields/Number.js +167 -0
- package/free-field/Fields/Password.js +81 -0
- package/{field-components → free-field}/Fields/Permission.vue +17 -13
- package/{field-components → free-field}/Fields/PermissionEditor.vue +63 -105
- package/{field-components → free-field}/Fields/QueryFilters.vue +65 -48
- package/{field-components → free-field}/Fields/RadioList.vue +36 -12
- package/{field-components → free-field}/Fields/Rich.vue +104 -114
- package/{field-components → free-field}/Fields/Search.vue +35 -26
- package/{field-components → free-field}/Fields/Select.vue +116 -87
- package/{field-components → free-field}/Fields/SelectionChain.vue +89 -67
- package/{field-components/Fields/Separator.vue → free-field/Fields/Separator.js} +11 -16
- package/{field-components → free-field}/Fields/SingleList.vue +27 -21
- package/free-field/Fields/Static.js +27 -0
- package/free-field/Fields/String.js +105 -0
- package/free-field/Fields/Text.js +80 -0
- package/{field-components → free-field}/Fields/Time.vue +59 -43
- package/{field-components → free-field}/Fields/TimeRange.vue +107 -92
- package/{field-components → free-field}/Fields/UltimateFile.vue +1 -1
- package/free-field/Fields/Year.js +137 -0
- package/{field-components → free-field}/Fields/YearRange.vue +63 -73
- package/{field-components → free-field}/Fields/index.js +16 -18
- package/free-field/composible/fieldWrapper.js +221 -0
- package/free-field/composible/freeFieldLabel.js +22 -0
- package/free-field/composible/readonlyContent.js +36 -0
- package/free-field/composible/useFileSizeUtils.js +52 -0
- package/free-field/composible/useFreeField.js +143 -0
- package/{field-components → free-field}/index.js +3 -3
- package/i18n/en-us/index.js +1 -1
- package/i18n/zh-cn/index.js +1 -1
- package/index.js +1 -4
- package/package.json +1 -1
- package/router/error/data.js +4 -1
- package/view/dict/index.vue +13 -2
- package/view/error/list.vue +22 -14
- package/view/menu/index.vue +19 -4
- package/view/system/index.vue +15 -2
- package/field-components/Fields/AgreementCheck.vue +0 -161
- package/field-components/Fields/ApiCall.vue +0 -139
- package/field-components/Fields/Category.vue +0 -33
- package/field-components/Fields/Check.vue +0 -131
- package/field-components/Fields/Customize.vue +0 -103
- package/field-components/Fields/Date.vue +0 -142
- package/field-components/Fields/DateRange.vue +0 -199
- package/field-components/Fields/DynamicList.vue +0 -575
- package/field-components/Fields/FieldEditor.vue +0 -379
- package/field-components/Fields/InputFieldList.vue +0 -299
- package/field-components/Fields/Number.vue +0 -247
- package/field-components/Fields/Password.vue +0 -79
- package/field-components/Fields/Static.vue +0 -22
- package/field-components/Fields/String.vue +0 -185
- package/field-components/Fields/Text.vue +0 -89
- package/field-components/Fields/Year.vue +0 -124
- package/field-components/Fields/components/FieldTypeOptions.vue +0 -248
- package/field-components/components/FieldComponents.vue +0 -246
- package/free-fields/AutoHide.js +0 -66
- package/free-fields/CenterContent.js +0 -15
- package/free-fields/Draggable.js +0 -30
- package/free-fields/Droppable.js +0 -114
- package/free-fields/EditableString.js +0 -63
- package/free-fields/FieldCategory.js +0 -83
- package/free-fields/FieldTypeSelect.js +0 -94
- package/free-fields/fieldEditors/arrayEditor.js +0 -3
- package/free-fields/fieldEditors/boolEditor.js +0 -22
- package/free-fields/fieldEditors/dateEditor.js +0 -23
- package/free-fields/fieldEditors/datetimeEditor.js +0 -23
- package/free-fields/fieldEditors/index.js +0 -21
- package/free-fields/fieldEditors/jsonEditor.js +0 -371
- package/free-fields/fieldEditors/labeledField.js +0 -74
- package/free-fields/fieldEditors/numberEditor.js +0 -51
- package/free-fields/fieldEditors/objectEditor.js +0 -3
- package/free-fields/fieldEditors/selectEditor.js +0 -0
- package/free-fields/fieldEditors/stringEditor.js +0 -49
- package/free-fields/fieldEditors/textEditor.js +0 -50
- package/free-fields/fieldEditors/timeEditor.js +0 -23
- package/free-fields/index.js +0 -402
- /package/{field-components → free-field}/Fields/Image.vue +0 -0
- /package/{field-components/Display → free-field/Layout}/index.js +0 -0
- /package/{field-components → free-field}/style.sass +0 -0
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
Name: `Scope.${scope.Field}`,
|
|
28
28
|
Options: scope.Options || [],
|
|
29
29
|
}"
|
|
30
|
-
:values="
|
|
30
|
+
:values="fieldData"
|
|
31
31
|
@input="scopeChanged"
|
|
32
32
|
/>
|
|
33
33
|
</div>
|
|
@@ -65,15 +65,15 @@
|
|
|
65
65
|
</template>
|
|
66
66
|
|
|
67
67
|
<script>
|
|
68
|
-
import { defineComponent } from 'vue';
|
|
69
|
-
|
|
68
|
+
import { defineComponent, ref, watchEffect, watch, computed } from 'vue';
|
|
69
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
70
70
|
|
|
71
71
|
export default defineComponent({
|
|
72
72
|
name: 'PermissionEditor',
|
|
73
|
-
// mixins: [mixins.InputFieldMixin],
|
|
74
73
|
emits:['changed'],
|
|
75
74
|
components: {},
|
|
76
75
|
props: {
|
|
76
|
+
...freeFieldProps,
|
|
77
77
|
Code: { type: String, default: '' },
|
|
78
78
|
Service: { type: Object },
|
|
79
79
|
Permission: { type: Object },
|
|
@@ -81,125 +81,83 @@ export default defineComponent({
|
|
|
81
81
|
readonly: { type: Boolean, default: false },
|
|
82
82
|
noDataScope: { type: Boolean, default: false },
|
|
83
83
|
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
setup(props, { emit }) {
|
|
85
|
+
const { fieldData, setFieldData } = useFreeField(props);
|
|
86
|
+
|
|
87
|
+
const hasThis = ref(false);
|
|
88
|
+
|
|
89
|
+
watchEffect(() => {
|
|
90
|
+
hasThis.value = !!fieldData.value;
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
const scopeChanged = () => {
|
|
94
|
+
emit('changed', fieldData.value);
|
|
89
95
|
};
|
|
90
|
-
},
|
|
91
|
-
watch: {
|
|
92
|
-
data() {
|
|
93
|
-
this.hasThis = !!this.data;
|
|
94
|
-
},
|
|
95
|
-
hasThis() {
|
|
96
|
-
if (this.hasThis) {
|
|
97
|
-
// checked from unchecked
|
|
98
|
-
this.data = this.data || {};
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
const childUpdated = (v, f) => {
|
|
98
|
+
if (!v && fieldData.value && fieldData.value[f]) {
|
|
99
|
+
fieldData.value[f] = undefined;
|
|
100
|
+
} else if (v) {
|
|
101
|
+
fieldData.value = fieldData.value || {};
|
|
102
|
+
fieldData.value[f] = v;
|
|
105
103
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
},
|
|
115
|
-
childrenService() {
|
|
116
|
-
if (!this.Service) return [];
|
|
104
|
+
|
|
105
|
+
scopeChanged();
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const permissionData = (service) => (fieldData.value ? fieldData.value[service] : undefined);
|
|
109
|
+
|
|
110
|
+
const childrenService = () => {
|
|
111
|
+
if (!props.Service) return [];
|
|
117
112
|
const children = [];
|
|
118
113
|
|
|
119
|
-
for (let i = 0; i < Object.keys(
|
|
120
|
-
const sk = Object.keys(
|
|
121
|
-
const service =
|
|
114
|
+
for (let i = 0; i < Object.keys(props.Service).length; i += 1) {
|
|
115
|
+
const sk = Object.keys(props.Service)[i];
|
|
116
|
+
const service = props.Service[sk];
|
|
122
117
|
|
|
123
118
|
if (
|
|
124
119
|
typeof service === 'object'
|
|
125
120
|
&& !Array.isArray(service)
|
|
126
121
|
&& ['scope'].indexOf(service) < 0
|
|
127
122
|
) {
|
|
128
|
-
children.push({ Name: sk, Index:
|
|
123
|
+
children.push({ Name: sk, Index: props.Service[sk].Index || 0 });
|
|
129
124
|
}
|
|
130
125
|
}
|
|
131
126
|
return children.sort(
|
|
132
127
|
(a, b) => (a ? a.Index : 0) - (b ? b.Index : 0),
|
|
133
128
|
).map((cdn) => cdn.Name);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
childrenNormalService()
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
this.data[f] = v;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const childrenStepService = computed(() => childrenService().filter((s) => Number(s)));
|
|
132
|
+
|
|
133
|
+
const childrenNormalService = computed(() => childrenService().filter((s) => !Number(s)));
|
|
134
|
+
|
|
135
|
+
watchEffect(() => {
|
|
136
|
+
fieldData.value = props.Permission;
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
watch(hasThis, (v) => {
|
|
140
|
+
console.log('hasThis changed', v)
|
|
141
|
+
if (v) {
|
|
142
|
+
// checked from unchecked
|
|
143
|
+
fieldData.value = fieldData.value || {};
|
|
144
|
+
} else {
|
|
145
|
+
// unchecked from checked
|
|
146
|
+
fieldData.value = undefined;
|
|
147
|
+
setFieldData(undefined);
|
|
154
148
|
}
|
|
149
|
+
scopeChanged();
|
|
150
|
+
})
|
|
155
151
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
152
|
+
return {
|
|
153
|
+
fieldData: fieldData.value,
|
|
154
|
+
hasThis,
|
|
155
|
+
childUpdated,
|
|
156
|
+
scopeChanged,
|
|
157
|
+
permissionData,
|
|
158
|
+
childrenStepService,
|
|
159
|
+
childrenNormalService,
|
|
160
|
+
};
|
|
161
161
|
},
|
|
162
162
|
});
|
|
163
163
|
</script>
|
|
164
|
-
<style lang="sass" scoped>
|
|
165
|
-
.input-field-permission-editor
|
|
166
|
-
font-size: 12px
|
|
167
|
-
padding: 4px
|
|
168
|
-
.input-field-permission-title
|
|
169
|
-
&.without-scope
|
|
170
|
-
height: 35px
|
|
171
|
-
.data-scope
|
|
172
|
-
margin-left: 32px
|
|
173
|
-
.step-number-icon-wrapper
|
|
174
|
-
border-radius: 50%
|
|
175
|
-
border: 1px solid $grey-7
|
|
176
|
-
height: 20px
|
|
177
|
-
width: 20px
|
|
178
|
-
display: inline-block
|
|
179
|
-
vertical-align: top
|
|
180
|
-
padding: 0
|
|
181
|
-
margin: 0
|
|
182
|
-
margin-right: 4px
|
|
183
|
-
.step-number-icon
|
|
184
|
-
display: block
|
|
185
|
-
height: 20px
|
|
186
|
-
line-height: 20px
|
|
187
|
-
text-align: center
|
|
188
|
-
.permission-field
|
|
189
|
-
&-steps
|
|
190
|
-
margin-left: 32px
|
|
191
|
-
&>.input-field-permission-editor
|
|
192
|
-
min-height: 180px
|
|
193
|
-
min-width: 128px
|
|
194
|
-
&-label
|
|
195
|
-
margin-left: 32px
|
|
196
|
-
&-children
|
|
197
|
-
padding: 0
|
|
198
|
-
margin-left: 16px
|
|
199
|
-
</style>
|
|
200
|
-
|
|
201
|
-
<style lang="sass">
|
|
202
|
-
.input-field-permission-editor
|
|
203
|
-
.permission-field-steps.q-card__section
|
|
204
|
-
flex-wrap: wrap !important
|
|
205
|
-
</style>
|
|
@@ -61,12 +61,11 @@
|
|
|
61
61
|
</template>
|
|
62
62
|
|
|
63
63
|
<script>
|
|
64
|
-
import { defineComponent } from 'vue';
|
|
65
|
-
import
|
|
64
|
+
import { ref, computed, defineComponent, watchEffect } from 'vue';
|
|
65
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
66
66
|
|
|
67
67
|
export default defineComponent({
|
|
68
68
|
name: 'InputFieldQueryFilters',
|
|
69
|
-
mixins: [mixins.InputFieldMixin],
|
|
70
69
|
emits:['search', 'export'],
|
|
71
70
|
fieldInfo: {
|
|
72
71
|
Category: 'Advanced',
|
|
@@ -75,49 +74,70 @@ export default defineComponent({
|
|
|
75
74
|
Description: '',
|
|
76
75
|
},
|
|
77
76
|
props: {
|
|
77
|
+
...freeFieldProps,
|
|
78
78
|
dense: { type: Boolean, default: false },
|
|
79
79
|
canExport: { type: Boolean, default: false },
|
|
80
80
|
queryData: { type: Object, default: () => ({}) },
|
|
81
81
|
searchIcon: { type: String, default: 'search' },
|
|
82
82
|
clearIcon: { type: String, default: 'refresh' },
|
|
83
83
|
},
|
|
84
|
-
|
|
85
|
-
return {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
84
|
+
setup(props, { emit }) {
|
|
85
|
+
if (!props.Field) return {};
|
|
86
|
+
|
|
87
|
+
const { fieldData } = useFreeField(props);
|
|
88
|
+
|
|
89
|
+
const query = ref({});
|
|
90
|
+
const queryChanged = ref(false);
|
|
91
|
+
const hasKw = ref(false);
|
|
92
|
+
const kwFields = ref([]);
|
|
93
|
+
|
|
94
|
+
watchEffect(() => {
|
|
95
|
+
query.value = props.queryData;
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
watchEffect(() => {
|
|
99
|
+
(fieldData.value || []).forEach((fd) => {
|
|
100
|
+
if (
|
|
101
|
+
['String', 'Text', 'Rich', 'Customize', 'Labels', 'Static'].indexOf(
|
|
102
|
+
fd.Type,
|
|
103
|
+
) >= 0
|
|
104
|
+
) {
|
|
105
|
+
if (!fd.Info || !fd.Info.Separate) {
|
|
106
|
+
hasKw.value = true;
|
|
107
|
+
if (fd.Label) {
|
|
108
|
+
kwFields.value.push(fd.Label);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const localFields = computed(() => {
|
|
94
116
|
const fList = [];
|
|
95
|
-
let hasKw = false;
|
|
96
117
|
const kwFields = [];
|
|
97
|
-
if (
|
|
98
|
-
|
|
118
|
+
if (fieldData.value) {
|
|
119
|
+
(fieldData.value || []).forEach((fd) => {
|
|
120
|
+
// TODO: should not hardcode these types
|
|
99
121
|
if (
|
|
100
122
|
['String', 'Text', 'Rich', 'Customize', 'Labels', 'Static'].indexOf(
|
|
101
123
|
fd.Type,
|
|
102
124
|
) >= 0
|
|
103
125
|
) {
|
|
104
126
|
if (!fd.Info || !fd.Info.Separate) {
|
|
105
|
-
hasKw = true;
|
|
106
127
|
if (fd.Label) {
|
|
107
|
-
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
|
108
128
|
kwFields.push(fd.Label);
|
|
109
129
|
}
|
|
110
130
|
} else {
|
|
111
131
|
// separate string field as selection
|
|
112
132
|
// TODO: could be other types??
|
|
113
133
|
fd.Type = 'Select';
|
|
114
|
-
if (
|
|
134
|
+
if (props.dense) {
|
|
115
135
|
delete fd.Label;
|
|
116
136
|
}
|
|
117
137
|
fList.push(fd);
|
|
118
138
|
}
|
|
119
139
|
} else {
|
|
120
|
-
if (
|
|
140
|
+
if (props.dense) {
|
|
121
141
|
delete fd.Label;
|
|
122
142
|
}
|
|
123
143
|
fList.push(fd);
|
|
@@ -125,38 +145,35 @@ export default defineComponent({
|
|
|
125
145
|
});
|
|
126
146
|
}
|
|
127
147
|
|
|
128
|
-
|
|
129
|
-
this.hasKw = hasKw;
|
|
130
|
-
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
|
131
|
-
this.kwFields = kwFields;
|
|
148
|
+
kwFields.value = kwFields;
|
|
132
149
|
|
|
133
150
|
return fList;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
created() {
|
|
142
|
-
if (this.queryData && Object.keys(this.queryData).length > 0) {
|
|
143
|
-
this.query = this.queryData;
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
methods: {
|
|
147
|
-
search() {
|
|
148
|
-
if (this.queryChanged) {
|
|
149
|
-
this.$emit('search', this.query);
|
|
150
|
-
this.queryChanged = false;
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
const search = () => {
|
|
155
|
+
if (queryChanged.value) {
|
|
156
|
+
emit('search', query.value);
|
|
157
|
+
queryChanged.value = false;
|
|
151
158
|
}
|
|
152
|
-
}
|
|
153
|
-
clear() {
|
|
154
|
-
if (Object.keys(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
};
|
|
160
|
+
const clear = () => {
|
|
161
|
+
if (Object.keys(query.value).length) {
|
|
162
|
+
query.value = {};
|
|
163
|
+
emit('search', {});
|
|
164
|
+
queryChanged.value = false;
|
|
158
165
|
}
|
|
159
|
-
}
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
return {
|
|
169
|
+
query,
|
|
170
|
+
queryChanged,
|
|
171
|
+
hasKw,
|
|
172
|
+
kwFields,
|
|
173
|
+
localFields,
|
|
174
|
+
search,
|
|
175
|
+
clear,
|
|
176
|
+
};
|
|
160
177
|
},
|
|
161
178
|
});
|
|
162
179
|
</script>
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
>
|
|
37
37
|
<q-radio
|
|
38
38
|
class="radio"
|
|
39
|
-
v-model="
|
|
40
|
-
@
|
|
39
|
+
v-model="fieldData.value"
|
|
40
|
+
@update:model-value="radioChanged"
|
|
41
41
|
:val="oValue.Value"
|
|
42
42
|
:disable="Field.ReadOnly"
|
|
43
43
|
/>
|
|
@@ -54,28 +54,52 @@
|
|
|
54
54
|
</template>
|
|
55
55
|
|
|
56
56
|
<script>
|
|
57
|
-
import { defineComponent } from 'vue';
|
|
58
|
-
import
|
|
57
|
+
import { defineComponent, ref } from 'vue';
|
|
58
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
59
59
|
|
|
60
60
|
export default defineComponent({
|
|
61
61
|
name: 'InputFieldRadioList',
|
|
62
|
-
mixins: [mixins.InputFieldMixin],
|
|
63
62
|
fieldInfo: {
|
|
64
63
|
Category: 'Simple',
|
|
65
64
|
Label: '展开单选',
|
|
66
65
|
Value: 'RadioList',
|
|
67
66
|
Description: '',
|
|
68
67
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
props: {
|
|
69
|
+
...freeFieldProps,
|
|
70
|
+
},
|
|
71
|
+
setup(props, { expose, emit }) {
|
|
72
|
+
if (!props.Field) return {};
|
|
73
|
+
|
|
74
|
+
const { fieldData, setFieldData } = useFreeField(props);
|
|
75
|
+
const hasError = ref(false);
|
|
76
|
+
|
|
77
|
+
const validate = () => {
|
|
78
|
+
if (!props.Field.Name) {
|
|
79
|
+
hasError.value = false;
|
|
73
80
|
return true;
|
|
74
81
|
}
|
|
75
82
|
|
|
76
|
-
|
|
77
|
-
return !
|
|
78
|
-
}
|
|
83
|
+
hasError.value = typeof fieldData.value === 'undefined';
|
|
84
|
+
return !hasError.value;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const radioChanged = (v) => {
|
|
88
|
+
validate();
|
|
89
|
+
setFieldData(v, emit);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
expose({
|
|
93
|
+
validate,
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
hasError,
|
|
98
|
+
fieldData,
|
|
99
|
+
setFieldData,
|
|
100
|
+
validate,
|
|
101
|
+
radioChanged,
|
|
102
|
+
};
|
|
79
103
|
},
|
|
80
104
|
});
|
|
81
105
|
</script>
|