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.
- package/components/Basic/EIcon.vue +2 -4
- package/components/Basic/LeveledMenus.vue +0 -5
- package/components/Basic/SummaryHead.vue +23 -3
- package/components/Dialog/BasicDialog.vue +2 -3
- package/components/SlidingCarousel/index.vue +13 -3
- package/components/SlidingNews/index.vue +13 -3
- 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/FixedList.vue +78 -83
- 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 +62 -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/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 +28 -30
- 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 +2 -2
- 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/File.vue +0 -382
- package/field-components/Fields/FileList.vue +0 -405
- package/field-components/Fields/FileListCombined.vue +0 -142
- package/field-components/Fields/Image.vue +0 -328
- package/field-components/Fields/ImageList.vue +0 -285
- package/field-components/Fields/ImageListCombined.vue +0 -76
- 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/UltimateFile.vue +0 -100
- 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/Display → free-field/Layout}/index.js +0 -0
- /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="
|
|
6
|
+
v-if="Field.Label !== void 0"
|
|
7
7
|
>
|
|
8
8
|
<q-tooltip
|
|
9
9
|
v-if="Field.Description"
|
|
@@ -55,55 +55,21 @@
|
|
|
55
55
|
:disabled="Field.ReadOnly"
|
|
56
56
|
toolbar
|
|
57
57
|
value
|
|
58
|
-
v-model="fieldData"
|
|
59
|
-
@
|
|
58
|
+
v-model="fieldData.value"
|
|
59
|
+
@update:model-value="tinyChanged"
|
|
60
60
|
/>
|
|
61
61
|
</span>
|
|
62
62
|
</div>
|
|
63
63
|
</template>
|
|
64
64
|
|
|
65
65
|
<script>
|
|
66
|
-
import { defineComponent } from 'vue';
|
|
67
|
-
import mixins from 'free-fe-mixins';
|
|
66
|
+
import { defineComponent, watchEffect, ref } from 'vue';
|
|
68
67
|
import tiny from '@tinymce/tinymce-vue';
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (!s) return undefined;
|
|
72
|
-
|
|
73
|
-
const sizeMatch = s.match(/^([0-9]*)(k|m|g*)(b*)/);
|
|
74
|
-
|
|
75
|
-
if (sizeMatch) {
|
|
76
|
-
// eslint-disable-next-line no-unused-vars
|
|
77
|
-
// const [tmp, num, unit] = sizeMatch;
|
|
78
|
-
const num = sizeMatch[1];
|
|
79
|
-
const unit = sizeMatch[2];
|
|
80
|
-
if (!num || !Number(num)) return '';
|
|
81
|
-
|
|
82
|
-
let multi = 1;
|
|
83
|
-
switch (unit) {
|
|
84
|
-
case 'k':
|
|
85
|
-
multi = 1024;
|
|
86
|
-
break;
|
|
87
|
-
case 'm':
|
|
88
|
-
multi = 1024 * 1024;
|
|
89
|
-
break;
|
|
90
|
-
case 'g':
|
|
91
|
-
multi = 1024 * 1024 * 1024;
|
|
92
|
-
break;
|
|
93
|
-
default:
|
|
94
|
-
multi = 1024;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return Number(num) * multi;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
68
|
+
import { fileSizeStrToNumber } from '../composible/useFileSizeUtils';
|
|
69
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
103
70
|
|
|
104
71
|
export default defineComponent({
|
|
105
72
|
name: 'InputFieldRich',
|
|
106
|
-
mixins: [mixins.InputFieldMixin],
|
|
107
73
|
fieldInfo: {
|
|
108
74
|
Category: 'Advanced',
|
|
109
75
|
Label: '所见即所得',
|
|
@@ -144,12 +110,24 @@ export default defineComponent({
|
|
|
144
110
|
tiny,
|
|
145
111
|
},
|
|
146
112
|
props: {
|
|
113
|
+
...freeFieldProps,
|
|
147
114
|
enableField: { type: Boolean, default: false },
|
|
148
115
|
},
|
|
149
|
-
|
|
150
|
-
return {
|
|
151
|
-
|
|
152
|
-
|
|
116
|
+
setup(props, { expose, emit }) {
|
|
117
|
+
if (!props.Field) return {};
|
|
118
|
+
|
|
119
|
+
const { fieldData, setFieldData } = useFreeField(props);
|
|
120
|
+
|
|
121
|
+
const readonlyContent = ref(null);
|
|
122
|
+
const tiny = ref(null);
|
|
123
|
+
|
|
124
|
+
// TODO: 设置默认warning信息不生效
|
|
125
|
+
if (props.Field.Warning) {
|
|
126
|
+
Object.setValue(props.Field, 'Warning', `可嵌入图片、视频、超级链接。内容不可超过${(props.Field.Options?.MaxLength) || 1000}字,内容总大小不可超过${(props.Field.Options?.MaxSize) || '5m'}。较大图片或视频请使用超链接!`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const isValid = ref(true);
|
|
130
|
+
const plugins = [
|
|
153
131
|
'print',
|
|
154
132
|
// 'preview',
|
|
155
133
|
'paste',
|
|
@@ -186,9 +164,9 @@ export default defineComponent({
|
|
|
186
164
|
// 'charmap',
|
|
187
165
|
'quickbars',
|
|
188
166
|
'emoticons',
|
|
189
|
-
]
|
|
190
|
-
|
|
191
|
-
|
|
167
|
+
];
|
|
168
|
+
const menubar = ['insert', 'format', 'table'];
|
|
169
|
+
const toolbar = [
|
|
192
170
|
'undo',
|
|
193
171
|
'redo',
|
|
194
172
|
'|',
|
|
@@ -221,8 +199,8 @@ export default defineComponent({
|
|
|
221
199
|
'|',
|
|
222
200
|
'code',
|
|
223
201
|
'insertFieldButton',
|
|
224
|
-
]
|
|
225
|
-
|
|
202
|
+
];
|
|
203
|
+
const quickbars_selection_toolbar = [
|
|
226
204
|
'bold',
|
|
227
205
|
'italic',
|
|
228
206
|
'|',
|
|
@@ -234,49 +212,39 @@ export default defineComponent({
|
|
|
234
212
|
'quicktable',
|
|
235
213
|
'|',
|
|
236
214
|
'insertFieldButton',
|
|
237
|
-
]
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
this.$refs.readonlyContent.innerHTML = this.fieldData;
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
},
|
|
248
|
-
created() {
|
|
249
|
-
if (this.$refs.readonlyContent && this.Field.ReadOnly) {
|
|
250
|
-
this.$refs.readonlyContent.innerHTML = this.fieldData;
|
|
215
|
+
];
|
|
216
|
+
const contextmenu = ['link', 'image', 'table'];
|
|
217
|
+
|
|
218
|
+
if (props.Field.ReadOnly) {
|
|
219
|
+
watchEffect(() => {
|
|
220
|
+
readonlyContent.value.innerHTML = fieldData.value;
|
|
221
|
+
});
|
|
251
222
|
}
|
|
252
223
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
validate() {
|
|
258
|
-
let isValid = true;
|
|
259
|
-
if (this.$refs.tiny) {
|
|
260
|
-
if (this.Field.Required) isValid = !!this.fieldData;
|
|
224
|
+
const validate = () => {
|
|
225
|
+
let isVal = true;
|
|
226
|
+
if (tiny.value) {
|
|
227
|
+
if (props.Field.Required) isVal = !!fieldData.value;
|
|
261
228
|
|
|
262
|
-
const rules = Array.isArray(typeof
|
|
263
|
-
?
|
|
229
|
+
const rules = Array.isArray(typeof props.Field.Rules)
|
|
230
|
+
? props.Field.Rules : [props.Field.Rules];
|
|
264
231
|
|
|
265
232
|
for (let i = 0; i < rules.length; i += 1) {
|
|
266
233
|
const r = rules[i];
|
|
267
234
|
|
|
268
235
|
if (typeof r === 'function') {
|
|
269
|
-
|
|
236
|
+
isVal = isVal && r(fieldData.value);
|
|
270
237
|
}
|
|
271
238
|
}
|
|
272
239
|
}
|
|
273
240
|
|
|
274
|
-
|
|
241
|
+
isValid.value = isVal;
|
|
275
242
|
|
|
276
|
-
return
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
|
|
243
|
+
return isVal;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const tinySetup = (editor) => {
|
|
247
|
+
if (props.enableField) {
|
|
280
248
|
editor.ui.registry.addButton('insertFieldButton', {
|
|
281
249
|
text: '数据字段',
|
|
282
250
|
tooltip: '插入数据字段',
|
|
@@ -289,49 +257,71 @@ export default defineComponent({
|
|
|
289
257
|
});
|
|
290
258
|
}
|
|
291
259
|
|
|
292
|
-
if (
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
if (allowedKeys.indexOf(e.keyCode) >= 0) return true;
|
|
297
|
-
|
|
298
|
-
const selectedText = editor.selection.getContent({
|
|
299
|
-
format: 'text',
|
|
300
|
-
});
|
|
260
|
+
if (props.Field.Options?.MaxLength) {
|
|
261
|
+
editor.on('keydown', (e) => {
|
|
262
|
+
const allowedKeys = [8, 37, 38, 39, 40, 46];
|
|
263
|
+
if (allowedKeys.indexOf(e.keyCode) >= 0) return true;
|
|
301
264
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
e.preventDefault();
|
|
305
|
-
e.stopPropagation();
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return true;
|
|
265
|
+
const selectedText = editor.selection.getContent({
|
|
266
|
+
format: 'text',
|
|
310
267
|
});
|
|
311
|
-
}
|
|
312
|
-
if (this.Field.Options.MaxSize) {
|
|
313
|
-
const maxSize = fileSizeStrToNumber(this.Field.Options.MaxSize);
|
|
314
268
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
269
|
+
if (selectedText.length <= 0
|
|
270
|
+
&& editor.getContent({ format: 'text' }).length >= props.Field.Options.MaxLength) {
|
|
271
|
+
e.preventDefault();
|
|
272
|
+
e.stopPropagation();
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
318
275
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
276
|
+
return true;
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
if (props.Field.Options?.MaxSize) {
|
|
280
|
+
const maxSize = fileSizeStrToNumber(props.Field.Options.MaxSize);
|
|
322
281
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
e.stopPropagation();
|
|
327
|
-
return false;
|
|
328
|
-
}
|
|
282
|
+
editor.on('keydown', (e) => {
|
|
283
|
+
const allowedKeys = [8, 37, 38, 39, 40, 46];
|
|
284
|
+
if (allowedKeys.indexOf(e.keyCode) >= 0) return true;
|
|
329
285
|
|
|
330
|
-
|
|
286
|
+
const selectedText = editor.selection.getContent({
|
|
287
|
+
format: 'text',
|
|
331
288
|
});
|
|
332
|
-
|
|
289
|
+
|
|
290
|
+
if (selectedText.length <= 0
|
|
291
|
+
&& editor.getContent({ format: 'html' }).length >= maxSize) {
|
|
292
|
+
e.preventDefault();
|
|
293
|
+
e.stopPropagation();
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return true;
|
|
298
|
+
});
|
|
333
299
|
}
|
|
334
|
-
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
const tinyChanged = (v) => {
|
|
303
|
+
validate();
|
|
304
|
+
setFieldData(v, emit);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
expose({
|
|
308
|
+
validate,
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
return {
|
|
312
|
+
isValid,
|
|
313
|
+
fieldData,
|
|
314
|
+
readonlyContent,
|
|
315
|
+
tiny,
|
|
316
|
+
tinySetup,
|
|
317
|
+
tinyChanged,
|
|
318
|
+
|
|
319
|
+
plugins,
|
|
320
|
+
menubar,
|
|
321
|
+
toolbar,
|
|
322
|
+
quickbars_selection_toolbar,
|
|
323
|
+
contextmenu,
|
|
324
|
+
};
|
|
335
325
|
},
|
|
336
326
|
});
|
|
337
327
|
</script>
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
row-key="id"
|
|
33
33
|
:pagination="searchPagination"
|
|
34
34
|
:selection="Field.Multiple ? 'multiple' : 'single'"
|
|
35
|
-
|
|
35
|
+
:selected="searchSelected"
|
|
36
|
+
@update:selected="searchSelected = $event"
|
|
36
37
|
>
|
|
37
38
|
<template v-slot:header="props">
|
|
38
39
|
<q-tr :props="props">
|
|
@@ -108,7 +109,7 @@
|
|
|
108
109
|
:class="`field-label field-label-readonly ${
|
|
109
110
|
(Field.Label && Field.Label.trim().length)
|
|
110
111
|
? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
|
|
111
|
-
v-if="
|
|
112
|
+
v-if="Field.Label !== void 0"
|
|
112
113
|
>
|
|
113
114
|
<q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
|
|
114
115
|
{{Field.Label || ''}}
|
|
@@ -120,11 +121,10 @@
|
|
|
120
121
|
</span>
|
|
121
122
|
<q-input
|
|
122
123
|
v-else
|
|
123
|
-
|
|
124
|
+
modelValue=""
|
|
124
125
|
:type="`${Field && Field.Multiple ? 'textarea' : ''}`"
|
|
125
126
|
hide-bottom-space
|
|
126
127
|
readonly
|
|
127
|
-
v-bind="$attrs"
|
|
128
128
|
:class="`${Field && Field.Multiple
|
|
129
129
|
? '' : 'simple-field'} ${searchDisplay ? 'has-data' : 'empty'}`"
|
|
130
130
|
:ref="`input_field_validator_${Field.Name || Field.Label}`"
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
<span
|
|
151
151
|
:class="`field-label ${(Field.Label && Field.Label.trim().length)
|
|
152
152
|
? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
|
|
153
|
-
v-if="
|
|
153
|
+
v-if="Field.Label !== void 0"
|
|
154
154
|
>
|
|
155
155
|
<q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
|
|
156
156
|
{{Field.Label || ''}}
|
|
@@ -174,12 +174,14 @@
|
|
|
174
174
|
|
|
175
175
|
<script>
|
|
176
176
|
import { defineComponent } from 'vue';
|
|
177
|
-
import
|
|
177
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
178
178
|
|
|
179
179
|
export default defineComponent({
|
|
180
180
|
name: 'InputFieldSearch',
|
|
181
|
-
mixins: [mixins.InputFieldMixin],
|
|
182
181
|
emits:['input'],
|
|
182
|
+
props: {
|
|
183
|
+
...freeFieldProps,
|
|
184
|
+
},
|
|
183
185
|
fieldInfo: {
|
|
184
186
|
Category: 'Advanced',
|
|
185
187
|
Label: '搜索',
|
|
@@ -284,6 +286,16 @@ export default defineComponent({
|
|
|
284
286
|
],
|
|
285
287
|
Description: '',
|
|
286
288
|
},
|
|
289
|
+
setup(props) {
|
|
290
|
+
if (!props.Field) return {};
|
|
291
|
+
|
|
292
|
+
const { fieldData, setFieldData } = useFreeField(props);
|
|
293
|
+
|
|
294
|
+
return {
|
|
295
|
+
fieldData,
|
|
296
|
+
setFieldData,
|
|
297
|
+
};
|
|
298
|
+
},
|
|
287
299
|
data() {
|
|
288
300
|
return {
|
|
289
301
|
searchKey: '',
|
|
@@ -302,16 +314,12 @@ export default defineComponent({
|
|
|
302
314
|
},
|
|
303
315
|
computed: {
|
|
304
316
|
searchColumns() {
|
|
305
|
-
if (
|
|
306
|
-
!this.Field
|
|
307
|
-
|| !this.Field.Options
|
|
308
|
-
|| !this.Field.Options.SearchColumns
|
|
309
|
-
) {
|
|
317
|
+
if (!this.Field?.Options?.SearchColumns) {
|
|
310
318
|
return [];
|
|
311
319
|
}
|
|
312
320
|
|
|
313
321
|
const cls = [];
|
|
314
|
-
this.Field
|
|
322
|
+
(this.Field?.Options?.SearchColumns || []).forEach((c) => {
|
|
315
323
|
const newC = { ...c };
|
|
316
324
|
newC.name = c.Name;
|
|
317
325
|
newC.label = c.Label;
|
|
@@ -336,14 +344,14 @@ export default defineComponent({
|
|
|
336
344
|
},
|
|
337
345
|
},
|
|
338
346
|
watch: {
|
|
339
|
-
|
|
347
|
+
fieldData(n, o) {
|
|
340
348
|
// init search data from exist id
|
|
341
|
-
if (typeof this.fieldData === 'undefined') {
|
|
349
|
+
if (typeof this.fieldData.value === 'undefined') {
|
|
342
350
|
this.searchSelected = [];
|
|
343
351
|
this.searchData = {};
|
|
344
352
|
this.searchDisplay = '';
|
|
345
353
|
this.searchKey = '';
|
|
346
|
-
} else if (this.Field.Type === 'Search' && this.
|
|
354
|
+
} else if (this.Field.Type === 'Search' && this.fieldData.value) {
|
|
347
355
|
if (n && o) {
|
|
348
356
|
const nV = Object.nestValue(n, this.Field.Name);
|
|
349
357
|
const oV = Object.nestValue(o, this.Field.Name);
|
|
@@ -354,8 +362,8 @@ export default defineComponent({
|
|
|
354
362
|
if (this.Field.Options && this.Field.Options.SearchUrl) {
|
|
355
363
|
const paramObj = {};
|
|
356
364
|
paramObj[this.Field.Options.SearchField || 'id'] = this.Field.Multiple
|
|
357
|
-
? JSON.stringify(
|
|
358
|
-
:
|
|
365
|
+
? JSON.stringify(this.fieldData.value)
|
|
366
|
+
: this.fieldData.value;
|
|
359
367
|
|
|
360
368
|
this.getRequest(
|
|
361
369
|
`${this.Field.Options.SearchUrl}`,
|
|
@@ -404,9 +412,8 @@ export default defineComponent({
|
|
|
404
412
|
methods: {
|
|
405
413
|
search(p) {
|
|
406
414
|
if (
|
|
407
|
-
!this.Field
|
|
408
|
-
|| !this.Field
|
|
409
|
-
|| (!this.searchKey && !this.Field.Options.AllowEmptySearch)
|
|
415
|
+
!this.Field?.Options?.SearchUrl
|
|
416
|
+
|| (!this.searchKey && !this.Field?.Options?.AllowEmptySearch)
|
|
410
417
|
) {
|
|
411
418
|
return;
|
|
412
419
|
}
|
|
@@ -419,7 +426,7 @@ export default defineComponent({
|
|
|
419
426
|
if (d && d.msg === 'OK') {
|
|
420
427
|
const { data } = d;
|
|
421
428
|
if (data) {
|
|
422
|
-
for (let i = 0; i < data.docs
|
|
429
|
+
for (let i = 0; i < data.docs?.length; i += 1) {
|
|
423
430
|
const dc = data.docs[i];
|
|
424
431
|
|
|
425
432
|
dc.index = (data.page - 1) * data.limit + i + 1;
|
|
@@ -439,11 +446,13 @@ export default defineComponent({
|
|
|
439
446
|
? this.searchSelected : [this.searchSelected[0]];
|
|
440
447
|
|
|
441
448
|
const sFieldName = this.Field.SearchField || 'id';
|
|
442
|
-
|
|
449
|
+
|
|
450
|
+
this.setFieldData(selected.map(
|
|
443
451
|
(ss) => Object.nestValue(ss, sFieldName),
|
|
444
|
-
).filter((ss) => !!ss);
|
|
452
|
+
).filter((ss) => !!ss));
|
|
453
|
+
|
|
445
454
|
if (!this.Field || !this.Field.Multiple) {
|
|
446
|
-
|
|
455
|
+
this.setFieldData(this.fieldData.value[0]);
|
|
447
456
|
}
|
|
448
457
|
|
|
449
458
|
const sdFieldName = this.Field.Options.SearchDisplayField || 'id';
|
|
@@ -459,7 +468,7 @@ export default defineComponent({
|
|
|
459
468
|
|
|
460
469
|
if (!this.Field || !this.Field.Multiple) {
|
|
461
470
|
this.searchSelected = [];
|
|
462
|
-
this.
|
|
471
|
+
this.setFieldData(undefined);
|
|
463
472
|
|
|
464
473
|
this.$emit('input');
|
|
465
474
|
|